PixelBullet  0.0.1
A C++ game engine
Loading...
Searching...
No Matches
mission_ops.h
1#pragma once
2
3#include "pixelbullet/scene/mission_types.h"
4
5#include <optional>
6#include <string_view>
7
8namespace pixelbullet
9{
10inline void NormalizeMissionAsset(MissionAsset& 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> FindMissionStageIndex(const MissionAsset& asset, const std::string_view stage_id)
19{
20 for (std::size_t index = 0; index < asset.stages.size(); ++index)
21 {
22 if (asset.stages[index].id == stage_id)
23 {
24 return index;
25 }
26 }
27
28 return std::nullopt;
29}
30
31[[nodiscard]] inline const MissionStage* FindMissionStage(const MissionAsset& asset, const std::string_view stage_id)
32{
33 const auto index = FindMissionStageIndex(asset, stage_id);
34 return index ? &asset.stages[*index] : nullptr;
35}
36
37[[nodiscard]] inline MissionStage* FindMissionStage(MissionAsset& asset, const std::string_view stage_id)
38{
39 const auto index = FindMissionStageIndex(asset, stage_id);
40 return index ? &asset.stages[*index] : nullptr;
41}
42
43[[nodiscard]] inline const MissionStageTransition* FindMissionStageTransition(const MissionStage& stage, const std::string_view event_id)
44{
45 for (const MissionStageTransition& transition : stage.transitions)
46 {
47 if (transition.event_id == event_id)
48 {
49 return &transition;
50 }
51 }
52
53 return nullptr;
54}
55
56[[nodiscard]] inline MissionEditorGraphNodeLayout* FindMissionEditorGraphNodeLayout(MissionAsset& asset, const std::string_view stage_id)
57{
58 if (!asset.editor_graph)
59 {
60 return nullptr;
61 }
62
63 for (MissionEditorGraphNodeLayout& node : asset.editor_graph->nodes)
64 {
65 if (node.stage_id == stage_id)
66 {
67 return &node;
68 }
69 }
70
71 return nullptr;
72}
73
74[[nodiscard]] inline const MissionEditorGraphNodeLayout* FindMissionEditorGraphNodeLayout(const MissionAsset& asset,
75 const std::string_view stage_id)
76{
77 if (!asset.editor_graph)
78 {
79 return nullptr;
80 }
81
82 for (const MissionEditorGraphNodeLayout& node : asset.editor_graph->nodes)
83 {
84 if (node.stage_id == stage_id)
85 {
86 return &node;
87 }
88 }
89
90 return nullptr;
91}
92
93inline MissionEditorGraphNodeLayout& EnsureMissionEditorGraphNodeLayout(MissionAsset& asset, const std::string_view stage_id)
94{
95 if (!asset.editor_graph)
96 {
97 asset.editor_graph = MissionEditorGraphLayout{};
98 }
99
100 if (MissionEditorGraphNodeLayout* existing = FindMissionEditorGraphNodeLayout(asset, stage_id))
101 {
102 return *existing;
103 }
104
105 asset.editor_graph->nodes.push_back(MissionEditorGraphNodeLayout{
106 .stage_id = std::string(stage_id),
107 });
108 return asset.editor_graph->nodes.back();
109}
110} // namespace pixelbullet
Definition mission_types.h:66
Definition mission_types.h:54
Definition mission_types.h:46
Definition mission_types.h:24
Definition mission_types.h:32