1 /* 2 The zlib/libpng License 3 4 Copyright (c) 2005-2007 Phillip Castaneda (pjcast -- www.wreckedgames.com) 5 6 This software is provided 'as-is', without any express or implied warranty. In no event will 7 the authors be held liable for any damages arising from the use of this software. 8 9 Permission is granted to anyone to use this software for any purpose, including commercial 10 applications, and to alter it and redistribute it freely, subject to the following 11 restrictions: 12 13 1. The origin of this software must not be misrepresented; you must not claim that 14 you wrote the original software. If you use this software in a product, 15 an acknowledgment in the product documentation would be appreciated but is 16 not required. 17 18 2. Altered source versions must be plainly marked as such, and must not be 19 misrepresented as being the original software. 20 21 3. This notice may not be removed or altered from any source distribution. 22 */ 23 #ifndef OIS_InputManager_H 24 #define OIS_InputManager_H 25 26 #include "OISPrereqs.h" 27 28 namespace OIS 29 { 30 //Forward declare a couple of classes we might use later 31 class LIRCFactoryCreator; 32 class WiiMoteFactoryCreator; 33 34 /** 35 Base Manager class. No longer a Singleton; so feel free to create as many InputManager's as you have 36 windows. 37 */ 38 class _OISExport InputManager 39 { 40 public: 41 /** 42 @remarks 43 Returns version number (useful in DLL/SO libs) 44 @returns 45 Bits: 1-8 Patch number, 9-16 Minor version, 17-32 Major version 46 */ 47 static unsigned int getVersionNumber(); 48 49 /** 50 @remarks 51 Returns version string (useful in DLL/SO libs) 52 @returns 53 Version name 54 */ 55 const std::string &getVersionName(); 56 57 /** 58 @remarks 59 Creates appropriate input system dependent on platform. 60 @param winHandle 61 Contains OS specific window handle (such as HWND or X11 Window) 62 @returns 63 A pointer to the created manager, or raises Exception 64 */ 65 static InputManager* createInputSystem( std::size_t winHandle ); 66 67 /** 68 @remarks 69 Creates appropriate input system dependent on platform. 70 @param paramList 71 ParamList contains OS specific info (such as HWND and HINSTANCE for window apps), 72 and access mode. 73 @returns 74 A pointer to the created manager, or raises Exception 75 */ 76 static InputManager* createInputSystem( ParamList ¶mList ); 77 78 /** 79 @remarks 80 Destroys the InputManager 81 @param manager 82 Manager to destroy 83 */ 84 static void destroyInputSystem(InputManager* manager); 85 86 /** 87 @remarks Gets the name of the current platform input system 88 */ 89 const std::string& inputSystemName(); 90 91 /** 92 @remarks 93 Returns the number of the specified OIS::Type devices discovered by OIS 94 @param iType 95 Type that you are interested in 96 */ 97 int getNumberOfDevices( Type iType ); 98 99 /** 100 @remarks 101 Lists all unused devices 102 @returns 103 DeviceList which contains Type and vendor of device 104 */ 105 DeviceList listFreeDevices(); 106 107 /** 108 @remarks 109 Tries to create an object with the specified vendor. If you have no 110 preference of vendor, leave vender as default (""). Raises exception on failure 111 */ 112 Object* createInputObject( Type iType, bool bufferMode, const std::string &vendor = ""); 113 114 /** 115 @remarks Destroys Input Object 116 */ 117 void destroyInputObject( Object* obj ); 118 119 /** 120 @remarks 121 Add a custom object factory to allow for user controls. 122 @param factory 123 Factory instance to add 124 @notes 125 Make sure you do not delete the factory before devices created from 126 the factory are destroyed (either by calling RemoveFactoryCreator, or shutting down 127 the input system). Order should be something like the following: 128 * Create Input System 129 * Create Factory Instance 130 * AddFactoryCreator(factory) 131 * Create a device from the InputManager (device created by factory) 132 * One of the follwoing: 133 * removeFactoryCreator(factory) 134 * inputManager->destroyInputObject(obj) 135 * destroyInputSystem(inputManager) 136 * destroy Factory Instance 137 You can safely delete the factory instance once you have removed it or shut down the 138 input manager. 139 */ 140 void addFactoryCreator( FactoryCreator* factory ); 141 142 /** 143 @remarks 144 Remove a previously added object factory 145 @param factory 146 Factory object to remove. 147 @notes 148 Removing a factory will automatically destroy any Objects created from the factory 149 */ 150 void removeFactoryCreator( FactoryCreator* factory ); 151 152 //! All generic devices OIS supports internally (if they are compiled in) 153 enum AddOnFactories 154 { 155 AddOn_All = 0, //All Devices 156 AddOn_LIRC = 1, //PC Linux Infrared Remote Control 157 AddOn_WiiMote = 2 //PC WiiMote Support 158 }; 159 160 /** 161 @remarks 162 Enable an addon FactoryCreator extension. By default, none are activated. 163 If the desired support was not compiled in, this has no effect. Calling 164 multiple times has no effect. Once activated, there is no way to deactivate - 165 simply destroy and recreate input manager. 166 */ 167 void enableAddOnFactory(AddOnFactories factory); 168 169 protected: 170 /** 171 @remarks 172 Called from createInputSystem, gives derived input class a chance to setup after it is created 173 */ 174 virtual void _initialize(ParamList ¶mList) = 0; 175 176 /** 177 @remarks 178 Derived classes must provide input system name 179 */ 180 InputManager(const std::string& name); 181 182 /** 183 @remarks 184 Virtual Destructor - this base class will clean up all devices still opened in mFactoryObjects list 185 */ 186 virtual ~InputManager(); 187 188 //! OIS Version name 189 const std::string m_VersionName; 190 191 //! FactoryCreator list 192 FactoryList mFactories; 193 194 //! Factory created objects - useful so we can find creator to send destruction request to 195 FactoryCreatedObject mFactoryObjects; 196 197 //! Name of the input system 198 const std::string mInputSystemName; 199 200 //! Extra factory (not enabled by default) 201 LIRCFactoryCreator *m_lircSupport; 202 WiiMoteFactoryCreator *m_wiiMoteSupport; 203 }; 204 } 205 #endif 206