2.5: Various Fixes
[blender.git] / source / blender / makesrna / intern / rna_world.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 <float.h>
26 #include <stdlib.h>
27
28 #include "RNA_define.h"
29 #include "RNA_types.h"
30
31 #include "rna_internal.h"
32
33 #include "DNA_material_types.h"
34 #include "DNA_texture_types.h"
35 #include "DNA_world_types.h"
36
37 #include "WM_types.h"
38
39 #ifdef RNA_RUNTIME
40
41 static PointerRNA rna_World_ambient_occlusion_get(PointerRNA *ptr)
42 {
43         return rna_pointer_inherit_refine(ptr, &RNA_WorldAmbientOcclusion, ptr->id.data);
44 }
45
46 static PointerRNA rna_World_stars_get(PointerRNA *ptr)
47 {
48         return rna_pointer_inherit_refine(ptr, &RNA_WorldStarsSettings, ptr->id.data);
49 }
50
51 static PointerRNA rna_World_mist_get(PointerRNA *ptr)
52 {
53         return rna_pointer_inherit_refine(ptr, &RNA_WorldMistSettings, ptr->id.data);
54 }
55
56 static void rna_World_mtex_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
57 {
58         World *wo= (World*)ptr->data;
59         rna_iterator_array_begin(iter, (void*)wo->mtex, sizeof(MTex*), MAX_MTEX, NULL);
60 }
61
62 static PointerRNA rna_World_active_texture_get(PointerRNA *ptr)
63 {
64         World *wo= (World*)ptr->data;
65
66         return rna_pointer_inherit_refine(ptr, &RNA_TextureSlot, wo->mtex[(int)wo->texact]);
67 }
68
69 #else
70
71 static void rna_def_world_mtex(BlenderRNA *brna)
72 {
73         StructRNA *srna;
74         PropertyRNA *prop;
75
76         static EnumPropertyItem texco_items[] = {
77                 {TEXCO_VIEW, "VIEW", 0, "View", "Uses view vector for the texture coordinates."},
78                 {TEXCO_GLOB, "GLOBAL", 0, "Global", "Uses global coordinates for the texture coordinates (interior mist)."},
79                 {TEXCO_ANGMAP, "ANGMAP", 0, "AngMap", "Uses 360 degree angular coordinates, e.g. for spherical light probes."},
80                 {TEXCO_H_SPHEREMAP, "SPHERE", 0, "Sphere", "For 360 degree panorama sky, spherical mapped, only top half."},
81                 {TEXCO_H_TUBEMAP, "TUBE", 0, "Tube", "For 360 degree panorama sky, cylindrical mapped, only top half."},
82                 {TEXCO_OBJECT, "OBJECT", 0, "Object", "Uses linked object's coordinates for texture coordinates."},
83                 {0, NULL, 0, NULL, NULL}};
84
85         srna= RNA_def_struct(brna, "WorldTextureSlot", "TextureSlot");
86         RNA_def_struct_sdna(srna, "MTex");
87         RNA_def_struct_ui_text(srna, "World Texture Slot", "Texture slot for textures in a World datablock.");
88
89         /* map to */
90         prop= RNA_def_property(srna, "map_to_blend", PROP_BOOLEAN, PROP_NONE);
91         RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_BLEND);
92         RNA_def_property_ui_text(prop, "Map To Blend", "Affect the color progression of the background.");
93
94         prop= RNA_def_property(srna, "map_to_horizon", PROP_BOOLEAN, PROP_NONE);
95         RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_HORIZ);
96         RNA_def_property_ui_text(prop, "Map To Horizon", "Affect the color of the horizon.");
97
98         prop= RNA_def_property(srna, "map_to_zenith_up", PROP_BOOLEAN, PROP_NONE);
99         RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_ZENUP);
100         RNA_def_property_ui_text(prop, "Map To Zenith Up", "Affect the color of the zenith above.");
101
102         prop= RNA_def_property(srna, "map_to_zenith_down", PROP_BOOLEAN, PROP_NONE);
103         RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_ZENDOWN);
104         RNA_def_property_ui_text(prop, "Map To Zenith Down", "Affect the color of the zenith below.");
105
106         /* unused
107         prop= RNA_def_property(srna, "map_to_mist", PROP_BOOLEAN, PROP_NONE);
108         RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_MIST);
109         RNA_def_property_ui_text(prop, "Map To Mist", "Causes the texture to affect the intensity of the mist.");*/
110
111         prop= RNA_def_property(srna, "texture_coordinates", PROP_ENUM, PROP_NONE);
112         RNA_def_property_enum_sdna(prop, NULL, "texco");
113         RNA_def_property_enum_items(prop, texco_items);
114         RNA_def_property_ui_text(prop, "Texture Coordinates", "Texture coordinates used to map the texture onto the background.");
115
116         prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
117         RNA_def_property_pointer_sdna(prop, NULL, "object");
118         RNA_def_property_struct_type(prop, "Object");
119         RNA_def_property_flag(prop, PROP_EDITABLE);
120         RNA_def_property_ui_text(prop, "Object", "Object to use for mapping with Object texture coordinates.");
121 }
122
123 static void rna_def_ambient_occlusion(BlenderRNA *brna)
124 {
125         StructRNA *srna;
126         PropertyRNA *prop;
127
128         static EnumPropertyItem blend_mode_items[] = {
129                 {WO_AOADD, "ADD", 0, "Add", "Add light and shadow."},
130                 {WO_AOSUB, "SUBTRACT", 0, "Subtract", "Subtract light and shadow (needs a normal light to make anything visible.)"},
131                 {WO_AOADDSUB, "BOTH", 0, "Both", "Both lighten and darken."},
132                 {0, NULL, 0, NULL, NULL}};
133
134         static EnumPropertyItem prop_color_items[] = {
135                 {WO_AOPLAIN, "PLAIN", 0, "White", "Plain diffuse energy (white.)"},
136                 {WO_AOSKYCOL, "SKY_COLOR", 0, "Sky Color", "Use horizon and zenith color for diffuse energy."},
137                 {WO_AOSKYTEX, "SKY_TEXTURE", 0, "Sky Texture", "Does full Sky texture render for diffuse energy."},
138                 {0, NULL, 0, NULL, NULL}};
139
140         static EnumPropertyItem prop_sample_method_items[] = {
141                 {WO_AOSAMP_CONSTANT, "CONSTANT_JITTERED", 0, "Constant Jittered", ""},
142                 {WO_AOSAMP_HALTON, "ADAPTIVE_QMC", 0, "Adaptive QMC", "Fast in high-contrast areas."},
143                 {WO_AOSAMP_HAMMERSLEY, "CONSTANT_QMC", 0, "Constant QMC", "Best quality."},
144                 {0, NULL, 0, NULL, NULL}};
145
146         static EnumPropertyItem prop_gather_method_items[] = {
147                 {WO_AOGATHER_RAYTRACE, "RAYTRACE", 0, "Raytrace", "Accurate, but slow when noise-free results are required."},
148                 {WO_AOGATHER_APPROX, "APPROXIMATE", 0, "Approximate", "Inaccurate, but faster and without noise."},
149                 {0, NULL, 0, NULL, NULL}};
150
151         srna= RNA_def_struct(brna, "WorldAmbientOcclusion", NULL);
152         RNA_def_struct_sdna(srna, "World");
153         RNA_def_struct_nested(brna, srna, "World");
154         RNA_def_struct_ui_text(srna, "Ambient Occlusion", "Ambient occlusion settings for a World datablock.");
155
156         prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
157         RNA_def_property_boolean_sdna(prop, NULL, "mode", WO_AMB_OCC);
158         RNA_def_property_ui_text(prop, "Enabled", "Use Ambient Occlusion to add light based on distance between elements, creating the illusion of omnipresent light");
159
160         prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE);
161         RNA_def_property_float_sdna(prop, NULL, "aodist");
162         RNA_def_property_ui_text(prop, "Distance", "Length of rays, defines how far away other faces give occlusion effect.");
163
164         prop= RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
165         RNA_def_property_float_sdna(prop, NULL, "aodistfac");
166         RNA_def_property_ui_text(prop, "Strength", "Distance attenuation factor, the higher, the 'shorter' the shadows.");
167
168         prop= RNA_def_property(srna, "energy", PROP_FLOAT, PROP_NONE);
169         RNA_def_property_float_sdna(prop, NULL, "aoenergy");
170         RNA_def_property_ui_range(prop, 0, 10, 0.1, 3);
171         RNA_def_property_ui_text(prop, "Energy", "Amount of enerygy generated by ambient occlusion.");
172
173         prop= RNA_def_property(srna, "bias", PROP_FLOAT, PROP_NONE);
174         RNA_def_property_float_sdna(prop, NULL, "aobias");
175         RNA_def_property_range(prop, 0, 0.5);
176         RNA_def_property_ui_text(prop, "Bias", "Bias (in radians) to prevent smoothed faces from showing banding (for Raytrace Constant Jittered).");
177
178         prop= RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_NONE);
179         RNA_def_property_float_sdna(prop, NULL, "ao_adapt_thresh");
180         RNA_def_property_range(prop, 0, 1);
181         RNA_def_property_ui_text(prop, "Threshold", "Samples below this threshold will be considered fully shadowed/unshadowed and skipped (for Raytrace Adaptive QMC).");
182
183         prop= RNA_def_property(srna, "adapt_to_speed", PROP_FLOAT, PROP_NONE);
184         RNA_def_property_float_sdna(prop, NULL, "ao_adapt_speed_fac");
185         RNA_def_property_range(prop, 0, 1);
186         RNA_def_property_ui_text(prop, "Adapt To Speed", "Use the speed vector pass to reduce AO samples in fast moving pixels. Higher values result in more aggressive sample reduction. Requires Vec pass enabled (for Raytrace Adaptive QMC).");
187
188         prop= RNA_def_property(srna, "error_tolerance", PROP_FLOAT, PROP_NONE);
189         RNA_def_property_float_sdna(prop, NULL, "ao_approx_error");
190         RNA_def_property_range(prop, 0.0001, 10);
191         RNA_def_property_ui_text(prop, "Error Tolerance", "Low values are slower and higher quality (for Approximate).");
192
193         prop= RNA_def_property(srna, "correction", PROP_FLOAT, PROP_NONE);
194         RNA_def_property_float_sdna(prop, NULL, "ao_approx_correction");
195         RNA_def_property_range(prop, 0, 1);
196         RNA_def_property_ui_range(prop, 0, 1, 0.1, 2);
197         RNA_def_property_ui_text(prop, "Correction", "Ad-hoc correction for over-occlusion due to the approximation (for Approximate).");
198
199         prop= RNA_def_property(srna, "falloff", PROP_BOOLEAN, PROP_NONE);
200         RNA_def_property_boolean_sdna(prop, NULL, "aomode", WO_AODIST);
201         RNA_def_property_ui_text(prop, "Falloff", "");
202
203         prop= RNA_def_property(srna, "pixel_cache", PROP_BOOLEAN, PROP_NONE);
204         RNA_def_property_boolean_sdna(prop, NULL, "aomode", WO_AOCACHE);
205         RNA_def_property_ui_text(prop, "Pixel Cache", "Cache AO results in pixels and interpolate over neighbouring pixels for speedup (for Approximate).");
206
207         prop= RNA_def_property(srna, "samples", PROP_INT, PROP_NONE);
208         RNA_def_property_int_sdna(prop, NULL, "aosamp");
209         RNA_def_property_range(prop, 1, 32);
210         RNA_def_property_ui_text(prop, "Samples", "Amount of ray samples. Higher values give smoother results and longer rendering times");
211
212         prop= RNA_def_property(srna, "blend_mode", PROP_ENUM, PROP_NONE);
213         RNA_def_property_enum_sdna(prop, NULL, "aomix");
214         RNA_def_property_enum_items(prop, blend_mode_items);
215         RNA_def_property_ui_text(prop, "Blend Mode", "Defines how AO mixes with material shading.");
216
217         prop= RNA_def_property(srna, "color", PROP_ENUM, PROP_NONE);
218         RNA_def_property_enum_sdna(prop, NULL, "aocolor");
219         RNA_def_property_enum_items(prop, prop_color_items);
220         RNA_def_property_ui_text(prop, "Color", "Defines the color of the AO light");
221
222         prop= RNA_def_property(srna, "sample_method", PROP_ENUM, PROP_NONE);
223         RNA_def_property_enum_sdna(prop, NULL, "ao_samp_method");
224         RNA_def_property_enum_items(prop, prop_sample_method_items);
225         RNA_def_property_ui_text(prop, "Sample Method", "Method for generating shadow samples (for Raytrace).");
226
227         prop= RNA_def_property(srna, "gather_method", PROP_ENUM, PROP_NONE);
228         RNA_def_property_enum_sdna(prop, NULL, "ao_gather_method");
229         RNA_def_property_enum_items(prop, prop_gather_method_items);
230         RNA_def_property_ui_text(prop, "Gather Method", "");
231
232         prop= RNA_def_property(srna, "passes", PROP_INT, PROP_NONE);
233         RNA_def_property_int_sdna(prop, NULL, "ao_approx_passes");
234         RNA_def_property_range(prop, 0, 10);
235         RNA_def_property_ui_text(prop, "Passes", "Number of preprocessing passes to reduce overocclusion (for Approximate).");
236 }
237
238 static void rna_def_world_mist(BlenderRNA *brna)
239 {
240         StructRNA *srna;
241         PropertyRNA *prop;
242         
243         static EnumPropertyItem falloff_items[] = {
244                 {0, "QUADRATIC", 0, "Quadratic", "Mist uses quadratic progression."},
245                 {1, "LINEAR", 0, "Linear", "Mist uses linear progression."},
246                 {2, "INVERSE_QUADRATIC", 0, "Inverse Quadratic", "Mist uses inverse quadratic progression."},
247                 {0, NULL, 0, NULL, NULL}};
248
249         srna= RNA_def_struct(brna, "WorldMistSettings", NULL);
250         RNA_def_struct_sdna(srna, "World");
251         RNA_def_struct_nested(brna, srna, "World");
252         RNA_def_struct_ui_text(srna, "World Mist", "Mist settings for a World data-block.");
253
254         prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
255         RNA_def_property_boolean_sdna(prop, NULL, "mode", WO_MIST);
256         RNA_def_property_ui_text(prop, "Enabled", "Occlude objects with the environment color as they are further away.");
257
258         prop= RNA_def_property(srna, "intensity", PROP_FLOAT, PROP_NONE);
259         RNA_def_property_float_sdna(prop, NULL, "misi");
260         RNA_def_property_range(prop, 0, 1);
261         RNA_def_property_ui_text(prop, "Intensity", "Intensity of the mist effect.");
262
263         prop= RNA_def_property(srna, "start", PROP_FLOAT, PROP_NONE);
264         RNA_def_property_float_sdna(prop, NULL, "miststa");
265         RNA_def_property_range(prop, 0, FLT_MAX);
266         RNA_def_property_ui_range(prop, 0, 10000, 10, 2);
267         RNA_def_property_ui_text(prop, "Start", "Starting distance of the mist, measured from the camera");
268
269         prop= RNA_def_property(srna, "depth", PROP_FLOAT, PROP_NONE);
270         RNA_def_property_float_sdna(prop, NULL, "mistdist");
271         RNA_def_property_range(prop, 0, FLT_MAX);
272         RNA_def_property_ui_range(prop, 0, 10000, 10, 2);
273         RNA_def_property_ui_text(prop, "Depth", "The distance over which the mist effect fades in");
274
275         prop= RNA_def_property(srna, "height", PROP_FLOAT, PROP_NONE);
276         RNA_def_property_float_sdna(prop, NULL, "misthi");
277         RNA_def_property_range(prop, 0, 100);
278         RNA_def_property_ui_text(prop, "Height", "Control how much mist density decreases with height");
279         
280         prop= RNA_def_property(srna, "falloff", PROP_ENUM, PROP_NONE);
281         RNA_def_property_enum_sdna(prop, NULL, "mistype");
282         RNA_def_property_enum_items(prop, falloff_items);
283         RNA_def_property_ui_text(prop, "Falloff", "Type of transition used to fade mist");
284 }
285
286 static void rna_def_world_stars(BlenderRNA *brna)
287 {
288         StructRNA *srna;
289         PropertyRNA *prop;
290
291         srna= RNA_def_struct(brna, "WorldStarsSettings", NULL);
292         RNA_def_struct_sdna(srna, "World");
293         RNA_def_struct_nested(brna, srna, "World");
294         RNA_def_struct_ui_text(srna, "World Stars", "Stars setting for a World data-block.");
295
296         prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
297         RNA_def_property_boolean_sdna(prop, NULL, "mode", WO_STARS);
298         RNA_def_property_ui_text(prop, "Enabled", "Enable starfield generation.");
299         RNA_def_property_update(prop, NC_WORLD, NULL);
300
301         prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE);
302         RNA_def_property_float_sdna(prop, NULL, "starsize");
303         RNA_def_property_range(prop, 0, 10);
304         RNA_def_property_ui_text(prop, "Size", "Average screen dimension of stars.");
305         RNA_def_property_update(prop, NC_WORLD, NULL);
306
307         prop= RNA_def_property(srna, "min_distance", PROP_FLOAT, PROP_NONE);
308         RNA_def_property_float_sdna(prop, NULL, "starmindist");
309         RNA_def_property_range(prop, 0, 1000);
310         RNA_def_property_ui_text(prop, "Minimum Distance", "Minimum distance to the camera for stars.");
311         RNA_def_property_update(prop, NC_WORLD, NULL);
312
313         prop= RNA_def_property(srna, "average_separation", PROP_FLOAT, PROP_NONE);
314         RNA_def_property_float_sdna(prop, NULL, "stardist");
315         RNA_def_property_range(prop, 2, 1000);
316         RNA_def_property_ui_text(prop, "Average Separation", "Average distance between any two stars.");
317         RNA_def_property_update(prop, NC_WORLD, NULL);
318
319         prop= RNA_def_property(srna, "color_randomization", PROP_FLOAT, PROP_NONE);
320         RNA_def_property_float_sdna(prop, NULL, "starcolnoise");
321         RNA_def_property_range(prop, 0, 1);
322         RNA_def_property_ui_text(prop, "Color Randomization", "Randomize star colors.");
323         RNA_def_property_update(prop, NC_WORLD, NULL);
324         
325         /* unused
326         prop= RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
327         RNA_def_property_float_sdna(prop, NULL, "starr");
328         RNA_def_property_array(prop, 3);
329         RNA_def_property_ui_text(prop, "Color", "Stars color.");*/
330 }
331
332 void RNA_def_world(BlenderRNA *brna)
333 {
334         StructRNA *srna;
335         PropertyRNA *prop;
336
337         static EnumPropertyItem physics_engine_items[] = {
338                 {WOPHY_NONE, "NONE", 0, "None", ""},
339                 //{WOPHY_ENJI, "ENJI", 0, "Enji", ""},
340                 //{WOPHY_SUMO, "SUMO", 0, "Sumo (Deprecated)", ""},
341                 //{WOPHY_DYNAMO, "DYNAMO", 0, "Dynamo", ""},
342                 //{WOPHY_ODE, "ODE", 0, "ODE", ""},
343                 {WOPHY_BULLET, "BULLET", 0, "Bullet", ""},
344                 {0, NULL, 0, NULL, NULL}};
345
346         srna= RNA_def_struct(brna, "World", "ID");
347         RNA_def_struct_ui_text(srna, "World", "World datablock describing the environment and ambient lighting of a scene.");
348         RNA_def_struct_ui_icon(srna, ICON_WORLD_DATA);
349
350         rna_def_animdata_common(srna);
351         rna_def_mtex_common(srna, "rna_World_mtex_begin", "rna_World_active_texture_get", "WorldTextureSlot");
352
353         /* colors */
354         prop= RNA_def_property(srna, "horizon_color", PROP_FLOAT, PROP_COLOR);
355         RNA_def_property_float_sdna(prop, NULL, "horr");
356         RNA_def_property_array(prop, 3);
357         RNA_def_property_ui_text(prop, "Horizon Color", "Color at the horizon.");
358         RNA_def_property_update(prop, NC_WORLD, NULL);
359         
360         prop= RNA_def_property(srna, "zenith_color", PROP_FLOAT, PROP_COLOR);
361         RNA_def_property_float_sdna(prop, NULL, "zenr");
362         RNA_def_property_array(prop, 3);
363         RNA_def_property_ui_text(prop, "Zenith Color", "Color at the zenith.");
364         RNA_def_property_update(prop, NC_WORLD, NULL);
365
366         prop= RNA_def_property(srna, "ambient_color", PROP_FLOAT, PROP_COLOR);
367         RNA_def_property_float_sdna(prop, NULL, "ambr");
368         RNA_def_property_array(prop, 3);
369         RNA_def_property_ui_text(prop, "Ambient Color", "");
370
371         /* exp, range */
372         prop= RNA_def_property(srna, "exposure", PROP_FLOAT, PROP_NONE);
373         RNA_def_property_float_sdna(prop, NULL, "exp");
374         RNA_def_property_range(prop, 0.0, 1.0);
375         RNA_def_property_ui_text(prop, "Exposure", "Amount of exponential color correction for light.");
376
377         prop= RNA_def_property(srna, "range", PROP_FLOAT, PROP_NONE);
378         RNA_def_property_float_sdna(prop, NULL, "range");
379         RNA_def_property_range(prop, 0.2, 5.0);
380         RNA_def_property_ui_text(prop, "Range", "The color range that will be mapped to 0-1.");
381
382         /* sky type */
383         prop= RNA_def_property(srna, "blend_sky", PROP_BOOLEAN, PROP_NONE);
384         RNA_def_property_boolean_sdna(prop, NULL, "skytype", WO_SKYBLEND);
385         RNA_def_property_ui_text(prop, "Blend Sky", "Render background with natural progression from horizon to zenith.");
386         RNA_def_property_update(prop, NC_WORLD, NULL);
387
388         prop= RNA_def_property(srna, "paper_sky", PROP_BOOLEAN, PROP_NONE);
389         RNA_def_property_boolean_sdna(prop, NULL, "skytype", WO_SKYPAPER);
390         RNA_def_property_ui_text(prop, "Paper Sky", "Flatten blend or texture coordinates.");
391         RNA_def_property_update(prop, NC_WORLD, NULL);
392
393         prop= RNA_def_property(srna, "real_sky", PROP_BOOLEAN, PROP_NONE);
394         RNA_def_property_boolean_sdna(prop, NULL, "skytype", WO_SKYREAL);
395         RNA_def_property_ui_text(prop, "Real Sky", "Render background with a real horizon, relative to the camera angle.");
396         RNA_def_property_update(prop, NC_WORLD, NULL);
397
398         /* physics */
399         prop= RNA_def_property(srna, "physics_engine", PROP_ENUM, PROP_NONE);
400         RNA_def_property_enum_sdna(prop, NULL, "physicsEngine");
401         RNA_def_property_enum_items(prop, physics_engine_items);
402         RNA_def_property_ui_text(prop, "Physics Engine", "Physics engine used for physics simulation in the game engine.");
403
404         prop= RNA_def_property(srna, "physics_gravity", PROP_FLOAT, PROP_NONE);
405         RNA_def_property_float_sdna(prop, NULL, "gravity");
406         RNA_def_property_range(prop, 0.0, 25.0);
407         RNA_def_property_ui_text(prop, "Physics Gravity", "Gravitational constant used for physics simulation in the game engine.");
408
409         /* nested structs */
410         prop= RNA_def_property(srna, "ambient_occlusion", PROP_POINTER, PROP_NEVER_NULL);
411         RNA_def_property_struct_type(prop, "WorldAmbientOcclusion");
412         RNA_def_property_pointer_funcs(prop, "rna_World_ambient_occlusion_get", NULL, NULL);
413         RNA_def_property_ui_text(prop, "Ambient Occlusion", "World ambient occlusion settings.");
414
415         prop= RNA_def_property(srna, "mist", PROP_POINTER, PROP_NEVER_NULL);
416         RNA_def_property_struct_type(prop, "WorldMistSettings");
417         RNA_def_property_pointer_funcs(prop, "rna_World_mist_get", NULL, NULL);
418         RNA_def_property_ui_text(prop, "Mist", "World mist settings.");
419
420         prop= RNA_def_property(srna, "stars", PROP_POINTER, PROP_NEVER_NULL);
421         RNA_def_property_struct_type(prop, "WorldStarsSettings");
422         RNA_def_property_pointer_funcs(prop, "rna_World_stars_get", NULL, NULL);
423         RNA_def_property_ui_text(prop, "Stars", "World stars settings.");
424
425         prop= RNA_def_property(srna, "script_link", PROP_POINTER, PROP_NEVER_NULL);
426         RNA_def_property_pointer_sdna(prop, NULL, "scriptlink");
427         RNA_def_property_ui_text(prop, "Script Link", "Scripts linked to this object.");
428
429         rna_def_ambient_occlusion(brna);
430         rna_def_world_mist(brna);
431         rna_def_world_stars(brna);
432         rna_def_world_mtex(brna);
433 }
434
435 #endif
436