3#include "pixelbullet/scene/interaction_sequence_types.h"
15 std::vector<InteractionSequenceEditorGraphNodeLayout> normalized;
16 normalized.reserve(layout.nodes.size());
19 if (node.node_id.empty())
24 const auto existing = std::find_if(normalized.begin(), normalized.end(),
26 { return candidate.node_id == node.node_id; });
27 if (existing == normalized.end())
29 normalized.push_back(std::move(node));
33 *existing = std::move(node);
37 layout.nodes = std::move(normalized);
42 if (asset.editor_graph)
44 NormalizeInteractionSequenceEditorGraphLayout(*asset.editor_graph);
45 if (asset.editor_graph->Empty())
47 asset.editor_graph.reset();
51 if (asset.initial_node_id.empty() && !asset.nodes.empty())
53 asset.initial_node_id = asset.nodes.front().id;
57[[nodiscard]]
inline std::optional<std::size_t> FindInteractionSequenceNodeIndex(
const InteractionSequenceAsset& asset,
58 const std::string_view node_id)
60 for (std::size_t index = 0; index < asset.nodes.size(); ++index)
62 if (asset.nodes[index].id == node_id)
72 const std::string_view node_id)
74 const auto index = FindInteractionSequenceNodeIndex(asset, node_id);
75 return index ? &asset.nodes[*index] :
nullptr;
79 const std::string_view node_id)
81 const auto index = FindInteractionSequenceNodeIndex(asset, node_id);
82 return index ? &asset.nodes[*index] :
nullptr;
88 if (!asset.editor_graph)
93 const auto it = std::find_if(asset.editor_graph->nodes.begin(), asset.editor_graph->nodes.end(),
95 return it == asset.editor_graph->nodes.end() ? nullptr : &(*it);
101 if (!asset.editor_graph)
106 const auto it = std::find_if(asset.editor_graph->nodes.begin(), asset.editor_graph->nodes.end(),
108 return it == asset.editor_graph->nodes.end() ? nullptr : &(*it);
114 if (!asset.editor_graph)
125 .node_id = std::move(node_id),
126 .position = glm::vec2(0.0f),
128 return asset.editor_graph->nodes.back();
Definition interaction_sequence_types.h:54
Definition interaction_sequence_types.h:42
Definition interaction_sequence_types.h:34
Definition interaction_sequence_types.h:22