Merging trunk up to r38193.
[blender.git] / source / blender / makesdna / DNA_actuator_types.h
1 /*
2  * $Id$ 
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29
30 /** \file DNA_actuator_types.h
31  *  \ingroup DNA
32  */
33
34 #ifndef DNA_ACTUATOR_TYPES_H
35 #define DNA_ACTUATOR_TYPES_H
36
37 struct Object;
38 struct Mesh;
39 struct Scene;
40 struct Group;
41 struct Text;
42
43 /* ****************** ACTUATORS ********************* */
44
45 /* unused now, moved to editobjectactuator in 2.02. Still needed for dna */
46 typedef struct bAddObjectActuator {
47         int time, pad;
48         struct Object *ob;
49 } bAddObjectActuator;
50
51 typedef struct bActionActuator {                                                                
52         struct bAction *act;    /* Pointer to action */                         
53         short   type, flag;             /* Playback type */  // not in use
54         float   sta, end;               /* Start & End frames */                        
55         char    name[32];               /* For property-driven playback */      
56         char    frameProp[32];  /* Set this property to the actions current frame */
57         short   blendin;                /* Number of frames of blending */
58         short   priority;               /* Execution priority */
59         short   layer;                  /* Animation layer */
60         short   end_reset;      /* Ending the actuator (negative pulse) wont reset the the action to its starting frame */
61         short   strideaxis;             /* Displacement axis */
62         short   pad;
63         float   stridelength;   /* Displacement incurred by cycle */ // not in use
64         float   layer_weight;   /* How much of the previous layer to use for blending. (<0 = disable, 0 = add mode) */
65 } bActionActuator;                                                                                              
66
67 typedef struct Sound3D
68 {
69         float min_gain;
70         float max_gain;
71         float reference_distance;
72         float max_distance;
73         float rolloff_factor;
74         float cone_inner_angle;
75         float cone_outer_angle;
76         float cone_outer_gain;
77 } Sound3D;
78
79 typedef struct bSoundActuator {
80         short flag, sndnr;
81         int pad1, pad2;
82         short pad3[2];
83         float volume, pitch;
84         struct bSound *sound;
85         struct Sound3D sound3D;
86         short type, pad4;
87         short pad5, pad6[1];
88 } bSoundActuator;
89
90 typedef struct bEditObjectActuator {
91         int time;
92         short type, flag;
93         struct Object *ob;
94         struct Mesh *me;
95         char name[32];
96         float linVelocity[3]; /* initial lin. velocity on creation */
97         float angVelocity[3]; /* initial ang. velocity on creation */
98         float mass;
99         short localflag; /* flag for the lin & ang. vel: apply locally   */
100         short dyn_operation;
101 } bEditObjectActuator;
102
103 typedef struct bSceneActuator {
104         short type, pad1;
105         int pad;
106         struct Scene *scene;
107         struct Object *camera;
108 } bSceneActuator;
109
110 typedef struct bPropertyActuator {
111         int pad, type;
112         char name[32], value[32];
113         struct Object *ob;
114 } bPropertyActuator;
115
116 typedef struct bObjectActuator {
117         short flag, type, otype;
118         short damping;
119         float forceloc[3], forcerot[3];
120         float pad[3], pad1[3];
121         float dloc[3], drot[3]; /* angle in radians */
122         float linearvelocity[3], angularvelocity[3];
123         struct Object *reference;
124 } bObjectActuator;
125
126 /* deprecated, handled by bActionActuator now */
127 typedef struct bIpoActuator {
128         short flag, type;
129         float sta, end;
130         char name[32];
131         char frameProp[32];     /* Set this property to the actions current frame */
132         
133         short pad1, pad2, pad3, pad4;
134         
135 } bIpoActuator;
136
137 typedef struct bCameraActuator {
138         struct Object *ob;
139         float height, min, max;
140         float damping;
141         short pad1, axis;
142         float pad2;
143 } bCameraActuator ;
144
145 typedef struct bConstraintActuator {
146         short type, mode;
147         short flag, damp;
148         short time, rotdamp;
149         int pad;
150         float minloc[3], maxloc[3];
151         float minrot[3], maxrot[3];
152         char matprop[32];
153 } bConstraintActuator;
154
155 typedef struct bGroupActuator {
156         short flag, type;
157         int sta, end;
158         char name[32];          /* property or groupkey */
159         
160         short pad[3], cur, butsta, butend;/* not referenced, can remove? */
161         /* struct Group *group;         not used, remove */
162         
163 } bGroupActuator;
164
165 /* I added a few extra fields here, to facilitate conversions                */
166 typedef struct bRandomActuator {
167         int  seed;
168         int   distribution;
169         int int_arg_1;
170         int int_arg_2;
171         float float_arg_1;
172         float float_arg_2;
173         char  propname[32];
174 } bRandomActuator;
175
176 typedef struct bMessageActuator {
177         char toPropName[32];    /* Send to all objects with this propertyname. Empty to broadcast. */
178         struct Object *toObject;/* (Possible future use) pointer to a single destination object. */
179         char subject[32];               /* Message Subject to send. */
180         short bodyType, pad1;   /* bodyType is either 'User defined text' or PropName */
181         int pad2;
182         char body[32];                  /* Either User Defined Text or our PropName to send value of */
183 } bMessageActuator;
184
185 typedef struct bGameActuator {
186         short flag, type;
187         int sta, end;
188         char filename[64];
189         char loadaniname[64];
190 } bGameActuator;
191
192 typedef struct bVisibilityActuator {
193         /** bit 0: Is this object visible? 
194          ** bit 1: Apply recursively  
195          ** bit 2: Is this object an occluder? */
196         int flag;
197 } bVisibilityActuator;
198
199 typedef struct bTwoDFilterActuator{
200         char pad[4];
201         /* Tells what type of 2D Filter */
202         short type;
203         /* (flag == 0) means 2D filter is activate and
204            (flag != 0) means 2D filter is inactive */
205         short flag;
206         int   int_arg;
207         /* a float argument */
208         float float_arg;
209         struct Text *text;
210 }bTwoDFilterActuator;
211
212 typedef struct bParentActuator {
213         char pad[2];
214         short flag;
215         int type;
216         struct Object *ob;
217 } bParentActuator;
218
219 typedef struct bStateActuator {
220         int type;                       /* 0=Set, 1=Add, 2=Rem, 3=Chg */
221         unsigned int mask;      /* the bits to change */
222 } bStateActuator;
223
224 typedef struct bArmatureActuator {
225         char posechannel[32];
226         char constraint[32];
227         int type;               /* 0=run, 1=enable, 2=disable, 3=set target, 4=set weight */
228         float weight;
229         struct Object *target;
230         struct Object *subtarget;
231 } bArmatureActuator;
232
233 typedef struct bActuator {
234         struct bActuator *next, *prev, *mynew;
235         short type;
236         /**
237          * Tells what type of actuator data \ref data holds. 
238          */
239         short flag;
240         short otype, go;
241         char name[32];
242
243         /**
244          * data must point to an object actuator type struct.
245          */
246         void *data;
247
248         /**
249          * For ipo's and props: to find out which object the actuator
250          * belongs to */
251         struct Object *ob;              
252         
253 } bActuator;
254
255 /* objectactuator->flag */
256 #define ACT_FORCE_LOCAL                 1
257 #define ACT_TORQUE_LOCAL                2
258 #define ACT_SERVO_LIMIT_X               2
259 #define ACT_DLOC_LOCAL                  4
260 #define ACT_SERVO_LIMIT_Y               4
261 #define ACT_DROT_LOCAL                  8
262 #define ACT_SERVO_LIMIT_Z               8
263 #define ACT_LIN_VEL_LOCAL               16
264 #define ACT_ANG_VEL_LOCAL               32
265 //#define ACT_ADD_LIN_VEL_LOCAL 64
266 #define ACT_ADD_LIN_VEL                 64
267
268 /* objectactuator->type */
269 #define ACT_OBJECT_NORMAL       0
270 #define ACT_OBJECT_SERVO        1
271
272 /* actuator->type */
273 #define ACT_OBJECT              0
274 #define ACT_IPO                 1
275 #define ACT_LAMP                2
276 #define ACT_CAMERA              3
277 #define ACT_MATERIAL    4
278 #define ACT_SOUND               5
279 #define ACT_PROPERTY    6
280         /* these two obsolete since 2.02 */
281 #define ACT_ADD_OBJECT  7
282 #define ACT_END_OBJECT  8
283
284 #define ACT_CONSTRAINT  9
285 #define ACT_EDIT_OBJECT 10
286 #define ACT_SCENE               11
287 #define ACT_GROUP               12
288 #define ACT_RANDOM      13
289 #define ACT_MESSAGE     14
290 #define ACT_ACTION              15      /* __ NLA */
291 #define ACT_GAME                17
292 #define ACT_VISIBILITY          18
293 #define ACT_2DFILTER    19
294 #define ACT_PARENT      20
295 #define ACT_SHAPEACTION 21
296 #define ACT_STATE               22
297 #define ACT_ARMATURE    23
298
299 /* actuator flag */
300 #define ACT_SHOW                1
301 #define ACT_DEL                 2
302 #define ACT_NEW                 4
303 #define ACT_LINKED              8       
304 #define ACT_VISIBLE             16      
305 #define ACT_PIN                 32
306
307 /* link codes */
308 #define LINK_SENSOR             0
309 #define LINK_CONTROLLER 1
310 #define LINK_ACTUATOR   2
311
312 /* keyboardsensor->type */
313 #define SENS_ALL_KEYS   1
314
315 /* actionactuator->type */
316 #define ACT_ACTION_PLAY                 0
317 #define ACT_ACTION_PINGPONG             1
318 #define ACT_ACTION_FLIPPER              2
319 #define ACT_ACTION_LOOP_STOP    3
320 #define ACT_ACTION_LOOP_END             4
321 #define ACT_ACTION_KEY2KEY              5
322 #define ACT_ACTION_FROM_PROP    6
323 #define ACT_ACTION_MOTION               7
324
325 /* ipoactuator->type */
326 #define ACT_IPO_PLAY            0
327 #define ACT_IPO_PINGPONG        1
328 #define ACT_IPO_FLIPPER         2
329 #define ACT_IPO_LOOP_STOP       3
330 #define ACT_IPO_LOOP_END        4
331 #define ACT_IPO_KEY2KEY         5
332 #define ACT_IPO_FROM_PROP       6
333
334 /* groupactuator->type */
335 #define ACT_GROUP_PLAY          0
336 #define ACT_GROUP_PINGPONG      1
337 #define ACT_GROUP_FLIPPER       2
338 #define ACT_GROUP_LOOP_STOP     3
339 #define ACT_GROUP_LOOP_END      4
340 #define ACT_GROUP_FROM_PROP     5
341 #define ACT_GROUP_SET           6
342
343 /* ipoactuator->flag */
344 #define ACT_IPOFORCE        (1 << 0)
345 #define ACT_IPOEND          (1 << 1)
346 #define ACT_IPOLOCAL            (1 << 2)
347 #define ACT_IPOCHILD        (1 << 4)    
348 #define ACT_IPOADD                      (1 << 5)
349
350 /* ipoactuator->flag for k2k */
351 #define ACT_K2K_PREV            1
352 #define ACT_K2K_CYCLIC          2
353 #define ACT_K2K_PINGPONG        4
354 #define ACT_K2K_HOLD            8
355
356 /* property actuator->type */
357 #define ACT_PROP_ASSIGN         0
358 #define ACT_PROP_ADD            1
359 #define ACT_PROP_COPY           2
360 #define ACT_PROP_TOGGLE         3
361
362 /* constraint flag */
363 #define ACT_CONST_NONE          0
364 #define ACT_CONST_LOCX          1
365 #define ACT_CONST_LOCY          2
366 #define ACT_CONST_LOCZ          4
367 #define ACT_CONST_ROTX          8
368 #define ACT_CONST_ROTY          16
369 #define ACT_CONST_ROTZ          32
370 #define ACT_CONST_NORMAL        64
371 #define ACT_CONST_MATERIAL      128
372 #define ACT_CONST_PERMANENT 256
373 #define ACT_CONST_DISTANCE      512
374 #define ACT_CONST_LOCAL     1024
375 #define ACT_CONST_DOROTFH       2048
376
377 /* constraint mode */
378 #define ACT_CONST_DIRPX         1
379 #define ACT_CONST_DIRPY         2
380 #define ACT_CONST_DIRPZ         4
381 #define ACT_CONST_DIRNX         8
382 #define ACT_CONST_DIRNY         16
383 #define ACT_CONST_DIRNZ         32
384
385 /* constraint type */
386 #define ACT_CONST_TYPE_LOC      0
387 #define ACT_CONST_TYPE_DIST     1
388 #define ACT_CONST_TYPE_ORI      2
389 #define ACT_CONST_TYPE_FH   3
390
391 /* editObjectActuator->type */
392 #define ACT_EDOB_ADD_OBJECT             0
393 #define ACT_EDOB_END_OBJECT             1
394 #define ACT_EDOB_REPLACE_MESH           2
395 #define ACT_EDOB_TRACK_TO               3
396 #define ACT_EDOB_DYNAMICS               4
397
398 /* editObjectActuator->localflag */
399 #define ACT_EDOB_LOCAL_LINV             2
400 #define ACT_EDOB_LOCAL_ANGV             4
401
402 /* editObjectActuator->flag */
403 #define ACT_TRACK_3D                    1
404
405 /* editObjectActuator->flag for replace mesh actuator */
406 #define ACT_EDOB_REPLACE_MESH_NOGFX             2 /* use for replace mesh actuator */
407 #define ACT_EDOB_REPLACE_MESH_PHYS              4
408
409 /* editObjectActuator->dyn_operation */
410 #define ACT_EDOB_RESTORE_DYN    0
411 #define ACT_EDOB_SUSPEND_DYN    1
412 #define ACT_EDOB_ENABLE_RB              2
413 #define ACT_EDOB_DISABLE_RB             3
414 #define ACT_EDOB_SET_MASS               4
415
416
417 /* SceneActuator->type */
418 #define ACT_SCENE_RESTART               0
419 #define ACT_SCENE_SET                   1
420 #define ACT_SCENE_CAMERA                2
421 #define ACT_SCENE_ADD_FRONT             3
422 #define ACT_SCENE_ADD_BACK              4
423 #define ACT_SCENE_REMOVE                5
424 #define ACT_SCENE_SUSPEND               6
425 #define ACT_SCENE_RESUME                7
426
427
428 /* randomAct->distribution */
429 #define ACT_RANDOM_BOOL_CONST                  0
430 #define ACT_RANDOM_BOOL_UNIFORM                1
431 #define ACT_RANDOM_BOOL_BERNOUILLI             2
432 #define ACT_RANDOM_INT_CONST                   3
433 #define ACT_RANDOM_INT_UNIFORM                 4
434 #define ACT_RANDOM_INT_POISSON                     5
435 #define ACT_RANDOM_FLOAT_CONST                 6
436 #define ACT_RANDOM_FLOAT_UNIFORM               7
437 #define ACT_RANDOM_FLOAT_NORMAL                8
438 #define ACT_RANDOM_FLOAT_NEGATIVE_EXPONENTIAL  9
439
440 /* SoundActuator->flag */
441 #define ACT_SND_3D_SOUND                1
442
443 /*  SoundActuator->type */
444 #define ACT_SND_PLAY_STOP_SOUND         0
445 #define ACT_SND_PLAY_END_SOUND          1
446 #define ACT_SND_LOOP_STOP_SOUND         2
447 #define ACT_SND_LOOP_END_SOUND          3
448 #define ACT_SND_LOOP_BIDIRECTIONAL_SOUND                4
449 #define ACT_SND_LOOP_BIDIRECTIONAL_STOP_SOUND   5
450
451 /* messageactuator->type */
452 #define ACT_MESG_MESG           0
453 #define ACT_MESG_PROP           1
454
455 /* gameactuator->type */
456 #define ACT_GAME_LOAD           0
457 #define ACT_GAME_START          1
458 #define ACT_GAME_RESTART        2
459 #define ACT_GAME_QUIT           3
460 #define ACT_GAME_SAVECFG        4
461 #define ACT_GAME_LOADCFG        5
462
463 /* visibilityact->flag */
464 /* Set means the object will become invisible */
465 #define ACT_VISIBILITY_INVISIBLE       (1 << 0)
466 #define ACT_VISIBILITY_RECURSIVE       (1 << 1)
467 #define ACT_VISIBILITY_OCCLUSION       (1 << 2)
468
469 /* twodfilter->type */
470 #define ACT_2DFILTER_ENABLED                    -2
471 #define ACT_2DFILTER_DISABLED                   -1
472 #define ACT_2DFILTER_NOFILTER                   0
473 #define ACT_2DFILTER_MOTIONBLUR                 1
474 #define ACT_2DFILTER_BLUR                               2
475 #define ACT_2DFILTER_SHARPEN                    3
476 #define ACT_2DFILTER_DILATION                   4
477 #define ACT_2DFILTER_EROSION                    5
478 #define ACT_2DFILTER_LAPLACIAN                  6
479 #define ACT_2DFILTER_SOBEL                              7
480 #define ACT_2DFILTER_PREWITT                    8
481 #define ACT_2DFILTER_GRAYSCALE                  9
482 #define ACT_2DFILTER_SEPIA                              10
483 #define ACT_2DFILTER_INVERT                             11
484 #define ACT_2DFILTER_CUSTOMFILTER               12
485 #define ACT_2DFILTER_NUMBER_OF_FILTERS  13
486
487 /* parentactuator->type */
488 #define ACT_PARENT_SET      0
489 #define ACT_PARENT_REMOVE   1
490
491 /* parentactuator->flag */
492 #define ACT_PARENT_COMPOUND     1
493 #define ACT_PARENT_GHOST        2
494
495 /* armatureactuator->type */
496 #define ACT_ARM_RUN                     0
497 #define ACT_ARM_ENABLE          1
498 #define ACT_ARM_DISABLE         2
499 #define ACT_ARM_SETTARGET       3
500 #define ACT_ARM_SETWEIGHT       4
501 /* update this define if more type are addedd */
502 #define ACT_ARM_MAXTYPE         4
503
504 /* stateactuator->type */
505 #define ACT_STATE_SET           0
506 #define ACT_STATE_ADD           1
507 #define ACT_STATE_REMOVE        2
508 #define ACT_STATE_CHANGE        3
509
510 /* cameraactuator->axis */
511 #define ACT_CAMERA_X            (float)'x'
512 #define ACT_CAMERA_Y            (float)'y'
513
514 #endif
515
516