model_comp.hpp 2.56 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;
Florian Oetke's avatar
Florian Oetke committed
23
24
		Model_comp(ecs::Entity_handle owner, ecs::Entity_manager& em, Model_ptr model = {})
		  : Component(owner, em), _model(std::move(model))
25
26
		{
		}
27

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

	  private:
33
		Model_ptr _model;
34
35
	};

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

42
		Model_unloaded_comp() = default;
Florian Oetke's avatar
Florian Oetke committed
43
44
		Model_unloaded_comp(ecs::Entity_handle owner, ecs::Entity_manager& em, asset::AID model_aid = {})
		  : Component(owner, em), _model_aid(std::move(model_aid))
45
46
		{
		}
47

48
		auto model_aid() const -> auto& { return _model_aid; }
49

50
51
	  private:
		asset::AID _model_aid;
52
53
54
	};

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

		Model_loading_comp() = default;
Florian Oetke's avatar
Florian Oetke committed
62
63
		Model_loading_comp(ecs::Entity_handle owner, ecs::Entity_manager& em, Model_ptr model = {})
		  : Component(owner, em), _model(std::move(model))
64
65
		{
		}
66

67
		auto model_aid() const -> auto& { return _model.aid(); }
68
69
70
71
		auto model() const -> auto& { return _model; }
		auto model() -> auto& { return _model; }

	  private:
72
		Model_ptr _model;
73
	};
74
} // namespace mirrage::renderer