]> git.lizzy.rs Git - Crafter.git/blob - mods/player_mechanics/flowing.lua
make water flow even weaker
[Crafter.git] / mods / player_mechanics / flowing.lua
1 local
2 minetest,vector,math,pairs
3 =
4 minetest,vector,math,pairs
5
6 local name
7 local pos
8 local node
9 local node_above
10 local goalx
11 local goalz
12 local currentvel
13 local level
14 local level2
15 local nodename
16 local acceleration
17 found = false
18 local function flow(player)
19     name = player:get_player_name()
20     pos = player:get_pos()
21     pos.y = pos.y + player:get_properties().collisionbox[2]
22     pos = vector.round(pos)
23     node = minetest.get_node(pos).name
24     node_above = minetest.get_node(vector.new(pos.x,pos.y+1,pos.z)).name
25     goalx = 0
26     goalz = 0
27     found = false
28     if node == "main:waterflow" then
29         currentvel = player:get_player_velocity()
30         level = minetest.get_node_level(pos)
31         for x = -1,1 do
32             for z = -1,1 do
33                 if found == false then
34                     nodename = minetest.get_node(vector.new(pos.x+x,pos.y,pos.z+z)).name
35                     level2 = minetest.get_node_level(vector.new(pos.x+x,pos.y,pos.z+z))
36                     if level2 > level and nodename == "main:waterflow" or nodename == "main:water" then
37                         goalx = -x
38                         goalz = -z
39                         --diagonal flow
40                         if goalx ~= 0 and goalz ~= 0 then
41                             found = true
42                         end
43                     end
44                 end
45             end
46         end
47         --only add velocity if there is one
48         --else this stops the player
49         if goalx ~= 0 and goalz ~= 0 then
50             acceleration = vector.new(goalx/3,0,goalz/3)
51             player:add_player_velocity(acceleration)
52         elseif goalx ~= 0 or goalz ~= 0 then
53             acceleration = vector.new(goalx/2.25,0,goalz/2.25)
54             player:add_player_velocity(acceleration)
55         end
56     end
57 end
58
59 local legs
60 local flowing
61 minetest.register_globalstep(function()
62     for _,player in ipairs(minetest.get_connected_players()) do
63         legs = minetest.get_item_group(get_player_legs_env(player),"water") > 0
64         if legs then
65             flow(player)
66         end
67     end
68 end)