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_Prereqs_H 24 #define OIS_Prereqs_H 25 //----------------------------------------------------------------------------// 26 // This Header File contains: forward declared classes 27 // * Forward Declarations of all public API classes 28 // * Several typedef's used around the library 29 // * Base class component types 30 // * Preprocessor definitons 31 //----------------------------------------------------------------------------// 32 33 //-------------- Common STL Containers ---------------------------------------// 34 #include <vector> 35 #include <string> 36 #include <map> 37 #include "OISConfig.h" 38 39 // Default is blank for most OS's 40 #define _OISExport 41 42 //-------------- Determine Compiler --------------------------------- 43 #if defined( _MSC_VER ) 44 # define OIS_MSVC_COMPILER 45 #elif defined( __GNUC__ ) 46 # if defined( __WIN32__ ) || defined( _WIN32 ) 47 # define OIS_MINGW_COMPILER 48 # else 49 # define OIS_GCC_COMPILER 50 # endif 51 #elif defined( __BORLANDC__ ) 52 # define OIS_BORLAND_COMPILER 53 #else 54 # error No Recognized Compiler! 55 #endif 56 57 // --------------- Determine Operating System Platform --------------- 58 #if defined( __WIN32__ ) || defined( _WIN32 ) // Windows 2000, XP, ETC 59 # if defined ( _XBOX ) 60 # define OIS_XBOX_PLATFORM 61 # else 62 # define OIS_WIN32_PLATFORM 63 # if defined( OIS_DYNAMIC_LIB ) 64 # undef _OISExport 65 //Ignorable Dll interface warning... 66 # if !defined(OIS_MINGW_COMPILER) 67 # pragma warning (disable : 4251) 68 # endif 69 # if defined( OIS_NONCLIENT_BUILD ) 70 # define _OISExport __declspec( dllexport ) 71 # else 72 # if defined(OIS_MINGW_COMPILER) 73 # define _OISExport 74 # else 75 # define _OISExport __declspec( dllimport ) 76 # endif 77 # endif 78 # endif 79 # endif 80 #elif defined( __APPLE_CC__ ) // Apple OS X 81 // Device Simulator 82 # if __IPHONE_OS_VERSION_MIN_REQUIRED >= 20201 || __IPHONE_OS_VERSION_MIN_REQUIRED >= 20000 83 //# if __IPHONE_OS_VERSION_MIN_REQUIRED >= 30000 || __IPHONE_OS_VERSION_MIN_REQUIRED >= 30000 84 # define OIS_IPHONE_PLATFORM 85 # else 86 # define OIS_APPLE_PLATFORM 87 # endif 88 # undef _OISExport 89 # define _OISExport __attribute__((visibility("default"))) 90 #else //Probably Linux 91 # define OIS_LINUX_PLATFORM 92 # include <unistd.h> 93 #endif 94 95 //Is Processor 32 or 64 bits... 96 #if defined(__x86_64__) 97 # define OIS_ARCH_64 98 #else 99 # define OIS_ARCH_32 100 #endif 101 102 //-------------- Common Classes, Enums, and Typdef's -------------------------// 103 #define OIS_VERSION_MAJOR 1 104 #define OIS_VERSION_MINOR 4 105 #define OIS_VERSION_PATCH 0 106 #define OIS_VERSION_NAME "1.4.0" 107 108 #define OIS_VERSION ((OIS_VERSION_MAJOR << 16) | (OIS_VERSION_MINOR << 8) | OIS_VERSION_PATCH) 109 110 namespace OIS 111 { 112 //Forward Declarations 113 class InputManager; 114 class FactoryCreator; 115 class Object; 116 class Keyboard; 117 class Mouse; 118 class JoyStick; 119 class MultiTouch; 120 class KeyListener; 121 class MouseListener; 122 class MultiTouchListener; 123 class JoyStickListener; 124 class Interface; 125 class ForceFeedback; 126 class Effect; 127 class Exception; 128 129 //! Way to send OS nuetral parameters.. ie OS Window handles, modes, flags 130 typedef std::multimap<std::string, std::string> ParamList; 131 132 //! List of FactoryCreator's 133 typedef std::vector<FactoryCreator*> FactoryList; 134 135 //! Map of FactoryCreator created Objects 136 typedef std::map<Object*, FactoryCreator*> FactoryCreatedObject; 137 138 //! Each Input class has a General Type variable, a form of RTTI 139 enum Type 140 { 141 OISUnknown = 0, 142 OISKeyboard = 1, 143 OISMouse = 2, 144 OISJoyStick = 3, 145 OISTablet = 4, 146 OISMultiTouch = 5 147 }; 148 149 //! Map of device objects connected and their respective vendors 150 typedef std::multimap<Type, std::string> DeviceList; 151 152 //-------- Shared common components ------------------------// 153 154 //! Base type for all device components (button, axis, etc) 155 enum ComponentType 156 { 157 OIS_Unknown = 0, 158 OIS_Button = 1, //ie. Key, mouse button, joy button, etc 159 OIS_Axis = 2, //ie. A joystick or mouse axis 160 OIS_Slider = 3, // 161 OIS_POV = 4, //ie. Arrow direction keys 162 OIS_Vector3 = 5 //ie. WiiMote orientation 163 }; 164 165 //! Base of all device components (button, axis, etc) 166 class _OISExport Component 167 { 168 public: 169 Component() : cType(OIS_Unknown) {}; 170 Component(ComponentType type) : cType(type) {}; 171 //! Indicates what type of coponent this is 172 ComponentType cType; 173 }; 174 175 //! Button can be a keyboard key, mouse button, etc 176 class _OISExport Button : public Component 177 { 178 public: 179 Button() : Component(OIS_Button), pushed(false) {} 180 Button(bool bPushed) : Component(OIS_Button), pushed(bPushed) {} 181 //! true if pushed, false otherwise 182 bool pushed; 183 }; 184 185 //! Axis component 186 class _OISExport Axis : public Component 187 { 188 public: 189 Axis() : Component(OIS_Axis), abs(0), rel(0), absOnly(false) {}; 190 191 //! Absoulte and Relative value components 192 int abs, rel; 193 194 //! Indicates if this Axis only supports Absoulte (ie JoyStick) 195 bool absOnly; 196 197 //! Used internally by OIS 198 void clear() 199 { 200 abs = rel = 0; 201 } 202 }; 203 204 //! A 3D Vector component (perhaps an orientation, as in the WiiMote) 205 class _OISExport Vector3 : public Component 206 { 207 public: 208 Vector3() {} 209 Vector3(float _x, float _y, float _z) : Component(OIS_Vector3), x(_x), y(_y), z(_z) {}; 210 211 //! X component of vector 212 float x; 213 214 //! Y component of vector 215 float y; 216 217 //! Z component of vector 218 float z; 219 220 void clear() 221 { 222 x = y = z = 0.0f; 223 } 224 }; 225 } 226 227 #endif //end if prereq header defined 228