add running.

create mod for player-related stuff and move hand setup from core mod to
this new mod.

add feature where, while moving, players gradually speed up up to a
certain limit. their jump height is also increased while this happens.
This commit is contained in:
trans_soup 2023-10-12 16:19:11 +02:00
parent 8f956b2bfc
commit 48a51a77ce
5 changed files with 57 additions and 1 deletions

View file

@ -2,4 +2,3 @@ local modname = minetest.get_current_modname()
load_file("node")
load_file("biome")
load_file("hand")

2
mods/bg_player/init.lua Normal file
View file

@ -0,0 +1,2 @@
load_file("hand")
load_file("run")

3
mods/bg_player/mod.conf Normal file
View file

@ -0,0 +1,3 @@
name = player
description = blockgame player-related stuff.
depends = core, api

52
mods/bg_player/run.lua Normal file
View file

@ -0,0 +1,52 @@
local walk_speed = 1
local walk_time = 2
local speedup_time = 6
local run_factor = 3
local slowdown_factor = 8
local jump_height = 1
local jump_factor = 1.5
local speed_data = {}
local function handle_speed (player, delta_time)
speed_data[player] = speed_data[player] or {}
local data = speed_data[player]
-- data.start = data.start or minetest.get_gametime()
data.duration = (data.duration or 0) + delta_time
local control = player:get_player_control()
local moving = control.up or control.down or control.left or control.right
if not moving then
data.duration = data.duration - delta_time * (slowdown_factor + 1)
end
if data.duration < 0 then data.duration = 0 end
local duration = data.duration
local physics = player:get_physics_override()
if duration < walk_time then
physics.speed = walk_speed
physics.jump = jump_height
else
local run_time = duration - walk_time
local t = run_time / speedup_time
if t > 1 then t = 1 end
local factor = (run_factor - 1) * t + 1
if factor > run_factor then factor = run_factor end
physics.speed = walk_speed * factor
physics.jump = jump_height + (jump_height * jump_factor - 1) * t
end
player:set_physics_override(physics)
end
minetest.register_globalstep(function(delta_time)
for _, player in pairs(minetest.get_connected_players()) do
handle_speed(player, delta_time)
end
end)