133 lines
5.9 KiB
C++
133 lines
5.9 KiB
C++
#include "nodes.h"
|
|
#include "app.h"
|
|
|
|
namespace NodeSpawner
|
|
{
|
|
|
|
// Helper macro to create and add node to container
|
|
#define SPAWN_NODE_IMPL(NAME, CONSTRUCTOR_ARGS, ...) \
|
|
Node* NAME(App* app) \
|
|
{ \
|
|
int nodeId = app->GetNextId(); \
|
|
Node newNode CONSTRUCTOR_ARGS; \
|
|
__VA_ARGS__ \
|
|
app->BuildNode(&newNode); \
|
|
auto* rootContainer = app->GetActiveRootContainer(); \
|
|
if (rootContainer) \
|
|
return rootContainer->AddNode(newNode); \
|
|
return nullptr; \
|
|
}
|
|
|
|
SPAWN_NODE_IMPL(SpawnInputActionNode, (nodeId, "InputAction Fire", ImColor(255, 128, 128)),
|
|
newNode.Outputs.emplace_back(app->GetNextId(), "", PinType::Delegate);
|
|
newNode.Outputs.emplace_back(app->GetNextId(), "Pressed", PinType::Flow);
|
|
newNode.Outputs.emplace_back(app->GetNextId(), "Released", PinType::Flow);
|
|
)
|
|
|
|
SPAWN_NODE_IMPL(SpawnBranchNode, (nodeId, "Branch"),
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "", PinType::Flow);
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "Condition", PinType::Bool);
|
|
newNode.Outputs.emplace_back(app->GetNextId(), "True", PinType::Flow);
|
|
newNode.Outputs.emplace_back(app->GetNextId(), "False", PinType::Flow);
|
|
)
|
|
|
|
SPAWN_NODE_IMPL(SpawnDoNNode, (nodeId, "Do N"),
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "Enter", PinType::Flow);
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "N", PinType::Int);
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "Reset", PinType::Flow);
|
|
newNode.Outputs.emplace_back(app->GetNextId(), "Exit", PinType::Flow);
|
|
newNode.Outputs.emplace_back(app->GetNextId(), "Counter", PinType::Int);
|
|
)
|
|
|
|
SPAWN_NODE_IMPL(SpawnOutputActionNode, (nodeId, "OutputAction"),
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "Sample", PinType::Float);
|
|
newNode.Outputs.emplace_back(app->GetNextId(), "Condition", PinType::Bool);
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "Event", PinType::Delegate);
|
|
)
|
|
|
|
SPAWN_NODE_IMPL(SpawnPrintStringNode, (nodeId, "Print String"),
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "", PinType::Flow);
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "In String", PinType::String);
|
|
newNode.Outputs.emplace_back(app->GetNextId(), "", PinType::Flow);
|
|
)
|
|
|
|
SPAWN_NODE_IMPL(SpawnMessageNode, (nodeId, "", ImColor(128, 195, 248)),
|
|
newNode.Type = NodeType::Simple;
|
|
newNode.Outputs.emplace_back(app->GetNextId(), "Message", PinType::String);
|
|
)
|
|
|
|
SPAWN_NODE_IMPL(SpawnSetTimerNode, (nodeId, "Set Timer", ImColor(128, 195, 248)),
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "", PinType::Flow);
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "Object", PinType::Object);
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "Function Name", PinType::Function);
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "Time", PinType::Float);
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "Looping", PinType::Bool);
|
|
newNode.Outputs.emplace_back(app->GetNextId(), "", PinType::Flow);
|
|
)
|
|
|
|
SPAWN_NODE_IMPL(SpawnLessNode, (nodeId, "<", ImColor(128, 195, 248)),
|
|
newNode.Type = NodeType::Simple;
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "", PinType::Float);
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "", PinType::Float);
|
|
newNode.Outputs.emplace_back(app->GetNextId(), "", PinType::Float);
|
|
)
|
|
|
|
SPAWN_NODE_IMPL(SpawnWeirdNode, (nodeId, "o.O", ImColor(128, 195, 248)),
|
|
newNode.Type = NodeType::Simple;
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "", PinType::Float);
|
|
newNode.Outputs.emplace_back(app->GetNextId(), "", PinType::Float);
|
|
newNode.Outputs.emplace_back(app->GetNextId(), "", PinType::Float);
|
|
)
|
|
|
|
SPAWN_NODE_IMPL(SpawnTraceByChannelNode, (nodeId, "Single Line Trace by Channel", ImColor(255, 128, 64)),
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "", PinType::Flow);
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "Start", PinType::Flow);
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "End", PinType::Int);
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "Trace Channel", PinType::Float);
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "Trace Complex", PinType::Bool);
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "Actors to Ignore", PinType::Int);
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "Draw Debug Type", PinType::Bool);
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "Ignore Self", PinType::Bool);
|
|
newNode.Outputs.emplace_back(app->GetNextId(), "", PinType::Flow);
|
|
newNode.Outputs.emplace_back(app->GetNextId(), "Out Hit", PinType::Float);
|
|
newNode.Outputs.emplace_back(app->GetNextId(), "Return Value", PinType::Bool);
|
|
)
|
|
|
|
SPAWN_NODE_IMPL(SpawnTreeSequenceNode, (nodeId, "Sequence"),
|
|
newNode.Type = NodeType::Tree;
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "", PinType::Flow);
|
|
newNode.Outputs.emplace_back(app->GetNextId(), "", PinType::Flow);
|
|
)
|
|
|
|
SPAWN_NODE_IMPL(SpawnTreeTaskNode, (nodeId, "Move To"),
|
|
newNode.Type = NodeType::Tree;
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "", PinType::Flow);
|
|
)
|
|
|
|
SPAWN_NODE_IMPL(SpawnTreeTask2Node, (nodeId, "Random Wait"),
|
|
newNode.Type = NodeType::Tree;
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "", PinType::Flow);
|
|
)
|
|
|
|
SPAWN_NODE_IMPL(SpawnComment, (nodeId, "Test Comment"),
|
|
newNode.Type = NodeType::Comment;
|
|
newNode.Size = ImVec2(300, 200);
|
|
)
|
|
|
|
SPAWN_NODE_IMPL(SpawnHoudiniTransformNode, (nodeId, "Transform"),
|
|
newNode.Type = NodeType::Houdini;
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "Out", PinType::Flow);
|
|
newNode.Outputs.emplace_back(app->GetNextId(), "", PinType::Flow);
|
|
)
|
|
|
|
SPAWN_NODE_IMPL(SpawnHoudiniGroupNode, (nodeId, "Group"),
|
|
newNode.Type = NodeType::Houdini;
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "", PinType::Flow);
|
|
newNode.Inputs.emplace_back(app->GetNextId(), "", PinType::Flow);
|
|
newNode.Outputs.emplace_back(app->GetNextId(), "", PinType::Flow);
|
|
)
|
|
|
|
#undef SPAWN_NODE_IMPL
|
|
|
|
} // namespace NodeSpawner
|