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