Added Joystick sensor (from snailrose)
[blender.git] / source / gameengine / GameLogic / Joystick / SCA_Joystick.h
1 /**
2  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version. The Blender
8  * Foundation also sells licenses for use in proprietary software under
9  * the Blender License.  See http://www.blender.org/BL/ for information
10  * about this.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software Foundation,
19  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20  *
21  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
22  * All rights reserved.
23  *
24  * The Original Code is: all of this file.
25  *
26  * Contributor(s): snailrose.
27  *
28  * ***** END GPL/BL DUAL LICENSE BLOCK *****
29  */
30 #ifndef _SCA_JOYSTICK_H_
31 #define _SCA_JOYSTICK_H_
32
33 #include "SCA_JoystickDefines.h"
34
35 using namespace std;
36
37 /*
38  * Basic Joystick class
39  */
40 class SCA_Joystick
41 {
42         class PrivateData;
43         PrivateData             *m_private;
44         int                             m_joyindex;
45         /*!
46          * the number of avail joysticks 
47          */
48         int                     m_numjoys;
49         /* 
50          *support for 2 axes 
51          */
52         int m_axis10,m_axis11;
53         int m_axis20,m_axis21;
54         /* 
55          * Precision or range of the axes
56          */
57         int                     m_prec;
58         /*
59          * multiple axis values stored here
60          */
61         int                     m_axisnum;
62         int                     m_axisvalue;
63         /*
64          * max # of axes avail
65          */
66         /*disabled
67         int                     m_axismax;
68         */
69         /* 
70          *      button values stored here 
71          */
72         int                     m_buttonnum;
73         /*
74          * max # of buttons avail
75         */
76         int                     m_buttonmax;
77          /* 
78          * hat values stored here 
79          */
80         int                     m_hatnum;
81         int                     m_hatdir;
82         /*
83          * max # of hats avail
84                 disabled
85         int                     m_hatmax;
86          */
87         /* is the joystick initialized ?*/
88         bool                    m_isinit;
89         
90         /* is triggered */
91         bool                    m_istrig;
92         /*
93          * Open the joystick
94          */
95         bool pCreateJoystickDevice(void);
96         /*
97          * Close the joystick
98          */
99         void pDestroyJoystickDevice(void);
100         
101         /*
102          * event callbacks
103          */
104         void OnAxisMotion(void);
105         void OnHatMotion(void);
106         void OnButtonUp(void);
107         void OnButtonDown(void);
108         void OnNothing(void);
109         void OnBallMotion(void){}
110         /*
111          * fills the axis mnember values 
112          */
113         void pFillAxes(void);
114
115         void pFillButtons(void);
116         /*
117          * returns m_axis10,m_axis11...
118          */
119         int pGetAxis(int axisnum, int udlr);
120         /*
121          * gets the current button
122          */
123         int pGetButtonPress(int button);
124         /*
125          * returns if no button is pressed
126          */
127         int pGetButtonRelease(int button);
128         /*
129          * gets the current hat direction
130          */
131         int pGetHat(int direction);
132         
133 public:
134         SCA_Joystick();
135         ~SCA_Joystick();
136         
137         bool CreateJoystickDevice(void);
138         void DestroyJoystickDevice(void);
139         void HandleEvents();
140         /*
141          */
142         bool aUpAxisIsPositive(int axis);
143         bool aDownAxisIsPositive(int axis);
144         bool aLeftAxisIsPositive(int axis);
145         bool aRightAxisIsPositive(int axis);
146         bool aButtonPressIsPositive(int button);
147         bool aButtonReleaseIsPositive(int button);
148         bool aHatIsPositive(int dir);
149         /*
150          * precision is default '3200' which is overridden by input
151          */
152         void cSetPrecision(int val);
153
154         int GetAxis10(void){
155                 return m_axis10;
156         }
157         int GetAxis11(void){
158                 return m_axis11;
159         }
160         int GetAxis20(void){
161                 return m_axis20;
162         }
163         int GetAxis21(void){
164                 return m_axis21;
165         }
166         int GetButton(void){
167                 return m_buttonnum;
168         }
169         int GetHat(void){
170                 return m_hatdir;
171         }
172         int GetThreshold(void){
173                 return m_prec;
174         }
175         bool IsTrig(void){
176                 return m_istrig;
177         }
178         
179         /*
180          * returns true if an event is being processed
181          */
182         bool GetJoyAxisMotion(void);
183         bool GetJoyButtonPress(void);
184         bool GetJoyButtonRelease(void);
185         bool GetJoyHatMotion(void);
186         /*
187          * returns the # of...
188          */
189         int GetNumberOfAxes(void);
190         int GetNumberOfButtons(void);
191         int GetNumberOfHats(void);
192         
193 };
194
195 #endif