Added basic connection validation and connection removal to BlendTreeResources.
This commit is contained in:
@@ -623,6 +623,97 @@ TEST_CASE("AnimSamplerSpeedScaleGraph", "[AnimGraphResource]") {
|
||||
*dynamic_cast<SpeedScaleNode*>(blend_tree.m_nodes[speed_scale_node_index])
|
||||
->i_speed_scale,
|
||||
Catch::Matchers::WithinAbs(speed_scale_value, 0.1));
|
||||
|
||||
WHEN("Checking node eval order and node subtrees") {
|
||||
const std::vector<size_t>& eval_order =
|
||||
graph_resource_loaded.m_blend_tree_resource.GetNodeEvalOrder();
|
||||
|
||||
THEN("Walk node gets evaluated before speed scale node") {
|
||||
CHECK(eval_order.size() == 2);
|
||||
CHECK(eval_order[0] == walk_node_index);
|
||||
CHECK(eval_order[1] == speed_scale_node_index);
|
||||
}
|
||||
|
||||
THEN("Subtree of the speed scale node contains only the walk node") {
|
||||
CHECK(
|
||||
graph_resource_loaded.m_blend_tree_resource
|
||||
.m_node_inputs_subtree[speed_scale_node_index]
|
||||
.size()
|
||||
== 1);
|
||||
CHECK(
|
||||
graph_resource_loaded.m_blend_tree_resource
|
||||
.m_node_inputs_subtree[speed_scale_node_index][0]
|
||||
== walk_node_index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Checks that connections additions and removals are properly validated.
|
||||
//
|
||||
TEST_CASE_METHOD(
|
||||
Blend2GraphResource,
|
||||
"Connectivity Tests",
|
||||
"[AnimGraphResource][Blend2GraphResource]") {
|
||||
INFO("Removing Blend2 -> Output Connection")
|
||||
CHECK(
|
||||
blend_tree_resource->DisconnectSockets(
|
||||
blend_node,
|
||||
"Output",
|
||||
blend_tree_resource->GetGraphOutputNode(),
|
||||
"GraphOutput")
|
||||
== true);
|
||||
CHECK(blend_tree_resource->GetNodeEvalOrder().empty());
|
||||
|
||||
INFO("Adding speed scale node");
|
||||
size_t speed_scale_node_index =
|
||||
blend_tree_resource->AddNode(AnimNodeResourceFactory("SpeedScale"));
|
||||
AnimNodeResource* speed_scale_node_resource =
|
||||
blend_tree_resource->GetNode(speed_scale_node_index);
|
||||
|
||||
INFO("Connecting speed scale node");
|
||||
CHECK(
|
||||
blend_tree_resource->ConnectSockets(
|
||||
speed_scale_node_resource,
|
||||
"Output",
|
||||
blend_tree_resource->GetGraphOutputNode(),
|
||||
"GraphOutput")
|
||||
== true);
|
||||
|
||||
const std::vector<size_t>& tree_eval_order =
|
||||
blend_tree_resource->GetNodeEvalOrder();
|
||||
CHECK(tree_eval_order.size() == 1);
|
||||
CHECK(tree_eval_order[0] == speed_scale_node_index);
|
||||
|
||||
CHECK(
|
||||
blend_tree_resource->ConnectSockets(
|
||||
blend_node,
|
||||
"Output",
|
||||
speed_scale_node_resource,
|
||||
"Input")
|
||||
== true);
|
||||
|
||||
CHECK(tree_eval_order.size() == 4);
|
||||
CHECK(tree_eval_order[3] == speed_scale_node_index);
|
||||
CHECK(tree_eval_order[2] == blend_node_index);
|
||||
CHECK(tree_eval_order[1] == run_node_index);
|
||||
CHECK(tree_eval_order[0] == walk_node_index);
|
||||
|
||||
INFO("Creating loop");
|
||||
CHECK(blend_tree_resource->DisconnectSockets(
|
||||
speed_scale_node_resource,
|
||||
"Output",
|
||||
blend_tree_resource->GetGraphOutputNode(),
|
||||
"GraphOutput"));
|
||||
CHECK(blend_tree_resource
|
||||
->DisconnectSockets(walk_node, "Output", blend_node, "Input0"));
|
||||
CHECK(
|
||||
blend_tree_resource->IsConnectionValid(
|
||||
speed_scale_node_resource,
|
||||
"Output",
|
||||
blend_node,
|
||||
"Input0")
|
||||
== false);
|
||||
}
|
||||
|
||||
TEST_CASE_METHOD(
|
||||
@@ -1219,7 +1310,8 @@ TEST_CASE_METHOD(
|
||||
blend_tree.StartUpdateTick();
|
||||
blend_tree.MarkActiveInputs(std::vector<AnimGraphConnection>());
|
||||
THEN(
|
||||
"parent AnimSampler is active and embedded AnimSampler is inactive") {
|
||||
"parent AnimSampler is active and embedded AnimSampler is "
|
||||
"inactive") {
|
||||
CHECK(walk_node->m_state == AnimNodeEvalState::Activated);
|
||||
CHECK(embedded_run_node->m_state == AnimNodeEvalState::Deactivated);
|
||||
}
|
||||
@@ -1230,7 +1322,8 @@ TEST_CASE_METHOD(
|
||||
blend_tree.StartUpdateTick();
|
||||
blend_tree.MarkActiveInputs(std::vector<AnimGraphConnection>());
|
||||
THEN(
|
||||
"parent AnimSampler is inactive and embedded AnimSampler is active") {
|
||||
"parent AnimSampler is inactive and embedded AnimSampler is "
|
||||
"active") {
|
||||
CHECK(walk_node->m_state == AnimNodeEvalState::Deactivated);
|
||||
CHECK(embedded_run_node->m_state == AnimNodeEvalState::Activated);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user