diff options
author | Matthias Schiffer <matthias@gamezock.de> | 2009-12-17 19:12:13 +0100 |
---|---|---|
committer | Matthias Schiffer <matthias@gamezock.de> | 2009-12-17 19:12:13 +0100 |
commit | b3b74dc2afe4c67a6b74c2a681aa7bbad7077511 (patch) | |
tree | 44334a4225d182ae68bea1fe2cacfd37baa7c953 /src/Game.cpp | |
parent | bc797d4c8b5f8a7ac925ca8478dc5960907a81dd (diff) | |
download | zoom++-b3b74dc2afe4c67a6b74c2a681aa7bbad7077511.tar zoom++-b3b74dc2afe4c67a6b74c2a681aa7bbad7077511.zip |
Added mouse support to turn
Diffstat (limited to 'src/Game.cpp')
-rw-r--r-- | src/Game.cpp | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/src/Game.cpp b/src/Game.cpp index 8f5af26..93b13c4 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -29,7 +29,7 @@ namespace Zoom { -Game::Game(bool multisample) : playerPos(vmml::vec3f::ZERO), playerRot(vmml::mat4f::IDENTITY), +Game::Game(bool multisample) : playerPos(vmml::vec3f::ZERO), playerRotY(vmml::mat4f::IDENTITY), playerRotX(0), input(0), lightPos(0) { glClearColor(0.0, 0.0, 0.0, 1.0); glClearDepth(1.0); @@ -63,8 +63,6 @@ Game::Game(bool multisample) : playerPos(vmml::vec3f::ZERO), playerRot(vmml::mat 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()); @@ -76,24 +74,37 @@ bool Game::loadLevel(const std::string &name) { return level; } +void Game::turn(float x, float y) { + playerRotY.rotate_y(-x*M_PI/180/10); + + playerRotX -= y*M_PI/180/10; + if(playerRotX > M_PI_2) + playerRotX = M_PI_2; + else if(playerRotX < -M_PI_2) + playerRotX = -M_PI_2; +} + void Game::run(int delta) { lightPos += delta; lightPos %= 24000; - playerRot.rotate_y(delta*M_PI/180/40); + vmml::vec3f playerMove(vmml::vec3f::ZERO); if(input & FORWARD) { - playerPos -= playerRot*vmml::vec3f::UNIT_Z*0.01*delta; + playerMove -= playerRotY*vmml::vec3f::UNIT_Z; } if(input & BACKWARD) { - playerPos += playerRot*vmml::vec3f::UNIT_Z*0.01*delta; + playerMove += playerRotY*vmml::vec3f::UNIT_Z; } if(input & LEFT) { - playerPos -= playerRot*vmml::vec3f::UNIT_X*0.01*delta; + playerMove -= playerRotY*vmml::vec3f::UNIT_X; } if(input & RIGHT) { - playerPos += playerRot*vmml::vec3f::UNIT_X*0.01*delta; + playerMove += playerRotY*vmml::vec3f::UNIT_X; } + + playerMove.normalize(); + playerPos += playerMove*0.01*delta; } void Game::render() { @@ -122,7 +133,8 @@ void Game::render() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - vmml::mat4f transform(playerRot), inverse; + vmml::mat4f transform(playerRotY), inverse; + transform.rotate_x(playerRotX); transform.set_translation(playerPos); transform.inverse(inverse); |