bro
This commit is contained in:
127
include/td/display/state/NodeEditorState.h
Normal file
127
include/td/display/state/NodeEditorState.h
Normal file
@@ -0,0 +1,127 @@
|
||||
#pragma once
|
||||
|
||||
#include <td/display/DisplayState.h>
|
||||
|
||||
#include <imgui_node_editor.h>
|
||||
|
||||
namespace ed = ax::NodeEditor;
|
||||
|
||||
namespace td {
|
||||
|
||||
class NodeEditorState : public DisplayState {
|
||||
public:
|
||||
enum class PinType {
|
||||
Flow,
|
||||
Bool,
|
||||
Int,
|
||||
Float,
|
||||
String,
|
||||
Object,
|
||||
Function,
|
||||
Delegate,
|
||||
};
|
||||
|
||||
enum class PinKind { Output, Input };
|
||||
|
||||
enum class NodeType { Blueprint, Simple, Tree, Comment, Houdini };
|
||||
|
||||
struct Pin;
|
||||
|
||||
struct Node {
|
||||
ed::NodeId ID;
|
||||
std::string Name;
|
||||
std::vector<Pin> Inputs;
|
||||
std::vector<Pin> Outputs;
|
||||
ImColor Color;
|
||||
NodeType Type;
|
||||
ImVec2 Size;
|
||||
|
||||
std::string State;
|
||||
std::string SavedState;
|
||||
|
||||
Node(int id, const char* name, ImColor color = ImColor(255, 255, 255)) :
|
||||
ID(id), Name(name), Color(color), Type(NodeType::Blueprint), Size(0, 0) {}
|
||||
};
|
||||
|
||||
struct Pin {
|
||||
ed::PinId ID;
|
||||
::td::NodeEditorState::Node* Node;
|
||||
std::string Name;
|
||||
PinType Type;
|
||||
PinKind Kind;
|
||||
|
||||
Pin(int id, const char* name, PinType type) : ID(id), Node(nullptr), Name(name), Type(type), Kind(PinKind::Input) {}
|
||||
};
|
||||
|
||||
struct Link {
|
||||
ed::LinkId ID;
|
||||
|
||||
ed::PinId StartPinID;
|
||||
ed::PinId EndPinID;
|
||||
|
||||
ImColor Color;
|
||||
|
||||
Link(ed::LinkId id, ed::PinId startPinId, ed::PinId endPinId) :
|
||||
ID(id), StartPinID(startPinId), EndPinID(endPinId), Color(255, 255, 255) {}
|
||||
};
|
||||
|
||||
struct NodeIdLess {
|
||||
bool operator()(const ed::NodeId& lhs, const ed::NodeId& rhs) const {
|
||||
return lhs.AsPointer() < rhs.AsPointer();
|
||||
}
|
||||
};
|
||||
|
||||
int m_NextId = 1;
|
||||
const int m_PinIconSize = 24;
|
||||
std::vector<Node> m_Nodes;
|
||||
std::vector<Link> m_Links;
|
||||
ImTextureID m_HeaderBackground = 0;
|
||||
ImTextureID m_SaveIcon = 0;
|
||||
ImTextureID m_RestoreIcon = 0;
|
||||
const float m_TouchTime = 1.0f;
|
||||
std::map<ed::NodeId, float, NodeIdLess> m_NodeTouchTime;
|
||||
bool m_ShowOrdinals = false;
|
||||
|
||||
|
||||
public:
|
||||
NodeEditorState(Display& a_Display);
|
||||
~NodeEditorState();
|
||||
|
||||
virtual void Update(float a_Delta) override;
|
||||
|
||||
private:
|
||||
int GetNextId();
|
||||
ed::LinkId GetNextLinkId();
|
||||
void TouchNode(ed::NodeId id);
|
||||
float GetTouchProgress(ed::NodeId id);
|
||||
void UpdateTouch();
|
||||
Node* FindNode(ed::NodeId id);
|
||||
Link* FindLink(ed::LinkId id);
|
||||
Pin* FindPin(ed::PinId id);
|
||||
bool IsPinLinked(ed::PinId id);
|
||||
bool CanCreateLink(Pin* a, Pin* b);
|
||||
void BuildNode(Node* node);
|
||||
Node* SpawnInputActionNode();
|
||||
Node* SpawnBranchNode();
|
||||
Node* SpawnDoNNode();
|
||||
Node* SpawnOutputActionNode();
|
||||
Node* SpawnPrintStringNode();
|
||||
Node* SpawnMessageNode();
|
||||
Node* SpawnSetTimerNode();
|
||||
Node* SpawnLessNode();
|
||||
Node* SpawnWeirdNode();
|
||||
Node* SpawnTraceByChannelNode();
|
||||
Node* SpawnTreeSequenceNode();
|
||||
Node* SpawnTreeTaskNode();
|
||||
Node* SpawnTreeTask2Node();
|
||||
Node* SpawnComment();
|
||||
Node* SpawnHoudiniTransformNode();
|
||||
Node* SpawnHoudiniGroupNode();
|
||||
void BuildNodes();
|
||||
ImColor GetIconColor(PinType type);
|
||||
void DrawPinIcon(const Pin& pin, bool connected, int alpha);
|
||||
void ShowStyleEditor(bool* show = nullptr);
|
||||
void ShowLeftPane(float paneWidth);
|
||||
};
|
||||
|
||||
} // namespace td
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
target("imgui-node-editor")
|
||||
set_kind("static")
|
||||
add_files("imgui-node-editor/*.cpp")
|
||||
add_files("imgui-node-editor/**.cpp")
|
||||
add_includedirs("imgui-node-editor", {public = true})
|
||||
add_packages("imgui")
|
||||
@@ -1,12 +1,12 @@
|
||||
#include <chrono>
|
||||
#include <td/display/state/MainMenuState.h>
|
||||
#include <td/display/state/NodeEditorState.h>
|
||||
#include <td/misc/Time.h>
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
// init GL context
|
||||
td::Display display(1920, 1080, "Tower-Defense 2");
|
||||
|
||||
display.ChangeState<td::MainMenuState>();
|
||||
display.ChangeState<td::NodeEditorState>();
|
||||
|
||||
td::Timer timer;
|
||||
while (!display.IsCloseRequested()) {
|
||||
|
||||
1700
src/td/display/state/NodeEditorState.cpp
Normal file
1700
src/td/display/state/NodeEditorState.cpp
Normal file
File diff suppressed because it is too large
Load Diff
7988
src/td/display/state/stb_image.h
Normal file
7988
src/td/display/state/stb_image.h
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user