-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathGame.cpp
131 lines (107 loc) · 2.64 KB
/
Game.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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include "Game.h"
#include "TextureManager.h"
#include "Player.h"
#include "Enemy.h"
#include "InputHandler.h"
#include "MainMenuState.h"
#include "PlayState.h"
#include "MenuButton.h"
//definition for static instance
Game* Game::s_pInstance = 0;
bool Game::init(const char *title, int xpos, int ypos, int width, int height, bool fullscreen)
{
int flags = 0;
if (fullscreen)
{
flags = SDL_WINDOW_FULLSCREEN;
}
//attempt to initialize SDL
if (SDL_Init(SDL_INIT_EVERYTHING) == 0)
{
std::cout << "SDL init success\n";
//init the window
m_pWindow = SDL_CreateWindow(title, xpos, ypos, width, height, flags);
if (m_pWindow != 0) //window init success
{
std::cout << "Window creation success\n";
m_pRenderer = SDL_CreateRenderer(m_pWindow, -1, 0);
if (m_pRenderer != 0) //renderer init success
{
std::cout << "renderer init success\n";
SDL_SetRenderDrawColor(m_pRenderer, 255, 0, 0, 255);
}
else
{
std::cout << "renderer init failed\n";
return false; //renderer init fail
}
}
else
{
std::cout << "window init fail\n";
return false; //window init fail
}
}
else
{
std::cout << "SDL init fail\n";
return false; //SDL init fail
}
//initialise joysticks
TheInputHandler::Instance()->initialiseJoysticks();
std::cout << "init success\n";
//load TextureManager
if (!TheTextureManager::Instance()->load("assets/animate-alpha.png", "animate", m_pRenderer))
{
return false;
}
//creating and pushing objects
m_gameObjects.push_back(new Player());
m_gameObjects.push_back(new Enemy());
m_bRunning = true; //everything inited successfully, start the main loop
//load MENU state
TheGameObjectFactory::instance()->registerType("MenuButton", new MenuButtonCreator());
return true;
}
bool Game::running()
{
return m_bRunning;
}
GameStateMachine* Game::getStateMachine()
{
return m_pGameStateMachine;
}
void Game::handleEvents()
{
//waits and listens for a quit event
TheInputHandler::Instance()->update();
if (TheInputHandler::Instance()->isKeyDown(SDL_SCANCODE_RETURN))
{
m_pGameStateMachine->changeState(new PlayState());
}
}
void Game::update()
{
//use GameStateMachine's update function
m_pGameStateMachine->update();
}
void Game::render()
{
SDL_RenderClear(m_pRenderer); //clear the renderer to the draw color
//use GameStateMachine's render function
m_pGameStateMachine->render();
SDL_RenderPresent(m_pRenderer); //draw to the screen
}
void Game::clean()
{
std::cout << "cleaning game\n";
//close the joysticks
TheInputHandler::Instance()->clean();
SDL_DestroyWindow(m_pWindow);
SDL_DestroyRenderer(m_pRenderer);
SDL_Quit();
}
void Game::quit()
{
m_bRunning = false;
}