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 # define OIS_APPLE_PLATFORM 82 # undef _OISExport 83 # define _OISExport __attribute__((visibility("default"))) 84 #else //Probably Linux 85 # define OIS_LINUX_PLATFORM 86 #endif 87 88 //Is Processor 32 or 64 bits... 89 #if defined(__x86_64__) 90 # define OIS_ARCH_64 91 #else 92 # define OIS_ARCH_32 93 #endif 94 95 //-------------- Common Classes, Enums, and Typdef's -------------------------// 96 #define OIS_VERSION_MAJOR 1 97 #define OIS_VERSION_MINOR 2 98 #define OIS_VERSION_PATCH 0 99 #define OIS_VERSION_NAME "Smash" 100 101 #define OIS_VERSION ((OIS_VERSION_MAJOR << 16) | (OIS_VERSION_MINOR << 8) | OIS_VERSION_PATCH) 102 103 namespace OIS 104 { 105 //Forward Declarations 106 class InputManager; 107 class FactoryCreator; 108 class Object; 109 class Keyboard; 110 class Mouse; 111 class JoyStick; 112 class KeyListener; 113 class MouseListener; 114 class JoyStickListener; 115 class Interface; 116 class ForceFeedback; 117 class Effect; 118 class Exception; 119 120 //! Way to send OS nuetral parameters.. ie OS Window handles, modes, flags 121 typedef std::multimap<std::string, std::string> ParamList; 122 123 //! List of FactoryCreator's 124 typedef std::vector<FactoryCreator*> FactoryList; 125 126 //! Map of FactoryCreator created Objects 127 typedef std::map<Object*, FactoryCreator*> FactoryCreatedObject; 128 129 //! Each Input class has a General Type variable, a form of RTTI 130 enum Type 131 { 132 OISUnknown = 0, 133 OISKeyboard = 1, 134 OISMouse = 2, 135 OISJoyStick = 3, 136 OISTablet = 4 137 }; 138 139 //! Map of device objects connected and their respective vendors 140 typedef std::multimap<Type, std::string> DeviceList; 141 142 //-------- Shared common components ------------------------// 143 144 //! Base type for all device components (button, axis, etc) 145 enum ComponentType 146 { 147 OIS_Unknown = 0, 148 OIS_Button = 1, //ie. Key, mouse button, joy button, etc 149 OIS_Axis = 2, //ie. A joystick or mouse axis 150 OIS_Slider = 3, // 151 OIS_POV = 4, //ie. Arrow direction keys 152 OIS_Vector3 = 5 //ie. WiiMote orientation 153 }; 154 155 //! Base of all device components (button, axis, etc) 156 class _OISExport Component 157 { 158 public: Component()159 Component() : cType(OIS_Unknown) {}; Component(ComponentType type)160 Component(ComponentType type) : cType(type) {}; 161 //! Indicates what type of coponent this is 162 ComponentType cType; 163 }; 164 165 //! Button can be a keyboard key, mouse button, etc 166 class _OISExport Button : public Component 167 { 168 public: Button()169 Button() {} Button(bool bPushed)170 Button(bool bPushed) : Component(OIS_Button), pushed(bPushed) {}; 171 //! true if pushed, false otherwise 172 bool pushed; 173 }; 174 175 //! Axis component 176 class _OISExport Axis : public Component 177 { 178 public: Axis()179 Axis() : Component(OIS_Axis), abs(0), rel(0), absOnly(false) {}; 180 181 //! Absoulte and Relative value components 182 int abs, rel; 183 184 //! Indicates if this Axis only supports Absoulte (ie JoyStick) 185 bool absOnly; 186 187 //! Used internally by OIS clear()188 void clear() 189 { 190 abs = rel = 0; 191 } 192 }; 193 194 //! A 3D Vector component (perhaps an orientation, as in the WiiMote) 195 class _OISExport Vector3 : public Component 196 { 197 public: Vector3()198 Vector3() {} Vector3(float _x,float _y,float _z)199 Vector3(float _x, float _y, float _z) : Component(OIS_Vector3), x(_x), y(_y), z(_z) {}; 200 201 //! X component of vector 202 float x; 203 204 //! Y component of vector 205 float y; 206 207 //! Z component of vector 208 float z; 209 clear()210 void clear() 211 { 212 x = y = z = 0.0f; 213 } 214 }; 215 } 216 217 #endif //end if prereq header defined 218