1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
local gravity_objects = {}
local e = 2.718
function vzxv.gravity(ylevel)
return 2 / (1+(e ^ (ylevel/6000)))
end
local gravmul = -9.81
local gravfunc = function(e)
local pos = e.object:get_pos()
local grav = vzxv.gravity(pos.y) * gravmul
e.object:set_acceleration({x=0,y=grav,z=0})
end
function vzxv.register_gravity(entity)
local entdef = minetest.registered_entities[entity]
local old_onstep = entdef.on_step or function() end
entdef.on_step = function(self,dtime,moveresult)
gravfunc(self)
return old_onstep(self,dtime,moveresult)
end
end
local function color(r,g,b)
return ("#%02X%02X%02X"):format(r,g,b)
end
minetest.register_globalstep(function()
local players = minetest.get_connected_players()
local brightness = math.max(0,math.min(1,3-((
math.abs(-12000+minetest:get_timeofday()*24000)
)/3000)))
for _,player in ipairs(players) do
local pos = player:get_pos()
player:set_physics_override({
gravity = vzxv.gravity(pos.y)
})
local skycol = {0x40,0x80,0xFF}
skycol[1] = skycol[1] * brightness
skycol[2] = skycol[2] * brightness
skycol[3] = skycol[3] * brightness
local heightfac = math.max(1-(math.max(pos.y,0)/10000),0)
skycol[1] = skycol[1] * heightfac
skycol[2] = skycol[2] * heightfac
skycol[3] = skycol[3] * heightfac
local sky = color(skycol[1],skycol[2],skycol[3])
local skyparams = {
type="plain",
base_color=sky,
}
if pos.y>=3000 then
player:set_sun({
sunrise_visible = false
})
player:set_stars({
stars_visible = true
})
else
player:set_sun() -- default value?
player:set_stars()
end
player:set_sky(skyparams)
end
end)
|