]> git.lizzy.rs Git - hangglider.git/commitdiff
Added player_monoids support
authorSpaghettiToastBook <spaghettitoastbook@pm.me>
Sun, 30 Dec 2018 01:55:28 +0000 (20:55 -0500)
committerSpaghettiToastBook <spaghettitoastbook@pm.me>
Sun, 30 Dec 2018 01:55:28 +0000 (20:55 -0500)
depends.txt
init.lua

index bcab691b9180eaaa1f1fad97e9352f6483254728..6bae540c4d463607505857f888dcc4999dc863b4 100755 (executable)
@@ -2,3 +2,4 @@ default
 wool
 minetest_systemd?
 areas?
+player_monoids?
index 6fc40240196d0ad7b4237a2f283db457e8c6bad8..2cc3b237453d146ed7bdb54fbfd93b00c0d0bd66 100644 (file)
--- a/init.lua
+++ b/init.lua
 -- get shot down while flying over protected areas marked as no-fly-zones (flak, from German Flugabwehrkanone)
 --  set these areas with the /area_flak command
 
+-- Modifications by SpaghettiToastBook
+-- 2018-12-29
+-- Physics overrides use player_monoids mod if available
+
 
 
 local HUD_Overlay = true --show glider struts as overlay on HUD
@@ -163,6 +167,31 @@ hangglider.shot_sound = function (pos)
        })
 end
 
+local physics_attrs = {"jump", "speed", "gravity"}
+local function apply_physics_override(player, overrides)
+    if player_monoids then
+        for _, attr in pairs(physics_attrs) do
+            if overrides[attr] then
+                player_monoids[attr]:add_change(player, overrides[attr], "hangglider:glider")
+            end
+        end
+    else
+        player:set_physics_override(overrides)
+    end
+end
+
+local function remove_physics_override(player, overrides)
+    for _, attr in pairs(physics_attrs) do
+        if overrides[attr] then
+            if player_monoids then
+                player_monoids[attr]:del_change(player, "hangglider:glider")
+            else
+                player:set_physics_override({[attr] = 1})
+            end
+        end
+    end
+end
+
 local step_v
 minetest.register_entity("hangglider:glider", {
        visual = "mesh",
@@ -185,15 +214,15 @@ minetest.register_entity("hangglider:glider", {
                                                        canExist = true
                                                        step_v = player:get_player_velocity().y
                                                        if step_v < 0 and step_v > -3 then
-                                                               player:set_physics_override({speed=math.abs(step_v/2) + 0.75})
+                                                               apply_physics_override(player, {speed=math.abs(step_v/2) + 0.75})
                                                        elseif step_v <= -3 then --Cap our gliding movement speed.
-                                                               player:set_physics_override({speed=2.25})
+                                                               apply_physics_override(player, {speed=2.25})
                                                        else
-                                                               player:set_physics_override({speed=1})
+                                                               remove_physics_override(player, {speed=1})
                                                        end
                                                        if not minetestd then
                                                                if debug then player:hud_change(hangglider.debug[pname].id, "text", step_v..', '..player:get_physics_override().gravity..', '..tostring(hangglider.airbreak[pname])) end
-                                                               player:set_physics_override({gravity=((step_v + 3)/20)})
+                                                               apply_physics_override(player, {gravity=((step_v + 3)/20)})
                                                        end
                                                        --[[local vel = player:get_player_velocity()
                                                        if debug then player:hud_change(hangglider.debug[pname].id, "text", vel.y..', '..grav..', '..tostring(hangglider.airbreak[pname])) end
@@ -217,12 +246,12 @@ minetest.register_entity("hangglider:glider", {
                                    end
                                end
                                if not canExist then
-                                       player:set_physics_override({
+                                       remove_physics_override(player, {
                                                jump = 1,
                                                speed = 1,
                                        })
                                        if not minetestd then
-                                               player:set_physics_override({gravity=1})
+                                               remove_physics_override(player, {gravity=1})
                                        end
                                        hangglider.use[pname] = false
                                        if HUD_Overlay then
@@ -240,7 +269,7 @@ minetest.register_entity("hangglider:glider", {
 })
 
 minetest.register_on_dieplayer(function(player)
-       player:set_physics_override({
+       remove_physics_override(player, {
                gravity = 1,
                jump = 1,
        })
@@ -250,7 +279,7 @@ end)
 
 minetest.register_on_joinplayer(function(player)
        local pname = player:get_player_name()
-       player:set_physics_override({
+       remove_physics_override(player, {
                gravity = 1,
                jump = 1,
        })
@@ -316,7 +345,7 @@ minetest.register_tool("hangglider:hangglider", {
                                end
                        end
                        hangglider.use[pname] = true
-                       player:set_physics_override({jump = 0})
+                       apply_physics_override(player, {jump = 0})
                        -- if minetest 0.4.x use this:
                        
                        -- if minetest 5.x use this: