]> git.lizzy.rs Git - Crafter.git/commitdiff
Make all entities flow
authoroilboi <47129783+oilboi@users.noreply.github.com>
Mon, 22 Jun 2020 03:01:08 +0000 (23:01 -0400)
committeroilboi <47129783+oilboi@users.noreply.github.com>
Mon, 22 Jun 2020 03:01:08 +0000 (23:01 -0400)
mods/boat/init.lua
mods/flow_lib/init.lua [new file with mode: 0644]
mods/itemhandling/init.lua
mods/mob/api/api_hook.lua
mods/player_mechanics/flowing.lua

index b98c4dae79a3ba027ebe8cf2420b9aceaadd6edb..11777224c34db1842be04607d52c6139aa14e8f4 100644 (file)
@@ -16,46 +16,6 @@ local level2
 local nodename
 local acceleration
 
-local function flow(self)      
-       pos = self.object:get_pos()
-       pos.y = pos.y + self.object:get_properties().collisionbox[2]
-       pos = vector.round(pos)
-       node = minetest.get_node(pos).name
-       node_above = minetest.get_node(vector.new(pos.x,pos.y+1,pos.z)).name
-       goalx = 0
-       goalz = 0
-       found = false
-       if node == "main:waterflow" then
-               currentvel = self.object:get_velocity()
-               level = minetest.get_node_level(pos)
-               for x = -1,1 do
-                       for z = -1,1 do
-                               if found == false then
-                                       nodename = minetest.get_node(vector.new(pos.x+x,pos.y,pos.z+z)).name
-                                       level2 = minetest.get_node_level(vector.new(pos.x+x,pos.y,pos.z+z))
-                                       if level2 > level and nodename == "main:waterflow" or nodename == "main:water" then
-                                               goalx = -x
-                                               goalz = -z
-                                               --diagonal flow
-                                               if goalx ~= 0 and goalz ~= 0 then
-                                                       found = true
-                                               end
-                                       end
-                               end
-                       end
-               end
-               --only add velocity if there is one
-               --else this stops the player
-               if goalx ~= 0 and goalz ~= 0 then
-                       acceleration = vector.new(goalx-currentvel.x,0,goalz-currentvel.z)
-                       self.object:add_velocity(acceleration)
-               elseif goalx ~= 0 or goalz ~= 0 then
-                       acceleration = vector.new(goalx-currentvel.x,0,goalz-currentvel.z)
-                       self.object:add_velocity(acceleration)
-               end
-       end
-end
-
 local function lavaflow(self)  
        pos = self.object:get_pos()
        pos.y = pos.y + self.object:get_properties().collisionbox[2]
diff --git a/mods/flow_lib/init.lua b/mods/flow_lib/init.lua
new file mode 100644 (file)
index 0000000..c137da1
--- /dev/null
@@ -0,0 +1,58 @@
+
+local
+minetest,vector,math,pairs
+=
+minetest,vector,math,pairs
+--
+local name
+local pos
+local node
+local node_above
+local goalx
+local goalz
+local currentvel
+local level
+local level2
+local nodename
+local acceleration
+
+function flow(self)
+       pos = self.object:get_pos()
+       pos.y = pos.y + self.object:get_properties().collisionbox[2]
+       pos = vector.round(pos)
+       node = minetest.get_node(pos).name
+       node_above = minetest.get_node(vector.new(pos.x,pos.y+1,pos.z)).name
+       goalx = 0
+       goalz = 0
+       found = false
+       if node == "main:waterflow" then
+               currentvel = self.object:get_velocity()
+               level = minetest.get_node_level(pos)
+               for x = -1,1 do
+                       for z = -1,1 do
+                               if found == false then
+                                       nodename = minetest.get_node(vector.new(pos.x+x,pos.y,pos.z+z)).name
+                                       level2 = minetest.get_node_level(vector.new(pos.x+x,pos.y,pos.z+z))
+                                       if level2 > level and nodename == "main:waterflow" or nodename == "main:water" then
+                                               goalx = -x
+                                               goalz = -z
+                                               --diagonal flow
+                                               if goalx ~= 0 and goalz ~= 0 then
+                                                       found = true
+                                               end
+                                       end
+                               end
+                       end
+               end
+               --only add velocity if there is one
+               --else this stops the player
+               if goalx ~= 0 and goalz ~= 0 then
+                       acceleration = vector.new(goalx/1.5,0,goalz/1.5)
+                       self.object:add_velocity(acceleration)
+               elseif goalx ~= 0 or goalz ~= 0 then
+                       acceleration = vector.new(goalx,0,goalz)
+                       self.object:add_velocity(acceleration)
+               end
+       end
+end
+--
\ No newline at end of file
index 4d9e682de01f7b5ac5659b6ddb2726de2f7d5b16..0428063078bf62e1f7c9c5c8b0e34342d24f5bff 100644 (file)
@@ -170,59 +170,6 @@ local set_item = function(self, item)
        })
 end
 
---
-local name
-local pos
-local node
-local node_above
-local goalx
-local goalz
-local currentvel
-local level
-local level2
-local nodename
-local acceleration
-
-local function flow(self)
-       pos = self.object:get_pos()
-       pos.y = pos.y + self.object:get_properties().collisionbox[2]
-       pos = vector.round(pos)
-       node = minetest.get_node(pos).name
-       node_above = minetest.get_node(vector.new(pos.x,pos.y+1,pos.z)).name
-       goalx = 0
-       goalz = 0
-       found = false
-       if node == "main:waterflow" then
-               currentvel = self.object:get_velocity()
-               level = minetest.get_node_level(pos)
-               for x = -1,1 do
-                       for z = -1,1 do
-                               if found == false then
-                                       nodename = minetest.get_node(vector.new(pos.x+x,pos.y,pos.z+z)).name
-                                       level2 = minetest.get_node_level(vector.new(pos.x+x,pos.y,pos.z+z))
-                                       if level2 > level and nodename == "main:waterflow" or nodename == "main:water" then
-                                               goalx = -x
-                                               goalz = -z
-                                               --diagonal flow
-                                               if goalx ~= 0 and goalz ~= 0 then
-                                                       found = true
-                                               end
-                                       end
-                               end
-                       end
-               end
-               --only add velocity if there is one
-               --else this stops the player
-               if goalx ~= 0 and goalz ~= 0 then
-                       acceleration = vector.new(goalx-currentvel.x,0,goalz-currentvel.z)
-                       self.object:add_velocity(acceleration)
-               elseif goalx ~= 0 or goalz ~= 0 then
-                       acceleration = vector.new(goalx-currentvel.x,0,goalz-currentvel.z)
-                       self.object:add_velocity(acceleration)
-               end
-       end
-end
---
 
 local get_staticdata = function(self)
        return minetest.serialize({
index 54c539341586b1b7501fbb1982ef748ac098c7a8..6c734bd15f570635e34831ad849fdf6b06ae1143 100644 (file)
@@ -168,6 +168,7 @@ mob_register.on_step = function(self, dtime,moveresult)
                self.custom_function_begin(self,dtime)
        end
        
+       flow(self)
        self.collision_detection(self)
        if self.fall_damage then
                self.fall_damage(self)
index 60ba91bc5bbb482f660ccf75b6a5d69b69f2a0c3..88fa5e83867e9ccd2be19fab8748d9bff4197d9d 100644 (file)
@@ -47,10 +47,10 @@ local function flow(player)
         --only add velocity if there is one
         --else this stops the player
         if goalx ~= 0 and goalz ~= 0 then
-            acceleration = vector.new(goalx/3,0,goalz/3)
+            acceleration = vector.new(goalx/1.5,0,goalz/1.5)
             player:add_player_velocity(acceleration)
         elseif goalx ~= 0 or goalz ~= 0 then
-            acceleration = vector.new(goalx/2.25,0,goalz/2.25)
+            acceleration = vector.new(goalx,0,goalz)
             player:add_player_velocity(acceleration)
         end
     end