feat: fix socket connections

This commit is contained in:
parker
2025-07-05 20:20:56 +01:00
parent 18f85d6e76
commit 58ac608f84
3 changed files with 54 additions and 4 deletions

View File

@@ -35,7 +35,6 @@ void FloatingEdgeGraphic::paint(QPainter *painter, const QStyleOptionGraphicsIte
QPointF pos1 = socket1_->getIO()==enzo::nt::SocketIOType::Input ? socket1_->scenePos() : floatPos_; QPointF pos1 = socket1_->getIO()==enzo::nt::SocketIOType::Input ? socket1_->scenePos() : floatPos_;
QPointF pos2 = socket1_->getIO()==enzo::nt::SocketIOType::Input ? floatPos_ : socket1_->scenePos(); QPointF pos2 = socket1_->getIO()==enzo::nt::SocketIOType::Input ? floatPos_ : socket1_->scenePos();
float dist = std::sqrt(std::pow(pos1.x()-pos2.x(),2)+std::pow(pos1.y()-pos2.y(),2)); float dist = std::sqrt(std::pow(pos1.x()-pos2.x(),2)+std::pow(pos1.y()-pos2.y(),2));
std::cout << "dist: " << dist << "\n";
float cubicStrength = dist*0.5; float cubicStrength = dist*0.5;
cubicStrength = std::clamp(cubicStrength, 0.0f, 40.0f); cubicStrength = std::clamp(cubicStrength, 0.0f, 40.0f);
QPainterPath path; QPainterPath path;

View File

@@ -96,9 +96,14 @@ void Network::leftMousePressed(QMouseEvent *event)
} }
// socket logic // socket logic
else if(clickedSocket) else if(clickedSocket)
{
// find closest socket
clickedSocket = closestItemOfType<SocketGraphic>(clickedItems, view_->mapToScene(event->pos()));
if(clickedSocket)
{ {
socketClicked(static_cast<SocketGraphic*>(clickedSocket), event); socketClicked(static_cast<SocketGraphic*>(clickedSocket), event);
} }
}
// floating edge // floating edge
else if(floatingEdge_) else if(floatingEdge_)
{ {
@@ -202,7 +207,14 @@ void Network::mouseMoved(QMouseEvent *event)
if(floatingEdge_) if(floatingEdge_)
{ {
if(QGraphicsItem* hoverSocket = itemOfType<SocketGraphic>(hoverItems); hoverSocket && hoverSocket!=startSocket_) if(
SocketGraphic* hoverSocket = static_cast<SocketGraphic*>(closestItemOfType<SocketGraphic>(hoverItems, view_->mapToScene(event->pos())));
hoverSocket &&
hoverSocket!=startSocket_ &&
hoverSocket->getIO()!=startSocket_->getIO() &&
hoverSocket->getOpId()!=startSocket_->getOpId()
)
{ {
floatingEdge_->setFloatPos(hoverSocket->scenePos()); floatingEdge_->setFloatPos(hoverSocket->scenePos());
} }
@@ -362,8 +374,12 @@ void Network::mouseReleaseEvent(QMouseEvent *event)
state_=State::DEFAULT; state_=State::DEFAULT;
} }
else if(floatingEdge_ && hoverSocket) else if(floatingEdge_ && hoverSocket)
{
hoverSocket = closestItemOfType<SocketGraphic>(hoverItems, view_->mapToScene(event->pos()));
if(hoverSocket)
{ {
socketClicked(static_cast<SocketGraphic*>(hoverSocket), event); socketClicked(static_cast<SocketGraphic*>(hoverSocket), event);
} }
} }
}
} }

View File

@@ -1,7 +1,9 @@
#pragma once #pragma once
#include <QWidget> #include <QWidget>
#include <iterator>
#include <memory> #include <memory>
#include <qgraphicsitem.h> #include <qgraphicsitem.h>
#include <qpoint.h>
#include <typeinfo> #include <typeinfo>
#include "Engine/Network/NetworkManager.h" #include "Engine/Network/NetworkManager.h"
#include "Engine/Types.h" #include "Engine/Types.h"
@@ -82,6 +84,39 @@ private:
return nullptr; return nullptr;
} }
template<typename T>
QGraphicsItem* closestItemOfType(QList<QGraphicsItem*> items, QPointF centerPos)
{
std::vector <QGraphicsItem*> filteredItems;
for(QGraphicsItem* item : items)
{
if(item && typeid(*item)==typeid(T))
{
filteredItems.push_back(item);
}
}
if(filteredItems.size()==0) return nullptr;
if(filteredItems.size()==1) return filteredItems.at(0);
QGraphicsItem* closestItem=filteredItems.at(0);
float closestDist=QLineF(closestItem->scenePos(), centerPos).length();
for(size_t i=1; i<filteredItems.size(); ++i)
{
QGraphicsItem* item = filteredItems.at(i);
auto currentDist = QLineF(item->scenePos(), centerPos).length();
if(currentDist < closestDist)
{
closestItem = item;
closestDist = currentDist;
}
}
return closestItem;
}
protected: protected:
void resizeEvent(QResizeEvent *event) override; void resizeEvent(QResizeEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override;