Files
viseq/src/connectable.h
T

61 lines
1.4 KiB
C++
Raw Normal View History

#pragma once
#include "datatypes.h"
2024-11-11 02:11:54 +01:00
#include "draggable.h"
2024-11-12 01:42:05 +01:00
#include <memory>
namespace VISEQ::BASE {
2024-11-11 02:11:54 +01:00
class Connectable : public Draggable{
public:
Connectable() {}
/*Connectable() {VISEQ::BASE::Connectable::connectables.emplace_back(this);}*/
Connectable(Vec2Df position) : Draggable(position) {}
/*virtual ~Connectable() { connectables.erase(std::remove(connectables.begin(), connectables.end(), std::shared_ptr<Connectable>(this)), connectables.end()); }*/
virtual ~Connectable() {}
2024-11-12 01:42:05 +01:00
inline static std::vector<std::shared_ptr<Connectable>> connectables;
2024-11-11 02:11:54 +01:00
std::shared_ptr<Connectable> partner;
virtual void init() {
connectables.emplace_back(this);
}
2024-11-12 01:42:05 +01:00
virtual bool hovering() override {
Vec2Df mp = {GetMousePosition().x, GetMousePosition().y};
std::cout << "hovering" << std::endl;
return CheckCollisionPointCircle(mp, position, 5);
2024-11-12 01:42:05 +01:00
}
2024-11-11 02:11:54 +01:00
virtual void drag() override {
Vec2Df mp = {GetMousePosition().x, GetMousePosition().y};
DrawLineV(position, mp, (Color){229, 181, 103, 255});
}
void update() override{
if(pickedUp()) drag();
if(released()) putDown();
}
void putDown() override {
connect();
Draggable::putDown();
}
2024-11-12 01:42:05 +01:00
virtual void connect() {
Vec2Df mp = {GetMousePosition().x, GetMousePosition().y};
if(picked_up){
for(auto c : connectables){
if(c.get() != this && c->hovering()) {
partner = c;
break;
}
}
2024-11-12 01:42:05 +01:00
}
}
};
}