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