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-04-27 13:08:12 +0000
committerStijn Buys <ingar@osirion.org>2008-04-27 13:08:12 +0000
commita4b36e6d1e20b5036d1ed7cf9f61a48dbbf77812 (patch)
tree7efd0048fd8c10b1f04d427c78e3ac8da402f059 /src/client/input.cc
parentfe95954f9d17c9dade1827fe5d4cf8cffffddbce (diff)
3D flight
Diffstat (limited to 'src/client/input.cc')
-rw-r--r--src/client/input.cc101
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);
}
}