Covellite++  Version: 2.3.0 Revision: 2580 Platform: x64 Build: 15:23 16.10.2020
Кроссплатформенный фреймворк для разработки приложений на С++
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 
9 namespace basement
10 {
11 
12 namespace support
13 {
14 
34 class 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 
42 public:
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 
60 private:
62  class Scene
63  {
64  public:
65  SceneObjects_t Objects;
66  };
67 
68 public:
69  void SetCameraInfo(const Camera &);
70  void Render(const Callback_t &);
71  void ProcessAll(const Callback_t &);
72 
73 public:
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 
80 private:
81  void BuildRenderObjects(void);
82  void Add(const size_t, const ::std::vector<Id_t> &, const uint64_t);
83 
84 private:
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
94 inline 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 
101 inline 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 
109 inline 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
covellite::app::Settings_t
::alicorn::extension::std::Singleton< const Section_t & > Settings_t
Класс входит в проект Covellite.App Класс доступа к настройкам фреймворка.
Definition: Settings.hpp:37
covellite::api::Component::Make
static ComponentPtr_t Make(const SourceParams_t &)
Функция создания объектов компонентов.
Definition: Component.inl:29
basement::support::GameScene::Scene
Класс информации об одной сцене.
Definition: GameScene.hpp:63
basement::support::GameScene
Класс входит в проект Example Класс реализации игровой сцены.
Definition: GameScene.hpp:35
basement
Definition: Common.hpp:10
basement::model::CubeCoords
Класс входит в проект Example Класс манипуляции кубическими координатами.
Definition: CubeCoords.hpp:26