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