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