-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGameStages.cpp
More file actions
158 lines (131 loc) · 4.39 KB
/
GameStages.cpp
File metadata and controls
158 lines (131 loc) · 4.39 KB
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#include "GameStages.hpp"
// GameStage
void GameStage::start() {
// Set transition
set_transition(graphics_objects->transition_ptrs[GRAPHICS_OBJECTS::TRANSITIONS::FADE_TRANSITION].get());
// Start transition
transition->open();
// Create animation
Framework::Animation demo_animation = {
{0, 0.5f, Framework::SpriteTransform::NONE},
{0, 0.5f, Framework::SpriteTransform::ROTATE_90_CW},
{0, 0.5f, Framework::SpriteTransform::ROTATE_180_CW},
{0, 0.5f, Framework::SpriteTransform::ROTATE_270_CW}
};
// Create animation handler
spinning_sword = std::make_unique<Framework::AnimationHandler>(graphics_objects->spritesheets[GRAPHICS_OBJECTS::SPRITESHEETS::MAIN_SPRITESHEET], demo_animation);
// Create big animation
Framework::MultiTileAnimation big_multi_animation = {
{
{0, 0},
{
{4, 1.0f, Framework::SpriteTransform::NONE},
{8, 0.4f, Framework::SpriteTransform::NONE},
{12, 0.2f, Framework::SpriteTransform::NONE},
{8, 0.4f, Framework::SpriteTransform::NONE},
}
},
{
{16, 0},
{
{5, 1.0f, Framework::SpriteTransform::NONE},
{9, 0.4f, Framework::SpriteTransform::NONE},
{13, 0.2f, Framework::SpriteTransform::NONE},
{9, 0.4f, Framework::SpriteTransform::NONE},
}
},
{
{32, 0},
{
{6, 1.0f, Framework::SpriteTransform::NONE},
{10, 0.4f, Framework::SpriteTransform::NONE},
{14, 0.2f, Framework::SpriteTransform::NONE},
{10, 0.4f, Framework::SpriteTransform::NONE},
}
},
{
{48, 0},
{
{7, 1.0f, Framework::SpriteTransform::NONE},
{11, 0.4f, Framework::SpriteTransform::NONE},
{15, 0.2f, Framework::SpriteTransform::NONE},
{11, 0.4f, Framework::SpriteTransform::NONE},
}
},
};
// Create animation handler
big_animation = std::make_unique<Framework::MultiTileAnimationHandler>(graphics_objects->spritesheets[GRAPHICS_OBJECTS::SPRITESHEETS::MAIN_SPRITESHEET], big_multi_animation);
}
bool GameStage::update(float dt) {
transition->update(dt);
spinning_sword->update(dt);
big_animation->update(dt);
if (input->just_down(Framework::KeyHandler::Key::ESCAPE) || input->just_down(Framework::KeyHandler::Key::P)) {
finish(new PausedStage(this), false);
}
return true;
}
void GameStage::render() {
graphics_objects->graphics.fill(COLOURS::BLUE);
graphics_objects->spritesheets[GRAPHICS_OBJECTS::SPRITESHEETS::MAIN_SPRITESHEET].sprite(0, Framework::Vec(128, 64));
spinning_sword->render({ 64, 64 });
big_animation->render({ 64, 96 });
transition->render();
}
// PausedStage
PausedStage::PausedStage(BaseStage* background_stage) : BaseStage() {
// Save the background stage so we can still render it, and then go back to it when done
_background_stage = background_stage;
}
void PausedStage::start() {
// Create buttons
buttons.clear();
buttons.emplace_back(
Framework::Rect(WINDOW::SIZE_HALF - Framework::Vec(128, 32), Framework::Vec(256, 64)),
graphics_objects->button_image_groups[GRAPHICS_OBJECTS::BUTTON_IMAGE_GROUPS::STANDARD],
Framework::Text(&graphics_objects->fonts[GRAPHICS_OBJECTS::FONTS::MAIN_FONT], "Resume", COLOURS::BLACK, 4.0f),
BUTTONS::PAUSED::RESUME
);
buttons.emplace_back(
Framework::Rect(WINDOW::SIZE_HALF - Framework::Vec(128, -64), Framework::Vec(256, 64)),
graphics_objects->button_image_groups[GRAPHICS_OBJECTS::BUTTON_IMAGE_GROUPS::STANDARD],
Framework::Text(&graphics_objects->fonts[GRAPHICS_OBJECTS::FONTS::MAIN_FONT], "Exit", COLOURS::BLACK, 4.0f),
BUTTONS::PAUSED::EXIT
);
// Set transition
set_transition(graphics_objects->transition_ptrs[GRAPHICS_OBJECTS::TRANSITIONS::FADE_TRANSITION].get());
}
bool PausedStage::update(float dt) {
transition->update(dt);
if (input->just_down(Framework::KeyHandler::Key::ESCAPE) || input->just_down(Framework::KeyHandler::Key::P)) {
transition->close();
}
// Update buttons
for (Framework::Button& button : buttons) {
button.update(input);
if (button.pressed() && transition->is_open()) {
button_selected = button.get_id();
transition->close();
}
}
if (transition->is_closed()) {
if (button_selected == BUTTONS::PAUSED::EXIT) {
finish(new TitleStage());
}
else {
// Return to game (exit pause)
finish(_background_stage);
}
}
return true;
}
void PausedStage::render() {
// Render background stage
_background_stage->render();
// Render pause menu
graphics_objects->graphics.fill(COLOURS::BLACK, 0x7f);
for (const Framework::Button& button : buttons) {
button.render();
}
transition->render();
}