Covellite++  Version: 2.3.0 Revision: ??? Platform: x64 Build: 23:13 04.01.2025
Кроссплатформенный фреймворк для разработки приложений на С++
Загрузка...
Поиск...
Не найдено
GameScene.hpp
1
2#pragma once
3#include <vector>
4#include <alicorn/std.fast/unordered-map.hpp>
5#include "Defines.hpp"
6#include "CubeCoords.hpp"
7#include "Constants.hpp"
8
9namespace basement
10{
11
12namespace support
13{
14
34class GameScene final
35{
36 using SceneObjects_t =
37 ::alicorn::extension::std::fast::unordered_map<uint64_t, ::std::vector<Id_t>>;
38 using CellObject_t = SceneObjects_t::value_type;
39 using Callback_t = ::std::function<void(const Id_t)>;
40 using RenderObject_t = ::std::pair<float, Id_t>;
41
42public:
43 class Camera final
44 {
45 public:
46 bool IsVisible(const model::CubeCoords &) const;
47 float GetSquaredDistance(const model::CubeCoords &) const;
48
49 private:
50 float m_X;
51 float m_Y;
52 float m_CameraOffsetX;
53 float m_CameraOffsetY;
54 float m_Direction;
55
56 public:
57 explicit Camera(const float = 0.0f, const float = 0.0f, const float = 0.0f);
58 };
59
60private:
62 class Scene
63 {
64 public:
65 SceneObjects_t Objects;
66 };
67
68public:
69 void SetCameraInfo(const Camera &);
70 void Render(const Callback_t &);
71 void ProcessAll(const Callback_t &);
72
73public:
74 void Add(const size_t, const ::std::vector<Id_t> &);
75 void Add(const size_t, const ::std::vector<Id_t> &, const model::CubeCoords &);
76 ::std::vector<Id_t> Remove(const model::CubeCoords &);
77 void CompleteReplace(void);
78 void CompleteUpdate(void);
79
80private:
81 void BuildRenderObjects(void);
82 void Add(const size_t, const ::std::vector<Id_t> &, const uint64_t);
83
84private:
85 ::std::vector<Scene> m_Scenes;
86 ::std::vector<Scene> m_BkScenes;
87 Camera m_Camera;
88 ::std::vector<RenderObject_t> m_PrepareRenderObjects;
89 ::std::vector<RenderObject_t> m_CompleteRenderObjects;
90 bool m_IsUpdateRenderObjects = false;
91};
92
93// cppcheck-suppress passedByValue
94inline void GameScene::Add(
95 const size_t _SceneId,
96 const ::std::vector<Id_t> & _ObjectIds)
97{
98 Add(_SceneId, _ObjectIds, static_cast<uint64_t>(0));
99}
100
101inline void GameScene::Add(
102 const size_t _SceneId,
103 const ::std::vector<Id_t> & _ObjectIds,
104 const model::CubeCoords & _Position)
105{
106 Add(_SceneId, _ObjectIds, _Position.GetHash());
107}
108
109inline void GameScene::Add(
110 const size_t _SceneId,
111 const ::std::vector<Id_t> & _ObjectIds,
112 const uint64_t _CoordHash)
113{
114 if (_SceneId >= m_BkScenes.size()) m_BkScenes.resize(_SceneId + 1);
115 m_BkScenes[_SceneId].Objects[_CoordHash] = _ObjectIds;
116}
117
118} // namespace support
119
120} // namespace basement
Definition Common.hpp:10
Класс входит в проект Example Класс манипуляции кубическими координатами.
Definition CubeCoords.hpp:26
Класс входит в проект Example Класс реализации игровой сцены.
Definition GameScene.hpp:35
Класс информации об одной сцене.
Definition GameScene.hpp:63