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