1
0
mirror of https://github.com/mt-mods/hangglider.git synced 2025-07-23 10:50:21 +02:00

1 Commits

Author SHA1 Message Date
071fe93cf5 add pova support (#20)
* Update mod.conf

add pova optional dependency

* Update init.lua

add support for pova

* Update .luacheckrc

---------

Co-authored-by: Luke aka SwissalpS <161979+SwissalpS@users.noreply.github.com>
2025-01-18 17:42:39 +01:00
4 changed files with 23 additions and 48 deletions

View File

@ -8,5 +8,6 @@ read_globals = {
"vector", "ItemStack", "vector", "ItemStack",
"player_monoids", "player_monoids",
"pova",
"unifieddyes", "unifieddyes",
} }

View File

@ -31,17 +31,3 @@ The hang glider will wear out every time you use it. The hang glider can be repa
If the `areas` mod is installed, airspace restrictions can be added to areas using the `/area_flak` command. If the `areas` mod is installed, airspace restrictions can be added to areas using the `/area_flak` command.
When using a hang glider in an area with flak enabled, you will get shot down a few seconds after entering the area, this reduces your HP to 1 and destroys your hang glider. When using a hang glider in an area with flak enabled, you will get shot down a few seconds after entering the area, this reduces your HP to 1 and destroys your hang glider.
## API
#### Custom "can fly" checks
```lua
hangglider.add_fly_check(function(name, player)
-- `name` is the playername
-- `player` is the PlayerRef
-- Add your code here
-- Must return `true` (can fly) or `false` (can't fly)
return true
end)
```

View File

@ -1,4 +1,3 @@
hangglider = {}
hangglider = { hangglider = {
translator = minetest.get_translator('hangglider'), translator = minetest.get_translator('hangglider'),
@ -6,6 +5,7 @@ hangglider = {
local S = hangglider.translator local S = hangglider.translator
local has_player_monoids = minetest.get_modpath("player_monoids") local has_player_monoids = minetest.get_modpath("player_monoids")
local has_pova = minetest.get_modpath("pova")
local has_areas = minetest.get_modpath("areas") local has_areas = minetest.get_modpath("areas")
local enable_hud_overlay = minetest.settings:get_bool("hangglider.enable_hud_overlay", true) local enable_hud_overlay = minetest.settings:get_bool("hangglider.enable_hud_overlay", true)
@ -66,6 +66,10 @@ local function set_physics_overrides(player, overrides)
for name, value in pairs(overrides) do for name, value in pairs(overrides) do
player_monoids[name]:add_change(player, value, "hangglider:glider") player_monoids[name]:add_change(player, value, "hangglider:glider")
end end
elseif has_pova then
pova.add_override(player:get_player_name(), "hangglider:glider",
{jump = 0, speed = overrides.speed, gravity = overrides.gravity})
pova.do_override(player)
else else
player:set_physics_override(overrides) player:set_physics_override(overrides)
end end
@ -76,20 +80,18 @@ local function remove_physics_overrides(player)
for _, name in pairs({"jump", "speed", "gravity"}) do for _, name in pairs({"jump", "speed", "gravity"}) do
player_monoids[name]:del_change(player, "hangglider:glider") player_monoids[name]:del_change(player, "hangglider:glider")
end end
elseif has_pova then
pova.del_override(player:get_player_name(), "hangglider:glider")
pova.do_override(player)
else else
player:set_physics_override({jump = 1, speed = 1, gravity = 1}) player:set_physics_override({jump = 1, speed = 1, gravity = 1})
end end
end end
local fly_checks = {} local function can_fly(pos, name)
if not enable_flak then
function hangglider.add_fly_check(func) return true
table.insert(fly_checks, func) end
end
local function can_fly_flak(name, pos)
-- Area flak check
if enable_flak then
local flak = false local flak = false
local owners = {} local owners = {}
for _, area in pairs(areas:getAreasAtPos(pos)) do for _, area in pairs(areas:getAreasAtPos(pos)) do
@ -101,17 +103,6 @@ local function can_fly_flak(name, pos)
if flak and not owners[name] then if flak and not owners[name] then
return false return false
end end
end
end
local function can_fly_custom(name, player)
-- Custom checks set by other mods
for _, func in ipairs(fly_checks) do
local ret = func(name, player)
if ret == false then
return false
end
end
return true return true
end end
@ -166,7 +157,7 @@ local function hangglider_step(self, dtime)
}) })
end end
end end
if not can_fly_flak(name, pos) then if not can_fly(pos, name) then
if not self.flak_timer then if not self.flak_timer then
self.flak_timer = 0 self.flak_timer = 0
shoot_flak_sound(pos) shoot_flak_sound(pos)
@ -181,9 +172,6 @@ local function hangglider_step(self, dtime)
gliding = false gliding = false
end end
end end
if not can_fly_custom(name, player) then
gliding = false
end
if not gliding then if not gliding then
remove_physics_overrides(player) remove_physics_overrides(player)
hanggliding_players[name] = nil hanggliding_players[name] = nil

View File

@ -1,5 +1,5 @@
name = hangglider name = hangglider
description = Adds a functional hang glider for exploring description = Adds a functional hang glider for exploring
depends = default, wool, dye depends = default, wool, dye
optional_depends = areas, player_monoids, unifieddyes optional_depends = areas, player_monoids, pova, unifieddyes
min_minetest_version = 5.0 min_minetest_version = 5.0