-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
130 lines (114 loc) · 3.43 KB
/
main.cpp
File metadata and controls
130 lines (114 loc) · 3.43 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
/* This file is part of Astral Warrior.
*
* Astral Warrior is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* Astral Warrior is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with Astral Warrior. If not, see <http://www.gnu.org/licenses/>.
*/
using namespace std;
#include <iostream>
#include <stdio.h>
#include <vector>
#include <string>
#include <string.h>
#include <GL/glut.h>
#include <cstdlib>
#include "Game.h"
#include "keys.h"
#include "glpng.h" //Library for loading PNG files
Game game;
void myTimer(int v)
{
glutPostRedisplay();
glutTimerFunc(1000/v, myTimer, v);
}
/* Keyboard callback, called from the keys.cpp file.
* Combines both normal and special keyboard functions.
*/
void keyboard (int key, bool keydown)
{
game.handleKeys(key);
}
void reshapeFunc(int w, int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(h<1) h=1;
gluPerspective(90.0, (double)w/(double)h, 1.0, 500.0);
glMatrixMode(GL_MODELVIEW);
}
void displayFunc(){
/* Also from the textbook */
float curr_update = glutGet(GLUT_ELAPSED_TIME);
game.display(curr_update);
glutSwapBuffers();
}
/* Texture callback, called from within the game object.
* This is used here so that when the game is ported to another platform,
* the preferred method can be used to load the textures.
* All that matters is that the texture IDs are bound to the array.
* Pretty nifty, eh?
*/
void loadTextures(GLuint (&txt)[NUM_TEXTURES])
{
//Using libglpng and example code from documentation
const char* boo[] = {"images/AsteroidA.png", "images/Bullet.png", "images/Earth.png", "images/Metal.png", "images/Astral.png", "images/GameOver.png"};
for(int i = 0; i < NUM_TEXTURES; i++)
{
GLuint result = png_texture_load(boo[i], NULL, NULL, txt[i]);
if (result < 128) {
txt[i] = result;
cout << "Loaded " << boo[i] << " " << result << endl;
}
else {
cout << "Can't load " << boo[i] << endl;
exit(1);
}
}
}
/* Another callback. Since this method of text display uses GLUT,
* it will be platform dependent. This allows the text to be displayed
* in whatever method is available.
* Raster position is set before this function is called.
*/
void displayText(const char* text)
{
int len = (int)strlen(text);
for (int i = 0; i < len; i++)
{
glutBitmapCharacter(GLUT_BITMAP_8_BY_13, text[i]);
}
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitWindowSize(800,800);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB);
glutCreateWindow("Astral Warrior");
glutReshapeFunc(reshapeFunc);
glutDisplayFunc(displayFunc);
InitKeyboard();
SetKeyboardFunc(keyboard);
game.setTextureFunc(loadTextures);
game.setTextFunc(displayText);
if(game.init()) printf("Game load success.\n");
else
{
printf("Game load failure.\n");
return 1;
}
/* Limit the game to ~100fps maximum.
* Timer code courtesy of the Angel Textbook.
*/
int n = 100;
glutTimerFunc(200, myTimer, n);
glutMainLoop();
return EXIT_SUCCESS;
}