[colobot] 242/390: Refactored keybindings UI and added some keybindings
Didier Raboud
odyx at moszumanska.debian.org
Fri Jun 12 14:21:50 UTC 2015
This is an automated email from the git hooks/post-receive script.
odyx pushed a commit to branch upstream/latest
in repository colobot.
commit be0f4c2ffec46f64414e92bebcf9f3b022fc7534
Author: krzys-h <krzys_h at interia.pl>
Date: Sun Dec 14 16:54:32 2014 +0100
Refactored keybindings UI and added some keybindings
---
src/app/app.cpp | 1 -
src/app/input.cpp | 74 ++++++++-------------------
src/app/input.h | 25 ++--------
src/common/event.cpp | 27 ++--------
src/common/event.h | 44 ++++-------------
src/common/key.h | 9 ++--
src/common/restext.cpp | 47 +++++++++---------
src/graphics/engine/camera.cpp | 22 +++++----
src/graphics/engine/camera.h | 2 +
src/object/robotmain.cpp | 2 +-
src/ui/maindialog.cpp | 110 +++++++----------------------------------
11 files changed, 103 insertions(+), 260 deletions(-)
diff --git a/src/app/app.cpp b/src/app/app.cpp
index 22b1511..d679130 100644
--- a/src/app/app.cpp
+++ b/src/app/app.cpp
@@ -1160,7 +1160,6 @@ void CApplication::LogEvent(const Event &event)
{
l->Trace(" rTime = %f\n", event.rTime);
l->Trace(" kmodState = %04x\n", event.kmodState);
- l->Trace(" trackedKeysState = %04x\n", event.trackedKeysState);
l->Trace(" mousePos = %f, %f\n", event.mousePos.x, event.mousePos.y);
l->Trace(" mouseButtonsState = %02x\n", event.mouseButtonsState);
l->Trace(" customParam = %d\n", event.customParam);
diff --git a/src/app/input.cpp b/src/app/input.cpp
index 2c22650..d793c32 100644
--- a/src/app/input.cpp
+++ b/src/app/input.cpp
@@ -36,10 +36,12 @@ template<> CInput* CSingleton<CInput>::m_instance = nullptr;
CInput::CInput()
{
m_kmodState = 0;
- m_trackedKeys = 0;
m_mousePos = Math::Point();
m_mouseButtonsState = 0;
+ for(int i=0; i<INPUT_SLOT_MAX; i++)
+ m_keyPresses[i] = false;
+
m_joystickDeadzone = 0.2f;
SetDefaultInputBindings();
}
@@ -63,46 +65,6 @@ void CInput::EventProcess(Event& event)
m_mouseButtonsState &= ~event.mouseButton.button;
}
- if (event.type == EVENT_KEY_DOWN)
- {
- if (event.key.key == KEY(KP8))
- m_trackedKeys |= TRKEY_NUM_UP;
- else if (event.key.key == KEY(KP2))
- m_trackedKeys |= TRKEY_NUM_DOWN;
- else if (event.key.key == KEY(KP4))
- m_trackedKeys |= TRKEY_NUM_LEFT;
- else if (event.key.key == KEY(KP6))
- m_trackedKeys |= TRKEY_NUM_RIGHT;
- else if (event.key.key == KEY(KP_PLUS))
- m_trackedKeys |= TRKEY_NUM_PLUS;
- else if (event.key.key == KEY(KP_MINUS))
- m_trackedKeys |= TRKEY_NUM_MINUS;
- else if (event.key.key == KEY(PAGEUP))
- m_trackedKeys |= TRKEY_PAGE_UP;
- else if (event.key.key == KEY(PAGEDOWN))
- m_trackedKeys |= TRKEY_PAGE_DOWN;
- }
- else if (event.type == EVENT_KEY_UP)
- {
- if (event.key.key == KEY(KP8))
- m_trackedKeys &= ~TRKEY_NUM_UP;
- else if (event.key.key == KEY(KP2))
- m_trackedKeys &= ~TRKEY_NUM_DOWN;
- else if (event.key.key == KEY(KP4))
- m_trackedKeys &= ~TRKEY_NUM_LEFT;
- else if (event.key.key == KEY(KP6))
- m_trackedKeys &= ~TRKEY_NUM_RIGHT;
- else if (event.key.key == KEY(KP_PLUS))
- m_trackedKeys &= ~TRKEY_NUM_PLUS;
- else if (event.key.key == KEY(KP_MINUS))
- m_trackedKeys &= ~TRKEY_NUM_MINUS;
- else if (event.key.key == KEY(PAGEUP))
- m_trackedKeys &= ~TRKEY_PAGE_UP;
- else if (event.key.key == KEY(PAGEDOWN))
- m_trackedKeys &= ~TRKEY_PAGE_DOWN;
- }
-
-
if(event.type == EVENT_KEY_DOWN ||
event.type == EVENT_KEY_UP)
@@ -110,12 +72,18 @@ void CInput::EventProcess(Event& event)
event.key.slot = FindBinding(event.key.key);
}
- event.trackedKeysState = m_trackedKeys;
event.kmodState = m_kmodState;
event.mousePos = m_mousePos;
event.mouseButtonsState = m_mouseButtonsState;
+ if (event.type == EVENT_KEY_DOWN ||
+ event.type == EVENT_KEY_UP)
+ {
+ m_keyPresses[event.key.slot] = (event.type == EVENT_KEY_DOWN);
+ }
+
+
/* Motion vector management */
@@ -179,9 +147,9 @@ bool CInput::GetKmodState(int kmod) const
return (m_kmodState & kmod) != 0;
}
-bool CInput::GetTrackedKeyState(TrackedKey key) const
+bool CInput::GetKeyState(InputSlot key) const
{
- return (m_trackedKeys & key) != 0;
+ return m_keyPresses[key];
}
bool CInput::GetMouseButtonState(int index) const
@@ -192,10 +160,11 @@ bool CInput::GetMouseButtonState(int index) const
void CInput::ResetKeyStates()
{
CLogger::GetInstancePointer()->Trace("Reset key states\n");
- m_trackedKeys = 0;
m_kmodState = 0;
m_keyMotion = Math::Vector(0.0f, 0.0f, 0.0f);
m_joyMotion = Math::Vector(0.0f, 0.0f, 0.0f);
+ for(int i=0; i<INPUT_SLOT_MAX; i++)
+ m_keyPresses[i] = false;
}
Math::Point CInput::GetMousePos() const
@@ -227,20 +196,13 @@ void CInput::SetDefaultInputBindings()
m_inputBindings[INPUT_SLOT_GUP ].primary = VIRTUAL_KMOD(SHIFT);
m_inputBindings[INPUT_SLOT_GDOWN ].primary = VIRTUAL_KMOD(CTRL);
m_inputBindings[INPUT_SLOT_CAMERA ].primary = KEY(SPACE);
- // m_inputBindings[INPUT_SLOT_CAMERA ].secondary = VIRTUAL_JOY(2);
m_inputBindings[INPUT_SLOT_DESEL ].primary = KEY(KP0);
- // m_inputBindings[INPUT_SLOT_DESEL ].secondary = VIRTUAL_JOY(6);
m_inputBindings[INPUT_SLOT_ACTION ].primary = KEY(RETURN);
- // m_inputBindings[INPUT_SLOT_ACTION ].secondary = VIRTUAL_JOY(1);
m_inputBindings[INPUT_SLOT_ACTION ].secondary = KEY(e);
m_inputBindings[INPUT_SLOT_NEAR ].primary = KEY(KP_PLUS);
- // m_inputBindings[INPUT_SLOT_NEAR ].secondary = VIRTUAL_JOY(5);
m_inputBindings[INPUT_SLOT_AWAY ].primary = KEY(KP_MINUS);
- // m_inputBindings[INPUT_SLOT_AWAY ].secondary = VIRTUAL_JOY(4);
m_inputBindings[INPUT_SLOT_NEXT ].primary = KEY(TAB);
- // m_inputBindings[INPUT_SLOT_NEXT ].secondary = VIRTUAL_JOY(3);
m_inputBindings[INPUT_SLOT_HUMAN ].primary = KEY(HOME);
- // m_inputBindings[INPUT_SLOT_HUMAN ].secondary = VIRTUAL_JOY(7);
m_inputBindings[INPUT_SLOT_QUIT ].primary = KEY(ESCAPE);
m_inputBindings[INPUT_SLOT_HELP ].primary = KEY(F1);
m_inputBindings[INPUT_SLOT_PROG ].primary = KEY(F2);
@@ -249,6 +211,10 @@ void CInput::SetDefaultInputBindings()
m_inputBindings[INPUT_SLOT_SPEED10].primary = KEY(F4);
m_inputBindings[INPUT_SLOT_SPEED15].primary = KEY(F5);
m_inputBindings[INPUT_SLOT_SPEED20].primary = KEY(F6);
+ m_inputBindings[INPUT_SLOT_CAMERA_UP].primary = KEY(PAGEUP);
+ m_inputBindings[INPUT_SLOT_CAMERA_DOWN].primary = KEY(PAGEDOWN);
+ m_inputBindings[INPUT_SLOT_PAUSE].primary = KEY(PAUSE);
+ m_inputBindings[INPUT_SLOT_PAUSE].secondary = KEY(p);
m_joyAxisBindings[JOY_AXIS_SLOT_X].axis = 0;
m_joyAxisBindings[JOY_AXIS_SLOT_Y].axis = 1;
@@ -349,7 +315,9 @@ static std::map<InputSlot, std::string> keyTable =
{ INPUT_SLOT_VISIT, "visit" },
{ INPUT_SLOT_SPEED10, "speed10" },
{ INPUT_SLOT_SPEED15, "speed15" },
- { INPUT_SLOT_SPEED20, "speed20" }
+ { INPUT_SLOT_SPEED20, "speed20" },
+ { INPUT_SLOT_CAMERA_UP, "camup" },
+ { INPUT_SLOT_CAMERA_DOWN, "camdown" },
};
InputSlot CInput::SearchKeyById(std::string id)
diff --git a/src/app/input.h b/src/app/input.h
index 8d7541e..dc25b76 100644
--- a/src/app/input.h
+++ b/src/app/input.h
@@ -31,21 +31,6 @@
#include "math/intpoint.h"
-/**
- * \enum TrackedKey
- * \brief Additional keys whose state (pressed/released) is tracked by CInput
- */
-enum TrackedKey
-{
- TRKEY_NUM_UP = (1<<0),
- TRKEY_NUM_DOWN = (1<<1),
- TRKEY_NUM_LEFT = (1<<2),
- TRKEY_NUM_RIGHT = (1<<3),
- TRKEY_NUM_PLUS = (1<<4),
- TRKEY_NUM_MINUS = (1<<5),
- TRKEY_PAGE_UP = (1<<6),
- TRKEY_PAGE_DOWN = (1<<7)
-};
/**
* \struct InputBinding
@@ -86,7 +71,7 @@ public:
//! Constructor
CInput();
- //! Process an incoming event, also sets .trackedKeysState, .kmodState, .mousePos, .mouseButtonsState and .key.slot
+ //! Process an incoming event, also sets .kmodState, .mousePos, .mouseButtonsState and .key.slot
void EventProcess(Event &event);
//! Called by CApplication on SDL MOUSE_MOTION event
@@ -99,8 +84,8 @@ public:
//! Returns whether the given kmod is active
bool GetKmodState(int kmod) const;
- //! Returns whether the tracked key is pressed
- bool GetTrackedKeyState(TrackedKey key) const;
+ //! Returns whether the key is pressed
+ bool GetKeyState(InputSlot key) const;
//! Returns whether the mouse button is pressed
bool GetMouseButtonState(int index) const;
@@ -154,8 +139,8 @@ public:
private:
//! Current state of key modifiers (bitmask of SDLMod)
unsigned int m_kmodState;
- //! Current state of some tracked keys (bitmask of TrackedKey enum values)
- unsigned int m_trackedKeys;
+ //! Current state of keys
+ bool m_keyPresses[INPUT_SLOT_MAX];
//! Current position of mouse cursor
diff --git a/src/common/event.cpp b/src/common/event.cpp
index f5f5247..c8e90ad 100644
--- a/src/common/event.cpp
+++ b/src/common/event.cpp
@@ -223,28 +223,6 @@ void InitializeEventTypeTexts()
EVENT_TYPE_TEXT[EVENT_INTERFACE_KGROUP] = "EVENT_INTERFACE_KGROUP";
EVENT_TYPE_TEXT[EVENT_INTERFACE_KSCROLL] = "EVENT_INTERFACE_KSCROLL";
EVENT_TYPE_TEXT[EVENT_INTERFACE_KDEF] = "EVENT_INTERFACE_KDEF";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KLEFT] = "EVENT_INTERFACE_KLEFT";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KRIGHT] = "EVENT_INTERFACE_KRIGHT";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KUP] = "EVENT_INTERFACE_KUP";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KDOWN] = "EVENT_INTERFACE_KDOWN";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KGUP] = "EVENT_INTERFACE_KGUP";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KGDOWN] = "EVENT_INTERFACE_KGDOWN";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KCAMERA] = "EVENT_INTERFACE_KCAMERA";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KDESEL] = "EVENT_INTERFACE_KDESEL";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KACTION] = "EVENT_INTERFACE_KACTION";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KNEAR] = "EVENT_INTERFACE_KNEAR";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KAWAY] = "EVENT_INTERFACE_KAWAY";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KNEXT] = "EVENT_INTERFACE_KNEXT";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KHUMAN] = "EVENT_INTERFACE_KHUMAN";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KQUIT] = "EVENT_INTERFACE_KQUIT";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KHELP] = "EVENT_INTERFACE_KHELP";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KPROG] = "EVENT_INTERFACE_KPROG";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KCBOT] = "EVENT_INTERFACE_KCBOT";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KVISIT] = "EVENT_INTERFACE_KVISIT";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KSPEED10]= "EVENT_INTERFACE_KSPEED10";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KSPEED15]= "EVENT_INTERFACE_KSPEED15";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KSPEED20]= "EVENT_INTERFACE_KSPEED20";
- EVENT_TYPE_TEXT[EVENT_INTERFACE_KSPEED30]= "EVENT_INTERFACE_KSPEED30";
EVENT_TYPE_TEXT[EVENT_INTERFACE_VOLSOUND]= "EVENT_INTERFACE_VOLSOUND";
EVENT_TYPE_TEXT[EVENT_INTERFACE_VOLMUSIC]= "EVENT_INTERFACE_VOLMUSIC";
@@ -548,6 +526,11 @@ std::string ParseEventType(EventType eventType)
return stdEvent;
}
+
+ if(eventType >= EVENT_INTERFACE_KEY && eventType <= EVENT_INTERFACE_KEY_END)
+ {
+ return Other("EVENT_INTERFACE_KEY - EVENT_INTERFACE_KEY_END ");
+ }
if (eventType >= EVENT_USER)
return Other("USER_EVENT");
diff --git a/src/common/event.h b/src/common/event.h
index 0de01d4..8c0ce52 100644
--- a/src/common/event.h
+++ b/src/common/event.h
@@ -250,38 +250,19 @@ enum EventType
EVENT_INTERFACE_KGROUP = 502,
EVENT_INTERFACE_KSCROLL = 503,
EVENT_INTERFACE_KDEF = 504,
- EVENT_INTERFACE_KLEFT = 505,
- EVENT_INTERFACE_KRIGHT = 506,
- EVENT_INTERFACE_KUP = 507,
- EVENT_INTERFACE_KDOWN = 508,
- EVENT_INTERFACE_KGUP = 509,
- EVENT_INTERFACE_KGDOWN = 510,
- EVENT_INTERFACE_KCAMERA = 511,
- EVENT_INTERFACE_KDESEL = 512,
- EVENT_INTERFACE_KACTION = 513,
- EVENT_INTERFACE_KNEAR = 514,
- EVENT_INTERFACE_KAWAY = 515,
- EVENT_INTERFACE_KNEXT = 516,
- EVENT_INTERFACE_KHUMAN = 517,
- EVENT_INTERFACE_KQUIT = 518,
- EVENT_INTERFACE_KHELP = 519,
- EVENT_INTERFACE_KPROG = 520,
- EVENT_INTERFACE_KCBOT = 521,
- EVENT_INTERFACE_KVISIT = 522,
- EVENT_INTERFACE_KSPEED10= 523,
- EVENT_INTERFACE_KSPEED15= 524,
- EVENT_INTERFACE_KSPEED20= 525,
- EVENT_INTERFACE_KSPEED30= 526,
-
- EVENT_INTERFACE_VOLSOUND= 530,
- EVENT_INTERFACE_VOLMUSIC= 531,
+ // Reserved space for keybindings
+ // This is not the nicest solution, but it'll have to work like that until we move to CEGUI
+ EVENT_INTERFACE_KEY = 505,
+ EVENT_INTERFACE_KEY_END = 539,
EVENT_INTERFACE_MIN = 540,
EVENT_INTERFACE_NORM = 541,
EVENT_INTERFACE_MAX = 542,
-
- EVENT_INTERFACE_SILENT = 550,
- EVENT_INTERFACE_NOISY = 551,
+
+ EVENT_INTERFACE_VOLSOUND= 550,
+ EVENT_INTERFACE_VOLMUSIC= 551,
+ EVENT_INTERFACE_SILENT = 552,
+ EVENT_INTERFACE_NOISY = 553,
EVENT_INTERFACE_JOYSTICK= 560,
EVENT_INTERFACE_SOLUCE = 561,
@@ -699,7 +680,7 @@ struct Event
// TODO: gradually replace the usage of this with new CApplication's time functions
float rTime;
- //! Motion vector set by keyboard or joystick (managed by CRobotMain)
+ //! Motion vector set by keyboard or joystick (managed by CInput)
//! Scope: all system events
Math::Vector motionInput;
@@ -707,10 +688,6 @@ struct Event
//! Scope: all system events
unsigned int kmodState;
- //! Current state of tracked keys: bitmask of TrackedKey enum values
- //! Scope: all system events
- unsigned int trackedKeysState;
-
//! Current position of mouse cursor in interface coords
//! Scope: all system events
Math::Point mousePos;
@@ -744,7 +721,6 @@ struct Event
: type(_type)
, rTime(0.0f)
, kmodState(0)
- , trackedKeysState(0)
, mouseButtonsState(0)
, customParam(0)
{}
diff --git a/src/common/key.h b/src/common/key.h
index a2922e8..6317506 100644
--- a/src/common/key.h
+++ b/src/common/key.h
@@ -68,6 +68,7 @@ const unsigned int KEY_INVALID = SDLK_LAST + 1000;
/**
* \enum InputSlot
* \brief Available slots for input bindings
+ * NOTE: When adding new values, remember to also update keyTable in input.cpp and their descriptions in restext.cpp
*/
enum InputSlot
{
@@ -91,10 +92,10 @@ enum InputSlot
INPUT_SLOT_SPEED10 = 17,
INPUT_SLOT_SPEED15 = 18,
INPUT_SLOT_SPEED20 = 19,
- INPUT_SLOT_SPEED30 = 20,
- INPUT_SLOT_AIMUP = 21,
- INPUT_SLOT_AIMDOWN = 22,
- INPUT_SLOT_CBOT = 23,
+ INPUT_SLOT_CBOT = 20,
+ INPUT_SLOT_CAMERA_UP = 21,
+ INPUT_SLOT_CAMERA_DOWN = 22,
+ INPUT_SLOT_PAUSE = 23,
INPUT_SLOT_MAX
};
diff --git a/src/common/restext.cpp b/src/common/restext.cpp
index 4da3876..d04d462 100644
--- a/src/common/restext.cpp
+++ b/src/common/restext.cpp
@@ -212,28 +212,31 @@ void InitializeRestext()
stringsEvent[EVENT_INTERFACE_AUTOSAVE_SLOTS] = TR("Autosave slots\\How many autosave slots you'll have");
stringsEvent[EVENT_INTERFACE_KDEF] = TR("Standard controls\\Standard key functions");
- stringsEvent[EVENT_INTERFACE_KLEFT] = TR("Turn left\\turns the bot to the left");
- stringsEvent[EVENT_INTERFACE_KRIGHT] = TR("Turn right\\turns the bot to the right");
- stringsEvent[EVENT_INTERFACE_KUP] = TR("Forward\\Moves forward");
- stringsEvent[EVENT_INTERFACE_KDOWN] = TR("Backward\\Moves backward");
- stringsEvent[EVENT_INTERFACE_KGUP] = TR("Climb\\Increases the power of the jet");
- stringsEvent[EVENT_INTERFACE_KGDOWN] = TR("Descend\\Reduces the power of the jet");
- stringsEvent[EVENT_INTERFACE_KCAMERA] = TR("Change camera\\Switches between onboard camera and following camera");
- stringsEvent[EVENT_INTERFACE_KDESEL] = TR("Previous object\\Selects the previous object");
- stringsEvent[EVENT_INTERFACE_KACTION] = TR("Standard action\\Standard action of the bot (take/grab, shoot, sniff, etc)");
- stringsEvent[EVENT_INTERFACE_KNEAR] = TR("Camera closer\\Moves the camera forward");
- stringsEvent[EVENT_INTERFACE_KAWAY] = TR("Camera back\\Moves the camera backward");
- stringsEvent[EVENT_INTERFACE_KNEXT] = TR("Next object\\Selects the next object");
- stringsEvent[EVENT_INTERFACE_KHUMAN] = TR("Select the astronaut\\Selects the astronaut");
- stringsEvent[EVENT_INTERFACE_KQUIT] = TR("Quit\\Quit the current mission or exercise");
- stringsEvent[EVENT_INTERFACE_KHELP] = TR("Instructions\\Shows the instructions for the current mission");
- stringsEvent[EVENT_INTERFACE_KPROG] = TR("Programming help\\Gives more detailed help with programming");
- stringsEvent[EVENT_INTERFACE_KCBOT] = TR("Key word help\\More detailed help about key words");
- stringsEvent[EVENT_INTERFACE_KVISIT] = TR("Origin of last message\\Shows where the last message was sent from");
- stringsEvent[EVENT_INTERFACE_KSPEED10] = TR("Speed 1.0x\\Normal speed");
- stringsEvent[EVENT_INTERFACE_KSPEED15] = TR("Speed 1.5x\\1.5 times faster");
- stringsEvent[EVENT_INTERFACE_KSPEED20] = TR("Speed 2.0x\\Double speed");
- stringsEvent[EVENT_INTERFACE_KSPEED30] = TR("Speed 3.0x\\Three times faster");
+ assert(INPUT_SLOT_MAX < EVENT_INTERFACE_KEY_END-EVENT_INTERFACE_KEY);
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_LEFT] = TR("Turn left\\turns the bot to the left");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_RIGHT] = TR("Turn right\\turns the bot to the right");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_UP] = TR("Forward\\Moves forward");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_DOWN] = TR("Backward\\Moves backward");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_GUP] = TR("Climb\\Increases the power of the jet");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_GDOWN] = TR("Descend\\Reduces the power of the jet");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_CAMERA] = TR("Change camera\\Switches between onboard camera and following camera");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_DESEL] = TR("Previous object\\Selects the previous object");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_ACTION] = TR("Standard action\\Standard action of the bot (take/grab, shoot, sniff, etc)");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_NEAR] = TR("Camera closer\\Moves the camera forward");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_AWAY] = TR("Camera back\\Moves the camera backward");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_NEXT] = TR("Next object\\Selects the next object");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_HUMAN] = TR("Select the astronaut\\Selects the astronaut");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_QUIT] = TR("Quit\\Quit the current mission or exercise");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_HELP] = TR("Instructions\\Shows the instructions for the current mission");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_PROG] = TR("Programming help\\Gives more detailed help with programming");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_CBOT] = TR("Key word help\\More detailed help about key words");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_VISIT] = TR("Origin of last message\\Shows where the last message was sent from");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_SPEED10] = TR("Speed 1.0x\\Normal speed");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_SPEED15] = TR("Speed 1.5x\\1.5 times faster");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_SPEED20] = TR("Speed 2.0x\\Double speed");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_CAMERA_UP] = TR("Camera up\\Increase camera angle while visiting message origin");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_CAMERA_DOWN] = TR("Camera down\\Decrease camera angle while visiting message origin");
+ stringsEvent[EVENT_INTERFACE_KEY+INPUT_SLOT_PAUSE] = TR("Pause\\Pause the game without opening menu");
stringsEvent[EVENT_INTERFACE_VOLSOUND] = TR("Sound effects:\\Volume of engines, voice, shooting, etc.");
stringsEvent[EVENT_INTERFACE_VOLMUSIC] = TR("Background sound :\\Volume of audio tracks");
diff --git a/src/graphics/engine/camera.cpp b/src/graphics/engine/camera.cpp
index bafac0a..85ff56a 100644
--- a/src/graphics/engine/camera.cpp
+++ b/src/graphics/engine/camera.cpp
@@ -65,6 +65,8 @@ CCamera::CCamera()
m_main = CRobotMain::GetInstancePointer();
m_terrain = m_main->GetTerrain();
+
+ m_input = CInput::GetInstancePointer();
m_type = CAM_TYPE_FREE;
m_smooth = CAM_SMOOTH_NORM;
@@ -1225,12 +1227,12 @@ bool CCamera::EventFrameFree(const Event &event)
}
// PageUp/PageDown
- if ( event.trackedKeysState & TRKEY_NUM_MINUS )
+ if ( m_input->GetKeyState(INPUT_SLOT_AWAY) )
{
if (m_heightEye < 500.0f)
m_heightEye += event.rTime * factor * m_speed;
}
- if ( event.trackedKeysState & TRKEY_NUM_PLUS )
+ if ( m_input->GetKeyState(INPUT_SLOT_NEAR) )
{
if (m_heightEye > -2.0f)
m_heightEye -= event.rTime * factor * m_speed;
@@ -1318,12 +1320,12 @@ bool CCamera::EventFrameBack(const Event &event)
type = m_cameraObj->GetType();
// +/-.
- if (event.trackedKeysState & TRKEY_NUM_PLUS)
+ if (m_input->GetKeyState(INPUT_SLOT_NEAR))
{
m_backDist -= event.rTime * 30.0f * m_speed;
if (m_backDist < m_backMin) m_backDist = m_backMin;
}
- if (event.trackedKeysState & TRKEY_NUM_MINUS)
+ if (m_input->GetKeyState(INPUT_SLOT_AWAY))
{
m_backDist += event.rTime * 30.0f * m_speed;
if (m_backDist > 200.0f) m_backDist = 200.0f;
@@ -1467,12 +1469,12 @@ bool CCamera::EventFrameBack(const Event &event)
bool CCamera::EventFrameFix(const Event &event)
{
// +/-.
- if (event.trackedKeysState & TRKEY_NUM_PLUS)
+ if (m_input->GetKeyState(INPUT_SLOT_NEAR))
{
m_fixDist -= event.rTime * 30.0f * m_speed;
if (m_fixDist < 10.0f) m_fixDist = 10.0f;
}
- if (event.trackedKeysState & TRKEY_NUM_MINUS)
+ if (m_input->GetKeyState(INPUT_SLOT_AWAY))
{
m_fixDist += event.rTime * 30.0f * m_speed;
if (m_fixDist > 200.0f) m_fixDist = 200.0f;
@@ -1571,24 +1573,24 @@ bool CCamera::EventFrameVisit(const Event &event)
m_visitTime += event.rTime;
// +/-.
- if (event.trackedKeysState & TRKEY_NUM_PLUS)
+ if (m_input->GetKeyState(INPUT_SLOT_NEAR))
{
m_visitDist -= event.rTime * 50.0f * m_speed;
if (m_visitDist < 20.0f) m_visitDist = 20.0f;
}
- if (event.trackedKeysState & TRKEY_NUM_MINUS)
+ if (m_input->GetKeyState(INPUT_SLOT_AWAY))
{
m_visitDist += event.rTime * 50.0f * m_speed;
if (m_visitDist > 200.0f) m_visitDist = 200.0f;
}
// PageUp/Down.
- if (event.trackedKeysState & TRKEY_PAGE_UP)
+ if (m_input->GetKeyState(INPUT_SLOT_CAMERA_UP))
{
m_visitDirectionV -= event.rTime * 1.0f * m_speed;
if (m_visitDirectionV < -Math::PI * 0.40f) m_visitDirectionV = -Math::PI * 0.40f;
}
- if (event.trackedKeysState & TRKEY_PAGE_DOWN)
+ if (m_input->GetKeyState(INPUT_SLOT_CAMERA_DOWN))
{
m_visitDirectionV += event.rTime * 1.0f * m_speed;
if (m_visitDirectionV > 0.0f ) m_visitDirectionV = 0.0f;
diff --git a/src/graphics/engine/camera.h b/src/graphics/engine/camera.h
index 4fe821f..0ae1ca2 100644
--- a/src/graphics/engine/camera.h
+++ b/src/graphics/engine/camera.h
@@ -32,6 +32,7 @@
class CObject;
class CRobotMain;
+class CInput;
// Graphics module namespace
@@ -265,6 +266,7 @@ protected:
CRobotMain* m_main;
CTerrain* m_terrain;
CWater* m_water;
+ CInput* m_input;
//! The type of camera
CameraType m_type;
diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp
index 5d08559..697a53a 100644
--- a/src/object/robotmain.cpp
+++ b/src/object/robotmain.cpp
@@ -1422,7 +1422,7 @@ bool CRobotMain::ProcessEvent(Event &event)
else if (!m_cmdEdit)
m_dialog->StartAbort(); // do you want to leave?
}
- if (event.key.key == KEY(PAUSE)) //TODO: key binding
+ if (event.key.slot == INPUT_SLOT_PAUSE)
{
if (!m_movieLock && !m_editLock && !m_cmdEdit &&
m_camera->GetType() != Gfx::CAM_TYPE_VISIT &&
diff --git a/src/ui/maindialog.cpp b/src/ui/maindialog.cpp
index 3e1331a..3240cfa 100644
--- a/src/ui/maindialog.cpp
+++ b/src/ui/maindialog.cpp
@@ -71,8 +71,6 @@ namespace Ui {
const int KEY_VISIBLE = 6; // number of visible keys redefinable
-const int KEY_TOTAL = 21; // total number of keys redefinable
-
const float WELCOME_LENGTH = 3.0f;
const int MAX_FNAME = 255; // TODO: remove after rewrite to std::string
@@ -1338,8 +1336,8 @@ void CMainDialog::ChangePhase(Phase phase)
pos.x = 510.0f/640.0f;
pos.y = 168.0f/480.0f;
ps = pw->CreateScroll(pos, ddim, -1, EVENT_INTERFACE_KSCROLL);
- ps->SetVisibleRatio(static_cast<float>(KEY_VISIBLE/KEY_TOTAL));
- ps->SetArrowStep(1.0f/(static_cast<float>(KEY_TOTAL-KEY_VISIBLE)));
+ ps->SetVisibleRatio(static_cast<float>(KEY_VISIBLE/INPUT_SLOT_MAX));
+ ps->SetArrowStep(1.0f/(static_cast<float>(INPUT_SLOT_MAX-KEY_VISIBLE)));
UpdateKey();
ddim.x = dim.x*6;
@@ -2630,32 +2628,6 @@ bool CMainDialog::EventProcess(const Event &event)
UpdateKey();
break;
- case EVENT_INTERFACE_KLEFT:
- case EVENT_INTERFACE_KRIGHT:
- case EVENT_INTERFACE_KUP:
- case EVENT_INTERFACE_KDOWN:
- case EVENT_INTERFACE_KGUP:
- case EVENT_INTERFACE_KGDOWN:
- case EVENT_INTERFACE_KCAMERA:
- case EVENT_INTERFACE_KDESEL:
- case EVENT_INTERFACE_KACTION:
- case EVENT_INTERFACE_KNEAR:
- case EVENT_INTERFACE_KAWAY:
- case EVENT_INTERFACE_KNEXT:
- case EVENT_INTERFACE_KHUMAN:
- case EVENT_INTERFACE_KQUIT:
- case EVENT_INTERFACE_KHELP:
- case EVENT_INTERFACE_KPROG:
- case EVENT_INTERFACE_KCBOT:
- case EVENT_INTERFACE_KSPEED10:
- case EVENT_INTERFACE_KSPEED15:
- case EVENT_INTERFACE_KSPEED20:
- case EVENT_INTERFACE_KSPEED30:
- case EVENT_INTERFACE_KVISIT:
- ChangeKey(event.type);
- UpdateKey();
- break;
-
case EVENT_INTERFACE_KDEF:
CInput::GetInstancePointer()->SetDefaultInputBindings();
UpdateKey();
@@ -2667,6 +2639,11 @@ bool CMainDialog::EventProcess(const Event &event)
break;
default:
+ if(event.type >= EVENT_INTERFACE_KEY && event.type <= EVENT_INTERFACE_KEY_END)
+ {
+ ChangeKey(event.type);
+ UpdateKey();
+ }
break;
}
return false;
@@ -5329,59 +5306,6 @@ void CMainDialog::ChangeSetupQuality(int quality)
//m_engine->FirstExecuteAdapt(false);
}
-
-// Redefinable keys:
-
-static InputSlot key_table[KEY_TOTAL] =
-{
- INPUT_SLOT_LEFT,
- INPUT_SLOT_RIGHT,
- INPUT_SLOT_UP,
- INPUT_SLOT_DOWN,
- INPUT_SLOT_GUP,
- INPUT_SLOT_GDOWN,
- INPUT_SLOT_ACTION,
- INPUT_SLOT_CAMERA,
- INPUT_SLOT_VISIT,
- INPUT_SLOT_NEXT,
- INPUT_SLOT_HUMAN,
- INPUT_SLOT_DESEL,
- INPUT_SLOT_NEAR,
- INPUT_SLOT_AWAY,
- INPUT_SLOT_HELP,
- INPUT_SLOT_PROG,
- INPUT_SLOT_CBOT,
- INPUT_SLOT_SPEED10,
- INPUT_SLOT_SPEED15,
- INPUT_SLOT_SPEED20,
- INPUT_SLOT_QUIT,
-};
-
-static EventType key_event[KEY_TOTAL] =
-{
- EVENT_INTERFACE_KLEFT,
- EVENT_INTERFACE_KRIGHT,
- EVENT_INTERFACE_KUP,
- EVENT_INTERFACE_KDOWN,
- EVENT_INTERFACE_KGUP,
- EVENT_INTERFACE_KGDOWN,
- EVENT_INTERFACE_KACTION,
- EVENT_INTERFACE_KCAMERA,
- EVENT_INTERFACE_KVISIT,
- EVENT_INTERFACE_KNEXT,
- EVENT_INTERFACE_KHUMAN,
- EVENT_INTERFACE_KDESEL,
- EVENT_INTERFACE_KNEAR,
- EVENT_INTERFACE_KAWAY,
- EVENT_INTERFACE_KHELP,
- EVENT_INTERFACE_KPROG,
- EVENT_INTERFACE_KCBOT,
- EVENT_INTERFACE_KSPEED10,
- EVENT_INTERFACE_KSPEED15,
- EVENT_INTERFACE_KSPEED20,
- EVENT_INTERFACE_KQUIT,
-};
-
// Updates the list of keys.
void CMainDialog::UpdateKey()
@@ -5392,10 +5316,10 @@ void CMainDialog::UpdateKey()
CScroll* ps = static_cast<CScroll*>(pw->SearchControl(EVENT_INTERFACE_KSCROLL));
if (ps == nullptr) return;
- int first = static_cast<int>(ps->GetVisibleValue()*(KEY_TOTAL-KEY_VISIBLE));
+ int first = static_cast<int>(ps->GetVisibleValue()*(INPUT_SLOT_MAX-KEY_VISIBLE));
- for (int i = 0; i < KEY_TOTAL; i++)
- pw->DeleteControl(key_event[i]);
+ for (int i = 0; i < INPUT_SLOT_MAX; i++)
+ pw->DeleteControl(static_cast<EventType>(EVENT_INTERFACE_KEY+i));
Math::Point dim;
dim.x = 400.0f/640.0f;
@@ -5405,11 +5329,11 @@ void CMainDialog::UpdateKey()
pos.y = 168.0f/480.0f + dim.y*(KEY_VISIBLE-1);
for (int i = 0; i < KEY_VISIBLE; i++)
{
- pw->CreateKey(pos, dim, -1, key_event[first+i]);
- CKey* pk = static_cast<CKey*>(pw->SearchControl(key_event[first+i]));
+ pw->CreateKey(pos, dim, -1, static_cast<EventType>(EVENT_INTERFACE_KEY+first+i));
+ CKey* pk = static_cast<CKey*>(pw->SearchControl(static_cast<EventType>(EVENT_INTERFACE_KEY+first+i)));
if (pk == nullptr) break;
- pk->SetBinding(CInput::GetInstancePointer()->GetInputBinding(key_table[first+i]));
+ pk->SetBinding(CInput::GetInstancePointer()->GetInputBinding(static_cast<InputSlot>(first+i)));
pos.y -= dim.y;
}
}
@@ -5424,14 +5348,14 @@ void CMainDialog::ChangeKey(EventType event)
CScroll* ps = static_cast<CScroll*>(pw->SearchControl(EVENT_INTERFACE_KSCROLL));
if (ps == nullptr) return;
- for (int i = 0; i < KEY_TOTAL; i++)
+ for (int i = 0; i < INPUT_SLOT_MAX; i++)
{
- if ( key_event[i] == event )
+ if ( EVENT_INTERFACE_KEY+i == event )
{
- CKey* pk = static_cast<CKey*>(pw->SearchControl(key_event[i]));
+ CKey* pk = static_cast<CKey*>(pw->SearchControl(static_cast<EventType>(EVENT_INTERFACE_KEY+i)));
if (pk == nullptr) break;
- CInput::GetInstancePointer()->SetInputBinding(key_table[i], pk->GetBinding());
+ CInput::GetInstancePointer()->SetInputBinding(static_cast<InputSlot>(i), pk->GetBinding());
}
}
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git
More information about the Pkg-games-commits
mailing list