@@ -43,6 +43,14 @@ local labels = {
43
43
fgettext (" 2x" ),
44
44
fgettext (" 4x" ),
45
45
fgettext (" 8x" )
46
+ },
47
+ shadow_levels = {
48
+ fgettext (" Disabled" ),
49
+ fgettext (" Very Low" ),
50
+ fgettext (" Low" ),
51
+ fgettext (" Medium" ),
52
+ fgettext (" High" ),
53
+ fgettext (" Ultra High" )
46
54
}
47
55
}
48
56
@@ -66,6 +74,10 @@ local dd_options = {
66
74
antialiasing = {
67
75
table.concat (labels .antialiasing , " ," ),
68
76
{" 0" , " 2" , " 4" , " 8" }
77
+ },
78
+ shadow_levels = {
79
+ table.concat (labels .shadow_levels , " ," ),
80
+ { " 0" , " 1" , " 2" , " 3" , " 4" , " 5" }
69
81
}
70
82
}
71
83
@@ -110,6 +122,15 @@ local getSettingIndex = {
110
122
end
111
123
end
112
124
return 1
125
+ end ,
126
+ ShadowMapping = function ()
127
+ local shadow_setting = core .settings :get (" shadow_levels" )
128
+ for i = 1 , # dd_options .shadow_levels [2 ] do
129
+ if shadow_setting == dd_options .shadow_levels [2 ][i ] then
130
+ return i
131
+ end
132
+ end
133
+ return 1
113
134
end
114
135
}
115
136
@@ -197,7 +218,10 @@ local function formspec(tabview, name, tabdata)
197
218
" checkbox[8.25,1.5;cb_waving_leaves;" .. fgettext (" Waving Leaves" ) .. " ;"
198
219
.. dump (core .settings :get_bool (" enable_waving_leaves" )) .. " ]" ..
199
220
" checkbox[8.25,2;cb_waving_plants;" .. fgettext (" Waving Plants" ) .. " ;"
200
- .. dump (core .settings :get_bool (" enable_waving_plants" )) .. " ]"
221
+ .. dump (core .settings :get_bool (" enable_waving_plants" )) .. " ]" ..
222
+ " label[8.25,3.0;" .. fgettext (" Dynamic shadows: " ) .. " ]" ..
223
+ " dropdown[8.25,3.5;3.5;dd_shadows;" .. dd_options .shadow_levels [1 ] .. " ;"
224
+ .. getSettingIndex .ShadowMapping () .. " ]"
201
225
else
202
226
tab_string = tab_string ..
203
227
" label[8.38,0.7;" .. core .colorize (" #888888" ,
@@ -207,7 +231,9 @@ local function formspec(tabview, name, tabdata)
207
231
" label[8.38,1.7;" .. core .colorize (" #888888" ,
208
232
fgettext (" Waving Leaves" )) .. " ]" ..
209
233
" label[8.38,2.2;" .. core .colorize (" #888888" ,
210
- fgettext (" Waving Plants" )) .. " ]"
234
+ fgettext (" Waving Plants" )) .. " ]" ..
235
+ " label[8.38,2.7;" .. core .colorize (" #888888" ,
236
+ fgettext (" Dynamic shadows" )) .. " ]"
211
237
end
212
238
213
239
return tab_string
@@ -333,6 +359,34 @@ local function handle_settings_buttons(this, fields, tabname, tabdata)
333
359
ddhandled = true
334
360
end
335
361
362
+ for i = 1 , # labels .shadow_levels do
363
+ if fields [" dd_shadows" ] == labels .shadow_levels [i ] then
364
+ core .settings :set (" shadow_levels" , dd_options .shadow_levels [2 ][i ])
365
+ ddhandled = true
366
+ end
367
+ end
368
+
369
+ if fields [" dd_shadows" ] == labels .shadow_levels [1 ] then
370
+ core .settings :set (" enable_dynamic_shadows" , " false" )
371
+ else
372
+ core .settings :set (" enable_dynamic_shadows" , " true" )
373
+ local shadow_presets = {
374
+ [2 ] = { 80 , 512 , " true" , 0 , " false" },
375
+ [3 ] = { 120 , 1024 , " true" , 1 , " false" },
376
+ [4 ] = { 350 , 2048 , " true" , 1 , " false" },
377
+ [5 ] = { 350 , 2048 , " true" , 2 , " true" },
378
+ [6 ] = { 450 , 4096 , " true" , 2 , " true" },
379
+ }
380
+ local s = shadow_presets [table .indexof (labels .shadow_levels , fields [" dd_shadows" ])]
381
+ if s then
382
+ core .settings :set (" shadow_map_max_distance" , s [1 ])
383
+ core .settings :set (" shadow_map_texture_size" , s [2 ])
384
+ core .settings :set (" shadow_map_texture_32bit" , s [3 ])
385
+ core .settings :set (" shadow_filters" , s [4 ])
386
+ core .settings :set (" shadow_map_color" , s [5 ])
387
+ end
388
+ end
389
+
336
390
return ddhandled
337
391
end
338
392
0 commit comments