diff options
Diffstat (limited to 'src/Game.cpp')
-rw-r--r-- | src/Game.cpp | 44 |
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(); } } |