forked from jjiangweilan/WeilanEngine-GL
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEngineManager.cpp
98 lines (81 loc) · 2.46 KB
/
EngineManager.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include "EngineManager.hpp"
#include "System/RenderSystem.hpp"
#include "System/ScriptSystem.hpp"
#include "System/PhysicsSystem.hpp"
#include "System/AnimationSystem.hpp"
#include "System/InputSystem.hpp"
#include "System/StateMachineSystem.hpp"
#include "Graphics/Shader.hpp"
#include "Settings.hpp"
#include "Manager/ResourceManager.hpp"
namespace wlEngine {
EngineManager* EngineManager::engine = nullptr;
EngineManager::EngineManager(){
quit = false;
SDLinit();
initializeSystems();
initializeManagers();
postInitialization();
};
void EngineManager::SDLinit() {
if (SDL_Init( SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER ) < 0) {
std::cerr << "SDL could not initialize! SDL Error: " << SDL_GetError() << std::endl;
exit(-1);
}
}
EngineManager::~EngineManager(){};
void EngineManager::postInitialization() {
}
EngineManager* EngineManager::getwlEngine() {
if (engine) return engine;
engine = new EngineManager();
return engine;
}
void EngineManager::setScene(Scene* scene) {
currentScene = scene;
}
void EngineManager::loop() {
#if SETTINGS_ENGINEMODE
while (!quit) {
if (Settings::engineMode == Settings::EngineMode::Gameplay) {
systemUpdate();
currentScene->update();
Time::update();
}
else {
AnimationSystem::get()->update();
if(currentScene->camera)
RenderSystem::get()->update();
InputSystem::get()->update();
currentScene->update();
Time::update();
}
}
#else
while(!quit) {
systemUpdate();
currentScene->update();
Time::update();
}
#endif
}
void EngineManager::systemUpdate(){
InputSystem::get()->update();
StateMachineSystem::get()->update();
PhysicsSystem::get()->update();
ScriptSystem::get()->update();
AnimationSystem::get()->update();
RenderSystem::get()->update();
}
void EngineManager::initializeSystems() {
RenderSystem::init();
AnimationSystem::init();
ScriptSystem::init();
PhysicsSystem::init();
InputSystem::init();
StateMachineSystem::init();
}
void EngineManager::initializeManagers() {
ResourceManager::init();
}
}