#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() {} std::shared_ptr state = APP::State::get(); Vec2Df drag_offset; bool picked_up = false; virtual bool entered() override { return !is_hovering && hovering(); } virtual bool exited() override { return is_hovering && !hovering(); } virtual bool pickedUp() { return held() && picked_up; } virtual void pickUp() override { picked_up = true; drag_offset = position - SCREEN_MOUSE; } virtual void pickUp(Vec2Df selection_origin) override { picked_up = true; drag_offset = position - selection_origin; } virtual void drag(Vec2Df new_position) override { position = new_position; } virtual void putDown() override { picked_up = false; } virtual bool select() override { return CheckCollisionPointRec(position, state->selection); } virtual void deselect() override { selected = false; } }; }