Monad Engine da02fba2
> Undercity Codex_
Loading...
Searching...
No Matches
Scene.h
Go to the documentation of this file.
1#pragma once
2#include "scene/GameObject.h"
3#include "Common.h"
4
5#include <vector>
6#include <string>
7#include <memory>
8
9namespace eng
10{
11 class Scene
12 {
13 public:
14 static void RegisterTypes();
15 void Update(float deltaTime);
16 void Clear();
17
18 GameObject* CreateObject(const std::string& name, GameObject* parent = nullptr);
19 GameObject* CreateObject(const std::string& type, const std::string& name, GameObject* parent = nullptr);
20
21 template<typename T, typename = typename std::enable_if_t<std::is_base_of_v<GameObject, T>>>
22 T* CreateObject(const std::string& name, GameObject* parent = nullptr)
23 {
24 auto obj = new T();
25 obj->SetName(name);
26 obj->m_scene = this;
27 if (m_isUpdating)
28 {
29 m_objectsToAdd.push_back({ obj, parent });
30 }
31 else
32 {
33 SetParent(obj, parent);
34 }
35 return obj;
36 }
37
38 bool SetParent(GameObject* obj, GameObject* parent);
39
40 void SetMainCamera(GameObject* camera);
42
43 std::vector<LightData> CollectLights();
44
45 static std::shared_ptr<Scene> Load(const std::string& path);
46
47 private:
48 void CollectLightsRecursive(GameObject* obj, std::vector<LightData>& out);
49 void LoadObject(const nlohmann::json& jsonObject, GameObject* parent);
50
51 private:
52 std::vector<std::unique_ptr<GameObject>> m_objects;
53 std::vector<std::pair<GameObject*, GameObject*>> m_objectsToAdd;
54 GameObject* m_mainCamera = nullptr;
55 bool m_isUpdating = false;
56 };
57}
std::vector< LightData > CollectLights()
Definition Scene.cpp:241
void Clear()
Definition Scene.cpp:60
T * CreateObject(const std::string &name, GameObject *parent=nullptr)
Definition Scene.h:22
void SetMainCamera(GameObject *camera)
Definition Scene.cpp:231
static std::shared_ptr< Scene > Load(const std::string &path)
Definition Scene.cpp:251
void Update(float deltaTime)
Definition Scene.cpp:30
GameObject * CreateObject(const std::string &name, GameObject *parent=nullptr)
Definition Scene.cpp:65
bool SetParent(GameObject *obj, GameObject *parent)
Definition Scene.cpp:100
GameObject * GetMainCamera()
Definition Scene.cpp:236
static void RegisterTypes()
Definition Scene.cpp:17