diff options
author | Stijn Buys <ingar@osirion.org> | 2008-04-27 13:08:12 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2008-04-27 13:08:12 +0000 |
commit | a4b36e6d1e20b5036d1ed7cf9f61a48dbbf77812 (patch) | |
tree | 7efd0048fd8c10b1f04d427c78e3ac8da402f059 /src/client/input.cc | |
parent | fe95954f9d17c9dade1827fe5d4cf8cffffddbce (diff) |
3D flight
Diffstat (limited to 'src/client/input.cc')
-rw-r--r-- | src/client/input.cc | 101 |
1 files changed, 76 insertions, 25 deletions
diff --git a/src/client/input.cc b/src/client/input.cc index 8d80a21..994e38b 100644 --- a/src/client/input.cc +++ b/src/client/input.cc @@ -26,6 +26,8 @@ namespace input // local offset to make turns float local_turn = 0.0f; +// local offset to change pitch +float local_pitch = 0.0f; // local thrust setting float local_thrust = 0.0f; @@ -39,6 +41,8 @@ int mouse_y = 0; // true if the mouse is in the deadzone bool mouse_deadzone = false; +const float thruster_offset = 0.05f; + void init() { con_print << "Initializing input..." << std::endl; @@ -60,9 +64,27 @@ void shutdown() void keyreleased(const SDL_keysym &keysym) { switch (keysym.sym) { + case SDLK_SPACE: camera::next_mode(); break; + + case SDLK_KP8: // down + local_pitch = 0.0f; + break; + + case SDLK_KP2: // up + local_pitch = 0.0f; + break; + + case SDLK_KP4: // left + local_turn = 0.0f; + break; + + case SDLK_KP6: // right + local_turn = 0.0f; + break; + default: break; } @@ -86,25 +108,37 @@ void keypressed(const SDL_keysym &keysym) case SDLK_DOWN: camera::key_down(); break; + case SDLK_KP_PLUS: - local_thrust += 0.015f; - if (local_thrust > 1.0f) - local_thrust = 1.0f; + local_thrust += thruster_offset; break; + case SDLK_KP_MINUS: - // TODO set core entity params - local_thrust -= 0.020f; - if (local_thrust < 0.0f) - local_thrust = 0.0f; + local_thrust -= 2.0f * thruster_offset; break; - case SDLK_KP4: - // TODO set core entity params - local_turn += 0.05; + + case SDLK_KP8: // down + local_pitch = -1.0f; break; - case SDLK_KP6: - // TODO set core entity params - local_turn -= 0.05; + + case SDLK_KP2: // up + local_pitch = 1.0f; + break; + + case SDLK_KP4: // left + local_turn = 1.0f; break; + + case SDLK_KP6: // right + local_turn = -1.0f; + break; + + case SDLK_KP5: + local_turn = 0; + local_pitch = 0; + break; + + default: break; } @@ -118,16 +152,11 @@ void mousebuttonpressed(const SDL_MouseButtonEvent &button) { switch (button.button) { case SDL_BUTTON_WHEELUP: - local_thrust += 0.015f; - if (local_thrust > 1.0f) - local_thrust = 1.0f; - + local_thrust += thruster_offset; break; - case SDL_BUTTON_WHEELDOWN: - local_thrust -= 0.02f; - if (local_thrust < 0.0f) - local_thrust = 0.0f; + case SDL_BUTTON_WHEELDOWN: + local_thrust -= 2.0f * thruster_offset; break; } } @@ -199,19 +228,40 @@ void frame(float seconds) if (!console::visible() && core::application()->connected() && core::localcontrol()) { + if (local_thrust > 1.0f) + local_thrust = 1.0f; + else if (local_thrust < -2.0 * thruster_offset) + local_thrust = -2.0 * thruster_offset; + if (camera::mode == camera::Track && cl_mousecontrol->value()) { // mouse control when camera is in tracking mode + int deadzone_size = 24; + mouse_deadzone = true; + + // direction int l = mouse_x - (video::width >> 1); - if (abs(l) < ( CHARWIDTH >> 1 )) { + if (abs(l) < ( deadzone_size >> 1 )) { // dead zone local_turn = 0; - mouse_deadzone = true; } else { - l = (mouse_x - CHARWIDTH) - ((video::width - CHARWIDTH) >> 1); - local_turn = float (-l) / (float) ((video::width - CHARWIDTH) >> 1); + l = (mouse_x - deadzone_size) - ((video::width - deadzone_size) >> 1); + local_turn = float (-l) / (float) ((video::width - deadzone_size) >> 1); + mouse_deadzone = false; + } + + // pitch + int h = mouse_y - (video::height >> 1); + + if (abs(h) < ( deadzone_size >> 1 )) { + // dead zone + local_pitch = 0; + } else { + h = (mouse_y - deadzone_size) - ((video::height - deadzone_size) >> 1); + local_pitch = float (-h) / (float) ((video::height - deadzone_size) >> 1); mouse_deadzone = false; } + } else { if (local_turn > 1.0f) local_turn = 1.0f; @@ -222,6 +272,7 @@ void frame(float seconds) core::localcontrol()->set_thrust(local_thrust); core::localcontrol()->set_direction(local_turn); + core::localcontrol()->set_pitch(local_pitch); } } |