summaryrefslogtreecommitdiffstats
path: root/src/Game.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Game.cpp')
-rw-r--r--src/Game.cpp44
1 files changed, 23 insertions, 21 deletions
diff --git a/src/Game.cpp b/src/Game.cpp
index c738080..d4991ed 100644
--- a/src/Game.cpp
+++ b/src/Game.cpp
@@ -27,7 +27,8 @@
namespace Zoom {
-Game::Game(bool multisample) : angle(0), lightPos(0) {
+Game::Game(bool multisample) : playerPos(vmml::vec3f::ZERO), playerRot(vmml::mat4f::IDENTITY),
+ input(NONE), lightPos(0) {
glClearColor(0.0, 0.0, 0.0, 1.0);
glClearDepth(1.0);
glEnable(GL_DEPTH_TEST);
@@ -41,14 +42,12 @@ Game::Game(bool multisample) : angle(0), lightPos(0) {
glEnable(GL_MULTISAMPLE_ARB);
#endif
- glShadeModel(GL_SMOOTH);
-
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_AMBIENT, vmml::vec4f::ZERO.array);
glLightfv(GL_LIGHT0, GL_DIFFUSE, vmml::vec4f::ONE.array);
glLightfv(GL_LIGHT0, GL_SPECULAR, vmml::vec4f::ONE.array);
glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0);
- glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.3);
+ glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.2);
glEnable(GL_LIGHT0);
glEnable(GL_COLOR_MATERIAL);
@@ -62,6 +61,8 @@ Game::Game(bool multisample) : angle(0), lightPos(0) {
Shader::loadProgram("default.vert", "default.frag");
+ playerRot.rotate_y(M_PI/6);
+
loadLevel("level.xml");
triangles.insert(triangles.end(), level->getRooms().front().walls.begin(), level->getRooms().front().walls.end());
std::sort(triangles.begin(), triangles.end(), Renderer::TextureSorter());
@@ -74,13 +75,21 @@ bool Game::loadLevel(const std::string &name) {
}
void Game::run(int delta) {
- angle += delta*0.01;
-
- if(angle >= 360)
- angle -= 360;
-
lightPos += delta;
lightPos %= 24000;
+
+ if(input & FORWARD) {
+ playerPos -= playerRot*vmml::vec3f::UNIT_Z*0.01*delta;
+ }
+ if(input & BACKWARD) {
+ playerPos += playerRot*vmml::vec3f::UNIT_Z*0.01*delta;
+ }
+ if(input & LEFT) {
+ playerPos -= playerRot*vmml::vec3f::UNIT_X*0.01*delta;
+ }
+ if(input & RIGHT) {
+ playerPos += playerRot*vmml::vec3f::UNIT_X*0.01*delta;
+ }
}
void Game::render() {
@@ -107,23 +116,16 @@ void Game::render() {
light[2] = -8.0;
}
- /*std::vector<BSPTree::TriangleRecord> triangles(level->getRooms().front().walls.begin(),
- level->getRooms().front().walls.end());
- std::sort(triangles.begin(), triangles.end(), Renderer::TextureSorter());*/
-
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glPushMatrix();
- glRotatef(15, 1, 2, 1);
- /*glRotatef(5*angle, 0, -1, 2);
- glRotatef(7*angle, 2, -1, 0);
- glRotatef(11*angle, 2, -1, 2);*/
+ vmml::mat4f transform(playerRot), inverse;
+ transform.set_translation(playerPos);
+ transform.inverse(inverse);
+
+ glLoadMatrixf(inverse.array);
glLightfv(GL_LIGHT0, GL_POSITION, light);
- //renderer.render(std::list<BSPTree::TriangleRecord>(triangles.begin(), triangles.end()));
renderer.render(triangles);
-
- glPopMatrix();
}
}