PixelBullet  0.0.1
A C++ game engine
Loading...
Searching...
No Matches
animation_graph_ops.h
1#pragma once
2
3#include "pixelbullet/scene/animation_graph_types.h"
4
5#include <optional>
6#include <string_view>
7
8namespace pixelbullet
9{
10inline void NormalizeAnimationGraphAsset(AnimationGraphAsset& asset)
11{
12 if (asset.editor_graph && asset.editor_graph->Empty())
13 {
14 asset.editor_graph.reset();
15 }
16}
17
18[[nodiscard]] inline std::optional<std::size_t> FindAnimationGraphStateIndex(const AnimationGraphAsset& asset,
19 const std::string_view state_id)
20{
21 for (std::size_t index = 0; index < asset.states.size(); ++index)
22 {
23 if (asset.states[index].id == state_id)
24 {
25 return index;
26 }
27 }
28 return std::nullopt;
29}
30
31[[nodiscard]] inline const AnimationGraphState* FindAnimationGraphState(const AnimationGraphAsset& asset,
32 const std::string_view state_id)
33{
34 const auto index = FindAnimationGraphStateIndex(asset, state_id);
35 return index ? &asset.states[*index] : nullptr;
36}
37
38[[nodiscard]] inline AnimationGraphState* FindAnimationGraphState(AnimationGraphAsset& asset, const std::string_view state_id)
39{
40 const auto index = FindAnimationGraphStateIndex(asset, state_id);
41 return index ? &asset.states[*index] : nullptr;
42}
43
44[[nodiscard]] inline AnimationGraphEditorGraphNodeLayout* FindAnimationGraphEditorGraphNodeLayout(
45 AnimationGraphAsset& asset, const std::string_view state_id)
46{
47 if (!asset.editor_graph)
48 {
49 return nullptr;
50 }
51
52 for (AnimationGraphEditorGraphNodeLayout& node : asset.editor_graph->nodes)
53 {
54 if (node.state_id == state_id)
55 {
56 return &node;
57 }
58 }
59
60 return nullptr;
61}
62
63[[nodiscard]] inline const AnimationGraphEditorGraphNodeLayout* FindAnimationGraphEditorGraphNodeLayout(
64 const AnimationGraphAsset& asset, const std::string_view state_id)
65{
66 if (!asset.editor_graph)
67 {
68 return nullptr;
69 }
70
71 for (const AnimationGraphEditorGraphNodeLayout& node : asset.editor_graph->nodes)
72 {
73 if (node.state_id == state_id)
74 {
75 return &node;
76 }
77 }
78
79 return nullptr;
80}
81
82inline AnimationGraphEditorGraphNodeLayout& EnsureAnimationGraphEditorGraphNodeLayout(AnimationGraphAsset& asset,
83 const std::string_view state_id)
84{
85 if (!asset.editor_graph)
86 {
87 asset.editor_graph = AnimationGraphEditorGraphLayout{};
88 }
89
90 if (AnimationGraphEditorGraphNodeLayout* existing = FindAnimationGraphEditorGraphNodeLayout(asset, state_id))
91 {
92 return *existing;
93 }
94
95 asset.editor_graph->nodes.push_back(AnimationGraphEditorGraphNodeLayout{
96 .state_id = std::string(state_id),
97 });
98 return asset.editor_graph->nodes.back();
99}
100} // namespace pixelbullet
Definition animation_graph_types.h:113
Definition animation_graph_types.h:101
Definition animation_graph_types.h:93
Definition animation_graph_types.h:61