#pragma once #include "draggable.h" #include namespace VISEQ::BASE { class Connectable : public Draggable{ public: Connectable() {VISEQ::BASE::Connectable::connectables.emplace_back(this);} Connectable(Vec2Df position) : Draggable(position) {VISEQ::BASE::Connectable::connectables.emplace_back(this);} virtual ~Connectable() {} inline static std::vector> connectables; std::shared_ptr partner; 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}; } virtual void connect() { Vec2Df mp = {GetMousePosition().x, GetMousePosition().y}; if(picked_up){ DrawLineV(position, mp, (Color){229, 181, 103, 255}); } if(released()){ std::cout << connectables.size() << std::endl; // static auto hover_partner = VISEQ::BASE::Connectable::connectables | std::ranges::views::filter([](std::shared_ptr c){ return c->hovering();}) | std::ranges::to>>(); // if(hover_partner.empty()){ /*SPTR_Node new_node = app.gm.copyNode(std::dynamic_pointer_cast(connecting_nodes.front()), target_position);*/ /*new_node->connecting = false;*/ /*app.gm.addConnection(connecting_nodes.front(), new_node);*/ // } else { // partner = hover_partner.front(); // } } } }; }