Identification of flyable and swimmable nodes improved
Uses node drawtype now, with "liquid", "liquidflowing" and "airlike" for swimmable and flyable respectivelymaster
parent
5e0cea6483
commit
33993562d4
|
@ -5,5 +5,6 @@ Licence code LGPL v2.1
|
|||
Cape Textures - CC0
|
||||
Blender Model/B3Ds as per base MTG - CC BY-SA 3.0
|
||||
"3d_armor_trans.png" CC-BY-SA 3.0
|
||||
"Headanim" code by LoneWolfHT MIT Licence
|
||||
|
||||
|
||||
|
|
31
README.MD
31
README.MD
|
@ -49,33 +49,6 @@ Capes provide minimal additional armor, about half as much as wooden boots by de
|
|||
---------------------------
|
||||
## What nodes are set as Flyable/Swimmable?
|
||||
---------------------------
|
||||
### Flyable
|
||||
"air"
|
||||
"default:cloud"
|
||||
Any node which has the drawtype set as "airlike", "liquid" and "flowingliquid" will automatically be flyable or swimmable.
|
||||
|
||||
### Swimmable
|
||||
"default:water_source"
|
||||
"default:water_flowing"
|
||||
"default:river_water_source"
|
||||
"default:river_water_flowing"
|
||||
"default:lava_source"
|
||||
"default:lava_flowing"
|
||||
|
||||
Given the way the checks are done there is no need to remove these names if they don't exist in your game/world, simply make sure to add the
|
||||
flyable and swimmable blocks for your game/world.
|
||||
|
||||
---------------------------
|
||||
## How to add more Flyable/Swimmable Node Types?
|
||||
---------------------------
|
||||
To add additional nodes that are swimmable or flyable either add there names directly to "i_nodes_fly_swim.lua"
|
||||
or if I've written them correctly you should be able to use these directly in your mod:
|
||||
|
||||
### For flyable
|
||||
armor_sf.add_flyable("modname:nodename")
|
||||
|
||||
eg armor_sf.add_flyable("gases:hydrogen")
|
||||
|
||||
### For Swimmable
|
||||
armor_sf.add_swimmable("modname:nodename")
|
||||
|
||||
eg armor_sf.add_swimmable("color_water:green_water")
|
||||
Big thanks to Gundul for pointing out a better way to do this.
|
||||
|
|
|
@ -7,32 +7,20 @@
|
|||
-- \/ \/ \/ \/ \/ --
|
||||
------------------------------------------------------------------
|
||||
|
||||
armor_sf={}
|
||||
----------------------------
|
||||
-- add swimmable block --
|
||||
----------------------------
|
||||
armor_sf.add_swimmable = function(name)
|
||||
table.insert(swimmable, name)
|
||||
end
|
||||
|
||||
----------------------------
|
||||
-- add flyable block --
|
||||
----------------------------
|
||||
armor_sf.add_flyable = function(name)
|
||||
table.insert(flyable, name)
|
||||
end
|
||||
|
||||
----------------------------
|
||||
-- Check node fly/swim --
|
||||
----------------------------
|
||||
function node_fsable(n_name,type)
|
||||
local compare = flyable
|
||||
----------------------------------------
|
||||
-- Check node fly/swim by drawtype --
|
||||
-- Thanks Gundul --
|
||||
----------------------------------------
|
||||
function node_fsable(n_draw,type)
|
||||
|
||||
local draw_ta = {"airlike"}
|
||||
local draw_tl = {"liquid","flowingliquid"}
|
||||
local compare = draw_ta
|
||||
if type == "s" then
|
||||
compare = swimmable
|
||||
end
|
||||
|
||||
compare = draw_tl
|
||||
end
|
||||
for k,v in ipairs(compare) do
|
||||
if n_name == v then
|
||||
if n_draw == v then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
@ -42,5 +30,3 @@ end
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
--------------------------------
|
||||
-- Initial swimmable blocks --
|
||||
--------------------------------
|
||||
swimmable = {"default:water_source",
|
||||
"default:water_flowing",
|
||||
"default:river_water_source",
|
||||
"default:river_water_flowing",
|
||||
"default:lava_source",
|
||||
"default:lava_flowing"
|
||||
}
|
||||
|
||||
--------------------------------
|
||||
-- Initial flyable blocks --
|
||||
--------------------------------
|
||||
flyable = {"air",
|
||||
"default:cloud"
|
||||
}
|
57
init.lua
57
init.lua
|
@ -46,7 +46,6 @@ end
|
|||
----------------------------
|
||||
-- Initiate files --
|
||||
----------------------------
|
||||
dofile(modpath .. "/i_nodes_fly_swim.lua") -- Initial swimmable/flyable nodes
|
||||
dofile(modpath .. "/i_functions.lua") -- Functions
|
||||
|
||||
if add_capes == true then
|
||||
|
@ -113,24 +112,29 @@ minetest.register_globalstep(function()
|
|||
local privs = minetest.get_player_privs(player:get_player_name())-- Privs crude attempt to differentiate potenital flying from falling
|
||||
local pos = player:get_pos()
|
||||
local node = minetest.get_node(pos) -- Node player is in (lower legs)
|
||||
node = minetest.registered_nodes[node.name].drawtype -- Set node to node drawtype
|
||||
local node_b = minetest.get_node({x=pos.x,y=pos.y -1,z=pos.z}) -- Node below players feet
|
||||
node_b = minetest.registered_nodes[node_b.name].drawtype -- Set node to node drawtype
|
||||
local node_bb = minetest.get_node({x=pos.x,y=pos.y -2,z=pos.z}) -- Next node down
|
||||
node_bb = minetest.registered_nodes[node_bb.name].drawtype -- Set node to node drawtype
|
||||
local node_bbb = minetest.get_node({x=pos.x,y=pos.y -3,z=pos.z}) -- Next node down (falling starts later)
|
||||
node_bbb = minetest.registered_nodes[node_bbb.name].drawtype-- Set node to node drawtype
|
||||
local node_bbbb = minetest.get_node({x=pos.x,y=pos.y -4,z=pos.z})-- Next node down (falling starts later)
|
||||
node_bbbb = minetest.registered_nodes[node_bbbb.name].drawtype-- Set node to node drawtype
|
||||
local offset = 0 -- Used for Headanim
|
||||
|
||||
if (controls.up or controls.down or
|
||||
controls.left or controls.right) and -- Must be moving in a direction
|
||||
(controls.LMB or controls.RMB) and -- Must be swinging
|
||||
node_fsable(node.name,"s") == true and -- Node player standing in must be swimmable
|
||||
node_fsable(node_b.name,"s") == true then -- Node below must be swimmable
|
||||
node_fsable(node,"s") == true and -- Node player standing in must be swimmable
|
||||
node_fsable(node_b,"s") == true then -- Node below must be swimmable
|
||||
player_api.set_animation(player,"swim_atk",ani_spd) -- Set to swimming attack animation
|
||||
offset = 90 -- Offset for Headanim
|
||||
|
||||
elseif (controls.up or controls.down or
|
||||
controls.left or controls.right) and -- Must be moving in a direction
|
||||
node_fsable(node.name,"s") == true and -- Node player standing in must be swimmable
|
||||
node_fsable(node_b.name,"s") == true then -- Node below must be swimmable
|
||||
node_fsable(node,"s") == true and -- Node player standing in must be swimmable
|
||||
node_fsable(node_b,"s") == true then -- Node below must be swimmable
|
||||
player_api.set_animation(player, "swim",ani_spd) -- Set to swimming animation
|
||||
offset = 90 -- Offset for Headanim
|
||||
|
||||
|
@ -138,52 +142,53 @@ minetest.register_globalstep(function()
|
|||
if(controls.up or controls.down or -- must also have fly privs or we should definitly be falling.
|
||||
controls.left or controls.right) and -- Must be moving in a direction
|
||||
(controls.LMB or controls.RMB) and -- Must be swinging
|
||||
node_fsable(node.name,"a") == true and -- Node player is standing in must be flyable
|
||||
node_fsable(node_b.name,"a") == true and -- node below must be flyable
|
||||
node_fsable(node_bb.name,"a") == true then -- node 2 down must be flyable
|
||||
node_fsable(node,"a") == true and -- Node player is standing in must be flyable
|
||||
node_fsable(node_b,"a") == true and -- node below must be flyable
|
||||
node_fsable(node_bb,"a") == true then -- node 2 down must be flyable
|
||||
player_api.set_animation(player, "fly_atk",ani_spd) -- Show fly attack animation
|
||||
offset = 90 -- Offset for Headanim
|
||||
|
||||
elseif(controls.up or controls.down or
|
||||
controls.left or controls.right) and -- Must be moving in a direction
|
||||
node_fsable(node.name,"a") == true and -- Node player is standing in must be flyable
|
||||
node_fsable(node_b.name,"a") == true and -- node below must be flyable
|
||||
node_fsable(node_bb.name,"a") == true then -- node 2 down must be flyable
|
||||
node_fsable(node,"a") == true and -- Node player is standing in must be flyable
|
||||
node_fsable(node_b,"a") == true and -- node below must be flyable
|
||||
node_fsable(node_bb,"a") == true then -- node 2 down must be flyable
|
||||
player_api.set_animation(player, "fly",ani_spd) -- Show fly animation or swan dive if falling
|
||||
offset = 90 -- Offset for Headanim
|
||||
end
|
||||
|
||||
elseif not attached_to then -- If player attached to something dont do falling animation
|
||||
if(controls.LMB or controls.RMB) and -- Must be swinging
|
||||
node_fsable(node.name,"a") == true and -- Node player is standing in must be flyable/fallable
|
||||
node_fsable(node_b.name,"a") == true and -- node below must be flyable/fallable
|
||||
node_fsable(node_bb.name,"a") == true and -- node 2 down must be flyable/fallable
|
||||
node_fsable(node_bbb.name,"a") == true and -- node 3 down must be flyable/fallable
|
||||
node_fsable(node_bbbb.name,"a") == true then -- node 4 down must be flyable/fallable
|
||||
node_fsable(node,"a") == true and -- Node player is standing in must be flyable/fallable
|
||||
node_fsable(node_b,"a") == true and -- node below must be flyable/fallable
|
||||
node_fsable(node_bb,"a") == true and -- node 2 down must be flyable/fallable
|
||||
node_fsable(node_bbb,"a") == true and -- node 3 down must be flyable/fallable
|
||||
node_fsable(node_bbbb,"a") == true then -- node 4 down must be flyable/fallable
|
||||
player_api.set_animation(player, "fall_atk",ani_spd) -- falling and flailing around
|
||||
offset = 90 -- Offset for Headanim
|
||||
|
||||
elseif node_fsable(node.name,"a") == true and -- Node player is standing in must be flyable/fallable
|
||||
node_fsable(node_b.name,"a") == true and -- node below must be flyable/fallable
|
||||
node_fsable(node_bb.name,"a") == true and -- node 2 down must be flyable/fallable
|
||||
node_fsable(node_bbb.name,"a") == true and -- node 3 down must be flyable/fallable
|
||||
node_fsable(node_bbbb.name,"a") == true then -- node 4 down must be flyable/fallable
|
||||
elseif node_fsable(node,"a") == true and -- Node player is standing in must be flyable/fallable
|
||||
node_fsable(node_b,"a") == true and -- node below must be flyable/fallable
|
||||
node_fsable(node_bb,"a") == true and -- node 2 down must be flyable/fallable
|
||||
node_fsable(node_bbb,"a") == true and -- node 3 down must be flyable/fallable
|
||||
node_fsable(node_bbbb,"a") == true then -- node 4 down must be flyable/fallable
|
||||
player_api.set_animation(player, "fall",ani_spd) -- falling
|
||||
offset = 90 -- Offset for Headanim
|
||||
end
|
||||
end
|
||||
|
||||
local look_degree = -math.deg(player:get_look_vertical()) -- Kept this near headanim code
|
||||
local look_degree = -math.deg(player:get_look_vertical()) -- Kept this near code
|
||||
|
||||
if look_degree > 29 and offset ~= 0 then -- When looking up and fly/Swim head will only tilt back 30degrees
|
||||
if look_degree > 29 and offset ~= 0 then
|
||||
offset = offset - (look_degree-30)
|
||||
|
||||
elseif look_degree > 60 and offset == 0 then -- When standing etc looking up stops at 60 degrees
|
||||
elseif look_degree > 60 and offset == 0 then
|
||||
offset = offset - (look_degree-60)
|
||||
|
||||
elseif look_degree < -60 and offset == 0 then -- When standing etc looking down stops at -60 degrees
|
||||
elseif look_degree < -60 and offset == 0 then
|
||||
offset = offset - (look_degree+60)
|
||||
end
|
||||
end
|
||||
|
||||
-- Code by LoneWolfHT - Headanim mod MIT Licence --
|
||||
player:set_bone_position("Head", vector.new(0, 6.35, 0),vector.new(look_degree + offset, 0, 0))
|
||||
-- Code by LoneWolfHT - Headanim mod MIT Licence --
|
||||
|
|
Loading…
Reference in New Issue