model_comp.hpp 2.58 KB
Newer Older
1
2
3
4
5
6
7
#pragma once

#include "model.hpp"

#include <mirrage/ecs/component.hpp>


8
namespace mirrage::renderer {
9

10
11
12
13
14
	// model components are intially loaded as Model_unloaded_comp, replaced by Model_loading_comp
	//   once the loading of the model data has begun and finally replaced by Model_comp afterwards.
	// Client code should only care about the Model_comp class as it represents an actually usable model.


15
	class Model_comp : public ecs::Component<Model_comp> {
16
17
18
	  public:
		static constexpr const char* name() { return "Model_loaded"; }
		static constexpr const char* name_save_as() { return "Model"; }
19
20
		friend void                  load_component(ecs::Deserializer& state, Model_comp&);
		friend void                  save_component(ecs::Serializer& state, const Model_comp&);
21
22

		Model_comp() = default;
23
24
		Model_comp(ecs::Entity_manager& manager, ecs::Entity_handle owner, Model_ptr model = {})
		  : Component(manager, owner), _model(std::move(model)) {}
25

26
		auto model_aid() const -> auto& { return _model.aid(); }
27
28
29
30
		auto model() const -> auto& { return _model; }
		void model(Model_ptr model) { _model = std::move(model); }

	  private:
31
		Model_ptr _model;
32
33
	};

34
	class Model_unloaded_comp : public ecs::Component<Model_unloaded_comp> {
35
36
	  public:
		static constexpr const char* name() { return "Model"; }
37
38
		friend void                  load_component(ecs::Deserializer& state, Model_unloaded_comp&);
		friend void                  save_component(ecs::Serializer& state, const Model_unloaded_comp&);
39

40
41
42
		Model_unloaded_comp() = default;
		Model_unloaded_comp(ecs::Entity_manager& manager, ecs::Entity_handle owner, asset::AID model_aid = {})
		  : Component(manager, owner), _model_aid(std::move(model_aid)) {}
43

44
		auto model_aid() const -> auto& { return _model_aid; }
45

46
47
	  private:
		asset::AID _model_aid;
48
49
50
	};

	class Model_loading_comp : public ecs::Component<Model_loading_comp> {
51
52
53
	  public:
		static constexpr const char* name() { return "Model_loading"; }
		static constexpr const char* name_save_as() { return "Model"; }
54
55
		friend void                  load_component(ecs::Deserializer& state, Model_loading_comp&);
		friend void                  save_component(ecs::Serializer& state, const Model_loading_comp&);
56
57

		Model_loading_comp() = default;
58
59
		Model_loading_comp(ecs::Entity_manager& manager, ecs::Entity_handle owner, Model_ptr model = {})
		  : Component(manager, owner), _model(std::move(model)) {}
60

61
		auto model_aid() const -> auto& { return _model.aid(); }
62
63
64
65
		auto model() const -> auto& { return _model; }
		auto model() -> auto& { return _model; }

	  private:
66
		Model_ptr _model;
67
	};
68
} // namespace mirrage::renderer