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 <krzy...@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 _______________________________________________ Pkg-games-commits mailing list Pkg-games-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits