Make collision adjustment configurable

This commit is contained in:
Wuzzy 2015-02-16 02:50:23 +01:00
parent 60065e94cd
commit 6ee2040712

View File

@ -6,7 +6,20 @@ else
end end
teletool = {} teletool = {}
--[[ Load settings, apply default settings ]]
teletool.settings = {} teletool.settings = {}
teletool.settings.avoid_collisions = true
teletool.settings.adjust_head = true
local avoid_collisions = minetest.setting_getbool("teletool_avoid_collisions")
if avoid_collisions ~= nil then
teletool.settings.avoid_collision = avoid_collisions
end
local adjust_head = minetest.setting_getbool("teletool_adjust_head")
if adjust_head ~= nil then
teletool.settings.adjust_head = adjust_head
end
function teletool.teleport(player, pointed_thing) function teletool.teleport(player, pointed_thing)
local pos = pointed_thing.above local pos = pointed_thing.above
@ -16,22 +29,22 @@ function teletool.teleport(player, pointed_thing)
local destnode = minetest.get_node({x=dest.x, y=math.ceil(dest.y), z=dest.z}) local destnode = minetest.get_node({x=dest.x, y=math.ceil(dest.y), z=dest.z})
local overnode = minetest.get_node({x=over.x, y=math.ceil(over.y), z=over.z}) local overnode = minetest.get_node({x=over.x, y=math.ceil(over.y), z=over.z})
minetest.log("action", "[teletool] dest: "..minetest.pos_to_string(dest)) if teletool.settings.adjust_head then
minetest.log("action", "[teletool] over: "..minetest.pos_to_string(over)) -- This trick prevents the player's head to spawn in a walkable node if the player clicked on the lower side of a node
-- NOTE: This piece of code must be updated as soon the collision boxes of players become configurable
-- This trick prevents the player's head to spawn in a walkable node if the player clicked on the lower side of a node if minetest.registered_nodes[overnode.name].walkable then
-- NOTE: This piece of code must be updated as soon the collision boxes of players become configurable dest.y = dest.y - 1
if minetest.registered_nodes[overnode.name].walkable then end
dest.y = dest.y - 1
end end
-- The destination must be collision free if teletool.settings.avoid_collisions then
destnode = minetest.get_node({x=dest.x, y=math.ceil(dest.y), z=dest.z}) -- The destination must be collision free
if minetest.registered_nodes[destnode.name].walkable then destnode = minetest.get_node({x=dest.x, y=math.ceil(dest.y), z=dest.z})
return false if minetest.registered_nodes[destnode.name].walkable then
return false
end
end end
minetest.add_particlespawner({ minetest.add_particlespawner({
amount = 25, amount = 25,
time = 0.1, time = 0.1,