Covellite++  Version: 2.3.0 Revision: ??? Platform: x64 Build: 23:13 04.01.2025
Кроссплатформенный фреймворк для разработки приложений на С++
Загрузка...
Поиск...
Не найдено
GameObject.hpp
1
2#pragma once
3#include <glm/glm.force.hpp>
4#include <alicorn/boost/filesystem.forward.hpp>
5#include <Covellite/Api/Vertex.hpp>
6#include "IGameObject.hpp"
7
8namespace basement
9{
10
11namespace model
12{
13
14class CubeCoords;
15class IGameWorld;
16
33 public IGameObject
34{
35public:
36 using String_t = ::alicorn::extension::std::String;
37 using Index_t = int;
38 using IGameObjectPtr_t = ::std::shared_ptr<IGameObject>;
39 using Material_t = ::std::map<String_t, ::std::vector<Index_t>>;
40
41protected:
42 using Path_t = ::boost::filesystem::path;
44
45public:
46 // Интерфейс IGameObject:
47 size_t GetType(void) const final;
48
49public:
54 static IGameObjectPtr_t Create(const Support::Value);
55 static IGameObjectPtr_t Create(const Extra::Value);
56 static IGameObjectPtr_t Create(const Landscape::Value, const IGameWorld *);
57 static IGameObjectPtr_t Create(const Another::Value, const GameScenePtr_t &);
58
59public:
60 class Mesh
61 {
62 public:
63 class Vertex final
64 {
65 public:
66 using Hash_t = uint64_t;
67
68 public:
69 Hash_t Hash = static_cast<Hash_t>(-1);
70 Vertex_t m_Vertex = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
71 };
72
73 class Triangle_t final
74 {
75 public:
76 Vertex Vertexes[3];
77 String_t MaterialName = uT("Unknown");
78 };
79
80 public:
81 virtual Object_t GetObject(const Any_t & = Any_t{}) const;
82
83 protected:
84 using cbVertex_t = ::std::function<void(const Vertex &, const ::std::size_t)>;
85 void Add(const Triangle_t &, const cbVertex_t & = nullptr);
86 ::std::size_t GetAllVertexCount(void) const { return m_Vertexes.size(); }
87 void BuildBasementObject(const float);
88 static Point GetPoint(const float, const float = 0.5f);
89
90 private:
91 ::std::map<Vertex::Hash_t, Index_t> m_iVertexes;
92
93 protected:
94 const String_t m_MeshId;
95 ::std::vector<Vertex_t> m_Vertexes;
96 mutable Material_t m_MaterialIndices;
97
98 public:
99 explicit Mesh(const ::std::vector<Triangle_t> & = {});
100 virtual ~Mesh(void) = default;
101 };
102
103 class Texture final
104 {
105 public:
106 Object_t GetObject(void) const { return { m_pTexture }; }
107 float GetRatioXY(void) const { return m_RatioXY; }
108
109 private:
110 Component_t::ComponentPtr_t m_pTexture;
111 float m_RatioXY;
112
113 public:
114 explicit Texture(const Path_t &);
115 };
116
117protected:
118 static Object_t GetShaderObject(const bool = false);
119 size_t AddTexture(const Path_t &);
120 const Texture & GetTexture(const size_t) const;
121 template<class TMesh, class TData>
122 size_t AddMesh(const TData &) const;
123 template<class TMesh, class TData>
124 size_t AddMesh(const TData &, const float, const Rect &) const;
125 Mesh & GetMesh(const size_t) const;
126
127private:
128 const size_t m_Type;
129 mutable ::std::vector<::std::unique_ptr<Texture>> m_Textures;
130 mutable ::std::vector<::std::unique_ptr<Mesh>> m_Meshes;
131
132protected:
133 explicit GameObject(const size_t);
134};
135
136template<class TMesh, class TData>
137inline size_t GameObject::AddMesh(const TData & _Data) const
138{
139 m_Meshes.push_back(::std::make_unique<TMesh>(_Data));
140 return m_Meshes.size() - 1;
141}
142
143template<class TMesh, class TData>
144inline size_t GameObject::AddMesh(
145 const TData & _Data,
146 const float _TextureRatioXY,
147 const Rect & _TextureCoord) const
148{
149 m_Meshes.push_back(
150 ::std::make_unique<TMesh>(_Data, _TextureRatioXY, _TextureCoord));
151 return m_Meshes.size() - 1;
152}
153
154} // namespace model
155
156} // namespace basement
Definition Common.hpp:10
Класс входит в проект Covellite.Api Класс формата вертексного буфера.
Definition Vertex.hpp:34
Класс входит в проект Example Общий базовый класс игрового объекта.
Definition GameObject.hpp:34
size_t GetType(void) const final
Функция получения типа игрового объекта.
Definition GameObject.cpp:29
static IGameObjectPtr_t Create(const Support::Value)
Функции создания объекта игрового объекта указанного типа.
Definition GameObject.cpp:34
Класс входит в проект Example Интерфейсный класс игрового объекта.
Definition IGameObject.hpp:27
Класс входит в проект Example Интерфейсный класс игрового мира.
Definition IGameWorld.hpp:34