Super simple events added. Seems to be a good way for handling interaction. Modified a few base classes.
This commit is contained in:
+8
-32
@@ -14,6 +14,8 @@ namespace VISEQ::BASE {
|
||||
Draggable(Vec2Df p) : Movable(p, 960.0f) {}
|
||||
virtual ~Draggable() {}
|
||||
|
||||
std::shared_ptr<APP::State> state = APP::State::get();
|
||||
|
||||
Vec2Df drag_offset;
|
||||
|
||||
bool picked_up = false;
|
||||
@@ -27,14 +29,15 @@ namespace VISEQ::BASE {
|
||||
}
|
||||
|
||||
virtual bool pickedUp() {
|
||||
if(clicked() && held() && (STATE == IState::HOVER_NODE || STATE == IState::DRAG_NODE)) {
|
||||
return held() && picked_up;
|
||||
}
|
||||
|
||||
virtual void pickUp() override {
|
||||
picked_up = true;
|
||||
drag_offset = position - SCREEN_MOUSE;
|
||||
}
|
||||
return picked_up;
|
||||
}
|
||||
|
||||
virtual void drag() {
|
||||
virtual void drag() override {
|
||||
if(KEYS_PRESSED.ctrl){
|
||||
selection_offset = position - state->hover_position;
|
||||
}
|
||||
@@ -45,7 +48,7 @@ namespace VISEQ::BASE {
|
||||
}
|
||||
}
|
||||
|
||||
virtual void putDown(){
|
||||
virtual void putDown() override {
|
||||
picked_up = false;
|
||||
}
|
||||
|
||||
@@ -54,32 +57,5 @@ namespace VISEQ::BASE {
|
||||
if(MOUSE_LEFT.released) selected = (KEYS_DOWN.shift && selected) || in_selection_rect;
|
||||
}
|
||||
|
||||
virtual void update() override {
|
||||
if(STATE != IState::HOVER_NODE) select();
|
||||
if((pickedUp() || hovering()) && z_hovering == -1) z_hovering = z_index;
|
||||
|
||||
if(z_index == z_hovering || selected){
|
||||
if(pickedUp()){
|
||||
drag();
|
||||
STATE = IState::DRAG_NODE;
|
||||
}
|
||||
}
|
||||
if(STATE != IState::DRAG_NODE){
|
||||
if(entered()){
|
||||
STATE = IState::HOVER_NODE;
|
||||
std::cout << "z_index=" << z_index << " z_hovering=" << z_hovering << std::endl;
|
||||
is_hovering = true;
|
||||
}
|
||||
if(exited()){
|
||||
STATE = IState::HOVER_CANVAS;
|
||||
is_hovering = false;
|
||||
}
|
||||
}
|
||||
if(released() && picked_up){
|
||||
putDown();
|
||||
STATE = IState::HOVER_CANVAS;
|
||||
if(hovering()) STATE = IState::HOVER_NODE;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user