deargui-vpl/examples/blueprints-example/nodes.cpp

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