BGE patch: add state engine support in the logic bricks.
[blender.git] / source / blender / makesdna / DNA_actuator_types.h
1 /**
2  * blenlib/DNA_actuator_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_ACTUATOR_TYPES_H
32 #define DNA_ACTUATOR_TYPES_H
33
34 struct Object;
35 struct Mesh;
36 struct Scene;
37 struct Group;
38 struct Text;
39
40 /* ****************** ACTUATORS ********************* */
41
42 /* unused now, moved to editobjectactuator in 2.02. Still needed for dna */
43 typedef struct bAddObjectActuator {
44         int time, pad;
45         struct Object *ob;
46 } bAddObjectActuator;
47
48 typedef struct bActionActuator {                                                                
49         struct bAction *act;    /* Pointer to action */                         
50         short   type, flag;             /* Playback type */                                     
51         int     sta, end;               /* Start & End frames */                        
52         char    name[32];               /* For property-driven playback */      
53         int     blendin;                /* Number of frames of blending */      
54         short   priority;               /* Execution priority */                        
55         short   strideaxis;             /* Displacement axis */
56         float   stridelength;   /* Displacement incurred by cycle */
57 } bActionActuator;                                                                                              
58
59 typedef struct bSoundActuator {
60         short flag, sndnr;
61         int sta, end;
62         short pad1[2];
63         struct bSound *sound;
64         short type, makecopy;
65         short copymade, pad2[1];
66 } bSoundActuator;
67
68 typedef struct bCDActuator {
69         short flag, sndnr;
70         int sta, end;
71         short type, track;
72         float volume;
73 } bCDActuator;
74
75 typedef struct bEditObjectActuator {
76         int time;
77         short type, flag;
78         struct Object *ob;
79         struct Mesh *me;
80         char name[32];
81         float linVelocity[3]; /* initial lin. velocity on creation */
82         short localflag; /* flag for the lin. vel: apply locally   */
83         short pad;
84 } bEditObjectActuator;
85
86 typedef struct bSceneActuator {
87         short type, flag;
88         int pad;
89         struct Scene *scene;
90         struct Object *camera;
91 } bSceneActuator;
92
93 typedef struct bPropertyActuator {
94         int flag, type;
95         char name[32], value[32];
96         struct Object *ob;
97 } bPropertyActuator;
98
99 typedef struct bObjectActuator {
100         int flag, type;
101         float forceloc[3], forcerot[3];
102         float loc[3], rot[3];
103         float dloc[3], drot[3];
104         float linearvelocity[3], angularvelocity[3];
105 } bObjectActuator;
106
107 typedef struct bIpoActuator {
108         short flag, type;
109         int sta, end;
110         char name[32];
111         
112         short pad1, cur, butsta, butend;
113         
114 } bIpoActuator;
115
116 typedef struct bCameraActuator {
117         struct Object *ob;
118         float height, min, max;
119         float fac;
120         short flag, axis;
121         float visifac;
122 } bCameraActuator ;
123
124 typedef struct bConstraintActuator {
125         short flag, damp;
126         float slow;
127         float minloc[3], maxloc[3];
128         float minrot[3], maxrot[3];
129 } bConstraintActuator;
130
131 typedef struct bGroupActuator {
132         short flag, type;
133         int sta, end;
134         char name[32];          /* property or groupkey */
135         
136         short pad[3], cur, butsta, butend;/* not referenced, can remove? */
137         struct Group *group;            /* only during game */
138         
139 } bGroupActuator;
140
141 /* I added a few extra fields here, to facilitate conversions                */
142 typedef struct bRandomActuator {
143         int  seed;
144         int   distribution;
145         int int_arg_1;
146         int int_arg_2;
147         float float_arg_1;
148         float float_arg_2;
149         char  propname[32];
150 } bRandomActuator;
151
152 typedef struct bMessageActuator {
153         /**
154          * Send to all objects with this propertyname. Empty to broadcast.
155          */
156         char toPropName[32];
157
158         /**
159          * (Possible future use) pointer to a single destination object.
160          */
161         struct Object *toObject;
162
163         /**
164          * Message Subject to send.
165          */
166         char subject[32];
167
168         /**
169          * bodyType is either 'User defined text' or PropName
170          */
171         short bodyType, pad1;
172         int pad2;
173
174         /**
175          * Either User Defined Text or our PropName to send value of
176          */
177         char body[32];
178 } bMessageActuator;
179
180 typedef struct bGameActuator {
181         short flag, type;
182         int sta, end;
183         char filename[64];
184         char loadaniname[64];
185 } bGameActuator;
186
187 typedef struct bVisibilityActuator {
188         /** bit 0: Is this object visible? */
189         int flag;
190 } bVisibilityActuator;
191
192 typedef struct bTwoDFilterActuator{
193         char pad[4];
194         /* Tells what type of 2D Filter*/
195         short type;
196         /* (flag == 0) means 2D filter is activate and
197            (flag != 0) means 2D filter is inactive*/
198         short flag;
199         int   int_arg;
200         /* a float argument */
201         float float_arg;
202         struct Text *text;
203 }bTwoDFilterActuator;
204
205 typedef struct bParentActuator {
206         char pad[4];
207         int type;
208         struct Object *ob;
209 } bParentActuator;
210
211 typedef struct bStateActuator {
212         int type;                       /* 0=Set, 1=Add, 2=Rem, 3=Chg */
213         unsigned int mask;      /* the bits to change */
214 } bStateActuator;
215
216 typedef struct bActuator {
217         struct bActuator *next, *prev, *mynew;
218         short type;
219         /**
220          * Tells what type of actuator data <data> holds. 
221          */
222         short flag;
223         short otype, go;
224         char name[32];
225
226         /**
227          * Data must point to an object actuator type struct.
228          */
229         void *data;
230
231         /**
232          * For ipo's and props: to find out which object the actuator
233          * belongs to */
234         struct Object *ob;              
235         
236 } bActuator;
237
238 typedef struct FreeCamera {
239         float mass, accelleration;
240         float maxspeed, maxrotspeed,  maxtiltspeed;
241         int flag;
242         float rotdamp, tiltdamp, speeddamp, pad;
243 } FreeCamera;
244
245 /* objectactuator->flag */
246 #define ACT_FORCE_LOCAL                 1
247 #define ACT_TORQUE_LOCAL                2
248 #define ACT_DLOC_LOCAL                  4
249 #define ACT_DROT_LOCAL                  8
250 #define ACT_LIN_VEL_LOCAL               16
251 #define ACT_ANG_VEL_LOCAL               32
252 //#define ACT_ADD_LIN_VEL_LOCAL 64
253 #define ACT_ADD_LIN_VEL                 64
254
255 #define ACT_OBJECT_FORCE        0
256 #define ACT_OBJECT_TORQUE       1
257 #define ACT_OBJECT_DLOC         2
258 #define ACT_OBJECT_DROT         3
259 #define ACT_OBJECT_LINV         4
260 #define ACT_OBJECT_ANGV         5
261
262 /* actuator->type */
263 #define ACT_OBJECT              0
264 #define ACT_IPO                 1
265 #define ACT_LAMP                2
266 #define ACT_CAMERA              3
267 #define ACT_MATERIAL    4
268 #define ACT_SOUND               5
269 #define ACT_PROPERTY    6
270         /* these two obsolete since 2.02 */
271 #define ACT_ADD_OBJECT  7
272 #define ACT_END_OBJECT  8
273
274 #define ACT_CONSTRAINT  9
275 #define ACT_EDIT_OBJECT 10
276 #define ACT_SCENE               11
277 #define ACT_GROUP               12
278 #define ACT_RANDOM      13
279 #define ACT_MESSAGE     14
280 #define ACT_ACTION              15      /* __ NLA */
281 #define ACT_CD                  16
282 #define ACT_GAME                17
283 #define ACT_VISIBILITY          18
284 #define ACT_2DFILTER    19
285 #define ACT_PARENT      20
286 #define ACT_SHAPEACTION 21
287 #define ACT_STATE               22
288
289 /* actuator flag */
290 #define ACT_SHOW                1
291 #define ACT_DEL                 2
292 #define ACT_NEW                 4
293 #define ACT_LINKED              8       
294 #define ACT_VISIBLE             16      
295
296 /* link codes */
297 #define LINK_SENSOR             0
298 #define LINK_CONTROLLER 1
299 #define LINK_ACTUATOR   2
300
301 /* keyboardsensor->type */
302 #define SENS_ALL_KEYS   1
303
304 /* actionactuator->type */
305 #define ACT_ACTION_PLAY                 0
306 #define ACT_ACTION_PINGPONG             1
307 #define ACT_ACTION_FLIPPER              2
308 #define ACT_ACTION_LOOP_STOP    3
309 #define ACT_ACTION_LOOP_END             4
310 #define ACT_ACTION_KEY2KEY              5
311 #define ACT_ACTION_FROM_PROP    6
312 #define ACT_ACTION_MOTION               7
313
314 /* ipoactuator->type */
315 #define ACT_IPO_PLAY            0
316 #define ACT_IPO_PINGPONG        1
317 #define ACT_IPO_FLIPPER         2
318 #define ACT_IPO_LOOP_STOP       3
319 #define ACT_IPO_LOOP_END        4
320 #define ACT_IPO_KEY2KEY         5
321 #define ACT_IPO_FROM_PROP       6
322
323 /* groupactuator->type */
324 #define ACT_GROUP_PLAY          0
325 #define ACT_GROUP_PINGPONG      1
326 #define ACT_GROUP_FLIPPER       2
327 #define ACT_GROUP_LOOP_STOP     3
328 #define ACT_GROUP_LOOP_END      4
329 #define ACT_GROUP_FROM_PROP     5
330 #define ACT_GROUP_SET           6
331
332 /* ipoactuator->flag */
333 #define ACT_IPOFORCE        (1 << 0)
334 #define ACT_IPOEND          (1 << 1)
335 #define ACT_IPOFORCE_LOCAL  (1 << 2)
336 #define ACT_IPOCHILD        (1 << 4)                    
337
338 /* ipoactuator->flag for k2k */
339 #define ACT_K2K_PREV            1
340 #define ACT_K2K_CYCLIC          2
341 #define ACT_K2K_PINGPONG        4
342 #define ACT_K2K_HOLD            8
343
344 /* property actuator->type */
345 #define ACT_PROP_ASSIGN         0
346 #define ACT_PROP_ADD            1
347 #define ACT_PROP_COPY           2
348
349 /* constraint flag */
350 #define ACT_CONST_LOCX          1
351 #define ACT_CONST_LOCY          2
352 #define ACT_CONST_LOCZ          4
353 #define ACT_CONST_ROTX          8
354 #define ACT_CONST_ROTY          16
355 #define ACT_CONST_ROTZ          32
356
357 /* editObjectActuator->type */
358 #define ACT_EDOB_ADD_OBJECT             0
359 #define ACT_EDOB_END_OBJECT             1
360 #define ACT_EDOB_REPLACE_MESH   2
361 #define ACT_EDOB_TRACK_TO               3
362 #define ACT_EDOB_MAKE_CHILD             4
363 #define ACT_EDOB_END_CHILD              5
364
365 /* editObjectActuator->flag */
366 #define ACT_TRACK_3D                    1
367
368 /* SceneActuator->type */
369 #define ACT_SCENE_RESTART               0
370 #define ACT_SCENE_SET                   1
371 #define ACT_SCENE_CAMERA                2
372 #define ACT_SCENE_ADD_FRONT             3
373 #define ACT_SCENE_ADD_BACK              4
374 #define ACT_SCENE_REMOVE                5
375 #define ACT_SCENE_SUSPEND               6
376 #define ACT_SCENE_RESUME                7
377
378
379 /* randomAct->distribution */
380 #define ACT_RANDOM_BOOL_CONST                  0
381 #define ACT_RANDOM_BOOL_UNIFORM                1
382 #define ACT_RANDOM_BOOL_BERNOUILLI             2
383 #define ACT_RANDOM_INT_CONST                   3
384 #define ACT_RANDOM_INT_UNIFORM                 4
385 #define ACT_RANDOM_INT_POISSON                     5
386 #define ACT_RANDOM_FLOAT_CONST                 6
387 #define ACT_RANDOM_FLOAT_UNIFORM               7
388 #define ACT_RANDOM_FLOAT_NORMAL                8
389 #define ACT_RANDOM_FLOAT_NEGATIVE_EXPONENTIAL  9
390
391 /*  SoundActuator->type */
392 #define ACT_SND_PLAY_STOP_SOUND         0
393 #define ACT_SND_PLAY_END_SOUND          1
394 #define ACT_SND_LOOP_STOP_SOUND         2
395 #define ACT_SND_LOOP_END_SOUND          3
396 #define ACT_SND_LOOP_BIDIRECTIONAL_SOUND                4
397 #define ACT_SND_LOOP_BIDIRECTIONAL_STOP_SOUND   5
398
399 /* messageactuator->type */
400 #define ACT_MESG_MESG           0
401 #define ACT_MESG_PROP           1
402
403 /* cdactuator->type */
404 #define ACT_CD_PLAY_ALL         0
405 #define ACT_CD_PLAY_TRACK       1
406 #define ACT_CD_LOOP_TRACK       2
407 #define ACT_CD_VOLUME           3
408 #define ACT_CD_STOP                     4
409 #define ACT_CD_PAUSE            5
410 #define ACT_CD_RESUME           6
411
412 /* gameactuator->type */
413 #define ACT_GAME_LOAD           0
414 #define ACT_GAME_START          1
415 #define ACT_GAME_RESTART        2
416 #define ACT_GAME_QUIT           3
417
418 /* visibilityact->flag */
419 /* Set means the object will become invisible */
420 #define ACT_VISIBILITY_INVISIBLE       (1 << 0)
421
422 /* twodfilter->type */
423 #define ACT_2DFILTER_ENABLED                    -2
424 #define ACT_2DFILTER_DISABLED                   -1
425 #define ACT_2DFILTER_NOFILTER                   0
426 #define ACT_2DFILTER_MOTIONBLUR                 1
427 #define ACT_2DFILTER_BLUR                               2
428 #define ACT_2DFILTER_SHARPEN                    3
429 #define ACT_2DFILTER_DILATION                   4
430 #define ACT_2DFILTER_EROSION                    5
431 #define ACT_2DFILTER_LAPLACIAN                  6
432 #define ACT_2DFILTER_SOBEL                              7
433 #define ACT_2DFILTER_PREWITT                    8
434 #define ACT_2DFILTER_GRAYSCALE                  9
435 #define ACT_2DFILTER_SEPIA                              10
436 #define ACT_2DFILTER_INVERT                             11
437 #define ACT_2DFILTER_CUSTOMFILTER               12
438 #define ACT_2DFILTER_NUMBER_OF_FILTERS  13
439
440 /* parentactuator->type */
441 #define ACT_PARENT_SET      0
442 #define ACT_PARENT_REMOVE   1
443 #endif
444
445