svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r22704:22717
[blender-staging.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         short tap;
162         short pad;
163 } bSensor;
164
165 typedef struct bJoystickSensor {
166         char name[32];
167         char type;
168         char joyindex;
169         short flag;
170         short axis;
171         short axis_single;
172         int axisf;
173         int button;
174         int hat;
175         int hatf;
176         int precision;
177 } bJoystickSensor;
178
179 /* bMouseSensor->type: uses blender event defines */
180
181 /* bMouseSensor->flag: only pulse for now */
182 #define SENS_MOUSE_FOCUS_PULSE  1
183
184 /* propertysensor->type */
185 #define SENS_PROP_EQUAL         0
186 #define SENS_PROP_NEQUAL        1
187 #define SENS_PROP_INTERVAL      2
188 #define SENS_PROP_CHANGED       3
189 #define SENS_PROP_EXPRESSION    4
190
191 /* raysensor->axisflag */
192 /* flip x and y to make y default!!! */
193 #define SENS_RAY_X_AXIS     1
194 #define SENS_RAY_Y_AXIS     0
195 #define SENS_RAY_Z_AXIS     2
196 #define SENS_RAY_NEG_X_AXIS     3
197 #define SENS_RAY_NEG_Y_AXIS     4
198 #define SENS_RAY_NEG_Z_AXIS     5
199 //#define SENS_RAY_NEGATIVE_AXIS     1
200
201 /* bMessageSensor->type */
202 #define SENS_MESG_MESG          0
203 #define SENS_MESG_PROP          1
204
205 /* sensor->type */
206 #define SENS_ALWAYS             0
207 #define SENS_TOUCH              1
208 #define SENS_NEAR               2
209 #define SENS_KEYBOARD   3
210 #define SENS_PROPERTY   4
211 #define SENS_MOUSE              5
212 #define SENS_COLLISION  6
213 #define SENS_RADAR              7
214 #define SENS_RANDOM     8
215 #define SENS_RAY        9
216 #define SENS_MESSAGE   10
217 #define SENS_JOYSTICK  11
218 #define SENS_ACTUATOR  12
219 #define SENS_DELAY     13
220 /* sensor->flag */
221 #define SENS_SHOW               1
222 #define SENS_DEL                2
223 #define SENS_NEW                4
224 #define SENS_NOT                8
225 #define SENS_VISIBLE    16
226 #define SENS_PIN                32
227
228 /* sensor->pulse */
229 #define SENS_PULSE_CONT         0
230 #define SENS_PULSE_REPEAT       1
231 //#define SENS_PULSE_ONCE       2
232 #define SENS_NEG_PULSE_MODE 4
233
234 /* sensor->suppress */
235 #define SENS_SUPPRESS_POSITIVE (1 << 0)
236 #define SENS_SUPPRESS_NEGATIVE (1 << 1)
237
238 /* collision, ray sensor modes: */
239 /* A little bit fake: when property is active, the first bit is
240  * reset. Bite me :) So we don't actually use it, so we comment it out
241  * ... The reason for this is that we need to be backward compatible,
242  * and have a proper default value for this thing.
243  * */
244 /*  #define SENS_COLLISION_PROPERTY 0  */
245 #define SENS_COLLISION_MATERIAL 1
246 #define SENS_COLLISION_PULSE 2
247 /* ray specific mode */
248 /* X-Ray means that the ray will traverse objects that don't have the property/material */
249 #define SENS_RAY_XRAY                   2
250
251 /* Some stuff for the mouse sensor Type: */
252 #define BL_SENS_MOUSE_LEFT_BUTTON    1
253 #define BL_SENS_MOUSE_MIDDLE_BUTTON  2
254 #define BL_SENS_MOUSE_RIGHT_BUTTON   4
255 #define BL_SENS_MOUSE_WHEEL_UP       5
256 #define BL_SENS_MOUSE_WHEEL_DOWN     6
257 #define BL_SENS_MOUSE_MOVEMENT       8
258 #define BL_SENS_MOUSE_MOUSEOVER      16
259 #define BL_SENS_MOUSE_MOUSEOVER_ANY      32
260
261 #define SENS_JOY_ANY_EVENT              1
262
263 #define SENS_JOY_BUTTON         0                       /* axis type */
264 #define SENS_JOY_BUTTON_PRESSED 0
265 #define SENS_JOY_BUTTON_RELEASED        1
266
267 #define SENS_JOY_AXIS                   1               /* axis type */
268 #define SENS_JOY_X_AXIS         0
269 #define SENS_JOY_Y_AXIS         1
270 #define SENS_JOY_NEG_X_AXIS             2
271 #define SENS_JOY_NEG_Y_AXIS             3
272 #define SENS_JOY_PRECISION              4
273
274 #define SENS_JOY_HAT                    2               /* axis type */
275 #define SENS_JOY_HAT_DIR                0
276
277 #define SENS_JOY_AXIS_SINGLE    3               /* axis type */
278
279
280 #define SENS_DELAY_REPEAT               1
281 // should match JOYINDEX_MAX in SCA_JoystickDefines.h */
282 #define SENS_JOY_MAXINDEX               8
283 #endif
284