#pragma once #include "draggable.h" #include namespace VISEQ::BASE { class Connectable : public Draggable{ public: Connectable() {} Connectable(Vec2Df position) : Draggable(position) {} virtual ~Connectable() {} inline static std::vector> connectables; std::shared_ptr partner; virtual void init() { connectables.emplace_back(this); } virtual bool hovering() override { Vec2Df mp = {GetMousePosition().x, GetMousePosition().y}; return CheckCollisionPointCircle(mp, position, 5); } 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(); } virtual void connect() { Vec2Df mp = {GetMousePosition().x, GetMousePosition().y}; if(picked_up){ for(auto c : connectables){ if(c.get() != this && c->hovering()) { partner = c; c->partner.reset(this); break; } } } } }; }