Initial graph evaluations, added Float to Vec3 Node, minor editor tweaks.

This commit is contained in:
Martin Felis
2022-04-03 21:05:11 +02:00
parent 08ae84fcb4
commit 5d8c1e289b
6 changed files with 269 additions and 59 deletions
+39
View File
@@ -240,6 +240,37 @@ struct NodeSocketAccessor<MathAddNode> : public NodeSocketAccessorBase {
};
//
// MathFloatToVec3Node
//
struct MathFloatToVec3Node : public AnimNode {
float* i_input0 = nullptr;
float* i_input1 = nullptr;
float* i_input2 = nullptr;
Vec3 o_output = {0.f, 0.f, 0.f};
void Evaluate() override {
assert (i_input0 != nullptr);
assert (i_input1 != nullptr);
assert (i_input2 != nullptr);
o_output[0] = *i_input0;
o_output[1] = *i_input1;
o_output[2] = *i_input2;
}
};
template <>
struct NodeSocketAccessor<MathFloatToVec3Node> : public NodeSocketAccessorBase {
NodeSocketAccessor(AnimNode* node_) {
MathFloatToVec3Node* node = dynamic_cast<MathFloatToVec3Node*>(node_);
RegisterInput("Input0", &node->i_input0);
RegisterInput("Input1", &node->i_input1);
RegisterInput("Input2", &node->i_input2);
RegisterOutput("Output", &node->o_output);
}
};
static inline AnimNode* AnimNodeFactory(const std::string& name) {
AnimNode* result;
if (name == "Blend2") {
@@ -250,6 +281,10 @@ static inline AnimNode* AnimNodeFactory(const std::string& name) {
result = new AnimSamplerNode;
} else if (name == "BlendTree") {
result = new BlendTreeNode;
} else if (name == "MathAddNode") {
result = new MathAddNode;
} else if (name == "MathFloatToVec3Node") {
result = new MathFloatToVec3Node;
}
if (result != nullptr) {
@@ -272,6 +307,10 @@ static inline NodeSocketAccessorBase* AnimNodeAccessorFactory(
return new NodeSocketAccessor<AnimSamplerNode>(node);
} else if (node_type_name == "BlendTree") {
return new NodeSocketAccessor<BlendTreeNode>(node);
} else if (node_type_name == "MathAddNode") {
return new NodeSocketAccessor<MathAddNode>(node);
} else if (node_type_name == "MathFloatToVec3Node") {
return new NodeSocketAccessor<MathFloatToVec3Node>(node);
} else {
std::cerr << "Invalid node type name " << node_type_name << "."
<< std::endl;