• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 &paramList );
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 &paramList) = 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