#pragma once #include "moveable.h" #include "raylib.h" #include "selectable.h" #include "state.h" #include "vmath.h" namespace VISEQ::BASE { class Draggable : public Movable, public Selectable{ public: Draggable() {} Draggable(float x, float y) : Movable(Vec2Df(x, y), 960.0f) {} Draggable(Vec2Df p) : Movable(p, 960.0f) {} virtual ~Draggable() {} Vec2Df drag_offset; bool picked_up = false; virtual bool pickedUp() { if(clicked() && held() && state->istate == APP::InteractionState::HOVER_NODE) { picked_up = true; drag_offset = position - state->screen_mouse; } return picked_up; } virtual void drag() { if(state->keys_down.ctrl){ position = state->mod_mouse; } else { position = state->mod_mouse + drag_offset; } } virtual void putDown(){ picked_up = false; } virtual void select() override { selected = (state->keys_down.shift && selected) || CheckCollisionPointRec(position, state->selection); /**/ /*//std::cout << "select" << std::endl;*/ /*if(CheckCollisionPointRec(position, state->selection)) {*/ /* in_selection_rect = true;*/ /*} else {*/ /* in_selection_rect = false;*/ /*}*/ /*if(released() && in_selection_rect) selected = true;*/ /*if(released() && !in_selection_rect) selected = false;*/ } }; }