Initial revision
[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/BL DUAL 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. The Blender
12  * Foundation also sells licenses for use in proprietary software under
13  * the Blender License.  See http://www.blender.org/BL/ for information
14  * about this.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software Foundation,
23  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
24  *
25  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
26  * All rights reserved.
27  *
28  * The Original Code is: all of this file.
29  *
30  * Contributor(s): none yet.
31  *
32  * ***** END GPL/BL DUAL LICENSE BLOCK *****
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
42 /* ****************** ACTUATORS ********************* */
43
44 /* unused now, moved to editobjectactuator in 2.02. Still needed for dna */
45 typedef struct bAddObjectActuator {
46         int time, pad;
47         struct Object *ob;
48 } bAddObjectActuator;
49
50 typedef struct bActionActuator {                                                                
51         struct bAction *act;    /* Pointer to action */                         
52         short   type, flag;             /* Playback type */                                     
53         short   sta, end;               /* Start & End frames */                        
54         char    name[32];               /* For property-driven playback */      
55         short   blendin;                /* Number of frames of blending */      
56         short   priority;               /* Execution priority */                        
57         float   stridelength;   /* Displacement incurred by cycle */
58         short   strideaxis;             /* Displacement axis */
59         short   reserved1;              /* Padding */                                   
60         short   reserved2;              /* Padding */                                           
61         short   reserved3;              /* Padding */                                           
62 } bActionActuator;                                                                                              
63
64 typedef struct bSoundActuator {
65         short flag, sndnr;
66         short sta, end;
67         struct bSound *sound;
68         short type, makecopy;
69         short copymade, pad[1];
70 } bSoundActuator;
71
72 typedef struct bCDActuator {
73         short flag, sndnr;
74         short sta, end;
75         short type, track;
76         float volume;
77 } bCDActuator;
78
79 typedef struct bEditObjectActuator {
80         int time;
81         short type, flag;
82         struct Object *ob;
83         struct Mesh *me;
84         char name[32];
85         float linVelocity[3]; /* initial lin. velocity on creation */
86         short localflag; /* flag for the lin. vel: apply locally   */
87         short pad;
88 } bEditObjectActuator;
89
90 typedef struct bSceneActuator {
91         short type, flag;
92         int pad;
93         struct Scene *scene;
94         struct Object *camera;
95 } bSceneActuator;
96
97 typedef struct bPropertyActuator {
98         int flag, type;
99         char name[32], value[32];
100         struct Object *ob;
101 } bPropertyActuator;
102
103 typedef struct bObjectActuator {
104         int flag, type;
105         float forceloc[3], forcerot[3];
106         float loc[3], rot[3];
107         float dloc[3], drot[3];
108         float linearvelocity[3], angularvelocity[3];
109 //      float addedlinearvelocity[3];
110 //      char anotherpad[4];
111 } bObjectActuator;
112
113 typedef struct bIpoActuator {
114         short flag, type;
115         short sta, end;
116         char name[32];
117         
118         short pad1, cur, butsta, butend;
119         
120 } bIpoActuator;
121
122 typedef struct bCameraActuator {
123         struct Object *ob;
124         float height, min, max;
125         float fac;
126         short flag, axis;
127         float visifac;
128 } bCameraActuator ;
129
130 typedef struct bConstraintActuator {
131         short flag, damp;
132         float slow;
133         float minloc[3], maxloc[3];
134         float minrot[3], maxrot[3];
135 } bConstraintActuator;
136
137 typedef struct bGroupActuator {
138         short flag, type;
139         short sta, end;
140         char name[32];          /* property or groupkey */
141         
142         short pad1, cur, butsta, butend;
143         struct Group *group;            /* only during game */
144         
145 } bGroupActuator;
146
147 /* I added a few extra fields here, to facilitate conversions                */
148 typedef struct bRandomActuator {
149         int  seed;
150         int   distribution;
151         int int_arg_1;
152         int int_arg_2;
153         float float_arg_1;
154         float float_arg_2;
155         char  propname[32];
156 } bRandomActuator;
157
158 typedef struct bMessageActuator {
159         /**
160          * Send to all objects with this propertyname. Empty to broadcast.
161          */
162         char toPropName[32];
163
164         /**
165          * (Possible future use) pointer to a single destination object.
166          */
167         struct Object *toObject;
168
169         /**
170          * Message Subject to send.
171          */
172         char subject[32];
173
174         /**
175          * bodyType is either 'User defined text' or PropName
176          */
177         short bodyType, pad1;
178         int pad2;
179
180         /**
181          * Either User Defined Text or our PropName to send value of
182          */
183         char body[32];
184 } bMessageActuator;
185
186 typedef struct bGameActuator {
187         short flag, type;
188         short 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         int flag;
196 } bVisibilityActuator;
197
198 typedef struct bActuator {
199         struct bActuator *next, *prev, *mynew;
200         short type;
201         /**
202          * Tells what type of actuator data <data> holds. 
203          */
204         short flag;
205         short otype, go;
206         char name[32];
207
208         /**
209          * Data must point to an object actuator type struct.
210          */
211         void *data;
212
213         /**
214          * For ipo's and props: to find out which object the actuator
215          * belongs to */
216         struct Object *ob;              
217         
218 } bActuator;
219
220 typedef struct FreeCamera {
221         float mass, accelleration;
222         float maxspeed, maxrotspeed,  maxtiltspeed;
223         int flag;
224         float rotdamp, tiltdamp, speeddamp, pad;
225 } FreeCamera;
226
227 /* objectactuator->flag */
228 #define ACT_FORCE_LOCAL                 1
229 #define ACT_TORQUE_LOCAL                2
230 #define ACT_DLOC_LOCAL                  4
231 #define ACT_DROT_LOCAL                  8
232 #define ACT_LIN_VEL_LOCAL               16
233 #define ACT_ANG_VEL_LOCAL               32
234 //#define ACT_ADD_LIN_VEL_LOCAL 64
235 #define ACT_ADD_LIN_VEL                 64
236
237 #define ACT_OBJECT_FORCE        0
238 #define ACT_OBJECT_TORQUE       1
239 #define ACT_OBJECT_DLOC         2
240 #define ACT_OBJECT_DROT         3
241 #define ACT_OBJECT_LINV         4
242 #define ACT_OBJECT_ANGV         5
243
244 /* actuator->type */
245 #define ACT_OBJECT              0
246 #define ACT_IPO                 1
247 #define ACT_LAMP                2
248 #define ACT_CAMERA              3
249 #define ACT_MATERIAL    4
250 #define ACT_SOUND               5
251 #define ACT_PROPERTY    6
252         /* these two obsolete since 2.02 */
253 #define ACT_ADD_OBJECT  7
254 #define ACT_END_OBJECT  8
255
256 #define ACT_CONSTRAINT  9
257 #define ACT_EDIT_OBJECT 10
258 #define ACT_SCENE               11
259 #define ACT_GROUP               12
260 #define ACT_RANDOM      13
261 #define ACT_MESSAGE     14
262 #define ACT_ACTION              15      /* __ NLA */
263 #define ACT_CD                  16
264 #define ACT_GAME                17
265 #define ACT_VISIBILITY          18
266
267 /* actuator flag */
268 #define ACT_SHOW                1
269 #define ACT_DEL                 2
270 #define ACT_NEW                 4
271
272 /* link codes */
273 #define LINK_SENSOR             0
274 #define LINK_CONTROLLER 1
275 #define LINK_ACTUATOR   2
276
277 /* keyboardsensor->type */
278 #define SENS_ALL_KEYS   1
279
280 /* actionactuator->type */
281 #define ACT_ACTION_PLAY                 0
282 #define ACT_ACTION_PINGPONG             1
283 #define ACT_ACTION_FLIPPER              2
284 #define ACT_ACTION_LOOP_STOP    3
285 #define ACT_ACTION_LOOP_END             4
286 #define ACT_ACTION_KEY2KEY              5
287 #define ACT_ACTION_FROM_PROP    6
288 #define ACT_ACTION_MOTION               7
289
290 /* ipoactuator->type */
291 #define ACT_IPO_PLAY            0
292 #define ACT_IPO_PINGPONG        1
293 #define ACT_IPO_FLIPPER         2
294 #define ACT_IPO_LOOP_STOP       3
295 #define ACT_IPO_LOOP_END        4
296 #define ACT_IPO_KEY2KEY         5
297 #define ACT_IPO_FROM_PROP       6
298
299 /* groupactuator->type */
300 #define ACT_GROUP_PLAY          0
301 #define ACT_GROUP_PINGPONG      1
302 #define ACT_GROUP_FLIPPER       2
303 #define ACT_GROUP_LOOP_STOP     3
304 #define ACT_GROUP_LOOP_END      4
305 #define ACT_GROUP_FROM_PROP     5
306 #define ACT_GROUP_SET           6
307
308 /* ipoactuator->flag */
309 #define ACT_IPOFORCE_BIT       0
310 #define ACT_IPOEND_BIT         1
311 #define ACT_IPOFORCE_LOCAL_BIT 2
312 // unused: 3
313 #define ACT_IPOCHILD_BIT       4
314
315 #define ACT_IPOFORCE        (1 << ACT_IPOFORCE_BIT)
316 #define ACT_IPOEND          (1 << ACT_IPOEND_BIT)
317 #define ACT_IPOFORCE_LOCAL  (1 << ACT_IPOFORCE_LOCAL_BIT)
318 #define ACT_IPOCHILD        (1 << ACT_IPOCHILD_BIT)                     
319
320 /* ipoactuator->flag for k2k */
321 #define ACT_K2K_PREV            1
322 #define ACT_K2K_CYCLIC          2
323 #define ACT_K2K_PINGPONG        4
324 #define ACT_K2K_HOLD            8
325
326 /* property actuator->type */
327 #define ACT_PROP_ASSIGN         0
328 #define ACT_PROP_ADD            1
329 #define ACT_PROP_COPY           2
330
331 /* constraint flag */
332 #define ACT_CONST_LOCX          1
333 #define ACT_CONST_LOCY          2
334 #define ACT_CONST_LOCZ          4
335 #define ACT_CONST_ROTX          8
336 #define ACT_CONST_ROTY          16
337 #define ACT_CONST_ROTZ          32
338
339 /* editObjectActuator->type */
340 #define ACT_EDOB_ADD_OBJECT             0
341 #define ACT_EDOB_END_OBJECT             1
342 #define ACT_EDOB_REPLACE_MESH   2
343 #define ACT_EDOB_TRACK_TO               3
344 #define ACT_EDOB_MAKE_CHILD             4
345 #define ACT_EDOB_END_CHILD              5
346
347 /* editObjectActuator->flag */
348 #define ACT_TRACK_3D                    1
349
350 /* SceneActuator->type */
351 #define ACT_SCENE_RESTART               0
352 #define ACT_SCENE_SET                   1
353 #define ACT_SCENE_CAMERA                2
354 #define ACT_SCENE_ADD_FRONT             3
355 #define ACT_SCENE_ADD_BACK              4
356 #define ACT_SCENE_REMOVE                5
357 #define ACT_SCENE_SUSPEND               6
358 #define ACT_SCENE_RESUME                7
359
360
361 /* randomAct->distribution */
362 #define ACT_RANDOM_BOOL_CONST                  0
363 #define ACT_RANDOM_BOOL_UNIFORM                1
364 #define ACT_RANDOM_BOOL_BERNOUILLI             2
365 #define ACT_RANDOM_INT_CONST                   3
366 #define ACT_RANDOM_INT_UNIFORM                 4
367 #define ACT_RANDOM_INT_POISSON                     5
368 #define ACT_RANDOM_FLOAT_CONST                 6
369 #define ACT_RANDOM_FLOAT_UNIFORM               7
370 #define ACT_RANDOM_FLOAT_NORMAL                8
371 #define ACT_RANDOM_FLOAT_NEGATIVE_EXPONENTIAL  9
372
373 /*  SoundActuator->type */
374 #define ACT_SND_PLAY_STOP_SOUND         0
375 #define ACT_SND_PLAY_END_SOUND          1
376 #define ACT_SND_LOOP_STOP_SOUND         2
377 #define ACT_SND_LOOP_END_SOUND          3
378 #define ACT_SND_LOOP_BIDIRECTIONAL_SOUND                4
379 #define ACT_SND_LOOP_BIDIRECTIONAL_STOP_SOUND   5
380
381 /* messageactuator->type */
382 #define ACT_MESG_MESG           0
383 #define ACT_MESG_PROP           1
384
385 /* cdactuator->type */
386 #define ACT_CD_PLAY_ALL         0
387 #define ACT_CD_PLAY_TRACK       1
388 #define ACT_CD_LOOP_TRACK       2
389 #define ACT_CD_VOLUME           3
390 #define ACT_CD_STOP                     4
391 #define ACT_CD_PAUSE            5
392 #define ACT_CD_RESUME           6
393
394 /* gameactuator->type */
395 #define ACT_GAME_LOAD           0
396 #define ACT_GAME_START          1
397 #define ACT_GAME_RESTART        2
398 #define ACT_GAME_QUIT           3
399
400 /* visibilityact->flag */
401 /* Set means the object will become invisible */
402 #define ACT_VISIBILITY_INVISIBLE_BIT   0
403 #define ACT_VISIBILITY_INVISIBLE       (1 << ACT_VISIBILITY_INVISIBLE_BIT)
404
405 #endif