RNA
[blender-staging.git] / source / blender / makesrna / intern / rna_object.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_object_types.h"
33 #include "DNA_property_types.h"
34 #include "DNA_scene_types.h"
35
36 #include "WM_types.h"
37
38 #ifdef RNA_RUNTIME
39
40 #include "BKE_context.h"
41 #include "BKE_depsgraph.h"
42
43 static void rna_Object_update(bContext *C, PointerRNA *ptr)
44 {
45         DAG_object_flush_update(CTX_data_scene(C), ptr->id.data, OB_RECALC_OB);
46 }
47
48 static int rna_VertexGroup_index_get(PointerRNA *ptr)
49 {
50         Object *ob= ptr->id.data;
51
52         return BLI_findindex(&ob->defbase, ptr->data);
53 }
54
55 static void *rna_Object_active_vertex_group_get(PointerRNA *ptr)
56 {
57         Object *ob= ptr->id.data;
58         return BLI_findlink(&ob->defbase, ob->actdef);
59 }
60
61 static void rna_Object_active_material_range(PointerRNA *ptr, int *min, int *max)
62 {
63         Object *ob= (Object*)ptr->id.data;
64         *min= 0;
65         *max= ob->totcol-1;
66 }
67
68 static void *rna_Object_game_settings_get(PointerRNA *ptr)
69 {
70         return ptr->id.data;
71 }
72
73 static void rna_Object_layer_set(PointerRNA *ptr, int index, int value)
74 {
75         Object *ob= (Object*)ptr->data;
76
77         if(value) ob->lay |= (1<<index);
78         else {
79                 ob->lay &= ~(1<<index);
80                 if(ob->lay == 0)
81                         ob->lay |= (1<<index);
82         }
83 }
84
85 static void rna_ObjectGameSettings_state_set(PointerRNA *ptr, int index, int value)
86 {
87         Object *ob= (Object*)ptr->data;
88
89         if(value) ob->state |= (1<<index);
90         else {
91                 ob->state &= ~(1<<index);
92                 if(ob->state == 0)
93                         ob->state |= (1<<index);
94         }
95 }
96
97 #else
98
99 static void rna_def_vertex_group(BlenderRNA *brna)
100 {
101         StructRNA *srna;
102         PropertyRNA *prop;
103
104         srna= RNA_def_struct(brna, "VertexGroup", NULL);
105         RNA_def_struct_sdna(srna, "bDeformGroup");
106         RNA_def_struct_ui_text(srna, "Vertex Group", "Group of vertices, used for armature deform and other purposes.");
107
108         prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
109         RNA_def_property_ui_text(prop, "Name", "Vertex group name.");
110         RNA_def_struct_name_property(srna, prop);
111
112         prop= RNA_def_property(srna, "index", PROP_INT, PROP_UNSIGNED);
113         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
114         RNA_def_property_int_funcs(prop, "rna_VertexGroup_index_get", NULL, NULL);
115         RNA_def_property_ui_text(prop, "Index", "Index number of the vertex group.");
116 }
117
118 static void rna_def_object_game_settings(BlenderRNA *brna)
119 {
120         StructRNA *srna;
121         PropertyRNA *prop;
122
123         static EnumPropertyItem body_type_items[] = {
124                 {OB_BODY_TYPE_NO_COLLISION, "NO_COLLISION", "No Collision", ""},
125                 {OB_BODY_TYPE_STATIC, "STATIC", "Static", ""},
126                 {OB_BODY_TYPE_DYNAMIC, "DYNAMIC", "Dynamic", ""},
127                 {OB_BODY_TYPE_RIGID, "RIGID_BODY", "Rigid Body", ""},
128                 {OB_BODY_TYPE_SOFT, "SOFT_BODY", "Soft Body", ""},
129                 {0, NULL, NULL, NULL}};
130
131         static EnumPropertyItem collision_bounds_items[] = {
132                 {OB_BOUND_BOX, "BOX", "Box", ""},
133                 {OB_BOUND_SPHERE, "SPHERE", "Sphere", ""},
134                 {OB_BOUND_CYLINDER, "CYLINDER", "Cylinder", ""},
135                 {OB_BOUND_CONE, "CONE", "Cone", ""},
136                 {OB_BOUND_POLYH, "CONVEX_HULL", "Convex Hull", ""},
137                 {OB_BOUND_POLYT, "TRIANGLE_MESH", "Triangle Mesh", ""},
138                 //{OB_DYN_MESH, "DYNAMIC_MESH", "Dynamic Mesh", ""},
139                 {0, NULL, NULL, NULL}};
140
141         srna= RNA_def_struct(brna, "ObjectGameSettings", NULL);
142         RNA_def_struct_sdna(srna, "Object");
143         RNA_def_struct_ui_text(srna, "Object Game Settings", "Game engine related settings for the object.");
144
145         prop= RNA_def_property(srna, "sensors", PROP_COLLECTION, PROP_NONE);
146         RNA_def_property_struct_type(prop, "Sensor");
147         RNA_def_property_ui_text(prop, "Sensors", "DOC_BROKEN");
148
149         prop= RNA_def_property(srna, "controllers", PROP_COLLECTION, PROP_NONE);
150         RNA_def_property_struct_type(prop, "Controller");
151         RNA_def_property_ui_text(prop, "Controllers", "DOC_BROKEN");
152
153         prop= RNA_def_property(srna, "actuators", PROP_COLLECTION, PROP_NONE);
154         RNA_def_property_struct_type(prop, "Actuator");
155         RNA_def_property_ui_text(prop, "Actuators", "DOC_BROKEN");
156
157         prop= RNA_def_property(srna, "properties", PROP_COLLECTION, PROP_NONE);
158         RNA_def_property_collection_sdna(prop, NULL, "prop", NULL);
159         RNA_def_property_struct_type(prop, "GameProperty");
160         RNA_def_property_ui_text(prop, "Properties", "Game engine properties.");
161
162         prop= RNA_def_property(srna, "physics_type", PROP_ENUM, PROP_NONE);
163         RNA_def_property_enum_sdna(prop, NULL, "body_type");
164         RNA_def_property_enum_items(prop, body_type_items);
165         RNA_def_property_flag(prop, PROP_NOT_EDITABLE); // this controls various gameflags
166         RNA_def_property_ui_text(prop, "Physics Type",  "Selects the type of physical representation.");
167
168         prop= RNA_def_property(srna, "actor", PROP_BOOLEAN, PROP_NONE);
169         RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_ACTOR);
170         RNA_def_property_ui_text(prop, "Actor", "Object is detected by the Near and Radar sensor.");
171
172         prop= RNA_def_property(srna, "ghost", PROP_BOOLEAN, PROP_NONE);
173         RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_GHOST);
174         RNA_def_property_ui_text(prop, "Ghost", "Object does not restitute collisions, like a ghost.");
175
176         prop= RNA_def_property(srna, "mass", PROP_FLOAT, PROP_NONE);
177         RNA_def_property_range(prop, 0.01, 10000.0);
178         RNA_def_property_ui_text(prop, "Mass", "Mass of the object.");
179
180         prop= RNA_def_property(srna, "radius", PROP_FLOAT, PROP_NONE);
181         RNA_def_property_float_sdna(prop, NULL, "inertia");
182         RNA_def_property_range(prop, 0.01, 10.0);
183         RNA_def_property_ui_text(prop, "Radius", "Radius for Bounding sphere and Fh/Fh Rot.");
184
185         prop= RNA_def_property(srna, "no_sleeping", PROP_BOOLEAN, PROP_NONE);
186         RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_COLLISION_RESPONSE);
187         RNA_def_property_ui_text(prop, "No Sleeping", "Disable auto (de)activation in physics simulation.");
188
189         prop= RNA_def_property(srna, "damping", PROP_FLOAT, PROP_NONE);
190         RNA_def_property_float_sdna(prop, NULL, "damping");
191         RNA_def_property_range(prop, 0.0, 1.0);
192         RNA_def_property_ui_text(prop, "Damping", "General movement damping.");
193
194         prop= RNA_def_property(srna, "rotation_damping", PROP_FLOAT, PROP_NONE);
195         RNA_def_property_float_sdna(prop, NULL, "rdamping");
196         RNA_def_property_range(prop, 0.0, 1.0);
197         RNA_def_property_ui_text(prop, "Rotation Damping", "General rotation damping.");
198
199         prop= RNA_def_property(srna, "do_fh", PROP_BOOLEAN, PROP_NONE);
200         RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_DO_FH);
201         RNA_def_property_ui_text(prop, "Do Fh", "Use Fh settings in materials.");
202
203         prop= RNA_def_property(srna, "rotation_fh", PROP_BOOLEAN, PROP_NONE);
204         RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_ROT_FH);
205         RNA_def_property_ui_text(prop, "Rotation Fh", "Use face normal to rotate Object");
206
207         prop= RNA_def_property(srna, "form_factor", PROP_FLOAT, PROP_NONE);
208         RNA_def_property_float_sdna(prop, NULL, "formfactor");
209         RNA_def_property_range(prop, 0.0, 1.0);
210         RNA_def_property_ui_text(prop, "Form Factor", "Form factor scales the inertia tensor.");
211
212         prop= RNA_def_property(srna, "anisotropic_friction", PROP_BOOLEAN, PROP_NONE);
213         RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_ANISOTROPIC_FRICTION);
214         RNA_def_property_ui_text(prop, "Anisotropic Friction", "Enable anisotropic friction.");
215
216         prop= RNA_def_property(srna, "friction_coefficients", PROP_FLOAT, PROP_VECTOR);
217         RNA_def_property_float_sdna(prop, NULL, "anisotropicFriction");
218         RNA_def_property_range(prop, 0.0, 1.0);
219         RNA_def_property_ui_text(prop, "Friction Coefficients", "Relative friction coefficient in the in the X, Y and Z directions, when anisotropic friction is enabled.");
220
221         prop= RNA_def_property(srna, "use_collision_bounds", PROP_BOOLEAN, PROP_NONE);
222         RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_BOUNDS);
223         RNA_def_property_ui_text(prop, "Use Collision Bounds", "Specify a collision bounds type other than the default.");
224
225         prop= RNA_def_property(srna, "collision_bounds", PROP_ENUM, PROP_NONE);
226         RNA_def_property_enum_sdna(prop, NULL, "boundtype");
227         RNA_def_property_enum_items(prop, collision_bounds_items);
228         RNA_def_property_ui_text(prop, "Collision Bounds",  "Selects the collision type.");
229
230         prop= RNA_def_property(srna, "collision_compound", PROP_BOOLEAN, PROP_NONE);
231         RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_CHILD);
232         RNA_def_property_ui_text(prop, "Collison Compound", "Add children to form a compound collision object.");
233
234         prop= RNA_def_property(srna, "collision_margin", PROP_FLOAT, PROP_NONE);
235         RNA_def_property_float_sdna(prop, NULL, "margin");
236         RNA_def_property_range(prop, 0.0, 1.0);
237         RNA_def_property_ui_text(prop, "Collision Margin", "Extra margin around object for collision detection, small amount required for stability.");
238
239         prop= RNA_def_property(srna, "state", PROP_BOOLEAN, PROP_NONE);
240         RNA_def_property_boolean_sdna(prop, NULL, "state", 1);
241         RNA_def_property_array(prop, 30);
242         RNA_def_property_ui_text(prop, "State", "State determining which controllers are displayed.");
243         RNA_def_property_boolean_funcs(prop, NULL, "rna_ObjectGameSettings_state_set");
244
245         prop= RNA_def_property(srna, "initial_state", PROP_BOOLEAN, PROP_NONE);
246         RNA_def_property_boolean_sdna(prop, NULL, "init_state", 1);
247         RNA_def_property_array(prop, 30);
248         RNA_def_property_ui_text(prop, "Initial State", "Initial state when the game starts.");
249
250         prop= RNA_def_property(srna, "soft_body", PROP_POINTER, PROP_NONE);
251         RNA_def_property_pointer_sdna(prop, NULL, "bsoft");
252         RNA_def_property_ui_text(prop, "Soft Body Settings", "Settings for Bullet soft body simulation.");
253 }
254
255 static void rna_def_object(BlenderRNA *brna)
256 {
257         StructRNA *srna;
258         PropertyRNA *prop;
259
260         static EnumPropertyItem parent_type_items[] = {
261                 {PAROBJECT, "OBJECT", "Object", ""},
262                 {PARCURVE, "CURVE", "Curve", ""},
263                 //{PARKEY, "KEY", "Key", ""},
264                 {PARSKEL, "ARMATURE", "Armature", ""},
265                 {PARSKEL, "LATTICE", "Lattice", ""}, // PARSKEL reuse will give issues
266                 {PARVERT1, "VERTEX", "Vertex", ""},
267                 {PARVERT3, "VERTEX_3", "3 Vertices", ""},
268                 {PARBONE, "BONE", "Bone", ""},
269                 {0, NULL, NULL, NULL}};
270
271         static EnumPropertyItem empty_drawtype_items[] = {
272                 {OB_ARROWS, "ARROWS", "Arrows", ""},
273                 {OB_SINGLE_ARROW, "SINGLE_ARROW", "Single Arrow", ""},
274                 {OB_PLAINAXES, "PLAIN_AXES", "Plain Axes", ""},
275                 {OB_CIRCLE, "CIRCLE", "Circle", ""},
276                 {OB_CUBE, "CUBE", "Cube", ""},
277                 {OB_EMPTY_SPHERE, "SPHERE", "Sphere", ""},
278                 {OB_EMPTY_CONE, "CONE", "Cone", ""},
279                 {0, NULL, NULL, NULL}};
280
281
282         srna= RNA_def_struct(brna, "Object", "ID");
283         RNA_def_struct_ui_text(srna, "Object", "DOC_BROKEN");
284
285         prop= RNA_def_property(srna, "data", PROP_POINTER, PROP_NONE);
286         RNA_def_property_struct_type(prop, "ID");
287         RNA_def_property_ui_text(prop, "Data", "Object data.");
288
289         prop= RNA_def_property(srna, "layers", PROP_BOOLEAN, PROP_NONE);
290         RNA_def_property_boolean_sdna(prop, NULL, "lay", 1);
291         RNA_def_property_array(prop, 20);
292         RNA_def_property_ui_text(prop, "Layers", "Layers the object is on.");
293         RNA_def_property_boolean_funcs(prop, NULL, "rna_Object_layer_set");
294
295         /* parent and track */
296
297         prop= RNA_def_property(srna, "parent", PROP_POINTER, PROP_NONE);
298         RNA_def_property_ui_text(prop, "Parent", "Parent Object");
299
300         prop= RNA_def_property(srna, "parent_type", PROP_ENUM, PROP_NONE);
301         RNA_def_property_enum_bitflag_sdna(prop, NULL, "partype");
302         RNA_def_property_enum_items(prop, parent_type_items);
303         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
304         RNA_def_property_ui_text(prop, "Parent Type", "Type of parent relation.");
305
306         prop= RNA_def_property(srna, "parent_vertices", PROP_INT, PROP_UNSIGNED);
307         RNA_def_property_int_sdna(prop, NULL, "par1");
308         RNA_def_property_array(prop, 3);
309         RNA_def_property_flag(prop, PROP_NOT_EDITABLE);
310         RNA_def_property_ui_text(prop, "Parent Vertices", "Indices of vertices in cases of a vertex parenting relation.");
311
312         prop= RNA_def_property(srna, "parent_bone", PROP_STRING, PROP_NONE);
313         RNA_def_property_string_sdna(prop, NULL, "parsubstr");
314         RNA_def_property_ui_text(prop, "Parent Bone", "Name of parent bone in case of a bone parenting relation.");
315
316         prop= RNA_def_property(srna, "track", PROP_POINTER, PROP_NONE);
317         RNA_def_property_ui_text(prop, "Track", "Object being tracked to define the rotation (Old Track).");
318
319         /* proxy */
320
321         prop= RNA_def_property(srna, "proxy", PROP_POINTER, PROP_NONE);
322         RNA_def_property_ui_text(prop, "Proxy", "Library object this proxy object controls.");
323
324         prop= RNA_def_property(srna, "proxy_group", PROP_POINTER, PROP_NONE);
325         RNA_def_property_ui_text(prop, "Proxy Group", "Library group duplicator object this proxy object controls.");
326
327         /* action / pose */
328
329         prop= RNA_def_property(srna, "action", PROP_POINTER, PROP_NONE);
330         RNA_def_property_struct_type(prop, "UnknownType");
331         RNA_def_property_ui_text(prop, "Action", "Action used by object to define Ipo curves.");
332
333         prop= RNA_def_property(srna, "pose_library", PROP_POINTER, PROP_NONE);
334         RNA_def_property_pointer_sdna(prop, NULL, "poselib");
335         RNA_def_property_struct_type(prop, "UnknownType");
336         RNA_def_property_ui_text(prop, "Pose Library", "Action used as a pose library for armatures.");
337
338         prop= RNA_def_property(srna, "pose", PROP_POINTER, PROP_NONE);
339         RNA_def_property_pointer_sdna(prop, NULL, "pose");
340         RNA_def_property_struct_type(prop, "UnknownType");
341         RNA_def_property_ui_text(prop, "Pose", "Current pose for armatures.");
342
343         /* materials */
344
345         prop= RNA_def_property(srna, "materials", PROP_COLLECTION, PROP_NONE);
346         RNA_def_property_collection_sdna(prop, NULL, "mat", "totcol");
347         RNA_def_property_struct_type(prop, "Material");
348         RNA_def_property_ui_text(prop, "Materials", "");
349
350         prop= RNA_def_property(srna, "active_material", PROP_INT, PROP_UNSIGNED);
351         RNA_def_property_int_sdna(prop, NULL, "actcol");
352         RNA_def_property_int_funcs(prop, NULL, NULL, "rna_Object_active_material_range");
353         RNA_def_property_ui_text(prop, "Active Material", "Index of active material.");
354
355         /* transform */
356
357         prop= RNA_def_property(srna, "location", PROP_FLOAT, PROP_VECTOR);
358         RNA_def_property_float_sdna(prop, NULL, "loc");
359         RNA_def_property_ui_text(prop, "Location", "Location of the object.");
360         RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_update");
361
362         prop= RNA_def_property(srna, "delta_location", PROP_FLOAT, PROP_VECTOR);
363         RNA_def_property_float_sdna(prop, NULL, "dloc");
364         RNA_def_property_ui_text(prop, "Delta Location", "Extra added translation to object location.");
365         RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_update");
366         
367         prop= RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_ROTATION);
368         RNA_def_property_float_sdna(prop, NULL, "rot");
369         RNA_def_property_ui_text(prop, "Rotation", "Rotation of the object.");
370         RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_update");
371
372         prop= RNA_def_property(srna, "delta_rotation", PROP_FLOAT, PROP_ROTATION);
373         RNA_def_property_float_sdna(prop, NULL, "drot");
374         RNA_def_property_ui_text(prop, "Delta Rotation", "Extra added rotation to the rotation of the object.");
375         RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_update");
376         
377         prop= RNA_def_property(srna, "scale", PROP_FLOAT, PROP_VECTOR);
378         RNA_def_property_float_sdna(prop, NULL, "size");
379         RNA_def_property_ui_text(prop, "Scale", "Scaling of the object.");
380         RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_update");
381
382         prop= RNA_def_property(srna, "delta_scale", PROP_FLOAT, PROP_VECTOR);
383         RNA_def_property_float_sdna(prop, NULL, "dsize");
384         RNA_def_property_ui_text(prop, "Delta Scale", "Extra added scaling to the scale of the object.");
385         RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_update");
386
387         prop= RNA_def_property(srna, "lock_location", PROP_BOOLEAN, PROP_VECTOR);
388         RNA_def_property_boolean_sdna(prop, NULL, "protectflag", OB_LOCK_LOCX);
389         RNA_def_property_array(prop, 3);
390         RNA_def_property_ui_text(prop, "Lock Location", "Lock editing of location in the interface.");
391
392         prop= RNA_def_property(srna, "lock_rotation", PROP_BOOLEAN, PROP_VECTOR);
393         RNA_def_property_boolean_sdna(prop, NULL, "protectflag", OB_LOCK_ROTX);
394         RNA_def_property_array(prop, 3);
395         RNA_def_property_ui_text(prop, "Lock Rotation", "Lock editing of rotation in the interface.");
396
397         prop= RNA_def_property(srna, "lock_scale", PROP_BOOLEAN, PROP_VECTOR);
398         RNA_def_property_boolean_sdna(prop, NULL, "protectflag", OB_LOCK_SCALEX);
399         RNA_def_property_array(prop, 3);
400         RNA_def_property_ui_text(prop, "Lock Scale", "Lock editing of scale in the interface.");
401
402         /* collections */
403
404         prop= RNA_def_property(srna, "ipo", PROP_POINTER, PROP_NONE);
405         RNA_def_property_struct_type(prop, "Ipo");
406         RNA_def_property_ui_text(prop, "Ipo Curves", "Ipo curves used by the object.");
407
408         prop= RNA_def_property(srna, "constraints", PROP_COLLECTION, PROP_NONE);
409         RNA_def_property_struct_type(prop, "Constraint");
410         RNA_def_property_ui_text(prop, "Constraints", "Constraints of the object.");
411
412         prop= RNA_def_property(srna, "constraint_channels", PROP_COLLECTION, PROP_NONE);
413         RNA_def_property_collection_sdna(prop, NULL, "constraintChannels", NULL);
414         RNA_def_property_struct_type(prop, "UnknownType");
415         RNA_def_property_ui_text(prop, "Constraint Channels", "Ipo curves for the object constraints.");
416         
417         prop= RNA_def_property(srna, "modifiers", PROP_COLLECTION, PROP_NONE);
418         RNA_def_property_struct_type(prop, "Modifier");
419         RNA_def_property_ui_text(prop, "Modifiers", "DOC_BROKEN");
420
421         /* game engine */
422
423         prop= RNA_def_property(srna, "game", PROP_POINTER, PROP_NONE);
424         RNA_def_property_struct_type(prop, "ObjectGameSettings");
425         RNA_def_property_pointer_funcs(prop, "rna_Object_game_settings_get", NULL, NULL);
426         RNA_def_property_ui_text(prop, "Game Settings", "Game engine related settings for the object.");
427
428         /* vertex groups */
429
430         prop= RNA_def_property(srna, "vertex_groups", PROP_COLLECTION, PROP_NONE);
431         RNA_def_property_collection_sdna(prop, NULL, "defbase", NULL);
432         RNA_def_property_struct_type(prop, "VertexGroup");
433         RNA_def_property_ui_text(prop, "Vertex Groups", "Vertex groups of the object.");
434
435         prop= RNA_def_property(srna, "active_vertex_group", PROP_POINTER, PROP_NONE);
436         RNA_def_property_struct_type(prop, "VertexGroup");
437         RNA_def_property_pointer_funcs(prop, "rna_Object_active_vertex_group_get", NULL, NULL);
438         RNA_def_property_ui_text(prop, "Active Vertex Group", "Vertex groups of the object.");
439
440         /* empty */
441
442         prop= RNA_def_property(srna, "empty_draw_type", PROP_ENUM, PROP_NONE);
443         RNA_def_property_enum_sdna(prop, NULL, "empty_drawtype");
444         RNA_def_property_enum_items(prop, empty_drawtype_items);
445         RNA_def_property_ui_text(prop, "Empty Draw Type", "Viewport display style for empties.");
446
447         prop= RNA_def_property(srna, "empty_draw_size", PROP_FLOAT, PROP_NONE);
448         RNA_def_property_float_sdna(prop, NULL, "empty_drawsize");
449         RNA_def_property_range(prop, 0.01, 10.0);
450         RNA_def_property_ui_text(prop, "Empty Draw Size", "Size of of display for empties in the viewport.");
451
452         /* various */
453
454         prop= RNA_def_property(srna, "pass_index", PROP_INT, PROP_UNSIGNED);
455         RNA_def_property_int_sdna(prop, NULL, "index");
456         RNA_def_property_ui_text(prop, "Pass Index", "Index # for the IndexOB render pass.");
457
458         prop= RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
459         RNA_def_property_float_sdna(prop, NULL, "col");
460         RNA_def_property_ui_text(prop, "Color", "Object color and alpha, used when faces have the ObColor mode enabled.");
461
462         prop= RNA_def_property(srna, "time_offset", PROP_FLOAT, PROP_NONE);
463         RNA_def_property_float_sdna(prop, NULL, "sf");
464         RNA_def_property_range(prop, -MAXFRAMEF, MAXFRAMEF);
465         RNA_def_property_ui_text(prop, "Time Offset", "Animation offset in frames for ipo's and dupligroup instances.");
466
467         /* physics */
468
469         prop= RNA_def_property(srna, "field", PROP_POINTER, PROP_NONE);
470         RNA_def_property_pointer_sdna(prop, NULL, "pd");
471         RNA_def_property_struct_type(prop, "FieldSettings");
472         RNA_def_property_ui_text(prop, "Field Settings", "Settings for using the objects as a field in physics simulation.");
473
474         prop= RNA_def_property(srna, "collision", PROP_POINTER, PROP_NONE);
475         RNA_def_property_pointer_sdna(prop, NULL, "pd");
476         RNA_def_property_struct_type(prop, "CollisionSettings");
477         RNA_def_property_ui_text(prop, "Collision Settings", "Settings for using the objects as a collider in physics simulation.");
478
479         prop= RNA_def_property(srna, "soft_body", PROP_POINTER, PROP_NONE);
480         RNA_def_property_pointer_sdna(prop, NULL, "soft");
481         RNA_def_property_ui_text(prop, "Soft Body Settings", "Settings for soft body simulation.");
482
483         prop= RNA_def_property(srna, "particle_systems", PROP_COLLECTION, PROP_NONE);
484         RNA_def_property_collection_sdna(prop, NULL, "particlesystem", NULL);
485         RNA_def_property_struct_type(prop, "ParticleSystem");
486         RNA_def_property_ui_text(prop, "Particle Systems", "Particle systems emitted from the object.");
487
488         /* restrict */
489
490         prop= RNA_def_property(srna, "restrict_view", PROP_BOOLEAN, PROP_NONE);
491         RNA_def_property_boolean_sdna(prop, NULL, "restrictflag", OB_RESTRICT_VIEW);
492         RNA_def_property_ui_text(prop, "Restrict View", "Restrict visibility in the viewport.");
493
494         prop= RNA_def_property(srna, "restrict_select", PROP_BOOLEAN, PROP_NONE);
495         RNA_def_property_boolean_sdna(prop, NULL, "restrictflag", OB_RESTRICT_SELECT);
496         RNA_def_property_ui_text(prop, "Restrict Select", "Restrict selection in the viewport.");
497
498         prop= RNA_def_property(srna, "restrict_render", PROP_BOOLEAN, PROP_NONE);
499         RNA_def_property_boolean_sdna(prop, NULL, "restrictflag", OB_RESTRICT_RENDER);
500         RNA_def_property_ui_text(prop, "Restrict Render", "Restrict renderability.");
501 }
502
503 void RNA_def_object(BlenderRNA *brna)
504 {
505         rna_def_object(brna);
506         rna_def_object_game_settings(brna);
507         rna_def_vertex_group(brna);
508 }
509
510 #endif
511