-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathApplication.cpp
112 lines (93 loc) · 3.25 KB
/
Application.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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include "Application.h"
#include "ModuleWindow.h"
#include "ModuleAudio.h"
#include "ModuleInput.h"
#include "ModuleTextureManager.h"
#include "ModuleLevel1.h"
#include "ModuleLevel2.h"
#include "ModulePlayer.h"
#include "ModuleParticles.h"
#include "ModuleInitialScreen.h"
#include "ModuleWinScreen.h"
#include "ModuleStartScreen.h"
#include "ModuleLoseScreen.h"
#include "ModuleHUD.h"
#include "ModuleCollisions.h"
#include "ModuleFadeToBlack.h"
#include "ModuleRenderer.h"
#include "ModuleEnemies.h"
#include "ModuleFonts.h"
#include "ModuleStore.h"
#include "ModuleDebugInfo.h"
#include "ModuleWeapons.h"
#include "ModuleSelector.h"
Application::Application() {
int i = 0;
modules[i++] = window = new ModuleWindow(true);
modules[i++] = input = new ModuleInput(true);
modules[i++] = textures = new ModuleTextureManager(true);
modules[i++] = audio = new ModuleAudio(true);
modules[i++] = initialScreen = new ModuleInitialScreen(true);
modules[i++] = startScreen = new ModuleStartScreen(false);
modules[i++] = selector = new ModuleSelector(false);
modules[i++] = store = new ModuleStore(false);
modules[i++] = lvl1 = new ModuleLevel1(false);
modules[i++] = lvl2 = new ModuleLevel2(false);
modules[i++] = winScreen = new ModuleWinScreen(false);
modules[i++] = loseScreen = new ModuleLoseScreen(false);
modules[i++] = enemies = new ModuleEnemies(false);
modules[i++] = player = new ModulePlayer(false);
modules[i++] = particles = new ModuleParticles(false);
modules[i++] = collisions = new ModuleCollisions(false);
modules[i++] = weapons = new ModuleWeapons(false);
modules[i++] = HUD = new ModuleHUD(false);
modules[i++] = debugInfo = new ModuleDebugInfo(true);
modules[i++] = transition = new ModuleFadeToBlack(true);
modules[i++] = fonts = new ModuleFonts(true);
modules[i++] = render = new ModuleRenderer(true);
}
Application::~Application() {
for (int i = 0; i < NUM_MODULES; ++i)
{
//Important: when deleting a pointer, set it to nullptr afterwards
//It allows us for null check in other parts of the code
delete modules[i];
modules[i] = nullptr;
}
}
// INIT all modules
bool Application::Init() {
bool ret = true;
for (int i = 0; i < NUM_MODULES && ret == true; ++i) {
ret = modules[i]->Init();
}
for (int i = 0; i < NUM_MODULES && ret == true; ++i) {
ret = modules[i]->IsEnabled() ? modules[i]->Start() : true;;
}
return ret;
}
update_status Application::Update() {
frameStart = SDL_GetTicks();
update_status ret = update_status::UPDATE_CONTINUE;
for (int i = 0; i < NUM_MODULES && ret == update_status::UPDATE_CONTINUE; ++i) {
ret = modules[i]->IsEnabled() ? modules[i]->PreUpdate() : UPDATE_CONTINUE;
}
for (int i = 0; i < NUM_MODULES && ret == update_status::UPDATE_CONTINUE; ++i) {
ret = modules[i]->IsEnabled() ? modules[i]->Update() : UPDATE_CONTINUE;
}
for (int i = 0; i < NUM_MODULES && ret == update_status::UPDATE_CONTINUE; ++i) {
ret = modules[i]->IsEnabled() ? modules[i]->PostUpdate() : UPDATE_CONTINUE;
}
frameTime = SDL_GetTicks() - frameStart;
if (frameDelay > frameTime) {
SDL_Delay(frameDelay - frameTime);
}
return ret;
}
bool Application::CleanUp() {
bool ret = true;
for (int i = NUM_MODULES - 1; i >= 0 && ret == true; --i) {
ret = modules[i]->IsEnabled() ? modules[i]->CleanUp() : true;
}
return ret;
}