Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/consolecommands3/src/libraries/core/input/KeyBinderManager.h @ 7199

Last change on this file since 7199 was 7199, checked in by landauf, 14 years ago

LuaFunctor better doesn't inherit from Functor since it's used completely differently. Saves us the hassle of exporting FunctorPtr to Lua and a bunch of useless functions.

  • Property svn:eol-style set to native
File size: 5.5 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Reto Grieder
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#ifndef _KeyBinderManager_H__
30#define _KeyBinderManager_H__
31
32#include "InputPrereqs.h"
33
34#include <map>
35#include <string>
36#include <boost/shared_ptr.hpp>
37
38#include "util/Singleton.h"
39#include "core/OrxonoxClass.h"
40
41namespace orxonox //tolua_export
42{ //tolua_export
43    /**
44    @brief
45        Handles the KeyBinders and supplies them throughout the game.
46
47        This interface merely serves to provide a static "keybind" command that always
48        maps to the currently active KeyBinder. You can set that with setCurrent().
49        There is also a default one, retrieved with getDefault(). The idea is that
50        mostly the default KeyBinder is active except for special situations (mini-game for inst).
51    @remarks
52        You are not forced to use the KeyBinder imposed by getCurrent(). But be aware that "keybind"
53        will not work as expected!
54    */
55    class _CoreExport KeyBinderManager //tolua_export
56        : public Singleton<KeyBinderManager>, public OrxonoxClass
57    { //tolua_export
58        friend class Singleton<KeyBinderManager>;
59    public:
60        KeyBinderManager();
61        ~KeyBinderManager();
62        void setConfigValues();
63
64        static KeyBinderManager& getInstance() { return Singleton<KeyBinderManager>::getInstance(); } //tolua_export
65        //! Returns the currently selected KeyBinder
66        KeyBinder* getCurrent() { return this->currentBinder_; } //tolua_export
67        //! Like getCurrent(), but returns it as InputHandler* (so you don't have to include KeyBinder.h)
68        InputHandler* getCurrentAsHandler();
69        //! Selects the current KeyBinder and creates it if not yet loaded.
70        void setCurrent(const std::string& filename);
71
72        //! Returns the default KeyBinder
73        KeyBinder* getDefault()
74            { return binders_[this->defaultFilename_]; }
75        //! Returns the default KeyBinder as InputHandler* (so you don't have to include KeyBinder.h)
76        InputHandler* getDefaultAsHandler();
77        //! Returns the filename of the default key bindings
78        const std::string& getDefaultFilename()
79            { return defaultFilename_; }
80        //! Selects the default KeyBinder as current one
81        void setToDefault()
82            { this->setCurrent(this->defaultFilename_); }
83
84        //! Returns a pointer to a KeyBinder (creates it if not yet loaded)
85        KeyBinder* get(const std::string& name);
86        //! Like get() but return value is of type InputHandler* (so you don't have to include KeyBinder.h)
87        InputHandler* getAsHandler(const std::string& name);
88
89        //! Loads a KeyBinder by creating it (no different from get() except for the return value)
90        void load(const std::string& filename);
91        //! Destroys a KeyBinder completely (does nothing if not yet loaded)
92        void unload(const std::string& filename);
93
94        //! Bind 'command' to any key pressed after this call (use with care!)
95        inline void keybind(const std::string& command) { this->keybindInternal(command, false); } //tolua_export
96        //! Bind 'command' to any key pressed after this call (use with care!), but temporarily (no file save)
97        inline void tkeybind(const std::string& command)
98            { this->keybindInternal(command, true); }
99        void unbind(const std::string& binding); //tolua_export
100        void tunbind(const std::string& binding);
101        void registerKeybindCallback(LuaFunctor* function); //tolua_export
102
103    private:
104        KeyBinderManager(const KeyBinderManager&);
105        void keybindInternal(const std::string& command, bool bTemporary);
106        void keybindKeyPressed(const std::string& keyName);
107        void defaultFilenameChanged();
108
109        // KeyBinder management
110        KeyBinder* currentBinder_;                   //! Currently selected KeyBinder (never NULL!)
111        std::map<std::string, KeyBinder*> binders_;  //! All loaded KeyBinders
112        bool bDefaultFileLoaded_;                    //! Tells whether the default one is loaded
113        std::string defaultFilename_;                //! Name of the file with the default key bindings
114
115        // keybind command related
116        SharedPtr<LuaFunctor> callbackFunction_;     //! Function to be called when key was pressed after "keybind" command
117        bool bBinding_;                              //! Tells whether a key binding process is active
118        bool bTemporary_;                            //! Stores tkeybind/keybind value
119        std::string command_;                        //! Stores the command received by (t)keybind
120
121        static KeyBinderManager* singletonPtr_s;
122    }; //tolua_export
123} //tolua_export
124
125#endif /* _KeyBinderManager_H__ */
Note: See TracBrowser for help on using the repository browser.