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