On the road to connector -> connector with edges...

This commit is contained in:
Sebastian
2024-11-28 08:49:35 +01:00
parent 492971ed4f
commit 635c94e3cf
4 changed files with 23 additions and 13 deletions
+3
View File
@@ -14,6 +14,7 @@ namespace VISEQ::BASE {
inline static std::vector<std::shared_ptr<Connectable>> connectables;
std::shared_ptr<Connectable> partner;
bool new_partner = false;
virtual void init() {
connectables.emplace_back(this);
@@ -34,6 +35,8 @@ namespace VISEQ::BASE {
if(c.get() != this && c->hovering()) {
partner = c;
c->partner.reset(this);
new_partner = true;
partner->new_partner = true;
break;
}
}
+14 -12
View File
@@ -4,7 +4,6 @@
#include "datatypes.h"
#include "graph-item.h"
#include "interaction-event.h"
#include "moveable.h"
#include "raymath.h"
#include "state.h"
#include "vmath.h"
@@ -13,26 +12,24 @@
namespace VISEQ::GRAPH {
class Connector : public BASE::Connectable, public GraphItem{
public:
using BASE::Movable::state;
Connector() {}
Connector(std::shared_ptr<GraphItem> parent, Vec2Df center_position, float orbit) : orbit(orbit) {
setPosition(center_position);
setParent(parent);
}
GraphItemType getType() override{
return GraphItemType::CONNECTOR;
}
std::shared_ptr<GraphItem> parent;
bool hover_connect = false;
bool passable = false;
float radius = 5.0f;
float orbit = 14.0f;
Vec2Df center_position;
GraphItemType getType() override{
return GraphItemType::CONNECTOR;
}
std::shared_ptr<Connectable> getPtr(){
return std::static_pointer_cast<Connector>(shared_from_this());
}
@@ -47,8 +44,6 @@ namespace VISEQ::GRAPH {
void setPosition(Vec2Df pos) override {
center_position = pos;
if(!partner) position = center_position - ((center_position - SCREEN_MOUSE)).norm() * (radius + orbit);
if(partner) position = center_position - ((center_position - partner->position)).norm() * (radius + orbit);
}
void update() override {
@@ -56,6 +51,13 @@ namespace VISEQ::GRAPH {
if(hovering() && clicked()) state->pushEvent({getPtr(), APP::Interaction::PICKUP});
if(pickedUp()) state->pushEvent({getPtr(), APP::Interaction::DRAG});
if(picked_up && released()) state->pushEvent({getPtr(), APP::Interaction::PUTDOWN});
if(!partner) position = center_position - ((center_position - SCREEN_MOUSE)).norm() * (radius + orbit);
if(partner) position = center_position - ((center_position - partner->position)).norm() * (radius + orbit);
if(new_partner) {
//TODO what happens if a new partner is connected?
new_partner = false;
}
}
void draw() override {
@@ -65,8 +67,8 @@ namespace VISEQ::GRAPH {
DrawLineV(position, partner->position, VS_COLOR_RED);
}
if(hover_connect){
DrawCircle(position.x, position.y, 8.0f, (Color){108, 153, 187, 255});
if(hovering()){
DrawCircle(position.x, position.y, 8.0f, (Color){108, 203, 237, 255});
} else {
DrawCircle(position.x, position.y, 8.0f, (Color){108, 153, 187, (unsigned char)opacity});
}
+5
View File
@@ -135,6 +135,11 @@ namespace VISEQ::GRAPH {
counter.clear();
}
SPTR_Node next_node(SPTR_Node current, SPTR_Node last){
std::vector<std::shared_ptr<Connector>> active_connectors;
}
SPTR_Node next(SPTR_Node current, SPTR_Node last){
VEC_SPTR_Edge possible_connections = current->connections | RANGE_FILTER([current](SPTR_Edge c){
return (c->start == current && c->pass_forward) || (c->end == current && c->pass_backward);