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