remove unused rna includes
[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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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
30 #include "rna_internal.h"
31
32 #include "DNA_material_types.h"
33 #include "DNA_texture_types.h"
34 #include "DNA_world_types.h"
35
36 #ifdef RNA_RUNTIME
37
38 #include "MEM_guardedalloc.h"
39
40 #include "BKE_depsgraph.h"
41 #include "BKE_main.h"
42 #include "BKE_texture.h"
43
44 #include "WM_api.h"
45 #include "WM_types.h"
46
47 static PointerRNA rna_World_lighting_get(PointerRNA *ptr)
48 {
49         return rna_pointer_inherit_refine(ptr, &RNA_WorldLighting, ptr->id.data);
50 }
51
52 static PointerRNA rna_World_stars_get(PointerRNA *ptr)
53 {
54         return rna_pointer_inherit_refine(ptr, &RNA_WorldStarsSettings, ptr->id.data);
55 }
56
57 static PointerRNA rna_World_mist_get(PointerRNA *ptr)
58 {
59         return rna_pointer_inherit_refine(ptr, &RNA_WorldMistSettings, ptr->id.data);
60 }
61
62 static void rna_World_mtex_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
63 {
64         World *wo= (World*)ptr->data;
65         rna_iterator_array_begin(iter, (void*)wo->mtex, sizeof(MTex*), MAX_MTEX, 0, NULL);
66 }
67
68 static PointerRNA rna_World_active_texture_get(PointerRNA *ptr)
69 {
70         World *wo= (World*)ptr->data;
71         Tex *tex;
72
73         tex= give_current_world_texture(wo);
74         return rna_pointer_inherit_refine(ptr, &RNA_Texture, tex);
75 }
76
77 static void rna_World_active_texture_set(PointerRNA *ptr, PointerRNA value)
78 {
79         World *wo= (World*)ptr->data;
80
81         set_current_world_texture(wo, value.data);
82 }
83
84 static void rna_World_update(Main *bmain, Scene *scene, PointerRNA *ptr)
85 {
86         World *wo= ptr->id.data;
87
88         DAG_id_flush_update(&wo->id, 0);
89         WM_main_add_notifier(NC_WORLD, wo);
90 }
91
92 static void rna_World_draw_update(Main *bmain, Scene *scene, PointerRNA *ptr)
93 {
94         World *wo= ptr->id.data;
95
96         DAG_id_flush_update(&wo->id, 0);
97         WM_main_add_notifier(NC_WORLD|ND_WORLD_DRAW, wo);
98 }
99
100 #else
101
102 static void rna_def_world_mtex(BlenderRNA *brna)
103 {
104         StructRNA *srna;
105         PropertyRNA *prop;
106
107         static EnumPropertyItem texco_items[] = {
108                 {TEXCO_VIEW, "VIEW", 0, "View", "Uses view vector for the texture coordinates"},
109                 {TEXCO_GLOB, "GLOBAL", 0, "Global", "Uses global coordinates for the texture coordinates (interior mist)"},
110                 {TEXCO_ANGMAP, "ANGMAP", 0, "AngMap", "Uses 360 degree angular coordinates, e.g. for spherical light probes"},
111                 {TEXCO_H_SPHEREMAP, "SPHERE", 0, "Sphere", "For 360 degree panorama sky, spherical mapped, only top half"},
112                 {TEXCO_H_TUBEMAP, "TUBE", 0, "Tube", "For 360 degree panorama sky, cylindrical mapped, only top half"},
113                 {TEXCO_OBJECT, "OBJECT", 0, "Object", "Uses linked object's coordinates for texture coordinates"},
114                 {0, NULL, 0, NULL, NULL}};
115
116         srna= RNA_def_struct(brna, "WorldTextureSlot", "TextureSlot");
117         RNA_def_struct_sdna(srna, "MTex");
118         RNA_def_struct_ui_text(srna, "World Texture Slot", "Texture slot for textures in a World datablock");
119
120         /* map to */
121         prop= RNA_def_property(srna, "map_blend", PROP_BOOLEAN, PROP_NONE);
122         RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_BLEND);
123         RNA_def_property_ui_text(prop, "Blend", "Affect the color progression of the background");
124         RNA_def_property_update(prop, 0, "rna_World_update");
125
126         prop= RNA_def_property(srna, "map_horizon", PROP_BOOLEAN, PROP_NONE);
127         RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_HORIZ);
128         RNA_def_property_ui_text(prop, "Horizon", "Affect the color of the horizon");
129         RNA_def_property_update(prop, 0, "rna_World_update");
130
131         prop= RNA_def_property(srna, "map_zenith_up", PROP_BOOLEAN, PROP_NONE);
132         RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_ZENUP);
133         RNA_def_property_ui_text(prop, "Zenith Up", "Affect the color of the zenith above");
134         RNA_def_property_update(prop, 0, "rna_World_update");
135
136         prop= RNA_def_property(srna, "map_zenith_down", PROP_BOOLEAN, PROP_NONE);
137         RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_ZENDOWN);
138         RNA_def_property_ui_text(prop, "Zenith Down", "Affect the color of the zenith below");
139         RNA_def_property_update(prop, 0, "rna_World_update");
140
141         /* unused
142         prop= RNA_def_property(srna, "map_mist", PROP_BOOLEAN, PROP_NONE);
143         RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_MIST);
144         RNA_def_property_ui_text(prop, "Mist", "Causes the texture to affect the intensity of the mist");*/
145
146         prop= RNA_def_property(srna, "texture_coordinates", PROP_ENUM, PROP_NONE);
147         RNA_def_property_enum_sdna(prop, NULL, "texco");
148         RNA_def_property_enum_items(prop, texco_items);
149         RNA_def_property_ui_text(prop, "Texture Coordinates", "Texture coordinates used to map the texture onto the background");
150         RNA_def_property_update(prop, 0, "rna_World_update");
151
152         prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
153         RNA_def_property_pointer_sdna(prop, NULL, "object");
154         RNA_def_property_struct_type(prop, "Object");
155         RNA_def_property_flag(prop, PROP_EDITABLE);
156         RNA_def_property_ui_text(prop, "Object", "Object to use for mapping with Object texture coordinates");
157         RNA_def_property_update(prop, 0, "rna_World_update");
158
159         prop= RNA_def_property(srna, "blend_factor", PROP_FLOAT, PROP_NONE);
160         RNA_def_property_float_sdna(prop, NULL, "blendfac");
161         RNA_def_property_ui_range(prop, 0, 1, 10, 3);
162         RNA_def_property_ui_text(prop, "Blend Factor", "Amount texture affects color progression of the background");
163         RNA_def_property_update(prop, 0, "rna_World_update");
164
165         prop= RNA_def_property(srna, "horizon_factor", PROP_FLOAT, PROP_NONE);
166         RNA_def_property_float_sdna(prop, NULL, "colfac");
167         RNA_def_property_ui_range(prop, 0, 1, 10, 3);
168         RNA_def_property_ui_text(prop, "Horizon Factor", "Amount texture affects color of the horizon");
169         RNA_def_property_update(prop, 0, "rna_World_update");
170
171         prop= RNA_def_property(srna, "zenith_up_factor", PROP_FLOAT, PROP_NONE);
172         RNA_def_property_float_sdna(prop, NULL, "zenupfac");
173         RNA_def_property_ui_range(prop, 0, 1, 10, 3);
174         RNA_def_property_ui_text(prop, "Zenith Up Factor", "Amount texture affects color of the zenith above");
175         RNA_def_property_update(prop, 0, "rna_World_update");
176
177         prop= RNA_def_property(srna, "zenith_down_factor", PROP_FLOAT, PROP_NONE);
178         RNA_def_property_float_sdna(prop, NULL, "zendownfac");
179         RNA_def_property_ui_range(prop, 0, 1, 10, 3);
180         RNA_def_property_ui_text(prop, "Zenith Down Factor", "Amount texture affects color of the zenith below");
181         RNA_def_property_update(prop, 0, "rna_World_update");
182 }
183
184 static void rna_def_lighting(BlenderRNA *brna)
185 {
186         StructRNA *srna;
187         PropertyRNA *prop;
188
189         static EnumPropertyItem blend_mode_items[] = {
190                 {WO_AOMUL, "MULTIPLY", 0, "Multiply", "Multiply direct lighting with ambient occlusion, darkening the result"},
191                 {WO_AOADD, "ADD", 0, "Add", "Add light and shadow"},
192                 {0, NULL, 0, NULL, NULL}};
193
194         static EnumPropertyItem prop_color_items[] = {
195                 {WO_AOPLAIN, "PLAIN", 0, "White", "Plain diffuse energy (white.)"},
196                 {WO_AOSKYCOL, "SKY_COLOR", 0, "Sky Color", "Use horizon and zenith color for diffuse energy"},
197                 {WO_AOSKYTEX, "SKY_TEXTURE", 0, "Sky Texture", "Does full Sky texture render for diffuse energy"},
198                 {0, NULL, 0, NULL, NULL}};
199
200         static EnumPropertyItem prop_sample_method_items[] = {
201                 {WO_AOSAMP_CONSTANT, "CONSTANT_JITTERED", 0, "Constant Jittered", ""},
202                 {WO_AOSAMP_HALTON, "ADAPTIVE_QMC", 0, "Adaptive QMC", "Fast in high-contrast areas"},
203                 {WO_AOSAMP_HAMMERSLEY, "CONSTANT_QMC", 0, "Constant QMC", "Best quality"},
204                 {0, NULL, 0, NULL, NULL}};
205
206         static EnumPropertyItem prop_gather_method_items[] = {
207                 {WO_AOGATHER_RAYTRACE, "RAYTRACE", 0, "Raytrace", "Accurate, but slow when noise-free results are required"},
208                 {WO_AOGATHER_APPROX, "APPROXIMATE", 0, "Approximate", "Inaccurate, but faster and without noise"},
209                 {0, NULL, 0, NULL, NULL}};
210
211         srna= RNA_def_struct(brna, "WorldLighting", NULL);
212         RNA_def_struct_sdna(srna, "World");
213         RNA_def_struct_nested(brna, srna, "World");
214         RNA_def_struct_ui_text(srna, "Lighting", "Lighting for a World datablock");
215
216         /* ambient occlusion */
217         prop= RNA_def_property(srna, "use_ambient_occlusion", PROP_BOOLEAN, PROP_NONE);
218         RNA_def_property_boolean_sdna(prop, NULL, "mode", WO_AMB_OCC);
219         RNA_def_property_ui_text(prop, "Use Ambient Occlusion", "Use Ambient Occlusion to add shadowing based on distance between objects");
220         RNA_def_property_update(prop, 0, "rna_World_update");
221
222         prop= RNA_def_property(srna, "ao_factor", PROP_FLOAT, PROP_FACTOR);
223         RNA_def_property_float_sdna(prop, NULL, "aoenergy");
224         RNA_def_property_range(prop, 0, INT_MAX);
225         RNA_def_property_ui_range(prop, 0, 1, 0.1, 2);
226         RNA_def_property_ui_text(prop, "Factor", "Factor for ambient occlusion blending");
227         RNA_def_property_update(prop, 0, "rna_World_update");
228
229         prop= RNA_def_property(srna, "ao_blend_mode", PROP_ENUM, PROP_NONE);
230         RNA_def_property_enum_sdna(prop, NULL, "aomix");
231         RNA_def_property_enum_items(prop, blend_mode_items);
232         RNA_def_property_ui_text(prop, "Blend Mode", "Defines how AO mixes with material shading");
233         RNA_def_property_update(prop, 0, "rna_World_update");
234
235         /* environment lighting */
236         prop= RNA_def_property(srna, "use_environment_lighting", PROP_BOOLEAN, PROP_NONE);
237         RNA_def_property_boolean_sdna(prop, NULL, "mode", WO_ENV_LIGHT);
238         RNA_def_property_ui_text(prop, "Use Environment Lighting", "Add light coming from the environment");
239         RNA_def_property_update(prop, 0, "rna_World_update");
240
241         prop= RNA_def_property(srna, "environment_energy", PROP_FLOAT, PROP_NONE);
242         RNA_def_property_float_sdna(prop, NULL, "ao_env_energy");
243         RNA_def_property_ui_range(prop, 0, FLT_MAX, 0.1, 2);
244         RNA_def_property_ui_text(prop, "Environment Color", "Defines the strength of environment light");
245         RNA_def_property_update(prop, 0, "rna_World_update");
246
247         prop= RNA_def_property(srna, "environment_color", PROP_ENUM, PROP_NONE);
248         RNA_def_property_enum_sdna(prop, NULL, "aocolor");
249         RNA_def_property_enum_items(prop, prop_color_items);
250         RNA_def_property_ui_text(prop, "Environment Color", "Defines where the color of the environment light comes from");
251         RNA_def_property_update(prop, 0, "rna_World_update");
252
253         /* indirect lighting */
254         prop= RNA_def_property(srna, "use_indirect_lighting", PROP_BOOLEAN, PROP_NONE);
255         RNA_def_property_boolean_sdna(prop, NULL, "mode", WO_INDIRECT_LIGHT);
256         RNA_def_property_ui_text(prop, "Use Indirect Lighting", "Add indirect light bouncing of surrounding objects");
257         RNA_def_property_update(prop, 0, "rna_World_update");
258
259         prop= RNA_def_property(srna, "indirect_factor", PROP_FLOAT, PROP_FACTOR);
260         RNA_def_property_float_sdna(prop, NULL, "ao_indirect_energy");
261         RNA_def_property_range(prop, 0, INT_MAX);
262         RNA_def_property_ui_range(prop, 0, 1, 0.1, 2);
263         RNA_def_property_ui_text(prop, "Indirect Factor", "Factor for how much surrounding objects contribute to light");
264         RNA_def_property_update(prop, 0, "rna_World_update");
265
266         prop= RNA_def_property(srna, "indirect_bounces", PROP_INT, PROP_UNSIGNED);
267         RNA_def_property_int_sdna(prop, NULL, "ao_indirect_bounces");
268         RNA_def_property_range(prop, 1, INT_MAX);
269         RNA_def_property_ui_text(prop, "Bounces", "Number of indirect diffuse light bounces to use for approximate ambient occlusion");
270         RNA_def_property_update(prop, 0, "rna_World_update");
271
272         /* gathering parameters */
273         prop= RNA_def_property(srna, "gather_method", PROP_ENUM, PROP_NONE);
274         RNA_def_property_enum_sdna(prop, NULL, "ao_gather_method");
275         RNA_def_property_enum_items(prop, prop_gather_method_items);
276         RNA_def_property_ui_text(prop, "Gather Method", "");
277         RNA_def_property_update(prop, 0, "rna_World_update");
278
279         prop= RNA_def_property(srna, "passes", PROP_INT, PROP_NONE);
280         RNA_def_property_int_sdna(prop, NULL, "ao_approx_passes");
281         RNA_def_property_range(prop, 0, 10);
282         RNA_def_property_ui_text(prop, "Passes", "Number of preprocessing passes to reduce overocclusion (for approximate ambient occlusion)");
283         RNA_def_property_update(prop, 0, "rna_World_update");
284
285         prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_DISTANCE);
286         RNA_def_property_float_sdna(prop, NULL, "aodist");
287         RNA_def_property_ui_text(prop, "Distance", "Length of rays, defines how far away other faces give occlusion effect");
288         RNA_def_property_update(prop, 0, "rna_World_update");
289
290         prop= RNA_def_property(srna, "falloff_strength", PROP_FLOAT, PROP_NONE);
291         RNA_def_property_float_sdna(prop, NULL, "aodistfac");
292         RNA_def_property_ui_text(prop, "Strength", "Distance attenuation factor, the higher, the 'shorter' the shadows");
293         RNA_def_property_update(prop, 0, "rna_World_update");
294
295         prop= RNA_def_property(srna, "bias", PROP_FLOAT, PROP_NONE);
296         RNA_def_property_float_sdna(prop, NULL, "aobias");
297         RNA_def_property_range(prop, 0, 0.5);
298         RNA_def_property_ui_text(prop, "Bias", "Bias (in radians) to prevent smoothed faces from showing banding (for Raytrace Constant Jittered)");
299         RNA_def_property_update(prop, 0, "rna_World_update");
300
301         prop= RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_NONE);
302         RNA_def_property_float_sdna(prop, NULL, "ao_adapt_thresh");
303         RNA_def_property_range(prop, 0, 1);
304         RNA_def_property_ui_text(prop, "Threshold", "Samples below this threshold will be considered fully shadowed/unshadowed and skipped (for Raytrace Adaptive QMC)");
305         RNA_def_property_update(prop, 0, "rna_World_update");
306
307         prop= RNA_def_property(srna, "adapt_to_speed", PROP_FLOAT, PROP_NONE);
308         RNA_def_property_float_sdna(prop, NULL, "ao_adapt_speed_fac");
309         RNA_def_property_range(prop, 0, 1);
310         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)");
311         RNA_def_property_update(prop, 0, "rna_World_update");
312
313         prop= RNA_def_property(srna, "error_tolerance", PROP_FLOAT, PROP_NONE);
314         RNA_def_property_float_sdna(prop, NULL, "ao_approx_error");
315         RNA_def_property_range(prop, 0.0001, 10);
316         RNA_def_property_ui_text(prop, "Error Tolerance", "Low values are slower and higher quality (for Approximate)");
317         RNA_def_property_update(prop, 0, "rna_World_update");
318
319         prop= RNA_def_property(srna, "correction", PROP_FLOAT, PROP_NONE);
320         RNA_def_property_float_sdna(prop, NULL, "ao_approx_correction");
321         RNA_def_property_range(prop, 0, 1);
322         RNA_def_property_ui_range(prop, 0, 1, 0.1, 2);
323         RNA_def_property_ui_text(prop, "Correction", "Ad-hoc correction for over-occlusion due to the approximation (for Approximate)");
324         RNA_def_property_update(prop, 0, "rna_World_update");
325
326         prop= RNA_def_property(srna, "falloff", PROP_BOOLEAN, PROP_NONE);
327         RNA_def_property_boolean_sdna(prop, NULL, "aomode", WO_AODIST);
328         RNA_def_property_ui_text(prop, "Falloff", "");
329         RNA_def_property_update(prop, 0, "rna_World_update");
330
331         prop= RNA_def_property(srna, "pixel_cache", PROP_BOOLEAN, PROP_NONE);
332         RNA_def_property_boolean_sdna(prop, NULL, "aomode", WO_AOCACHE);
333         RNA_def_property_ui_text(prop, "Pixel Cache", "Cache AO results in pixels and interpolate over neighbouring pixels for speedup (for Approximate)");
334         RNA_def_property_update(prop, 0, "rna_World_update");
335
336         prop= RNA_def_property(srna, "samples", PROP_INT, PROP_NONE);
337         RNA_def_property_int_sdna(prop, NULL, "aosamp");
338         RNA_def_property_range(prop, 1, 32);
339         RNA_def_property_ui_text(prop, "Samples", "Amount of ray samples. Higher values give smoother results and longer rendering times");
340         RNA_def_property_update(prop, 0, "rna_World_update");
341
342         prop= RNA_def_property(srna, "sample_method", PROP_ENUM, PROP_NONE);
343         RNA_def_property_enum_sdna(prop, NULL, "ao_samp_method");
344         RNA_def_property_enum_items(prop, prop_sample_method_items);
345         RNA_def_property_ui_text(prop, "Sample Method", "Method for generating shadow samples (for Raytrace)");
346         RNA_def_property_update(prop, 0, "rna_World_update");
347 }
348
349 static void rna_def_world_mist(BlenderRNA *brna)
350 {
351         StructRNA *srna;
352         PropertyRNA *prop;
353         
354         static EnumPropertyItem falloff_items[] = {
355                 {0, "QUADRATIC", 0, "Quadratic", "Mist uses quadratic progression"},
356                 {1, "LINEAR", 0, "Linear", "Mist uses linear progression"},
357                 {2, "INVERSE_QUADRATIC", 0, "Inverse Quadratic", "Mist uses inverse quadratic progression"},
358                 {0, NULL, 0, NULL, NULL}};
359
360         srna= RNA_def_struct(brna, "WorldMistSettings", NULL);
361         RNA_def_struct_sdna(srna, "World");
362         RNA_def_struct_nested(brna, srna, "World");
363         RNA_def_struct_ui_text(srna, "World Mist", "Mist settings for a World data-block");
364
365         prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
366         RNA_def_property_boolean_sdna(prop, NULL, "mode", WO_MIST);
367         RNA_def_property_ui_text(prop, "Enabled", "Occlude objects with the environment color as they are further away");
368         RNA_def_property_update(prop, 0, "rna_World_draw_update");
369
370         prop= RNA_def_property(srna, "intensity", PROP_FLOAT, PROP_NONE);
371         RNA_def_property_float_sdna(prop, NULL, "misi");
372         RNA_def_property_range(prop, 0, 1);
373         RNA_def_property_ui_text(prop, "Intensity", "Intensity of the mist effect");
374         RNA_def_property_update(prop, 0, "rna_World_update");
375
376         prop= RNA_def_property(srna, "start", PROP_FLOAT, PROP_DISTANCE);
377         RNA_def_property_float_sdna(prop, NULL, "miststa");
378         RNA_def_property_range(prop, 0, FLT_MAX);
379         RNA_def_property_ui_range(prop, 0, 10000, 10, 2);
380         RNA_def_property_ui_text(prop, "Start", "Starting distance of the mist, measured from the camera");
381         RNA_def_property_update(prop, 0, "rna_World_draw_update");
382
383         prop= RNA_def_property(srna, "depth", PROP_FLOAT, PROP_DISTANCE);
384         RNA_def_property_float_sdna(prop, NULL, "mistdist");
385         RNA_def_property_range(prop, 0, FLT_MAX);
386         RNA_def_property_ui_range(prop, 0, 10000, 10, 2);
387         RNA_def_property_ui_text(prop, "Depth", "The distance over which the mist effect fades in");
388         RNA_def_property_update(prop, 0, "rna_World_draw_update");
389
390         prop= RNA_def_property(srna, "height", PROP_FLOAT, PROP_DISTANCE);
391         RNA_def_property_float_sdna(prop, NULL, "misthi");
392         RNA_def_property_range(prop, 0, 100);
393         RNA_def_property_ui_text(prop, "Height", "Control how much mist density decreases with height");
394         RNA_def_property_update(prop, 0, "rna_World_update");
395         
396         prop= RNA_def_property(srna, "falloff", PROP_ENUM, PROP_NONE);
397         RNA_def_property_enum_sdna(prop, NULL, "mistype");
398         RNA_def_property_enum_items(prop, falloff_items);
399         RNA_def_property_ui_text(prop, "Falloff", "Type of transition used to fade mist");
400         RNA_def_property_update(prop, 0, "rna_World_update");
401 }
402
403 static void rna_def_world_stars(BlenderRNA *brna)
404 {
405         StructRNA *srna;
406         PropertyRNA *prop;
407
408         srna= RNA_def_struct(brna, "WorldStarsSettings", NULL);
409         RNA_def_struct_sdna(srna, "World");
410         RNA_def_struct_nested(brna, srna, "World");
411         RNA_def_struct_ui_text(srna, "World Stars", "Stars setting for a World data-block");
412
413         prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
414         RNA_def_property_boolean_sdna(prop, NULL, "mode", WO_STARS);
415         RNA_def_property_ui_text(prop, "Enabled", "Enable starfield generation");
416         RNA_def_property_update(prop, 0, "rna_World_update");
417
418         prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE);
419         RNA_def_property_float_sdna(prop, NULL, "starsize");
420         RNA_def_property_range(prop, 0, 10);
421         RNA_def_property_ui_text(prop, "Size", "Average screen dimension of stars");
422         RNA_def_property_update(prop, 0, "rna_World_update");
423
424         prop= RNA_def_property(srna, "min_distance", PROP_FLOAT, PROP_DISTANCE);
425         RNA_def_property_float_sdna(prop, NULL, "starmindist");
426         RNA_def_property_range(prop, 0, 1000);
427         RNA_def_property_ui_text(prop, "Minimum Distance", "Minimum distance to the camera for stars");
428         RNA_def_property_update(prop, 0, "rna_World_update");
429
430         prop= RNA_def_property(srna, "average_separation", PROP_FLOAT, PROP_NONE);
431         RNA_def_property_float_sdna(prop, NULL, "stardist");
432         RNA_def_property_range(prop, 2, 1000);
433         RNA_def_property_ui_text(prop, "Average Separation", "Average distance between any two stars");
434         RNA_def_property_update(prop, 0, "rna_World_update");
435
436         prop= RNA_def_property(srna, "color_randomization", PROP_FLOAT, PROP_NONE);
437         RNA_def_property_float_sdna(prop, NULL, "starcolnoise");
438         RNA_def_property_range(prop, 0, 1);
439         RNA_def_property_ui_text(prop, "Color Randomization", "Randomize star colors");
440         RNA_def_property_update(prop, 0, "rna_World_update");
441         
442         /* unused
443         prop= RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
444         RNA_def_property_float_sdna(prop, NULL, "starr");
445         RNA_def_property_array(prop, 3);
446         RNA_def_property_ui_text(prop, "Color", "Stars color");
447         RNA_def_property_update(prop, 0, "rna_World_update");*/
448 }
449
450 void RNA_def_world(BlenderRNA *brna)
451 {
452         StructRNA *srna;
453         PropertyRNA *prop;
454
455 /*
456         static EnumPropertyItem physics_engine_items[] = {
457                 {WOPHY_NONE, "NONE", 0, "None", ""},
458                 //{WOPHY_ENJI, "ENJI", 0, "Enji", ""},
459                 //{WOPHY_SUMO, "SUMO", 0, "Sumo (Deprecated)", ""},
460                 //{WOPHY_DYNAMO, "DYNAMO", 0, "Dynamo", ""},
461                 //{WOPHY_ODE, "ODE", 0, "ODE", ""},
462                 {WOPHY_BULLET, "BULLET", 0, "Bullet", ""},
463                 {0, NULL, 0, NULL, NULL}};
464 */
465
466         srna= RNA_def_struct(brna, "World", "ID");
467         RNA_def_struct_ui_text(srna, "World", "World datablock describing the environment and ambient lighting of a scene");
468         RNA_def_struct_ui_icon(srna, ICON_WORLD_DATA);
469
470         rna_def_animdata_common(srna);
471         rna_def_mtex_common(srna, "rna_World_mtex_begin", "rna_World_active_texture_get",
472                 "rna_World_active_texture_set", "WorldTextureSlot", "rna_World_update");
473
474         /* colors */
475         prop= RNA_def_property(srna, "horizon_color", PROP_FLOAT, PROP_COLOR);
476         RNA_def_property_float_sdna(prop, NULL, "horr");
477         RNA_def_property_array(prop, 3);
478         RNA_def_property_ui_text(prop, "Horizon Color", "Color at the horizon");
479         RNA_def_property_update(prop, 0, "rna_World_update");
480         
481         prop= RNA_def_property(srna, "zenith_color", PROP_FLOAT, PROP_COLOR);
482         RNA_def_property_float_sdna(prop, NULL, "zenr");
483         RNA_def_property_array(prop, 3);
484         RNA_def_property_ui_text(prop, "Zenith Color", "Color at the zenith");
485         RNA_def_property_update(prop, 0, "rna_World_update");
486
487         prop= RNA_def_property(srna, "ambient_color", PROP_FLOAT, PROP_COLOR);
488         RNA_def_property_float_sdna(prop, NULL, "ambr");
489         RNA_def_property_array(prop, 3);
490         RNA_def_property_ui_text(prop, "Ambient Color", "");
491         RNA_def_property_update(prop, 0, "rna_World_update");
492
493         /* exp, range */
494         prop= RNA_def_property(srna, "exposure", PROP_FLOAT, PROP_NONE);
495         RNA_def_property_float_sdna(prop, NULL, "exp");
496         RNA_def_property_range(prop, 0.0, 1.0);
497         RNA_def_property_ui_text(prop, "Exposure", "Amount of exponential color correction for light");
498         RNA_def_property_update(prop, 0, "rna_World_update");
499
500         prop= RNA_def_property(srna, "range", PROP_FLOAT, PROP_NONE);
501         RNA_def_property_float_sdna(prop, NULL, "range");
502         RNA_def_property_range(prop, 0.2, 5.0);
503         RNA_def_property_ui_text(prop, "Range", "The color range that will be mapped to 0-1");
504         RNA_def_property_update(prop, 0, "rna_World_update");
505
506         /* sky type */
507         prop= RNA_def_property(srna, "blend_sky", PROP_BOOLEAN, PROP_NONE);
508         RNA_def_property_boolean_sdna(prop, NULL, "skytype", WO_SKYBLEND);
509         RNA_def_property_ui_text(prop, "Blend Sky", "Render background with natural progression from horizon to zenith");
510         RNA_def_property_update(prop, 0, "rna_World_update");
511
512         prop= RNA_def_property(srna, "paper_sky", PROP_BOOLEAN, PROP_NONE);
513         RNA_def_property_boolean_sdna(prop, NULL, "skytype", WO_SKYPAPER);
514         RNA_def_property_ui_text(prop, "Paper Sky", "Flatten blend or texture coordinates");
515         RNA_def_property_update(prop, 0, "rna_World_update");
516
517         prop= RNA_def_property(srna, "real_sky", PROP_BOOLEAN, PROP_NONE);
518         RNA_def_property_boolean_sdna(prop, NULL, "skytype", WO_SKYREAL);
519         RNA_def_property_ui_text(prop, "Real Sky", "Render background with a real horizon, relative to the camera angle");
520         RNA_def_property_update(prop, 0, "rna_World_update");
521
522         /* nested structs */
523         prop= RNA_def_property(srna, "lighting", PROP_POINTER, PROP_NONE);
524         RNA_def_property_flag(prop, PROP_NEVER_NULL);
525         RNA_def_property_struct_type(prop, "WorldLighting");
526         RNA_def_property_pointer_funcs(prop, "rna_World_lighting_get", NULL, NULL);
527         RNA_def_property_ui_text(prop, "Lighting", "World lighting settings");
528
529         prop= RNA_def_property(srna, "mist", PROP_POINTER, PROP_NONE);
530         RNA_def_property_flag(prop, PROP_NEVER_NULL);
531         RNA_def_property_struct_type(prop, "WorldMistSettings");
532         RNA_def_property_pointer_funcs(prop, "rna_World_mist_get", NULL, NULL);
533         RNA_def_property_ui_text(prop, "Mist", "World mist settings");
534
535         prop= RNA_def_property(srna, "stars", PROP_POINTER, PROP_NONE);
536         RNA_def_property_flag(prop, PROP_NEVER_NULL);
537         RNA_def_property_struct_type(prop, "WorldStarsSettings");
538         RNA_def_property_pointer_funcs(prop, "rna_World_stars_get", NULL, NULL);
539         RNA_def_property_ui_text(prop, "Stars", "World stars settings");
540
541         rna_def_lighting(brna);
542         rna_def_world_mist(brna);
543         rna_def_world_stars(brna);
544         rna_def_world_mtex(brna);
545 }
546
547 #endif
548