capturetheflag/mods/ctf/ctf_map/ctf_map_core/meta_helpers.lua
ANAND dc83862df6 Add support for per-map physics modifiers (#488)
Three new map meta fields are now available to map makers:

- `phys_speed`: Speed multiplier
- `phys_jump`: Jump multiplier
- `phys_gravity`: Gravity multiplier
2019-12-07 10:23:02 +01:00

85 lines
1.6 KiB
Lua

----------
-- TIME --
----------
local BASE_TIME_SPEED = 72
local function update_time()
local time = ctf_map.map.start_time
local mult = ctf_map.map.time_speed or 1
if time then
minetest.set_timeofday(time)
else
minetest.set_timeofday(0.4)
end
minetest.settings:set("time_speed", BASE_TIME_SPEED * mult)
end
------------
-- SKYBOX --
------------
function ctf_map.skybox_exists(subdir)
return ctf_map.file_exists(subdir, {
"skybox_1.png",
"skybox_2.png",
"skybox_3.png",
"skybox_4.png",
"skybox_5.png",
"skybox_6.png"
})
end
local function set_skybox(player)
if ctf_map.map.skybox then
local prefix = ctf_map.map.dirname .. "_skybox_"
local skybox_textures = {
prefix .. "1.png", -- up
prefix .. "2.png", -- down
prefix .. "3.png", -- east
prefix .. "4.png", -- west
prefix .. "5.png", -- south
prefix .. "6.png" -- north
}
player:set_sky(0xFFFFFFFF, "skybox", skybox_textures, false)
else
player:set_sky(0xFFFFFFFF, "regular", {}, true)
end
end
-------------
-- PHYSICS --
-------------
local function update_physics(player)
physics.set(player:get_player_name(), "ctf_map:map_physics", {
speed = ctf_map.map.phys_speed or 1,
jump = ctf_map.map.phys_jump or 1,
gravity = ctf_map.map.phys_gravity or 1
})
end
---------------
-- CALLBACKS --
---------------
minetest.register_on_joinplayer(function(player)
if ctf_map.map then
set_skybox(player)
update_physics(player)
end
end)
function ctf_map.update_env()
if not ctf_map.map then
return
end
update_time()
for _, player in pairs(minetest.get_connected_players()) do
set_skybox(player)
update_physics(player)
end
end