From aa50057b86c35de70ed87921ecdb1288e7e17e41 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sat, 27 Oct 2007 13:18:04 +0000 Subject: camera handling updates --- src/client/camera.cc | 30 +++++++++++++++--------------- src/client/camera.h | 4 ++-- src/client/input.cc | 34 +++++++++++++++++++++++++--------- src/client/input.h | 6 ++++-- 4 files changed, 46 insertions(+), 28 deletions(-) diff --git a/src/client/camera.cc b/src/client/camera.cc index 6a6da0c..bc8ee3e 100644 --- a/src/client/camera.cc +++ b/src/client/camera.cc @@ -20,10 +20,10 @@ Camera::Camera() pitch_track = -15.0f; offset_inc = 5.0f; - yaw = 0; + yaw_current = 0; yaw_target = 0; - pitch = pitch_track * 2; + pitch_current = pitch_track * 2; pitch_target = pitch_track; distance = 0.4f; @@ -42,23 +42,23 @@ void Camera::draw(float elapsed) } // adjust yaw - float d = degreesf(yaw - yaw_target); - yaw = degreesf( yaw - d * elapsed) ; + float d = degreesf(yaw_current - yaw_target); + yaw_current = degreesf( yaw_current - d * elapsed) ; // adjust pitch target - d = degreesf(pitch - pitch_target); - pitch = degreesf( pitch - d *elapsed); + d = degreesf(pitch_current - pitch_target); + pitch_current = degreesf( pitch_current - d *elapsed); switch (mode) { case Free: - gl::translate(1.0f+distance, -distance, 0.0f); - gl::rotate(-pitch, 0, 0, 1.0f); - gl::rotate(-yaw, 0, 1.0f, 0); + gl::translate(1.0f+distance, -distance/2, 0.0f); + gl::rotate(-pitch_current, 0, 0, 1.0f); + gl::rotate(-yaw_current, 0, 1.0f, 0); break; case Track: gl::translate(1.0f+distance, -distance , 0.0f); - gl::rotate(-pitch, 0, 0, 1.0f); - gl::rotate(-yaw, 0, 1.0f, 0); + gl::rotate(-pitch_current, 0, 0, 1.0f); + gl::rotate(-yaw_current, 0, 1.0f, 0); break; default: break; @@ -101,17 +101,17 @@ void Camera::nextmode() { // switch camera to Track mode mode = Track; yaw_target = game::ship.yaw; - yaw = yaw_target; + yaw_current = yaw_target; pitch_target = pitch_track; - pitch = pitch_target; + pitch_current = pitch_target; break; case Track: // switch camera to Free mode mode = Free; yaw_target = game::ship.yaw; - yaw = yaw_target; + yaw_current = yaw_target; pitch_target = pitch_track; - pitch = pitch_target; + pitch_current = pitch_target; break; default: break; diff --git a/src/client/camera.h b/src/client/camera.h index 7e189b3..c363f91 100644 --- a/src/client/camera.h +++ b/src/client/camera.h @@ -54,9 +54,9 @@ public: protected: /// current yaw, angle in XZ plane, positive is looking left - float yaw ; + float yaw_current; /// current pitch, angle in XY, positive is looking up - float pitch; + float pitch_current; /// default tracking pitch float pitch_track; /// default offset increment diff --git a/src/client/input.cc b/src/client/input.cc index fc70b37..5cafb7d 100644 --- a/src/client/input.cc +++ b/src/client/input.cc @@ -7,28 +7,42 @@ //project headers #include "client.h" #include "game/game.h" -#include "common/functions.h" namespace client { void Input::init() { - SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); + //condebug << "SDL_DEFAULT_REPEAT_DELAY " << SDL_DEFAULT_REPEAT_DELAY << std::endl; + //SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); + SDL_EnableKeyRepeat(10, SDL_DEFAULT_REPEAT_INTERVAL); } void Input::shutdown() { } -void Input::handle_keydown(SDL_keysym* keysym) +/* +see +http://docs.mandragor.org/files/Common_libs_documentation/SDL/SDL_Documentation_project_en/sdlevent.html +*/ + +// handle key_release events +void Input::handle_keyreleased(SDL_keysym* keysym) { switch( keysym->sym ) { - case SDLK_ESCAPE: - game::shutdown(); - break; case SDLK_SPACE: camera.nextmode(); break; + } +} + +// handle pressed keys +void Input::handle_keypressed(SDL_keysym* keysym) +{ + switch( keysym->sym ) { + case SDLK_ESCAPE: + game::shutdown(); + break; case SDLK_LEFT: camera.rotate_left(); break; @@ -65,10 +79,12 @@ void Input::process() while( SDL_PollEvent( &event ) ) { switch( event.type ) { -// case SDL_MOUSEBUTTONUP: case SDL_KEYDOWN: - handle_keydown( &event.key.keysym ); - break; + handle_keypressed( &event.key.keysym ); + break; + case SDL_KEYUP: + handle_keyreleased( &event.key.keysym ); + break; case SDL_QUIT: game::shutdown(); break; diff --git a/src/client/input.h b/src/client/input.h index fa5486d..23ddd5d 100644 --- a/src/client/input.h +++ b/src/client/input.h @@ -22,8 +22,10 @@ public: void process(); protected: - /// handle keydown events - void handle_keydown(SDL_keysym* keysym); + /// handle key release events + void handle_keyreleased(SDL_keysym* keysym); + /// handle key pressed events + void handle_keypressed(SDL_keysym* keysym); }; } // namespace Client -- cgit v1.2.3