BGE: Add level mode to property actuator
[blender.git] / source / blender / makesdna / DNA_sensor_types.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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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 /** \file DNA_sensor_types.h
29  *  \ingroup DNA
30  *  \since mar-2001
31  *  \author nzc
32  *
33  * #bSensor type is specifically for use by Object logic-bricks in the game-engine.
34  */
35
36 #ifndef __DNA_SENSOR_TYPES_H__
37 #define __DNA_SENSOR_TYPES_H__
38
39 struct Object;
40 struct Material;
41
42 /* ****************** SENSORS ********************* */
43
44 typedef struct bNearSensor {
45         char name[64];  /* MAX_NAME */
46         float dist, resetdist;
47         int lastval, pad;
48 } bNearSensor;
49
50 /**
51  * Defines the settings of a mouse sensor.
52  */
53 typedef struct bMouseSensor {
54         /**
55          * The type of key this sensor listens to. 
56          */
57         short type;
58         short flag;
59         short pad1;
60         short pad2;
61 } bMouseSensor;
62
63 /* DEPRECATED */
64 typedef struct bTouchSensor {
65         char name[64];  /* MAX_NAME */
66         struct Material *ma;
67         float dist, pad;
68 } bTouchSensor;
69
70 typedef struct bKeyboardSensor {
71         short key, qual;
72         short type, qual2;
73         /**
74          * Name of the target property
75          */
76         char targetName[64];    /* MAX_NAME */
77         /**
78          * Name of the toggle property
79          */
80         char toggleName[64];    /* MAX_NAME */
81 } bKeyboardSensor;
82
83 typedef struct bPropertySensor {
84         int type;
85         int pad;
86         char name[64];  /* MAX_NAME */
87         char value[64];
88         char maxvalue[64];
89 } bPropertySensor;
90
91 typedef struct bActuatorSensor {
92         int type;
93         int pad;
94         char name[64];  /* MAX_NAME */
95 } bActuatorSensor;
96
97 typedef struct bDelaySensor {
98         short delay;
99         short duration;
100         short flag;
101         short pad;
102 } bDelaySensor;
103
104 typedef struct bCollisionSensor {
105         char name[64];          /* property name. MAX_NAME */
106         char materialName[64];  /* material      */
107         // struct Material *ma; // XXX remove materialName
108         short damptimer, damp;
109         short mode;             /* flag to choose material or property */
110         short pad2;
111 } bCollisionSensor;
112
113 typedef struct bRadarSensor {
114         char name[64];  /* MAX_NAME */
115         float angle;
116         float range;
117         short flag, axis;
118 } bRadarSensor;
119
120 typedef struct bRandomSensor {
121         char name[64];  /* MAX_NAME */
122         int seed;
123         int delay;
124 } bRandomSensor;
125
126 typedef struct bRaySensor {
127         char name[64];  /* MAX_NAME */
128         float range;
129         char propname[64];
130         char matname[64];
131         //struct Material *ma; // XXX remove materialName
132         short mode;
133         short pad1;
134         int axisflag;
135 } bRaySensor;
136
137 typedef struct bArmatureSensor {
138         char posechannel[64];   /* MAX_NAME */
139         char constraint[64];    /* MAX_NAME */
140         int  type;
141         float value;
142 } bArmatureSensor;
143
144 typedef struct bMessageSensor {
145         /**
146          * (Possible future use) pointer to a single sender object
147          */
148         struct Object *fromObject;
149
150         /**
151          * Can be used to filter on subjects like this
152          */
153         char subject[64];
154
155         /**
156          * (Possible future use) body to filter on
157          */
158         char body[64];
159 } bMessageSensor;
160
161 typedef struct bSensor {
162         struct bSensor *next, *prev;
163         /* pulse and freq are the bool toggle and frame count for pulse mode */
164         short type, otype, flag, pulse;
165         short freq, totlinks, pad1, pad2;
166         char name[64];  /* MAX_NAME */
167         void *data;
168         
169         struct bController **links;
170         
171         struct Object *ob;
172
173         /* just add here, to avoid align errors... */
174         short invert; /* Whether or not to invert the output. */
175         short level;  /* Whether the sensor is level base (edge by default) */
176         short tap;
177         short pad;
178 } bSensor;
179
180 typedef struct bJoystickSensor {
181         char name[64];  /* MAX_NAME */
182         char type;
183         char joyindex;
184         short flag;
185         short axis;
186         short axis_single;
187         int axisf;
188         int button;
189         int hat;
190         int hatf;
191         int precision;
192 } bJoystickSensor;
193
194 /* bMouseSensor->type: uses blender event defines */
195
196 /* bMouseSensor->flag: only pulse for now */
197 #define SENS_MOUSE_FOCUS_PULSE  1
198
199 /* propertysensor->type */
200 #define SENS_PROP_EQUAL         0
201 #define SENS_PROP_NEQUAL        1
202 #define SENS_PROP_INTERVAL      2
203 #define SENS_PROP_CHANGED       3
204 #define SENS_PROP_EXPRESSION    4
205 #define SENS_PROP_LESSTHAN      5
206 #define SENS_PROP_GREATERTHAN   6
207
208 /* raysensor->axisflag */
209 /* flip x and y to make y default!!! */
210 #define SENS_RAY_X_AXIS     1
211 #define SENS_RAY_Y_AXIS     0
212 #define SENS_RAY_Z_AXIS     2
213 #define SENS_RAY_NEG_X_AXIS     3
214 #define SENS_RAY_NEG_Y_AXIS     4
215 #define SENS_RAY_NEG_Z_AXIS     5
216 //#define SENS_RAY_NEGATIVE_AXIS     1
217
218 /* bRadarSensor->axis */
219 #define SENS_RADAR_X_AXIS     0
220 #define SENS_RADAR_Y_AXIS     1
221 #define SENS_RADAR_Z_AXIS     2
222 #define SENS_RADAR_NEG_X_AXIS     3
223 #define SENS_RADAR_NEG_Y_AXIS     4
224 #define SENS_RADAR_NEG_Z_AXIS     5
225
226 /* bMessageSensor->type */
227 #define SENS_MESG_MESG          0
228 #define SENS_MESG_PROP          1
229
230 /* bArmatureSensor->type */
231 #define SENS_ARM_STATE_CHANGED          0
232 #define SENS_ARM_LIN_ERROR_BELOW        1
233 #define SENS_ARM_LIN_ERROR_ABOVE        2
234 #define SENS_ARM_ROT_ERROR_BELOW        3
235 #define SENS_ARM_ROT_ERROR_ABOVE        4
236 /* update this when adding new type */
237 #define SENS_ARM_MAXTYPE                        4
238
239 /* sensor->type */
240 #define SENS_ALWAYS             0
241 #define SENS_TOUCH              1  /* DEPRECATED */
242 #define SENS_NEAR               2
243 #define SENS_KEYBOARD   3
244 #define SENS_PROPERTY   4
245 #define SENS_MOUSE              5
246 #define SENS_COLLISION  6
247 #define SENS_RADAR              7
248 #define SENS_RANDOM     8
249 #define SENS_RAY        9
250 #define SENS_MESSAGE   10
251 #define SENS_JOYSTICK  11
252 #define SENS_ACTUATOR  12
253 #define SENS_DELAY     13
254 #define SENS_ARMATURE  14
255 /* sensor->flag */
256 #define SENS_SHOW               1
257 #define SENS_DEL                2
258 #define SENS_NEW                4
259 #define SENS_NOT                8
260 #define SENS_VISIBLE    16
261 #define SENS_PIN                32
262 #define SENS_DEACTIVATE 64
263
264 /* sensor->pulse */
265 #define SENS_PULSE_CONT         0
266 #define SENS_PULSE_REPEAT       1
267 //#define SENS_PULSE_ONCE       2
268 #define SENS_NEG_PULSE_MODE 4
269
270 /* sensor->suppress */
271 #define SENS_SUPPRESS_POSITIVE (1 << 0)
272 #define SENS_SUPPRESS_NEGATIVE (1 << 1)
273
274 /* collision, ray sensor modes: */
275 /* A little bit fake: when property is active, the first bit is
276  * reset. Bite me :) So we don't actually use it, so we comment it out
277  * ... The reason for this is that we need to be backward compatible,
278  * and have a proper default value for this thing.
279  * */
280 #define SENS_COLLISION_PROPERTY 0
281 #define SENS_COLLISION_MATERIAL 1
282 #define SENS_COLLISION_PULSE 2
283
284 /* ray specific mode */
285 /* X-Ray means that the ray will traverse objects that don't have the property/material */
286 #define SENS_RAY_PROPERTY               0
287 #define SENS_RAY_MATERIAL               1
288 #define SENS_RAY_XRAY                   2
289
290 /* Some stuff for the mouse sensor Type: */
291 #define BL_SENS_MOUSE_LEFT_BUTTON    1
292 #define BL_SENS_MOUSE_MIDDLE_BUTTON  2
293 #define BL_SENS_MOUSE_RIGHT_BUTTON   4
294 #define BL_SENS_MOUSE_WHEEL_UP       5
295 #define BL_SENS_MOUSE_WHEEL_DOWN     6
296 #define BL_SENS_MOUSE_MOVEMENT       8
297 #define BL_SENS_MOUSE_MOUSEOVER      16
298 #define BL_SENS_MOUSE_MOUSEOVER_ANY      32
299
300 /* Joystick sensor - sorted by axis types */
301 #define SENS_JOY_ANY_EVENT              1
302
303 #define SENS_JOY_BUTTON         0                       /* axis type */
304 #define SENS_JOY_BUTTON_PRESSED 0
305 #define SENS_JOY_BUTTON_RELEASED        1
306
307 #define SENS_JOY_AXIS                   1               /* axis type */
308 #define SENS_JOY_X_AXIS         0
309 #define SENS_JOY_Y_AXIS         1
310 #define SENS_JOY_NEG_X_AXIS             2
311 #define SENS_JOY_NEG_Y_AXIS             3
312 #define SENS_JOY_PRECISION              4
313
314 #define SENS_JOY_HAT                    2               /* axis type */
315 #define SENS_JOY_HAT_DIR                0
316 #define SENS_JOY_HAT_UP                 1
317 #define SENS_JOY_HAT_RIGHT              2
318 #define SENS_JOY_HAT_DOWN               4
319 #define SENS_JOY_HAT_LEFT               8
320
321 #define SENS_JOY_HAT_UP_RIGHT   SENS_JOY_HAT_UP | SENS_JOY_HAT_RIGHT
322 #define SENS_JOY_HAT_DOWN_RIGHT SENS_JOY_HAT_DOWN | SENS_JOY_HAT_RIGHT
323 #define SENS_JOY_HAT_UP_LEFT    SENS_JOY_HAT_UP | SENS_JOY_HAT_LEFT
324 #define SENS_JOY_HAT_DOWN_LEFT  SENS_JOY_HAT_DOWN | SENS_JOY_HAT_LEFT
325
326
327 #define SENS_JOY_AXIS_SINGLE    3               /* axis type */
328
329
330 #define SENS_DELAY_REPEAT               1
331 // should match JOYINDEX_MAX in SCA_JoystickDefines.h */
332 #define SENS_JOY_MAXINDEX               8
333
334 #endif  /* __DNA_SENSOR_TYPES_H__ */