diff options
author | Stijn Buys <ingar@osirion.org> | 2008-04-27 16:50:30 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2008-04-27 16:50:30 +0000 |
commit | 84d474fd3bd78f5ba6dcee65323f267fa8061b03 (patch) | |
tree | 45a2061ffe0a0eaf2675f5143859f2c06a233241 /src/client/input.cc | |
parent | a4b36e6d1e20b5036d1ed7cf9f61a48dbbf77812 (diff) |
more 3D changes
Diffstat (limited to 'src/client/input.cc')
-rw-r--r-- | src/client/input.cc | 76 |
1 files changed, 42 insertions, 34 deletions
diff --git a/src/client/input.cc b/src/client/input.cc index 994e38b..99fe638 100644 --- a/src/client/input.cc +++ b/src/client/input.cc @@ -24,12 +24,10 @@ core::Cvar *cl_mousecontrol = 0; namespace input { -// local offset to make turns +// local controls float local_turn = 0.0f; -// local offset to change pitch float local_pitch = 0.0f; - -// local thrust setting +float local_roll = 0.0f; float local_thrust = 0.0f; // last controlled entity @@ -38,6 +36,7 @@ unsigned int last_control = 0; // mouse cursor position int mouse_x = 0; int mouse_y = 0; + // true if the mouse is in the deadzone bool mouse_deadzone = false; @@ -165,6 +164,7 @@ void frame(float seconds) { if (core::localcontrol() && (last_control != core::localcontrol()->id())) { local_turn = 0.0f; + local_pitch = 0.0f; local_thrust = core::localcontrol()->thrust(); last_control = core::localcontrol()->id(); } @@ -233,41 +233,49 @@ void frame(float seconds) 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 (camera::mode == camera::Track) { + if (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) < ( deadzone_size >> 1 )) { + // dead zone + local_turn = 0; + } else { + 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; + } - if (abs(l) < ( deadzone_size >> 1 )) { - // dead zone - local_turn = 0; } else { - l = (mouse_x - deadzone_size) - ((video::width - deadzone_size) >> 1); - local_turn = float (-l) / (float) ((video::width - deadzone_size) >> 1); - mouse_deadzone = false; - } + if (local_turn > 1.0f) + local_turn = 1.0f; + else if (local_turn < -1.0f) + local_turn = -1.0f; - // pitch - int h = mouse_y - (video::height >> 1); + if (local_pitch > 1.0f) + local_pitch = 1.0f; + else if (local_pitch < -1.0f) + local_pitch = -1.0f; - 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; - else if (local_turn < -1.0f) - local_turn = -1.0f; - mouse_deadzone = false; + } } core::localcontrol()->set_thrust(local_thrust); |