I've made a "tweaking" of the gravitational parameters of your mod. This is how condors fly ;)
Code: Select all
hangglider = {}
hangglider.use = {}
minetest.register_entity("hangglider:airstopper", { --A one-instant entity that catches the player and slows them down.
hp_max = 3,
is_visible = false,
immortal = true,
attach = nil,
on_step = function(self, _)
if self.object:get_hp() ~= 1 then
self.object:set_hp(self.object:get_hp() - 1)
else
if self.attach then
self.attach:set_detach()
end
self.object:remove()
end
end
})
minetest.register_entity("hangglider:glider", {
visual = "mesh",
visual_size = {x = 12, y = 12},
mesh = "glider.obj",
immortal = true,
static_save = false,
textures = {"wool_white.png","default_wood.png"},
on_step = function(self, _)
local canExist = false
if self.object:get_attach() then
local player = self.object:get_attach("parent")
if player then
local pos = player:getpos()
if hangglider.use[player:get_player_name()] then
if minetest.registered_nodes[minetest.get_node(vector.new(pos.x, pos.y-0.5, pos.z)).name] then
if not minetest.registered_nodes[minetest.get_node(vector.new(pos.x, pos.y-0.5, pos.z)).name].walkable then
canExist = true
if player:get_player_velocity().y > -1.5 and player:get_physics_override().gravity < 0 then
player:set_physics_override({
gravity = 0.005,
})
elseif player:get_player_velocity().y < -2 and player:get_physics_override().gravity > 0 then
player:set_physics_override({
gravity = -0.5,
})
end
end
end
end
if not canExist then
player:set_physics_override({
gravity = 1,
jump = 1,
})
hangglider.use[player:get_player_name()] = false
end
end
end
if not canExist then
self.object:set_detach()
self.object:remove()
end
end
})
minetest.register_on_dieplayer(function(player)
player:set_physics_override({
gravity = 1,
jump = 1,
})
hangglider.use[player:get_player_name()] = false
end)
minetest.register_on_joinplayer(function(player)
player:set_physics_override({
gravity = 1,
jump = 1,
})
hangglider.use[player:get_player_name()] = false
end)
minetest.register_on_leaveplayer(function(player)
hangglider.use[player:get_player_name()] = nil
end)
minetest.register_craftitem("hangglider:hangglider", {
description = "Glider",
inventory_image = "glider_item.png",
on_use = function(itemstack, user, pointed_thing)
if not user then
return
end
local pos = user:get_pos()
if minetest.get_node(pos).name == "air" and not hangglider.use[user:get_player_name()] then --Equip
minetest.sound_play("bedsheet", {pos=pos, max_hear_distance = 8, gain = 1.0})
user:set_physics_override({
gravity = 0.005,
jump = 0,
})
local stopper = minetest.add_entity(pos, "hangglider:airstopper")
stopper:get_luaentity().attach = user
user:set_attach( stopper, "", {x=0,y=0,z=0}, {x=0,y=0,z=0})
hangglider.use[user:get_player_name()] = true
minetest.add_entity(user:get_pos(), "hangglider:glider"):set_attach(user, "", {x=0,y=0,z=0}, {x=0,y=0,z=0})
elseif hangglider.use[user:get_player_name()] then --Unequip
hangglider.use[user:get_player_name()] = false
end
end
})
minetest.register_craft({
output = "hangglider:hangglider",
recipe = {
{"wool:white", "wool:white", "wool:white"},
{"default:stick", "", "default:stick"},
{"", "default:stick", ""},
}
})
This can be enjoyed in full only in map generators creating really high mountains (this means that in none of the default ones, but the tweakings I've posted on the Forum are apparently created for your mod :) ) It would be also nice to see a constant forward speed added to this mod to get rid of the need of using the OS function of auto-tapping to emulate this feature.