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