joystick update
[blender.git] / source / gameengine / GameLogic / SCA_JoystickSensor.h
1 /**
2  * ***** BEGIN GPL 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.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
17  *
18  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28
29 #ifndef __JOYSENSOR_H_
30 #define __JOYSENSOR_H
31
32 #include "SCA_ISensor.h"
33
34 class SCA_JoystickSensor :public SCA_ISensor
35 {
36         Py_Header;
37         class SCA_JoystickManager*      m_pJoystickMgr;
38         
39         /**
40          * Axis 1-or-2
41          */
42         int     m_axis;
43         /**
44          * Axis flag to find direction
45          */
46         int     m_axisf;
47         /**
48          * The actual button
49          */
50         int     m_button;
51         /**
52          * Flag for a pressed or released button
53          */
54         int     m_buttonf;
55         /**
56          * The actual hat
57          */
58         int     m_hat;
59         /**
60          * Flag to find direction 1-12
61          */
62         int     m_hatf;
63         /**
64          * The threshold value the axis acts opon
65          */
66         int     m_precision;
67         /**
68          * Is an event triggered ?
69          */
70         bool    m_istrig;
71         /**
72          * Last trigger state for this sensors joystick,
73          * Otherwise it will trigger all the time
74          * this is used to see if the trigger state changes.
75          */
76         bool    m_istrig_prev;
77         /**
78          * The mode to determine axis,button or hat
79          */
80         short int m_joymode;
81         /**
82          * Select which joystick to use
83          */
84         short int m_joyindex;
85
86         /**
87          * Detect all events for the currently selected type
88          */
89         bool m_bAllEvents;
90
91         enum KX_JOYSENSORMODE {
92                 KX_JOYSENSORMODE_NODEF = 0,
93                 KX_JOYSENSORMODE_AXIS,
94                 KX_JOYSENSORMODE_BUTTON,
95                 KX_JOYSENSORMODE_HAT,
96                 KX_JOYSENSORMODE_MAX
97         };
98         bool isValid(KX_JOYSENSORMODE);
99
100 public:
101         SCA_JoystickSensor(class SCA_JoystickManager* eventmgr,
102                                            SCA_IObject* gameobj,
103                                            short int joyindex,
104                                            short int joymode,
105                                            int axis, int axisf,int prec,
106                                            int button,
107                                            int hat, int hatf, bool allevents,
108                                            PyTypeObject* T=&Type );
109         virtual ~SCA_JoystickSensor();
110         virtual CValue* GetReplica();
111         
112         virtual bool Evaluate(CValue* event);
113         virtual bool IsPositiveTrigger();
114         virtual void Init();
115         
116         short int GetJoyIndex(void){
117                 return m_joyindex;
118         }
119
120         /* --------------------------------------------------------------------- */
121         /* Python interface ---------------------------------------------------- */
122         /* --------------------------------------------------------------------- */
123
124         virtual PyObject* _getattr(const STR_String& attr);
125
126         /* Joystick Index */
127         KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,GetIndex);
128         KX_PYMETHOD_DOC_O(SCA_JoystickSensor,SetIndex);
129         /* Axes*/
130         KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,GetAxis);
131         KX_PYMETHOD_DOC_VARARGS(SCA_JoystickSensor,SetAxis);
132         KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,GetAxisValue);
133         KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,GetThreshold);
134         KX_PYMETHOD_DOC_VARARGS(SCA_JoystickSensor,SetThreshold);
135         /* Buttons */
136         KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,GetButton);
137         KX_PYMETHOD_DOC_O(SCA_JoystickSensor,SetButton);
138         KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,GetButtonValue);
139         /* Hats */
140         KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,GetHat);
141         KX_PYMETHOD_DOC_VARARGS(SCA_JoystickSensor,SetHat);
142         /* number of */
143         KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,NumberOfAxes);
144         KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,NumberOfButtons);
145         KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,NumberOfHats);
146         KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,Connected);
147         
148 };
149
150 #endif