-
Notifications
You must be signed in to change notification settings - Fork 0
/
GamePlay.cpp
107 lines (86 loc) · 2.46 KB
/
GamePlay.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
#include "GamePlay.h"
#include "Background.h"
#include "SpaceShip.h"
#include "UniverseManager.h"
#include "ObjectManager.h"
#include "Display.h"
#include "EffectsManager.h"
#include <Box2D/Box2D.h>
#include <assert.h>
#include <math.h>
GamePlay::GamePlay() {
debug_scale_ = 1.0;
quit_ = false;
}
GamePlay::~GamePlay() {
delete background_;
}
void GamePlay::Exit() {
quit_ = true;
}
void GamePlay::Init() {
background_ = new Background();
background_->Init();
ship_ = std::static_pointer_cast<SpaceShip>(OBJMGR.Get("ship"));
assert(ship_ != 0 && "ship not defined!");
universe_mgr_ = std::static_pointer_cast<UniverseManager>(OBJMGR.Get("universe_manager"));
assert(universe_mgr_ != 0 && "universe not defined!");
}
void GamePlay::RefreshPlayerParams() {
ship_speed_ = ship_->GetSpeed();
ship_angle_ = ship_->GetAngle();
b2Vec2 p = ship_->GetPosition();
ship_x_ = p.x;
ship_y_ = p.y;
speed_scale_ = 1.0 + (1.0 / (1.0 + exp(-ship_speed_+5.0)));
}
void GamePlay::Render() {
if (quit_) return;
RefreshPlayerParams();
// TODO : (#151) Move ship near to lower side of screen at high velocities
DISPLAY.WorldMode(debug_scale_ * speed_scale_);
glPushMatrix();
glRotated(ship_angle_, 0.0, 0.0, -1.0);
glTranslated(-ship_x_, -ship_y_, 0.0);
if (debug_scale_ < 2.0) {
background_->Render(ship_x_, ship_y_, ship_angle_);
}
universe_mgr_->Render();
glPopMatrix();
// TODO : fix this.
DISPLAY.WorldMode(debug_scale_ * speed_scale_);
ship_->Render();
}
GameDefinitions::GameStateEnum GamePlay::KeyInput(int key, bool action) {
GameDefinitions::GameStateEnum state = GameDefinitions::gameState_InGame;
switch (key) {
case GLFW_KEY_Q:
case GLFW_KEY_ESCAPE:
state = GameDefinitions::gameState_InMenu;
break;
case GLFW_KEY_V:
if (action) {
if (debug_scale_ < 2000.0) {
debug_scale_ *= 2.0;
}
else {
debug_scale_ = 1.0;
}
}
break;
case GLFW_KEY_M:
if (action) {
universe_mgr_->ToggleMap();
}
break;
case GLFW_KEY_P:
if (action) {
universe_mgr_->TogglePause();
}
break;
default:
ship_->HotasInput(key, action);
break;
}
return state;
}