PixelBullet  0.0.1
A C++ game engine
Loading...
Searching...
No Matches
prefab_resolution.h
1#pragma once
2
3#include "pixelbullet/filesystem/virtual_path.h"
4#include "pixelbullet/scene/prefab_asset.h"
5#include "pixelbullet/scene/transform_resolution.h"
6
7#include <glm/glm.hpp>
8
9#include <memory>
10#include <optional>
11#include <unordered_map>
12#include <vector>
13
14namespace pixelbullet
15{
16class Filesystem;
17class Scene;
18
20{
21 EntityId instance_entity = EntityId::Invalid();
22 VirtualPath prefab_path;
23 std::shared_ptr<const PrefabAsset> prefab;
24 SceneResolvedTransforms resolved_transforms;
25 SceneMorphWeightOverrides resolved_morph_weights;
26 glm::mat4 wrapper_world_matrix = glm::mat4(1.0f);
27};
28
30{
31 std::unordered_map<EntityId::ValueType, SceneTransformOverrides> values;
32
33 [[nodiscard]] bool Empty() const noexcept
34 {
35 return values.empty();
36 }
37
38 [[nodiscard]] const SceneTransformOverrides* Find(EntityId instance_entity) const noexcept
39 {
40 const auto it = values.find(instance_entity.Raw());
41 return it == values.end() ? nullptr : &it->second;
42 }
43};
44
46{
47 std::unordered_map<EntityId::ValueType, SceneMorphWeightOverrides> values;
48
49 [[nodiscard]] bool Empty() const noexcept
50 {
51 return values.empty();
52 }
53
54 [[nodiscard]] const SceneMorphWeightOverrides* Find(EntityId instance_entity) const noexcept
55 {
56 const auto it = values.find(instance_entity.Raw());
57 return it == values.end() ? nullptr : &it->second;
58 }
59};
60
62{
63 float load_prefab_assets_milliseconds = 0.0f;
64 float evaluate_prefab_animation_milliseconds = 0.0f;
65 float resolve_prefab_transforms_milliseconds = 0.0f;
66 float build_resolved_instances_milliseconds = 0.0f;
67};
68
70{
71public:
72 [[nodiscard]] static std::vector<ResolvedPrefabInstance>
73 ResolveInstances(const Scene& scene, const Filesystem& filesystem, const SceneTransformOverrides* scene_transform_overrides = nullptr,
74 const ScenePrefabTransformOverrides* prefab_transform_overrides = nullptr,
75 const ScenePrefabMorphWeightOverrides* prefab_morph_weight_overrides = nullptr,
76 std::optional<float> prefab_time_seconds = std::nullopt,
77 ScenePrefabResolutionTimings* timings = nullptr);
78};
79} // namespace pixelbullet
Definition entity_id.h:11
Definition filesystem.h:16
Definition prefab_resolution.h:70
Definition scene.h:23
Definition virtual_path.h:10
Definition prefab_resolution.h:20
Definition animation_evaluation.h:46
Definition prefab_resolution.h:46
Definition prefab_resolution.h:62
Definition prefab_resolution.h:30
Definition transform_resolution.h:17
Definition animation_evaluation.h:16