2021-07-23 21:24:11 -04:00

102 lines
2.8 KiB
Lua

local bs = {}
bs.update_sec = 2
bs.defaults = {
sky = {
clouds = true,
sky_color = {
day_sky = "#8cbafa",
day_horizon = "#9bc1f0",
dawn_sky = "#b4bafa",
dawn_horizon = "#bac1f0",
night_sky = "#006aff",
night_horizon = "#4090ff",
indoors = "#646464",
fog_tint_type = "default",
}
},
sun = {
visible = true,
texture = "sun.png",
tonemap = "sun_tonemap.png",
sunrise = "sunrisebg.png",
sunrise_visible = true,
scale = 1,
},
moon = {
visible = true,
texture = "moon.png",
tonemap = "moon_tonemap.png",
scale = 1,
},
stars = {
visible = true,
count = 1000,
star_color = "ebebff69",
scale = 1,
},
clouds = {
density = 0.4,
color = "#fff0f0e5",
ambient = "#000000",
height = 120,
thickness = 16,
speed = {x = 0, z = -2},
}
}
bs.players = {}
local function fill_data(default, input)
local i = table.copy(input)
for k, v in pairs(default) do
if type(v) == "table" then
if i[k] == nil then i[k] = {} end
for k2, v2 in pairs(v) do
if i[k][k2] == nil then i[k][k2] = v2 end
end
elseif i[k] == nil then
i[k] = v
end
end
return i
end
local function logic()
for _, player in pairs(minetest.get_connected_players()) do
local pname = player:get_player_name()
local bdata = minetest.get_biome_data(player:get_pos())
local bdef = minetest.registered_biomes[minetest.get_biome_name(bdata.biome)]
if bs.players[pname] and bs.players[pname].id == bdata.biome then break end
for k, _ in pairs(bs.defaults) do
if bdef._sky_data[k] == nil then bdef._sky_data[k] = {} end
end
if bdef._sky_data then
player:set_sky(fill_data(bs.defaults.sky, bdef._sky_data.sky))
player:set_sun(fill_data(bs.defaults.sun, bdef._sky_data.sun))
player:set_moon(fill_data(bs.defaults.moon, bdef._sky_data.moon))
player:set_stars(fill_data(bs.defaults.stars, bdef._sky_data.stars))
player:set_clouds(fill_data(bs.defaults.clouds, bdef._sky_data.clouds))
bs.players[pname] = {
id = bdata.biome
}
else
player:set_sky(bs.defaults.sky)
player:set_sun(bs.defaults.sun)
player:set_moon(bs.defaults.moon)
player:set_stars(bs.defaults.stars)
player:set_clouds(bs.defaults.clouds)
bs.players[pname] = {
id = bdata.biome
}
end
end
minetest.after(bs.update_sec, logic)
end
minetest.after(bs.update_sec, logic)