BGE: rna update for Logic Bricks
[blender.git] / source / blender / makesrna / intern / rna_actuator.c
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * Contributor(s): Blender Foundation (2008).
21  *
22  * ***** END GPL LICENSE BLOCK *****
23  */
24
25 #include <stdlib.h>
26
27 #include "RNA_define.h"
28 #include "RNA_types.h"
29
30 #include "rna_internal.h"
31
32 #include "DNA_actuator_types.h"
33 #include "DNA_scene_types.h" // for MAXFRAMEF
34
35 #include "WM_types.h"
36
37 #ifdef RNA_RUNTIME
38
39 static StructRNA* rna_Actuator_refine(struct PointerRNA *ptr)
40 {
41         bActuator *actuator= (bActuator*)ptr->data;
42
43         switch(actuator->type) {
44                 case ACT_OBJECT:
45                         return &RNA_ObjectActuator;
46                 case ACT_IPO:
47                         return &RNA_IpoActuator;
48                 case ACT_CAMERA:
49                         return &RNA_CameraActuator;
50                 case ACT_SOUND:
51                         return &RNA_SoundActuator;
52                 case ACT_PROPERTY:
53                         return &RNA_PropertyActuator;
54                 case ACT_CONSTRAINT:
55                         return &RNA_ConstraintActuator;
56                 case ACT_EDIT_OBJECT:
57                         return &RNA_EditObjectActuator;
58                 case ACT_SCENE:
59                         return &RNA_SceneActuator;
60                 case ACT_RANDOM:
61                         return &RNA_RandomActuator;
62                 case ACT_MESSAGE:
63                         return &RNA_MessageActuator;
64                 case ACT_ACTION:
65                         return &RNA_ActionActuator;
66                 case ACT_GAME:
67                         return &RNA_GameActuator;
68                 case ACT_VISIBILITY:
69                         return &RNA_VisibilityActuator;
70                 case ACT_2DFILTER:
71                         return &RNA_TwoDFilterActuator;
72                 case ACT_PARENT:
73                         return &RNA_ParentActuator;
74                 case ACT_SHAPEACTION:
75                         return &RNA_ShapeActionActuator;
76                 case ACT_STATE:
77                         return &RNA_StateActuator;
78                 case ACT_ARMATURE:
79                         return &RNA_ArmatureActuator;
80                 default:
81                         return &RNA_Actuator;
82         }
83 }
84
85 #else
86
87 void rna_def_actuator(BlenderRNA *brna)
88 {
89         StructRNA *srna;
90         PropertyRNA *prop;
91
92         static EnumPropertyItem actuator_type_items[] ={
93                 {ACT_OBJECT, "OBJECT", 0, "Motion", ""},
94                 {ACT_IPO, "IPO", 0, "IPO", ""},
95                 {ACT_CAMERA, "CAMERA", 0, "Camera", ""},
96                 {ACT_SOUND, "SOUND", 0, "Sound", ""},
97                 {ACT_PROPERTY, "PROPERTY", 0, "Property", ""},
98                 {ACT_CONSTRAINT, "CONSTRAINT", 0, "Constraint", ""},
99                 {ACT_EDIT_OBJECT, "EDIT_OBJECT", 0, "Edit Object", ""},
100                 {ACT_SCENE, "SCENE", 0, "Scene", ""},
101                 {ACT_RANDOM, "RANDOM", 0, "Random", ""},
102                 {ACT_MESSAGE, "MESSAGE", 0, "Message", ""},
103                 {ACT_ACTION, "ACTION", 0, "Action", ""},
104                 {ACT_GAME, "GAME", 0, "Game", ""},
105                 {ACT_VISIBILITY, "VISIBILITY", 0, "Visibility", ""},
106                 {ACT_2DFILTER, "FILTER_2D", 0, "2D Filter", ""},
107                 {ACT_PARENT, "PARENT", 0, "Parent", ""},
108                 {ACT_SHAPEACTION, "SHAPE_ACTION", 0, "Shape Action", ""},
109                 {ACT_STATE, "STATE", 0, "State", ""},
110                 {ACT_ARMATURE, "ARMATURE", 0, "Armature", ""},
111                 {0, NULL, 0, NULL, NULL}};
112
113         srna= RNA_def_struct(brna, "Actuator", NULL);
114         RNA_def_struct_ui_text(srna, "Actuator", "Game engine logic brick to apply actions in the game engine.");
115         RNA_def_struct_sdna(srna, "bActuator");
116         RNA_def_struct_refine_func(srna, "rna_Actuator_refine");
117
118         prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
119         RNA_def_property_ui_text(prop, "Name", "");
120
121         /* type is not editable, would need to do proper data free/alloc */
122         prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
123         RNA_def_property_clear_flag(prop, PROP_EDITABLE);
124         RNA_def_property_enum_items(prop, actuator_type_items);
125         RNA_def_property_ui_text(prop, "Type", "");
126
127 }
128
129 static void rna_def_object_actuator(BlenderRNA *brna)
130 {
131         StructRNA *srna;
132         srna= RNA_def_struct(brna, "ObjectActuator", "Actuator");
133         RNA_def_struct_ui_text(srna, "Object Actuator", "Actuator to control the object movement.");
134         RNA_def_struct_sdna_from(srna, "bObjectActuator", "data");
135         
136         //XXX
137 }
138
139 static void rna_def_ipo_actuator(BlenderRNA *brna)
140 {
141         StructRNA *srna;
142         PropertyRNA *prop;
143
144         static EnumPropertyItem prop_type_items[] ={
145                 {ACT_IPO_PLAY, "PLAY", 0, "Play", ""},
146                 {ACT_IPO_PINGPONG, "PINGPONG", 0, "Ping Pong", ""},
147                 {ACT_IPO_FLIPPER, "FLIPPER", 0, "Flipper", ""},
148                 {ACT_IPO_LOOP_STOP, "STOP", 0, "Loop Stop", ""},
149                 {ACT_IPO_LOOP_END, "END", 0, "Loop End", ""},
150 //              {ACT_IPO_KEY2KEY, "IPOCHILD", 0, "Key to Key", ""},
151                 {ACT_IPO_FROM_PROP, "PROP", 0, "Property", ""},
152                 {0, NULL, 0, NULL, NULL}};
153         
154         srna= RNA_def_struct(brna, "IpoActuator", "Actuator");
155         RNA_def_struct_ui_text(srna, "Ipo Actuator", "Actuator to animate the object.");
156         RNA_def_struct_sdna_from(srna, "bIpoActuator", "data");
157
158         prop= RNA_def_property(srna, "play_type", PROP_ENUM, PROP_NONE);
159         RNA_def_property_enum_sdna(prop, NULL, "type");
160         RNA_def_property_enum_items(prop, prop_type_items);
161         RNA_def_property_ui_text(prop, "Ipo Type", "Specify the way you want to play the animation.");
162         RNA_def_property_update(prop, NC_LOGIC, NULL);
163         
164         prop= RNA_def_property(srna, "start_frame", PROP_INT, PROP_NONE);
165         RNA_def_property_int_sdna(prop, NULL, "sta");
166         RNA_def_property_ui_range(prop, 1, MAXFRAMEF, 1, 1);
167         RNA_def_property_ui_text(prop, "Start Frame", "");
168         RNA_def_property_update(prop, NC_SCENE, NULL);
169
170         prop= RNA_def_property(srna, "end_frame", PROP_INT, PROP_NONE);
171         RNA_def_property_int_sdna(prop, NULL, "end");
172         RNA_def_property_ui_range(prop, 1, MAXFRAMEF, 1, 1);
173         RNA_def_property_ui_text(prop, "End Frame", "");
174         RNA_def_property_update(prop, NC_LOGIC, NULL);
175         
176         prop= RNA_def_property(srna, "prop", PROP_STRING, PROP_NONE);
177         RNA_def_property_string_sdna(prop, NULL, "name");
178         RNA_def_property_ui_text(prop, "Prop", "Use this property to define the Ipo position.");
179         RNA_def_property_update(prop, NC_LOGIC, NULL);
180
181         prop= RNA_def_property(srna, "frame_prop", PROP_STRING, PROP_NONE);
182         RNA_def_property_string_sdna(prop, NULL, "frameProp");
183         RNA_def_property_ui_text(prop, "FrameProp", "Assign the action's current frame number to this property");
184
185         /* booleans */
186         prop= RNA_def_property(srna, "ipo_force", PROP_BOOLEAN, PROP_NONE);
187         RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_IPOFORCE);
188         RNA_def_property_ui_text(prop, "Force", "Apply Ipo as a global or local force depending on the local option (dynamic objects only)");
189         RNA_def_property_update(prop, NC_LOGIC, NULL);
190         //logic_window::change_ipo_actuator
191         
192         prop= RNA_def_property(srna, "ipo_local", PROP_BOOLEAN, PROP_NONE);
193         RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_IPOLOCAL);
194         RNA_def_property_ui_text(prop, "L", "Let the ipo acts in local coordinates, used in Force and Add mode.");
195         RNA_def_property_update(prop, NC_LOGIC, NULL);
196
197         prop= RNA_def_property(srna, "ipo_child", PROP_BOOLEAN, PROP_NONE);
198         RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_IPOCHILD);
199         RNA_def_property_ui_text(prop, "Child", "Update IPO on all children Objects as well");
200         RNA_def_property_update(prop, NC_LOGIC, NULL);
201         
202         prop= RNA_def_property(srna, "ipo_add", PROP_BOOLEAN, PROP_NONE);
203         RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_IPOADD);
204         RNA_def_property_ui_text(prop, "Add", "Ipo is added to the current loc/rot/scale in global or local coordinate according to Local flag");
205         RNA_def_property_update(prop, NC_LOGIC, NULL);
206         //logic_window::change_ipo_actuator
207 }
208
209 static void rna_def_camera_actuator(BlenderRNA *brna)
210 {
211         StructRNA *srna;
212         PropertyRNA *prop;
213
214         static EnumPropertyItem prop_axis_items[] ={
215                 {(float)'x', "X", 0, "X", "Camera tries to get behind the X axis"},
216                 {(float)'y', "Y", 0, "Y", "Camera tries to get behind the Y axis"},
217                 {0, NULL, 0, NULL, NULL}};
218         
219         srna= RNA_def_struct(brna, "CameraActuator", "Actuator");
220         RNA_def_struct_ui_text(srna, "Camera Actuator", "Actuator to ...");
221         RNA_def_struct_sdna_from(srna, "bCameraActuator", "data");
222
223         prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
224         RNA_def_property_struct_type(prop, "Object");
225         RNA_def_property_pointer_sdna(prop, NULL, "ob");
226         RNA_def_property_flag(prop, PROP_EDITABLE);
227         RNA_def_property_ui_text(prop, "Camera Object", "Look at this Object");
228         RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
229
230         /* floats */
231         prop= RNA_def_property(srna, "height", PROP_FLOAT, PROP_NONE);
232         RNA_def_property_ui_range(prop, 0.0, 20.0, 0.1, 0.1);
233         RNA_def_property_ui_text(prop, "Height", "");
234         RNA_def_property_update(prop, NC_LOGIC, NULL);
235
236         prop= RNA_def_property(srna, "min", PROP_FLOAT, PROP_NONE);
237         RNA_def_property_ui_range(prop, 0.0, 20.0, 0.1, 0.1);
238         RNA_def_property_ui_text(prop, "Min", "");
239         RNA_def_property_update(prop, NC_LOGIC, NULL);
240
241         prop= RNA_def_property(srna, "max", PROP_FLOAT, PROP_NONE);
242         RNA_def_property_ui_range(prop, 0.0, 20.0, 0.1, 0.1);
243         RNA_def_property_ui_text(prop, "Max", "");
244         RNA_def_property_update(prop, NC_LOGIC, NULL);
245
246         /* x/y */
247         // It could be changed to be a regular ENUM instead of this weird "(float)string enum"
248         prop= RNA_def_property(srna, "axis", PROP_ENUM, PROP_NONE);
249         RNA_def_property_enum_sdna(prop, NULL, "axis");
250         RNA_def_property_enum_items(prop, prop_axis_items);
251         RNA_def_property_ui_text(prop, "Axis", "Specify the axy the Camera will try to get behind.");
252         RNA_def_property_update(prop, NC_LOGIC, NULL);
253 }
254
255 static void rna_def_sound_actuator(BlenderRNA *brna)
256 {
257         StructRNA *srna;
258         srna= RNA_def_struct(brna, "SoundActuator", "Actuator");
259         RNA_def_struct_ui_text(srna, "Sound Actuator", "Actuator to ...");
260         RNA_def_struct_sdna_from(srna, "bSoundActuator", "data");
261
262         //XXX
263 }
264
265 static void rna_def_property_actuator(BlenderRNA *brna)
266 {
267         StructRNA *srna;
268         srna= RNA_def_struct(brna, "PropertyActuator", "Actuator");
269         RNA_def_struct_ui_text(srna, "Property Actuator", "Actuator to ...");
270         RNA_def_struct_sdna_from(srna, "bPropertyActuator", "data");
271
272         //XXX
273 }
274
275 static void rna_def_constraint_actuator(BlenderRNA *brna)
276 {
277         StructRNA *srna;
278         srna= RNA_def_struct(brna, "ConstraintActuator", "Actuator");
279         RNA_def_struct_ui_text(srna, "Constraint Actuator", "Actuator to ...");
280         RNA_def_struct_sdna_from(srna, "bConstraintActuator", "data");
281
282         //XXX
283 }
284
285 static void rna_def_edit_object_actuator(BlenderRNA *brna)
286 {
287         StructRNA *srna;
288         srna= RNA_def_struct(brna, "EditObjectActuator", "Actuator");
289         RNA_def_struct_ui_text(srna, "Edit Object Actuator", "Actuator to ...");
290         RNA_def_struct_sdna_from(srna, "bEditObjectActuator", "data");
291
292         //XXX
293 }
294
295 static void rna_def_scene_actuator(BlenderRNA *brna)
296 {
297         StructRNA *srna;
298         srna= RNA_def_struct(brna, "SceneActuator", "Actuator");
299         RNA_def_struct_ui_text(srna, "Scene Actuator", "Actuator to ...");
300         RNA_def_struct_sdna_from(srna, "bSceneActuator", "data");
301
302         //XXX
303 }
304
305 static void rna_def_random_actuator(BlenderRNA *brna)
306 {
307         StructRNA *srna;
308         srna= RNA_def_struct(brna, "RandomActuator", "Actuator");
309         RNA_def_struct_ui_text(srna, "Random Actuator", "Actuator to ...");
310         RNA_def_struct_sdna_from(srna, "bRandomActuator", "data");
311
312         //XXX
313 }
314
315 static void rna_def_message_actuator(BlenderRNA *brna)
316 {
317         StructRNA *srna;
318         srna= RNA_def_struct(brna, "MessageActuator", "Actuator");
319         RNA_def_struct_ui_text(srna, "Message Actuator", "Actuator to ...");
320         RNA_def_struct_sdna_from(srna, "bMessageActuator", "data");
321
322         //XXX
323 }
324
325 static void rna_def_action_actuator(BlenderRNA *brna)
326 {
327         StructRNA *srna;
328         srna= RNA_def_struct(brna, "ActionActuator", "Actuator");
329         RNA_def_struct_ui_text(srna, "Action Actuator", "Actuator to ...");
330         RNA_def_struct_sdna_from(srna, "bActionActuator", "data");
331
332         //XXX
333 }
334
335 static void rna_def_game_actuator(BlenderRNA *brna)
336 {
337         StructRNA *srna;
338         srna= RNA_def_struct(brna, "GameActuator", "Actuator");
339         RNA_def_struct_ui_text(srna, "Game Actuator", "Actuator to ...");
340         RNA_def_struct_sdna_from(srna, "bGameActuator", "data");
341
342         //XXX
343 }
344
345 static void rna_def_visibility_actuator(BlenderRNA *brna)
346 {
347         StructRNA *srna;
348         srna= RNA_def_struct(brna, "VisibilityActuator", "Actuator");
349         RNA_def_struct_ui_text(srna, "Visibility Actuator", "Actuator to ...");
350         RNA_def_struct_sdna_from(srna, "bVisibilityActuator", "data");
351
352         //XXX
353 }
354
355 static void rna_def_twodfilter_actuator(BlenderRNA *brna)
356 {
357         StructRNA *srna;
358         srna= RNA_def_struct(brna, "TwoDFilterActuator", "Actuator");
359         RNA_def_struct_ui_text(srna, "2D Filter Actuator", "Actuator to ...");
360         RNA_def_struct_sdna_from(srna, "bTwoDFilterActuator", "data");
361
362         //XXX
363 }
364
365 static void rna_def_parent_actuator(BlenderRNA *brna)
366 {
367         StructRNA *srna;
368         srna= RNA_def_struct(brna, "ParentActuator", "Actuator");
369         RNA_def_struct_ui_text(srna, "Parent Actuator", "Actuator to ...");
370         RNA_def_struct_sdna_from(srna, "bParentActuator", "data");
371
372         //XXX
373 }
374
375 static void rna_def_shape_action_actuator(BlenderRNA *brna)
376 {
377         StructRNA *srna;
378         srna= RNA_def_struct(brna, "ShapeActionActuator", "Actuator");
379         RNA_def_struct_ui_text(srna, "Shape Action Actuator", "Actuator to ...");
380         RNA_def_struct_sdna_from(srna, "bShapeActionActuator", "data");
381
382         //XXX
383 }
384
385 static void rna_def_state_actuator(BlenderRNA *brna)
386 {
387         StructRNA *srna;
388         srna= RNA_def_struct(brna, "StateActuator", "Actuator");
389         RNA_def_struct_ui_text(srna, "State Actuator", "Actuator to ...");
390         RNA_def_struct_sdna_from(srna, "bStateActuator", "data");
391
392         //XXX
393 }
394
395 static void rna_def_armature_actuator(BlenderRNA *brna)
396 {
397         StructRNA *srna;
398         srna= RNA_def_struct(brna, "ArmatureActuator", "Actuator");
399         RNA_def_struct_ui_text(srna, "Armature Actuator", "Actuator to ...");
400         RNA_def_struct_sdna_from(srna, "bArmatureActuator", "data");
401
402         //XXX
403 }
404
405 void RNA_def_actuator(BlenderRNA *brna)
406 {
407         rna_def_actuator(brna);
408
409         rna_def_object_actuator(brna);          // to be done
410         rna_def_ipo_actuator(brna);
411         rna_def_camera_actuator(brna);
412         rna_def_sound_actuator(brna);           // to be done
413         rna_def_property_actuator(brna);        // to be done
414         rna_def_constraint_actuator(brna);      // to be done
415         rna_def_edit_object_actuator(brna);     // to be done
416         rna_def_scene_actuator(brna);           // to be done
417         rna_def_random_actuator(brna);          // to be done
418         rna_def_message_actuator(brna);         // to be done
419         rna_def_action_actuator(brna);          // to be done
420         rna_def_game_actuator(brna);            // to be done
421         rna_def_visibility_actuator(brna);      // to be done
422         rna_def_twodfilter_actuator(brna);      // to be done
423         rna_def_parent_actuator(brna);          // to be done
424         rna_def_shape_action_actuator(brna);// to be done
425         rna_def_state_actuator(brna);           // to be done
426         rna_def_armature_actuator(brna);        // to be done
427
428 }
429
430 #endif
431