forked from jhergel/icesl-nodes
-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathnode.h
More file actions
113 lines (94 loc) · 3.1 KB
/
Copy pathnode.h
File metadata and controls
113 lines (94 loc) · 3.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#pragma once
#include <LibSL/LibSL.h>
#include "imgui/imgui.h"
#include "node_lua.h"
/************************************/
/************************************/
/************************************/
struct NodeSelecter;
class NodeWindow{
friend class GraphMaker;
NodeWindow():size(v2i(100,100)),pos(v2i(100,100))
{
isNew = true;
}
NodeWindow(Node*n, const char *name,v2i pos):show(true),size(v2i(100,100)),pos(pos),name(name),node(n)
{
isNew = true;
previousConnectedWindow.resize(n->getInputName().size());
}
NodeWindow(Node*n, const char *name):show(true),size(v2i(100,100)),pos(v2i(100,100)),name(name),node(n)
{
isNew = true;
previousConnectedWindow.resize(n->getInputName().size());
}
Node* node;
bool show;
v2i size;
v2i pos;
bool isNew;
std::string name;
std::vector<NodeWindow*> previousConnectedWindow;
public:
void drawInputValue();
void drawOutputValue();
v2i getSize(){return size;}
v2i getPos(){return pos;}
void setSize(v2i s){size = s; isNew = true;}
void setPos(v2i p){pos = p; isNew = true;}
void connectPreviousWindow(NodeWindow* prev, int inpos, int outpos);
void connectPreviousWindow(NodeWindow* prev,std::string in, std::string out);
void nodeChange(){
previousConnectedWindow.resize(node->getInputName().size());
}
Node* getNode(){return node;}
void setNode(Node* n){
node =n;
previousConnectedWindow.resize(n->getInputName().size());
}
ImVec2 GetInputSlotPos(int slot_no) const { return ImVec2(pos[0], pos[1] + size[1] * ((float)slot_no+1) / (node->getPrevNamed().size()+1.0)); }
ImVec2 GetOutputSlotPos(int slot_no) const { return ImVec2(pos[0] + size[0], pos[1] + size[1] * ((float)slot_no+1) / (node->getNextNamed().size()+1.0)); }
std::string& getName(){return name;}
void displayNode(NodeSelecter &ns, bool mouseDown);
};
struct NodePickedInfo{
NodeWindow* nodeWindow;
int pos;
NodePickedInfo(){
nodeWindow = nullptr;
pos = 0;
}
NodePickedInfo(NodeWindow* nw, int pos){
nodeWindow = nw;
pos = pos;
}
} ;
struct NodeSelecter{
NodePickedInfo nodePickedInput;
NodePickedInfo nodePickedOutput;
bool inputHasBeenPicked;
bool outputHasBeenPicked;
NodeSelecter(){
inputHasBeenPicked = false;
outputHasBeenPicked = false;
}
void reset(){
nodePickedInput.nodeWindow = nullptr;
nodePickedOutput.nodeWindow = nullptr;
nodePickedInput.pos = 0;
nodePickedOutput.pos = 0;
}
void connect(){
if(nodePickedInput.nodeWindow == nullptr)return;
if(nodePickedOutput.nodeWindow == nullptr)return;
if(nodePickedInput.pos < 0)return;
if(nodePickedOutput.pos < 0)return;
nodePickedInput.nodeWindow->connectPreviousWindow(nodePickedOutput.nodeWindow,nodePickedInput.pos,nodePickedOutput.pos);
reset();
}
void drawBezierCurve(){
NodeWindow* n = nullptr;
ImDrawList* draw_list = ImGui::GetWindowDrawList();
int pos;
}
};