Covellite++  Version: 2.3.1 Revision: ??? Platform: x64 Build: 21:47 08.04.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 static size_t GetUniqueIndex(void)
111 {
112 static size_t Index = 0;
113 return Index++;
114 }
115
116 private:
117 Component_t::ComponentPtr_t m_pTexture;
118 float m_RatioXY;
119
120 public:
121 explicit Texture(const Path_t &);
122 explicit Texture(const ::std::vector<Path_t> &);
123 };
124
125protected:
126 static Object_t GetShaderObject(const bool = false);
127 size_t AddTexture(const Path_t &);
128 size_t AddTexture(const ::std::vector<Path_t> &);
129 const Texture & GetTexture(const size_t) const;
130 template<class TMesh, class TData>
131 size_t AddMesh(const TData &) const;
132 template<class TMesh, class TData>
133 size_t AddMesh(const TData &, const float, const Rect &) const;
134 Mesh & GetMesh(const size_t) const;
135
136private:
137 const size_t m_Type;
138 mutable ::std::vector<::std::unique_ptr<Texture>> m_Textures;
139 mutable ::std::vector<::std::unique_ptr<Mesh>> m_Meshes;
140
141protected:
142 explicit GameObject(const size_t);
143};
144
145template<class TMesh, class TData>
146inline size_t GameObject::AddMesh(const TData & _Data) const
147{
148 m_Meshes.push_back(::std::make_unique<TMesh>(_Data));
149 return m_Meshes.size() - 1;
150}
151
152template<class TMesh, class TData>
153inline size_t GameObject::AddMesh(
154 const TData & _Data,
155 const float _TextureRatioXY,
156 const Rect & _TextureCoord) const
157{
158 m_Meshes.push_back(
159 ::std::make_unique<TMesh>(_Data, _TextureRatioXY, _TextureCoord));
160 return m_Meshes.size() - 1;
161}
162
163} // namespace model
164
165} // 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