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