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