summaryrefslogtreecommitdiff
path: root/mods/vzxv_gravity/init.lua
blob: 581a6774c735a7da44f7d82cf335e309ad50e786 (plain)
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
local gravity_objects = {}

local e = 2.718

local function gravity(ylevel)
	return 2 / (1+(e ^ (ylevel/6000)))
end

local gravmul = -9.81

local gravfunc = function(e)
	local pos = e:get_pos()
	local grav = gravity(pos.y+30000) * gravmul
	e: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

minetest.register_globalstep(function()
	local players = minetest.get_connected_players()
	for _,player in ipairs(players) do
		player:set_physics_override({
			gravity = gravity(player:get_pos().y)
		})
	end
end)