#pragma once #include #include int globalNodeIdCounter = 0; class NodeElement { public: int id = -1; std::string name = {}; ImVec2 position = {}; NodeElement(std::string name); }; class NodeWindow { public: std::string title = {}; std::vector alerts = {}; std::vector triggers = {}; NodeWindow(std::string title); }; struct NodeConnection { int sourceID = -1; int targetID = -1; }; struct ConnectionPayload { int sourceID = -1; }; class ApplicationData { public: std::vector nodes = {}; std::vector connections = {}; void addConnection(int sourceID, int targetID); }; enum class CircleDragType { None, Source, Target }; void init(DrawData& drawData, void* customData); void draw(DrawData& drawData, void* customDataVoid); void invisibleDragArea(const void* id, ImVec2& size); void drawCircle(ImVec2* outCircleCenter); bool inlineButton(const char* title, const void* id); bool invisibleInlineButton(const char* title, const char* id); std::vector::iterator cleanEraseElement(std::vector& vector, std::vector::iterator toErase, ApplicationData* data); void cleanEreaseNodeElements(NodeWindow& node, ApplicationData* data);