[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