Covellite++  Version: 2.3.0 Revision: ??? Platform: x64 Build: 23:13 04.01.2025
Кроссплатформенный фреймворк для разработки приложений на С++
Загрузка...
Поиск...
Не найдено
GameWorld.hpp
1
2#pragma once
3#include <queue>
4#include <alicorn/std/string.forward.hpp>
5#include <alicorn/boost/filesystem.forward.hpp>
6#include <Covellite/Covellite.hpp>
7#include "IGameWorld.hpp"
8#include "GameObject.hpp"
9#include "CubeCoords.hpp"
10
11namespace basement
12{
13
14namespace model
15{
16
17class DbComponents;
18
34class GameWorld final :
35 public IGameWorld
36{
37 using Updater_t = ::covellite::api::Updater_t;
39 using IntPtr_t = int *;
40 using Type_t = size_t;
41
42public:
43 // Интерфейс IGameWorld
44 GameScenePtr_t CreateGameScene(void) override;
45 float GetLandscapeHeight(const CubeCoords &) const override;
46 IGameObject::Landscape::Value GetGameObjectType(const CubeCoords &) const override;
47 const PointLights & GetPointLights(void) const override;
48 SoundDevice & GetSoundDevice(void) override;
49 const IDbComponents & GetDbComponents(void) const override;
50
51private:
52 void PrepareLanscapeScene(const IntPtr_t &);
53 void PrepareAnimationScene(const IntPtr_t &);
54 void PrepareShadowsScene(const IntPtr_t &, const GameObject::Another::Value);
55 void RemoveAllObjects(void);
56 Updater_t GetAutoProcessMoving(void);
57 Updater_t GetManualProcessMoving(void);
58
59private:
60 void LoadObject(const GameObject::IGameObjectPtr_t &, const Any_t & = Any_t{});
61 void LoadObject(const GameObject::IGameObjectPtr_t &, const Updater_t &);
62 void LoadObject(const GameObject::IGameObjectPtr_t &, const CubeCoords &);
63 void PrepareLoader(const IntPtr_t &);
64 void PrepareLoader(void);
65 void PrepareCamera(void);
66 void PreparePlane(void);
67 void PrepareExtensionPlane(const CubeCoords &);
68 void PrepareCompressionPlane(const CubeCoords &);
69 Updater_t GetCellLoader(const CubeCoords &);
70 Updater_t GetCellRemover(const CubeCoords &);
71 float GetHeight(const float, const float) const;
72
73private:
74 Events_t m_Events;
75 DbComponents & m_DbComponents;
76 GameScenePtr_t m_pGameScene;
77 ::std::queue<Updater_t> m_LoadingQueue;
78 Updater_t m_ProcessingMode = [](const float) {};
79 float m_WindowX = 100.0f;
80 float m_WindowY = 100.0f;
81
82private:
83 ::std::shared_ptr<PointLights> m_pPointLights;
84 ::std::shared_ptr<SoundDevice> m_pSoundDevice;
85
86private:
87 class Step final
88 {
89 public:
90 CubeCoords m_ChangePosition;
91 CubeCoords m_Orientation;
92 float m_Pitch = 0.0f;
93 float m_BeginTime = 0.0f;
94 };
95
96 CubeCoords m_Position;
97 CubeCoords m_Orientation{ 0, 1 };
98 float m_Pitch = 0.0f;
99 ::std::queue<Step> m_Steps;
100 ::std::map<size_t, ::std::pair<GameObject::IGameObjectPtr_t, int>> m_LandscapeObjects;
101 ::alicorn::extension::std::fast::unordered_map<uint64_t, int> m_ObjectTypes;
102
103public:
104 GameWorld(const Events_t &, DbComponents &);
105 ~GameWorld(void) noexcept;
106};
107
108} // namespace model
109
110} // namespace basement
Definition Common.hpp:10
Класс входит в проект Covellite.Events Класс для работы с событиями фреймворка.
Definition Events.hpp:36
Класс входит в проект Example Класс манипуляции кубическими координатами.
Definition CubeCoords.hpp:26
Класс входит в проект Example Класс реализации базы данных компонентов.
Definition DbComponents.hpp:28
Класс входит в проект Example Класс реализации логики игрового мира.
Definition GameWorld.hpp:36
Класс входит в проект Example Интерфейсный класс базы данных компонентов.
Definition IDbComponents.hpp:29
Класс входит в проект Example Интерфейсный класс игрового мира.
Definition IGameWorld.hpp:34
Класс входит в проект Example Класс набора точечных источников света сцены.
Definition PointLights.hpp:29