Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2008-05-03 14:47:12 +0000
committerStijn Buys <ingar@osirion.org>2008-05-03 14:47:12 +0000
commit5d1e18b796d41e035d0d3e828cc6db54ed21a4b6 (patch)
treed4fc3cd9dd34a5064c6b159309ca9d247081e0d8 /src/client/input.cc
parent3dedab035c98772fd9607480bddc8ffd9d7dc799 (diff)
camera handling, Cockpit view
Diffstat (limited to 'src/client/input.cc')
-rw-r--r--src/client/input.cc124
1 files changed, 68 insertions, 56 deletions
diff --git a/src/client/input.cc b/src/client/input.cc
index 533ea64..17ca724 100644
--- a/src/client/input.cc
+++ b/src/client/input.cc
@@ -25,7 +25,7 @@ namespace input
{
// local controls
-float local_turn = 0.0f;
+float local_direction = 0.0f;
float local_pitch = 0.0f;
float local_thrust = 0.0f;
float local_roll = 0.0f;
@@ -37,6 +37,9 @@ unsigned int last_control = 0;
int mouse_x = 0;
int mouse_y = 0;
+float mouse_pitch;
+float mouse_direction;
+
// true if the mouse is in the deadzone
bool mouse_deadzone = false;
@@ -63,12 +66,24 @@ void shutdown()
void keyreleased(const SDL_keysym &keysym)
{
switch (keysym.sym) {
+ case SDLK_LEFT:
+ camera::set_direction(0.0f);
+ break;
+ case SDLK_RIGHT:
+ camera::set_direction(0.0f);
+ break;
+ case SDLK_UP:
+ camera::set_pitch(0.0f);
+ break;
+ case SDLK_DOWN:
+ camera::set_pitch(0.0f);
+ break;
case SDLK_SPACE:
camera::next_mode();
local_roll = 0;
local_pitch = 0;
- local_turn = 0;
+ local_direction = 0;
break;
case SDLK_KP8: // turn down
@@ -80,11 +95,11 @@ void keyreleased(const SDL_keysym &keysym)
break;
case SDLK_KP4: // turn left
- local_turn = 0.0f;
+ local_direction = 0.0f;
break;
case SDLK_KP6: // turn right
- local_turn = 0.0f;
+ local_direction = 0.0f;
break;
case SDLK_KP_DIVIDE: // roll left
@@ -107,16 +122,16 @@ void keypressed(const SDL_keysym &keysym)
{
switch (keysym.sym) {
case SDLK_LEFT:
- camera::key_left();
+ camera::set_direction(1.0f);
break;
case SDLK_RIGHT:
- camera::key_right();
+ camera::set_direction(-1.0f);
break;
case SDLK_UP:
- camera::key_up();
+ camera::set_pitch(1.0f);
break;
case SDLK_DOWN:
- camera::key_down();
+ camera::set_pitch(-1.0f);
break;
case SDLK_KP_PLUS:
@@ -136,15 +151,15 @@ void keypressed(const SDL_keysym &keysym)
break;
case SDLK_KP4: // left
- local_turn = 1.0f;
+ local_direction = 1.0f;
break;
case SDLK_KP6: // right
- local_turn = -1.0f;
+ local_direction = -1.0f;
break;
case SDLK_KP5: // level
- local_turn = 0;
+ local_direction = 0;
local_pitch = 0;
local_roll = 0;
break;
@@ -183,7 +198,7 @@ void mousebuttonpressed(const SDL_MouseButtonEvent &button)
void frame(float seconds)
{
if (core::localcontrol() && (last_control != core::localcontrol()->id())) {
- local_turn = 0.0f;
+ local_direction = 0.0f;
local_pitch = 0.0f;
local_roll = 0.0f;
local_thrust = core::localcontrol()->thrust();
@@ -249,59 +264,56 @@ 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) {
- 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 (cl_mousecontrol->value()) {
+ // the mouse will not react if it is in the deadzone
+ int deadzone_size = 24;
+ mouse_deadzone = true;
+
+ // direction
+ int l = mouse_x - (video::width >> 1);
+ if (abs(l) < ( deadzone_size >> 1 )) {
+ // dead zone
+ mouse_direction = 0;
} else {
- if (local_turn > 1.0f)
- local_turn = 1.0f;
- else if (local_turn < -1.0f)
- local_turn = -1.0f;
+ l = (mouse_x - deadzone_size) - ((video::width - deadzone_size) >> 1);
+ mouse_direction = float (-l) / (float) ((video::width - deadzone_size) >> 1);
+ mouse_deadzone = false;
+ }
- if (local_pitch > 1.0f)
- local_pitch = 1.0f;
- else if (local_pitch < -1.0f)
- local_pitch = -1.0f;
+ // pitch
+ int h = mouse_y - (video::height >> 1);
+ if (abs(h) < ( deadzone_size >> 1 )) {
+ // dead zone
+ mouse_pitch = 0;
+ } else {
+ h = (mouse_y - deadzone_size) - ((video::height - deadzone_size) >> 1);
+ mouse_pitch = float (-h) / (float) ((video::height - deadzone_size) >> 1);
mouse_deadzone = false;
- }
+ }
+
+ if ((camera::mode == camera::Track) || (camera::mode == camera::Cockpit)) {
+ local_direction = mouse_direction;
+ local_pitch = mouse_pitch;
+ } else if (camera::mode == camera::Free) {
+ camera::set_direction(-mouse_direction);
+ camera::set_pitch(-mouse_pitch);
+ }
+
+ } else {
+
+ math::clamp(local_direction, -1.0f, 1.0f);
+ math::clamp(local_pitch, -1.0f, 1.0f);
+
}
+
+ math::clamp(local_thrust, 0.0f, 1.0f);
+ math::clamp(local_roll, -1.0f, 1.0f);
core::localcontrol()->set_thrust(local_thrust);
- core::localcontrol()->set_direction(local_turn);
+ core::localcontrol()->set_direction(local_direction);
core::localcontrol()->set_pitch(local_pitch / video::aspect );
core::localcontrol()->set_roll(local_roll);
}