2024-11-10 01:56:33 +01:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "moveable.h"
|
2024-11-17 02:40:31 +01:00
|
|
|
#include "raylib.h"
|
|
|
|
|
#include "selectable.h"
|
|
|
|
|
#include "state.h"
|
2024-11-10 01:56:33 +01:00
|
|
|
#include "vmath.h"
|
|
|
|
|
|
|
|
|
|
namespace VISEQ::BASE {
|
2024-11-17 02:40:31 +01:00
|
|
|
class Draggable : public Movable, public Selectable{
|
2024-11-10 01:56:33 +01:00
|
|
|
public:
|
|
|
|
|
Draggable() {}
|
|
|
|
|
Draggable(float x, float y) : Movable(Vec2Df(x, y), 960.0f) {}
|
|
|
|
|
Draggable(Vec2Df p) : Movable(p, 960.0f) {}
|
|
|
|
|
virtual ~Draggable() {}
|
|
|
|
|
|
2024-11-24 03:08:06 +01:00
|
|
|
std::shared_ptr<APP::State> state = APP::State::get();
|
|
|
|
|
|
2024-11-10 01:56:33 +01:00
|
|
|
Vec2Df drag_offset;
|
|
|
|
|
|
|
|
|
|
bool picked_up = false;
|
|
|
|
|
|
2024-11-20 11:13:13 +01:00
|
|
|
virtual bool entered() override {
|
|
|
|
|
return !is_hovering && hovering();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual bool exited() override {
|
|
|
|
|
return is_hovering && !hovering();
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-10 01:56:33 +01:00
|
|
|
virtual bool pickedUp() {
|
2024-11-24 03:08:06 +01:00
|
|
|
return held() && picked_up;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual void pickUp() override {
|
2024-11-28 01:08:04 +01:00
|
|
|
picked_up = true;
|
|
|
|
|
drag_offset = position - SCREEN_MOUSE;
|
2024-11-10 01:56:33 +01:00
|
|
|
}
|
2024-11-28 01:08:04 +01:00
|
|
|
|
2024-11-26 01:58:09 +01:00
|
|
|
virtual void pickUp(Vec2Df selection_origin) override {
|
2024-11-28 01:08:04 +01:00
|
|
|
picked_up = true;
|
|
|
|
|
drag_offset = position - selection_origin;
|
2024-11-26 01:58:09 +01:00
|
|
|
}
|
2024-11-10 01:56:33 +01:00
|
|
|
|
2024-11-28 01:08:04 +01:00
|
|
|
virtual void drag(Vec2Df new_position) override {
|
|
|
|
|
position = new_position;
|
2024-11-10 01:56:33 +01:00
|
|
|
}
|
|
|
|
|
|
2024-11-24 03:08:06 +01:00
|
|
|
virtual void putDown() override {
|
2024-11-10 01:56:33 +01:00
|
|
|
picked_up = false;
|
|
|
|
|
}
|
2024-11-17 02:40:31 +01:00
|
|
|
|
2024-11-26 01:58:09 +01:00
|
|
|
virtual bool select() override {
|
|
|
|
|
return CheckCollisionPointRec(position, state->selection);
|
2024-11-17 02:40:31 +01:00
|
|
|
}
|
2024-11-18 01:57:10 +01:00
|
|
|
|
2024-12-04 01:43:06 +01:00
|
|
|
virtual void deselect() override {
|
|
|
|
|
selected = false;
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-10 01:56:33 +01:00
|
|
|
};
|
|
|
|
|
}
|