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