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