2.50: svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r19323...
[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 bMessageSensor {
130         /**
131          * (Possible future use) pointer to a single sender object
132          */
133         struct Object *fromObject;
134
135         /**
136          * Can be used to filter on subjects like this
137          */
138         char subject[32];
139
140         /**
141          * (Possible future use) body to filter on
142          */
143         char body[32];
144 } bMessageSensor;
145
146 typedef struct bSensor {
147         struct bSensor *next, *prev;
148         /* pulse and freq are the bool toggle and frame count for pulse mode */
149         short type, otype, flag, pulse;
150         short freq, totlinks, pad1, pad2;
151         char name[32];
152         void *data;
153         
154         struct bController **links;
155         
156         struct Object *ob;
157
158         /* just add here, to avoid align errors... */
159         short invert; /* Whether or not to invert the output. */
160         short level;  /* Whether the sensor is level base (edge by default) */
161         int pad;
162 } bSensor;
163
164 typedef struct bJoystickSensor {
165         char name[32];
166         char type;
167         char joyindex;
168         short flag;
169         short axis;
170         short axis_single;
171         int axisf;
172         int button;
173         int hat;
174         int hatf;
175         int precision;
176 } bJoystickSensor;
177
178 /* bMouseSensor->type: uses blender event defines */
179
180 /* propertysensor->type */
181 #define SENS_PROP_EQUAL         0
182 #define SENS_PROP_NEQUAL        1
183 #define SENS_PROP_INTERVAL      2
184 #define SENS_PROP_CHANGED       3
185 #define SENS_PROP_EXPRESSION    4
186
187 /* raysensor->axisflag */
188 /* flip x and y to make y default!!! */
189 #define SENS_RAY_X_AXIS     1
190 #define SENS_RAY_Y_AXIS     0
191 #define SENS_RAY_Z_AXIS     2
192 #define SENS_RAY_NEG_X_AXIS     3
193 #define SENS_RAY_NEG_Y_AXIS     4
194 #define SENS_RAY_NEG_Z_AXIS     5
195 //#define SENS_RAY_NEGATIVE_AXIS     1
196
197 /* bMessageSensor->type */
198 #define SENS_MESG_MESG          0
199 #define SENS_MESG_PROP          1
200
201 /* sensor->type */
202 #define SENS_ALWAYS             0
203 #define SENS_TOUCH              1
204 #define SENS_NEAR               2
205 #define SENS_KEYBOARD   3
206 #define SENS_PROPERTY   4
207 #define SENS_MOUSE              5
208 #define SENS_COLLISION  6
209 #define SENS_RADAR              7
210 #define SENS_RANDOM     8
211 #define SENS_RAY        9
212 #define SENS_MESSAGE   10
213 #define SENS_JOYSTICK  11
214 #define SENS_ACTUATOR  12
215 #define SENS_DELAY     13
216 /* sensor->flag */
217 #define SENS_SHOW               1
218 #define SENS_DEL                2
219 #define SENS_NEW                4
220 #define SENS_NOT                8
221 #define SENS_VISIBLE    16
222 #define SENS_PIN                32
223
224 /* sensor->pulse */
225 #define SENS_PULSE_CONT         0
226 #define SENS_PULSE_REPEAT       1
227 //#define SENS_PULSE_ONCE       2
228 #define SENS_NEG_PULSE_MODE 4
229
230 /* sensor->suppress */
231 #define SENS_SUPPRESS_POSITIVE (1 << 0)
232 #define SENS_SUPPRESS_NEGATIVE (1 << 1)
233
234 /* collision, ray sensor modes: */
235 /* A little bit fake: when property is active, the first bit is
236  * reset. Bite me :) So we don't actually use it, so we comment it out
237  * ... The reason for this is that we need to be backward compatible,
238  * and have a proper default value for this thing.
239  * */
240 /*  #define SENS_COLLISION_PROPERTY 0  */
241 #define SENS_COLLISION_MATERIAL 1
242 #define SENS_COLLISION_PULSE 2
243 /* ray specific mode */
244 /* X-Ray means that the ray will traverse objects that don't have the property/material */
245 #define SENS_RAY_XRAY                   2
246
247 /* Some stuff for the mouse sensor Type: */
248 #define BL_SENS_MOUSE_LEFT_BUTTON    1
249 #define BL_SENS_MOUSE_MIDDLE_BUTTON  2
250 #define BL_SENS_MOUSE_RIGHT_BUTTON   4
251 #define BL_SENS_MOUSE_WHEEL_UP       5
252 #define BL_SENS_MOUSE_WHEEL_DOWN     6
253 #define BL_SENS_MOUSE_MOVEMENT       8
254 #define BL_SENS_MOUSE_MOUSEOVER      16
255 #define BL_SENS_MOUSE_MOUSEOVER_ANY      32
256
257 #define SENS_JOY_ANY_EVENT              1
258
259 #define SENS_JOY_BUTTON         0                       /* axis type */
260 #define SENS_JOY_BUTTON_PRESSED 0
261 #define SENS_JOY_BUTTON_RELEASED        1
262
263 #define SENS_JOY_AXIS                   1               /* axis type */
264 #define SENS_JOY_X_AXIS         0
265 #define SENS_JOY_Y_AXIS         1
266 #define SENS_JOY_NEG_X_AXIS             2
267 #define SENS_JOY_NEG_Y_AXIS             3
268 #define SENS_JOY_PRECISION              4
269
270 #define SENS_JOY_HAT                    2               /* axis type */
271 #define SENS_JOY_HAT_DIR                0
272
273 #define SENS_JOY_AXIS_SINGLE    3               /* axis type */
274
275
276 #define SENS_DELAY_REPEAT               1
277 // should match JOYINDEX_MAX in SCA_JoystickDefines.h */
278 #define SENS_JOY_MAXINDEX               8
279 #endif
280