3#include "pixelbullet/filesystem/virtual_path.h"
4#include "pixelbullet/scene/prefab_asset.h"
5#include "pixelbullet/scene/transform_resolution.h"
14#include <unordered_map>
26 EntityId wrapper_prefab_entity = EntityId::Invalid();
28 std::shared_ptr<const PrefabAsset> prefab;
31 glm::mat4 wrapper_world_matrix = glm::mat4(1.0f);
32 std::vector<ResolvedNestedPrefabInstance> nested_instances;
34 [[nodiscard]]
bool IsValid()
const noexcept
36 return wrapper_prefab_entity && prefab && prefab->IsValid();
42 EntityId instance_entity = EntityId::Invalid();
44 std::shared_ptr<const PrefabAsset> prefab;
47 glm::mat4 wrapper_world_matrix = glm::mat4(1.0f);
48 std::vector<ResolvedNestedPrefabInstance> nested_instances;
50 [[nodiscard]]
bool IsValid()
const noexcept
52 return instance_entity && prefab && prefab->IsValid();
58 EntityId::ValueType root_instance = EntityId::Invalid().Raw();
59 std::vector<EntityId::ValueType> wrapper_path;
68 std::size_t seed = std::hash<EntityId::ValueType>{}(key.root_instance);
69 for (
const EntityId::ValueType path_entity : key.wrapper_path)
71 seed ^= std::hash<EntityId::ValueType>{}(path_entity) + 0x9e3779b9u + (seed << 6u) + (seed >> 2u);
78 const std::vector<EntityId>& wrapper_path)
81 key.root_instance = root_instance.Raw();
82 key.wrapper_path.reserve(wrapper_path.size());
83 for (
const EntityId wrapper : wrapper_path)
85 key.wrapper_path.push_back(wrapper.Raw());
92 std::unordered_map<EntityId::ValueType, SceneTransformOverrides> values;
93 std::unordered_map<SceneNestedPrefabOverrideKey, SceneTransformOverrides, SceneNestedPrefabOverrideKeyHash> nested_values;
95 [[nodiscard]]
bool Empty()
const noexcept
97 return values.empty() && nested_values.empty();
102 const auto it = values.find(instance_entity.Raw());
103 return it == values.end() ? nullptr : &it->second;
109 const auto it = nested_values.find(key);
110 return it == nested_values.end() ? nullptr : &it->second;
115 return nested_values.try_emplace(MakeSceneNestedPrefabOverrideKey(root_instance, wrapper_path),
SceneTransformOverrides{})
122 std::unordered_map<EntityId::ValueType, SceneMorphWeightOverrides> values;
123 std::unordered_map<SceneNestedPrefabOverrideKey, SceneMorphWeightOverrides, SceneNestedPrefabOverrideKeyHash> nested_values;
125 [[nodiscard]]
bool Empty()
const noexcept
127 return values.empty() && nested_values.empty();
132 const auto it = values.find(instance_entity.Raw());
133 return it == values.end() ? nullptr : &it->second;
139 const auto it = nested_values.find(key);
140 return it == nested_values.end() ? nullptr : &it->second;
145 return nested_values.try_emplace(MakeSceneNestedPrefabOverrideKey(root_instance, wrapper_path),
SceneMorphWeightOverrides{})
152 float load_prefab_assets_milliseconds = 0.0f;
153 float evaluate_prefab_animation_milliseconds = 0.0f;
154 float resolve_prefab_transforms_milliseconds = 0.0f;
155 float build_resolved_instances_milliseconds = 0.0f;
160 std::string skeleton_clip_name;
161 float time_seconds = 0.0f;
167 [[nodiscard]]
static std::vector<ResolvedPrefabInstance>
Definition entity_id.h:11
Definition filesystem.h:19
Definition prefab_resolution.h:165
Definition virtual_path.h:10
Definition prefab_resolution.h:25
Definition prefab_resolution.h:41
Definition animation_evaluation.h:105
Definition prefab_resolution.h:65
Definition prefab_resolution.h:57
Definition prefab_resolution.h:159
Definition prefab_resolution.h:121
Definition prefab_resolution.h:151