Merge pull request #22 from Niklp09/luacheck

Try to fix most warnings reported by luacheck
This commit is contained in:
Alexsandro Percy 2024-10-05 10:31:46 -03:00 committed by GitHub
commit d4dae8b104
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
25 changed files with 194 additions and 251 deletions

46
.luacheckrc Normal file
View file

@ -0,0 +1,46 @@
-- Disable some (non critical) warnings
-- unused = false
unused_args = false
redefined = false
globals = {
"airutils",
}
read_globals = {
"DIR_DELIM",
"ItemStack",
"PseudoRandom",
"basic_machines",
"biomass",
"climate_api",
"core",
"creative",
"default",
"dump",
"emote",
"math",
"mcl_formspec",
"mcl_player",
"minetest",
"player_api",
"signs_lib",
"skins",
"string",
"technic",
"vector",
"wardrobe",
}
-- Per file options
files["airutils_biofuel.lua"] = {
globals = {"basic_machines.grinder_recipes"},
}
files["lib_planes/utilities.lua"] = {
globals = {"player_api.player_attached.?", "mcl_player.player_attached.?"}
}
files["pilot_skin_manager.lua"] = {
globals = {"skins.skin_class.apply_skin_to_player"}
}

View file

@ -75,7 +75,7 @@ local ferment_groups = {'flora', 'leaves', 'flower', 'sapling', 'tree', 'wood',
local biofueldistiller_formspec = "size[8,9]" local biofueldistiller_formspec = "size[8,9]"
.. "list[current_name;src;2,1;1,1;]" .. airutils.get_itemslot_bg(2, 1, 1, 1) .. "list[current_name;src;2,1;1,1;]" .. airutils.get_itemslot_bg(2, 1, 1, 1)
.. "list[current_name;dst;5,1;1,1;]" .. airutils.get_itemslot_bg(5, 1, 1, 1) .. "list[current_name;dst;5,1;1,1;]" .. airutils.get_itemslot_bg(5, 1, 1, 1)
.. "list[current_player;main;0,5;8,4;]" .. airutils.get_itemslot_bg(0, 5, 8, 4) .. "list[current_player;main;0,5;8,4;]" .. airutils.get_itemslot_bg(0, 5, 8, 4)
.. "listring[current_name;dst]" .. "listring[current_name;dst]"
.. "listring[current_player;main]" .. "listring[current_player;main]"
.. "listring[current_name;src]" .. "listring[current_name;src]"
@ -138,9 +138,6 @@ minetest.register_node( module_name .. ":biofuel_distiller", {
return 0 return 0
end end
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if listname == "src" then if listname == "src" then
return stack:get_count() return stack:get_count()
elseif listname == "dst" then elseif listname == "dst" then
@ -154,10 +151,6 @@ minetest.register_node( module_name .. ":biofuel_distiller", {
return 0 return 0
end end
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
local stack = inv:get_stack(from_list, from_index)
if to_list == "src" then if to_list == "src" then
return count return count
elseif to_list == "dst" then elseif to_list == "dst" then

View file

@ -19,7 +19,6 @@ function airutils.PAPIplace(player,pos)
end end
local dir = minetest.dir_to_facedir(player:get_look_dir()) local dir = minetest.dir_to_facedir(player:get_look_dir())
local pos1 = vector.new(pos)
local player_name = player:get_player_name() local player_name = player:get_player_name()
if check_protection(pos, player_name) then if check_protection(pos, player_name) then
@ -45,7 +44,7 @@ function airutils.togglePapiSide(pos, node, clicker, itemstack)
local dir=node.param2 local dir=node.param2
if node.name == "airutils:papi_right" then if node.name == "airutils:papi_right" then
core.set_node(pos, {name="airutils:papi", param2=dir}) core.set_node(pos, {name="airutils:papi", param2=dir})
meta:set_string("infotext", S("PAPI") .. " - " .. S("left side") .. "\r" .. S("Owned by: @1",player_name)) meta:set_string("infotext", S("PAPI") .. " - " .. S("left side") .. "\r" .. S("Owned by: @1",player_name))
elseif node.name == "airutils:papi" then elseif node.name == "airutils:papi" then
core.set_node(pos, {name="airutils:papi_right", param2=dir}) core.set_node(pos, {name="airutils:papi_right", param2=dir})
meta:set_string("infotext", S("PAPI") .. " - " .. S("right side") .. "\r" .. S("Owned by: @1",player_name)) meta:set_string("infotext", S("PAPI") .. " - " .. S("right side") .. "\r" .. S("Owned by: @1",player_name))
@ -107,11 +106,6 @@ minetest.register_node("airutils:papi",{
return return
end end
end end
local itmstck=puncher:get_wielded_item()
local item_name = ""
if itmstck then item_name = itmstck:get_name() end
end, end,
}) })
@ -123,7 +117,7 @@ function airutils.remove_papi(pos)
local dir=node.param2 local dir=node.param2
if node.name == "airutils:papi_right" then if node.name == "airutils:papi_right" then
core.set_node(pos, {name="airutils:papi", param2=dir}) core.set_node(pos, {name="airutils:papi", param2=dir})
meta:set_string("infotext", "PAPI - left side\rOwned by: "..player_name) meta:set_string("infotext", "PAPI - left side\rOwned by: "..player_name)
end end
meta:set_string("owner", player_name) meta:set_string("owner", player_name)
@ -161,11 +155,6 @@ minetest.register_node("airutils:papi_right",{
if player_name ~= meta:get_string("owner") then if player_name ~= meta:get_string("owner") then
return return
end end
local itmstck=puncher:get_wielded_item()
local item_name = ""
if itmstck then item_name = itmstck:get_name() end
end, end,
}) })

View file

@ -50,9 +50,8 @@ minetest.register_tool("airutils:tug", {
return return
end end
local is_admin = false local is_admin = minetest.check_player_privs(player, {server=true})
is_admin = minetest.check_player_privs(player, {server=true})
local pos = player:get_pos() local pos = player:get_pos()
local pname = player:get_player_name() local pname = player:get_player_name()

View file

@ -47,7 +47,7 @@ airutils.wind_selection_box = {
local function get_smooth(angle_initial, reference, last_ref, value) local function get_smooth(angle_initial, reference, last_ref, value)
local range = reference-last_ref local range = reference-last_ref
local retVal = (value*angle_initial)/range local retVal = (value*angle_initial)/range
retval = angle_initial - retVal local retval = angle_initial - retVal
if retval < 0 then retval = 0 end if retval < 0 then retval = 0 end
return retval return retval
end end
@ -55,7 +55,7 @@ end
minetest.register_entity("airutils:wind_indicator",{ minetest.register_entity("airutils:wind_indicator",{
-- common props -- common props
physical = true, physical = true,
stepheight = 0.5, stepheight = 0.5,
collide_with_objects = true, collide_with_objects = true,
collisionbox = {-0.5, 0, -0.5, 0.5, 5.0, 0.5}, collisionbox = {-0.5, 0, -0.5, 0.5, 5.0, 0.5},
visual = "mesh", visual = "mesh",
@ -113,14 +113,13 @@ minetest.register_entity("airutils:wind_indicator",{
on_punch=function(self, puncher) on_punch=function(self, puncher)
return return
end, end,
on_rightclick = function(self, clicker) on_rightclick = function(self, clicker)
local wind = airutils.get_wind(pos, 2.0) local wind = airutils.get_wind(self.object:get_pos(), 2.0)
local wind_yaw = minetest.dir_to_yaw(wind) local wind_yaw = minetest.dir_to_yaw(wind)
minetest.chat_send_player(clicker:get_player_name(),core.colorize('#00ff00', S(" >>> The wind direction now is @1", math.deg(wind_yaw)))) minetest.chat_send_player(clicker:get_player_name(),core.colorize('#00ff00', S(" >>> The wind direction now is @1", math.deg(wind_yaw))))
return return
end, end,
}) })
@ -141,13 +140,13 @@ minetest.register_node("airutils:wind",{
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
{-0.1, 0.5, -0.1, 0.1, 2.0, 0.1} {-0.1, 0.5, -0.1, 0.1, 2.0, 0.1}
} }
}, },
node_dig_prediction = "default:dirt", node_dig_prediction = "default:dirt",
node_placement_prediction = "airutils:wind", node_placement_prediction = "airutils:wind",
on_place = function(itemstack, placer, pointed_thing) on_place = function(itemstack, placer, pointed_thing)
local pos = pointed_thing.above local pos = pointed_thing.above
local player_name = placer:get_player_name() local player_name = placer:get_player_name()
@ -156,7 +155,6 @@ minetest.register_node("airutils:wind",{
if not minetest.is_protected(pos, player_name) and not minetest.is_protected(pos, player_name) then if not minetest.is_protected(pos, player_name) and not minetest.is_protected(pos, player_name) then
minetest.set_node(pos, {name = "airutils:wind",param2 = 1 }) minetest.set_node(pos, {name = "airutils:wind",param2 = 1 })
minetest.add_entity({x=pos.x, y=pos.y, z=pos.z},"airutils:wind_indicator") minetest.add_entity({x=pos.x, y=pos.y, z=pos.z},"airutils:wind_indicator")
local meta = minetest.get_meta(pos)
if not (creative and creative.is_enabled_for and creative.is_enabled_for(player_name)) then if not (creative and creative.is_enabled_for and creative.is_enabled_for(player_name)) then
itemstack:take_item() itemstack:take_item()
end end
@ -168,7 +166,7 @@ minetest.register_node("airutils:wind",{
return itemstack return itemstack
end, end,
on_destruct = function(pos) on_destruct = function(pos)
local meta=minetest.get_meta(pos) local meta=minetest.get_meta(pos)
if meta then if meta then

View file

@ -29,12 +29,11 @@ function airutils.get_attached_entity(self)
if not self._vehicle_custom_data then return nil, nil end if not self._vehicle_custom_data then return nil, nil end
if not self._vehicle_custom_data.simple_external_attach_entity then return nil, nil end if not self._vehicle_custom_data.simple_external_attach_entity then return nil, nil end
local entity_name = self._vehicle_custom_data.simple_external_attach_entity
local inv_id = self._vehicle_custom_data.simple_external_attach_invid local inv_id = self._vehicle_custom_data.simple_external_attach_invid
local pos = self.object:get_pos() local pos = self.object:get_pos()
local nearby_objects = minetest.get_objects_inside_radius(pos, 32) local nearby_objects = minetest.get_objects_inside_radius(pos, 32)
for i,obj in ipairs(nearby_objects) do for i,obj in ipairs(nearby_objects) do
local ent = obj:get_luaentity() local ent = obj:get_luaentity()
if ent then if ent then
if ent._inv_id then if ent._inv_id then
@ -85,12 +84,12 @@ function airutils.simple_external_attach(self, relative_pos, entity_name, radius
attach_up = attach_up or false attach_up = attach_up or false
radius = radius or 12 radius = radius or 12
if self.object then if self.object then
local curr_ent, curr_obj = airutils.get_attached_entity(self) local curr_ent, _ = airutils.get_attached_entity(self)
if curr_ent then return end if curr_ent then return end
local pos = self.object:get_pos() local pos = self.object:get_pos()
local nearby_objects = minetest.get_objects_inside_radius(pos, radius) local nearby_objects = minetest.get_objects_inside_radius(pos, radius)
for i,obj in ipairs(nearby_objects) do for i,obj in ipairs(nearby_objects) do
if obj == self.object then if obj == self.object then
table.remove(nearby_objects,i) table.remove(nearby_objects,i)
end end
@ -98,7 +97,7 @@ function airutils.simple_external_attach(self, relative_pos, entity_name, radius
if ent then if ent then
if ent.name == entity_name then if ent.name == entity_name then
airutils.attach_external_object(self, nearby_objects[i], ent, pos, relative_pos, attach_up) airutils.attach_external_object(self, nearby_objects[i], ent, pos, relative_pos, attach_up)
return return
end end
end end
end end
@ -109,10 +108,9 @@ end
function airutils.restore_external_attach(self) function airutils.restore_external_attach(self)
if not self._vehicle_custom_data then return end if not self._vehicle_custom_data then return end
if not self._vehicle_custom_data.simple_external_attach_invid then return end if not self._vehicle_custom_data.simple_external_attach_invid then return end
local pos = self.object:get_pos() local pos = self.object:get_pos()
local dest_pos = vector.new(pos) local dest_pos = vector.new(pos)
local entity_name = self._vehicle_custom_data.simple_external_attach_entity
local relative_pos = self._vehicle_custom_data.simple_external_attach_pos local relative_pos = self._vehicle_custom_data.simple_external_attach_pos
local inv_id = self._vehicle_custom_data.simple_external_attach_invid local inv_id = self._vehicle_custom_data.simple_external_attach_invid
dest_pos = vector.add(dest_pos, relative_pos) dest_pos = vector.add(dest_pos, relative_pos)
@ -126,7 +124,7 @@ function airutils.restore_external_attach(self)
--minetest.chat_send_all(dump(ent.name)) --minetest.chat_send_all(dump(ent.name))
if ent._inv_id then if ent._inv_id then
--minetest.chat_send_all(">> "..dump(ent._inv_id).." >> "..dump(inv_id)) --minetest.chat_send_all(">> "..dump(ent._inv_id).." >> "..dump(inv_id))
if ent._inv_id == inv_id and (not (ent._inv_id == self._inv_id)) then if ent._inv_id == inv_id and ent._inv_id ~= self._inv_id then
--minetest.chat_send_all("++ "..dump(ent._inv_id).." ++ "..dump(inv_id)) --minetest.chat_send_all("++ "..dump(ent._inv_id).." ++ "..dump(inv_id))
local target_obj = nearby_objects[i] local target_obj = nearby_objects[i]
target_obj:set_pos(dest_pos) target_obj:set_pos(dest_pos)
@ -173,7 +171,7 @@ minetest.register_chatcommand("remove_hook", {
local velocity = rem_ent.object:get_velocity() local velocity = rem_ent.object:get_velocity()
local move = 0 local move = 0
if rem_ent._vehicle_custom_data.simple_external_attach_pos then if rem_ent._vehicle_custom_data.simple_external_attach_pos then
move = -1*rem_ent._vehicle_custom_data.simple_external_attach_pos.z/10 move = -1*rem_ent._vehicle_custom_data.simple_external_attach_pos.z/10
end end
pos.x = pos.x + move * math.sin(direction) pos.x = pos.x + move * math.sin(direction)

View file

@ -10,15 +10,15 @@ initial_properties = {
mesh = "airutils_seat_base.b3d", mesh = "airutils_seat_base.b3d",
textures = {"airutils_alpha.png",}, textures = {"airutils_alpha.png",},
}, },
on_activate = function(self,std) on_activate = function(self,std)
self.sdata = minetest.deserialize(std) or {} self.sdata = minetest.deserialize(std) or {}
if self.sdata.remove then self.object:remove() end if self.sdata.remove then self.object:remove() end
end, end,
get_staticdata=function(self) get_staticdata=function(self)
self.sdata.remove=true self.sdata.remove=true
return minetest.serialize(self.sdata) return minetest.serialize(self.sdata)
end, end,
}) })

View file

@ -300,15 +300,6 @@ end
-- max_height: the max ceilling for the airplane -- max_height: the max ceilling for the airplane
-- wingspan: for ground effect calculation -- wingspan: for ground effect calculation
function airutils.getLiftAccel(self, velocity, accel, longit_speed, roll, curr_pos, in_lift, max_height, wingspan) function airutils.getLiftAccel(self, velocity, accel, longit_speed, roll, curr_pos, in_lift, max_height, wingspan)
local new_velocity = vector.new(velocity)
if not self._min_collective then --ignore if it is an helicopter
--add wind to the lift calcs
local wind = airutils.get_wind(curr_pos, 5)
local accel_wind = vector.subtract(accel, wind) --why? because I need to fake more speed when against the wind to gain lift
local vel_wind = vector.multiply(accel_wind, self.dtime)
new_velocity = vector.add(new_velocity, vel_wind)
end
if longit_speed == nil then longit_speed = 0 end if longit_speed == nil then longit_speed = 0 end
wingspan = wingspan or 10 wingspan = wingspan or 10
local lift = in_lift local lift = in_lift
@ -374,7 +365,7 @@ function airutils.getLiftAccel(self, velocity, accel, longit_speed, roll, curr_p
retval = vector.add(retval,lift_acc) retval = vector.add(retval,lift_acc)
----------------------------------------------------------- -----------------------------------------------------------
-- end lift -- end lift
return retval return retval
end end
@ -439,7 +430,7 @@ function airutils.set_paint(self, puncher, itmstck, texture_name)
else else
--painting with dyes --painting with dyes
local split = string.split(item_name, ":") local split = string.split(item_name, ":")
local color, indx, _ local indx, _
if split[1] then _,indx = split[1]:find('dye') end if split[1] then _,indx = split[1]:find('dye') end
if indx then if indx then
--[[for clr,_ in pairs(airutils.colors) do --[[for clr,_ in pairs(airutils.colors) do
@ -469,7 +460,7 @@ function airutils._set_name(self)
if not airutils._use_signs_api then return end if not airutils._use_signs_api then return end
local l_textures = self.object:get_properties().textures --self.initial_properties.textures local l_textures = self.object:get_properties().textures --self.initial_properties.textures
for _, texture in ipairs(l_textures) do for _, texture in ipairs(l_textures) do
indx = texture:find('airutils_name_canvas.png') local indx = texture:find('airutils_name_canvas.png')
if indx then if indx then
l_textures[_] = "airutils_name_canvas.png^"..airutils.convert_text_to_texture(self._ship_name, self._name_color or 0, self._name_hor_aligment or 0.8) l_textures[_] = "airutils_name_canvas.png^"..airutils.convert_text_to_texture(self._ship_name, self._name_color or 0, self._name_hor_aligment or 0.8)
end end
@ -606,7 +597,6 @@ minetest.register_chatcommand("ground_effect", {
description = S("Enables/disables the ground effect (for debug purposes)"), description = S("Enables/disables the ground effect (for debug purposes)"),
privs = {server=true}, privs = {server=true},
func = function(name, param) func = function(name, param)
local player = minetest.get_player_by_name(name)
if minetest.check_player_privs(name, {server=true}) then if minetest.check_player_privs(name, {server=true}) then
if param == "on" or param == "" then if param == "on" or param == "" then
airutils.ground_effect_is_disabled = nil airutils.ground_effect_is_disabled = nil
@ -626,7 +616,6 @@ minetest.register_chatcommand("show_lift", {
description = S("Enables/disables the lift printing (for debug purposes)"), description = S("Enables/disables the lift printing (for debug purposes)"),
privs = {server=true}, privs = {server=true},
func = function(name, param) func = function(name, param)
local player = minetest.get_player_by_name(name)
if minetest.check_player_privs(name, {server=true}) then if minetest.check_player_privs(name, {server=true}) then
if param == "on" or param == "" then if param == "on" or param == "" then
airutils.show_lift = name airutils.show_lift = name

View file

@ -4,33 +4,10 @@ local S = airutils.S
dofile(minetest.get_modpath("airutils") .. DIR_DELIM .. "lib_planes" .. DIR_DELIM .. "utilities.lua") dofile(minetest.get_modpath("airutils") .. DIR_DELIM .. "lib_planes" .. DIR_DELIM .. "utilities.lua")
local function floating_auto_correction(self, dtime)
local factor = 1
local range = 0.03 --above and bellow
if self._wing_configuration > self._stable_collective + range or
self._wing_configuration < self._stable_collective - range then
return
end
--minetest.chat_send_player(self.driver_name, "antes: " .. self._air_float)
if self._wing_configuration > self._stable_collective then factor = -1 end
local time_correction = (dtime/airutils.ideal_step)
if time_correction < 1 then time_correction = 1 end
local intensity = 1
local correction = (intensity*factor) * time_correction
local new_wing_configuration = self._wing_configuration + correction
self._wing_configuration = new_wing_configuration
--minetest.chat_send_all(dump(self._wing_configuration))
end
local function set_yaw_by_mouse(self, dir) local function set_yaw_by_mouse(self, dir)
local rotation = self.object:get_rotation() local rotation = self.object:get_rotation()
local rot_y = math.deg(rotation.y) local rot_y = math.deg(rotation.y)
local total = math.abs(math.floor(rot_y/360)) local total = math.abs(math.floor(rot_y/360))
if rot_y < 0 then rot_y = rot_y + (360*total) end if rot_y < 0 then rot_y = rot_y + (360*total) end
@ -40,7 +17,7 @@ local function set_yaw_by_mouse(self, dir)
local intensity = self._yaw_intensity / 10 local intensity = self._yaw_intensity / 10
local command = (rot_y - dir) * intensity local command = (rot_y - dir) * intensity
if command < -90 then command = -90 if command < -90 then command = -90
elseif command > 90 then command = 90 end elseif command > 90 then command = 90 end
--minetest.chat_send_all("rotation y: "..rot_y.." - dir: "..dir.." - command: "..command) --minetest.chat_send_all("rotation y: "..rot_y.." - dir: "..dir.." - command: "..command)
@ -62,7 +39,7 @@ function airutils.heli_control(self, dtime, hull_direction, longit_speed, longit
local retval_accel = accel local retval_accel = accel
local stop = false local stop = false
local ctrl = nil local ctrl
local time_correction = (dtime/airutils.ideal_step) local time_correction = (dtime/airutils.ideal_step)
if time_correction < 1 then time_correction = 1 end if time_correction < 1 then time_correction = 1 end
@ -78,12 +55,8 @@ function airutils.heli_control(self, dtime, hull_direction, longit_speed, longit
if not self._acceleration then self._acceleration = 0 end if not self._acceleration then self._acceleration = 0 end
if not self._lat_acceleration then self._lat_acceleration = 0 end if not self._lat_acceleration then self._lat_acceleration = 0 end
if self._engine_running then if self._engine_running then
--engine acceleration calc
local factor = 1
--control lift --control lift
local collective_up_max = 1.2 local collective_up_max = 1.2
local min_angle = self._min_collective local min_angle = self._min_collective
@ -137,7 +110,7 @@ function airutils.heli_control(self, dtime, hull_direction, longit_speed, longit
end end
elseif ctrl.left then elseif ctrl.left then
yaw_cmd = -1 yaw_cmd = -1
if later_speed > -self._max_speed and self._yaw_by_mouse then if later_speed > -self._max_speed and self._yaw_by_mouse then
self._lat_acceleration = self._lat_acceleration + (-acc_fraction) self._lat_acceleration = self._lat_acceleration + (-acc_fraction)
else else
self._lat_acceleration = 0 self._lat_acceleration = 0
@ -187,7 +160,7 @@ function airutils.heli_control(self, dtime, hull_direction, longit_speed, longit
end end
end end
end end
return retval_accel, stop return retval_accel, stop
end end

View file

@ -1,6 +1,6 @@
dofile(minetest.get_modpath("airutils") .. DIR_DELIM .. "lib_planes" .. DIR_DELIM .. "global_definitions.lua") dofile(minetest.get_modpath("airutils") .. DIR_DELIM .. "lib_planes" .. DIR_DELIM .. "global_definitions.lua")
function engineSoundPlay(self, increment, base) local function engineSoundPlay(self, increment, base)
increment = increment or 0.0 increment = increment or 0.0
--sound --sound
if self.sound_handle then minetest.sound_stop(self.sound_handle) end if self.sound_handle then minetest.sound_stop(self.sound_handle) end
@ -17,14 +17,14 @@ end
local function engine_set_sound_and_animation(self, is_flying, newpitch, newroll) local function engine_set_sound_and_animation(self, is_flying, newpitch, newroll)
is_flying = is_flying or false is_flying = is_flying or false
if self._engine_running then --engine running if self._engine_running then --engine running
if not self.sound_handle then if not self.sound_handle then
engineSoundPlay(self, 0.0, 0.9) engineSoundPlay(self, 0.0, 0.9)
end end
--self._cmd_snd --self._cmd_snd
if self._snd_last_cmd ~= self._cmd_snd then if self._snd_last_cmd ~= self._cmd_snd then
local increment = 0.0 local increment
self._snd_last_cmd = self._cmd_snd self._snd_last_cmd = self._cmd_snd
if self._cmd_snd then increment = 0.1 else increment = 0.0 end if self._cmd_snd then increment = 0.1 else increment = 0.0 end
engineSoundPlay(self, increment, 0.9) engineSoundPlay(self, increment, 0.9)
@ -34,7 +34,7 @@ local function engine_set_sound_and_animation(self, is_flying, newpitch, newroll
else else
if is_flying then --autorotation here if is_flying then --autorotation here
if self._snd_last_cmd ~= self._cmd_snd then if self._snd_last_cmd ~= self._cmd_snd then
local increment = 0.0 local increment
self._snd_last_cmd = self._cmd_snd self._snd_last_cmd = self._cmd_snd
if self._cmd_snd then increment = 0.1 else increment = 0.0 end if self._cmd_snd then increment = 0.1 else increment = 0.0 end
engineSoundPlay(self, increment, 0.6) engineSoundPlay(self, increment, 0.6)
@ -100,7 +100,6 @@ function airutils.logic_heli(self)
local rotation = self.object:get_rotation() local rotation = self.object:get_rotation()
local yaw = rotation.y local yaw = rotation.y
local newyaw=yaw local newyaw=yaw
local pitch = rotation.x
local roll = rotation.z local roll = rotation.z
local hull_direction = airutils.rot_to_dir(rotation) --minetest.yaw_to_dir(yaw) local hull_direction = airutils.rot_to_dir(rotation) --minetest.yaw_to_dir(yaw)
@ -118,7 +117,6 @@ function airutils.logic_heli(self)
local accel = vector.add(longit_drag,later_drag) local accel = vector.add(longit_drag,later_drag)
local stop = false local stop = false
local node_bellow = airutils.nodeatpos(airutils.pos_shift(curr_pos,{y=-1.3}))
local is_flying = true local is_flying = true
if self.colinfo then if self.colinfo then
is_flying = (not self.colinfo.touching_ground) is_flying = (not self.colinfo.touching_ground)
@ -290,7 +288,7 @@ function airutils.logic_heli(self)
self._last_accell = new_accel self._last_accell = new_accel
self.object:move_to(curr_pos) self.object:move_to(curr_pos)
--airutils.set_acceleration(self.object, new_accel) --airutils.set_acceleration(self.object, new_accel)
local limit = self._climb_speed --local limit = self._climb_speed
--if new_accel.y > limit then new_accel.y = limit end --it isn't a rocket :/ --if new_accel.y > limit then new_accel.y = limit end --it isn't a rocket :/
else else

View file

@ -11,7 +11,6 @@ function airutils.powerAdjust(self,dtime,factor,dir,max_power)
local max = max_power or 100 local max = max_power or 100
local add_factor = factor/2 local add_factor = factor/2
add_factor = add_factor * (dtime/airutils.ideal_step) --adjusting the command speed by dtime add_factor = add_factor * (dtime/airutils.ideal_step) --adjusting the command speed by dtime
local power_index = self._power_lever
if dir == 1 then if dir == 1 then
if self._power_lever < max then if self._power_lever < max then
@ -46,7 +45,7 @@ function airutils.control(self, dtime, hull_direction, longit_speed, longit_drag
if ctrl.aux1 and self._last_time_command > 0.5 then if ctrl.aux1 and self._last_time_command > 0.5 then
self._last_time_command = 0 self._last_time_command = 0
end end
---------------------------------- ----------------------------------
-- flap operation -- flap operation
@ -150,8 +149,7 @@ function airutils.control(self, dtime, hull_direction, longit_speed, longit_drag
if longit_speed > 0 then if longit_speed > 0 then
if ctrl then if ctrl then
if ctrl.right or ctrl.left then if not (ctrl.right or ctrl.left) then
else
airutils.rudder_auto_correction(self, longit_speed, dtime) airutils.rudder_auto_correction(self, longit_speed, dtime)
end end
else else
@ -178,11 +176,9 @@ function airutils.set_pitch(self, dir, dtime)
local multiplier = pitch_factor*(dtime/airutils.ideal_step) local multiplier = pitch_factor*(dtime/airutils.ideal_step)
if dir == -1 then if dir == -1 then
--minetest.chat_send_all("cabrando") --minetest.chat_send_all("cabrando")
if self._elevator_angle > 0 then pitch_factor = pitch_factor * 2 end
self._elevator_angle = math.max(self._elevator_angle-multiplier,-self._elevator_limit) self._elevator_angle = math.max(self._elevator_angle-multiplier,-self._elevator_limit)
elseif dir == 1 then elseif dir == 1 then
--minetest.chat_send_all("picando") --minetest.chat_send_all("picando")
if self._angle_of_attack < 0 then pitch_factor = 1 end --lets reduce the command power to avoid accidents
self._elevator_angle = math.min(self._elevator_angle+multiplier,self._elevator_limit) self._elevator_angle = math.min(self._elevator_angle+multiplier,self._elevator_limit)
end end
end end
@ -192,11 +188,9 @@ function airutils.set_autopilot_pitch(self, dir, dtime)
local multiplier = pitch_factor*(dtime/airutils.ideal_step) local multiplier = pitch_factor*(dtime/airutils.ideal_step)
if dir == -1 then if dir == -1 then
--minetest.chat_send_all("cabrando") --minetest.chat_send_all("cabrando")
if self._elevator_angle > 0 then pitch_factor = pitch_factor * 2 end
self._elevator_angle = math.max(self._elevator_angle-multiplier,-self._elevator_limit) self._elevator_angle = math.max(self._elevator_angle-multiplier,-self._elevator_limit)
elseif dir == 1 then elseif dir == 1 then
--minetest.chat_send_all("picando") --minetest.chat_send_all("picando")
if self._angle_of_attack < 0 then pitch_factor = 1 end --lets reduce the command power to avoid accidents
self._elevator_angle = math.min(self._elevator_angle+multiplier,self._elevator_limit) self._elevator_angle = math.min(self._elevator_angle+multiplier,self._elevator_limit)
end end
end end
@ -204,7 +198,7 @@ end
function airutils.set_yaw_by_mouse(self, dir) function airutils.set_yaw_by_mouse(self, dir)
local rotation = self.object:get_rotation() local rotation = self.object:get_rotation()
local rot_y = math.deg(rotation.y) local rot_y = math.deg(rotation.y)
local total = math.abs(math.floor(rot_y/360)) local total = math.abs(math.floor(rot_y/360))
if rot_y < 0 then rot_y = rot_y + (360*total) end if rot_y < 0 then rot_y = rot_y + (360*total) end
@ -214,7 +208,7 @@ function airutils.set_yaw_by_mouse(self, dir)
local intensity = self._yaw_intensity / 10 local intensity = self._yaw_intensity / 10
local command = (rot_y - dir) * intensity local command = (rot_y - dir) * intensity
if command < -90 then command = -90 if command < -90 then command = -90
elseif command > 90 then command = 90 end elseif command > 90 then command = 90 end
--minetest.chat_send_all("rotation y: "..rot_y.." - dir: "..dir.." - command: "..command) --minetest.chat_send_all("rotation y: "..rot_y.." - dir: "..dir.." - command: "..command)
@ -243,22 +237,12 @@ function airutils.rudder_auto_correction(self, longit_speed, dtime)
end end
end end
--obsolete, will be removed
function getAdjustFactor(curr_y, desired_y)
local max_difference = 0.1
local adjust_factor = 0.5
local difference = math.abs(curr_y - desired_y)
if difference > max_difference then difference = max_difference end
return (difference * adjust_factor) / max_difference
end
function airutils.autopilot(self, dtime, hull_direction, longit_speed, accel, curr_pos) function airutils.autopilot(self, dtime, hull_direction, longit_speed, accel, curr_pos)
local retval_accel = accel local retval_accel = accel
if not self._have_auto_pilot then return end if not self._have_auto_pilot then return end
local max_autopilot_power = 85
local max_attack_angle = 1.8 local max_attack_angle = 1.8
--climb --climb

View file

@ -30,7 +30,6 @@ function airutils.physics(self)
end end
if self.isinliquid then if self.isinliquid then
local accell = {x=0, y=0, z=0}
self.water_drag = 0.2 self.water_drag = 0.2
self.isinliquid = true self.isinliquid = true
local height = self.height local height = self.height
@ -38,7 +37,7 @@ function airutils.physics(self)
-- local balance = self.buoyancy*self.height -- local balance = self.buoyancy*self.height
local buoyacc = airutils.gravity*(self.buoyancy-submergence) local buoyacc = airutils.gravity*(self.buoyancy-submergence)
--local buoyacc = self._baloon_buoyancy*(self.buoyancy-submergence) --local buoyacc = self._baloon_buoyancy*(self.buoyancy-submergence)
accell = { local accell = {
x=-vel.x*self.water_drag, x=-vel.x*self.water_drag,
y=buoyacc-(vel.y*math.abs(vel.y)*0.4), y=buoyacc-(vel.y*math.abs(vel.y)*0.4),
z=-vel.z*self.water_drag z=-vel.z*self.water_drag
@ -53,7 +52,7 @@ function airutils.physics(self)
else else
--airutils.set_acceleration(self.object,{x=0,y=airutils.gravity,z=0}) --airutils.set_acceleration(self.object,{x=0,y=airutils.gravity,z=0})
self.isinliquid = false self.isinliquid = false
if last_accel then if last_accel then
last_accel.y = last_accel.y + airutils.gravity --gravity here last_accel.y = last_accel.y + airutils.gravity --gravity here
@ -71,7 +70,7 @@ function airutils.physics(self)
-- bounciness -- bounciness
if self.springiness and self.springiness > 0 and self.buoyancy >= 1 then if self.springiness and self.springiness > 0 and self.buoyancy >= 1 then
local vnew = vector.new(new_velocity) local vnew = vector.new(new_velocity)
if not self.collided then -- ugly workaround for inconsistent collisions if not self.collided then -- ugly workaround for inconsistent collisions
for _,k in ipairs({'y','z','x'}) do for _,k in ipairs({'y','z','x'}) do
if new_velocity[k]==0 and math.abs(self.lastvelocity[k])> 0.1 then if new_velocity[k]==0 and math.abs(self.lastvelocity[k])> 0.1 then
@ -79,7 +78,7 @@ function airutils.physics(self)
end end
end end
end end
if not vector.equals(new_velocity,vnew) then if not vector.equals(new_velocity,vnew) then
self.collided = true self.collided = true
else else

View file

@ -76,7 +76,7 @@ function airutils.on_activate(self, staticdata, dtime_s)
return return
end end
end end
self._climb_rate = 0 self._climb_rate = 0
self._yaw = 0 self._yaw = 0
self._roll = 0 self._roll = 0
@ -99,7 +99,7 @@ function airutils.on_activate(self, staticdata, dtime_s)
if self._anim_start_frame then if self._anim_start_frame then
start_frame = self._anim_start_frame start_frame = self._anim_start_frame
end_frame = self._anim_start_frame + self._anim_frames end_frame = self._anim_start_frame + self._anim_frames
end end
self.object:set_animation({x = start_frame, y = end_frame}, 0, 0, true) self.object:set_animation({x = start_frame, y = end_frame}, 0, 0, true)
if self.wheels then if self.wheels then
@ -135,7 +135,7 @@ function airutils.on_step(self,dtime,colinfo)
self.dtime = math.min(dtime,0.2) self.dtime = math.min(dtime,0.2)
self.colinfo = colinfo self.colinfo = colinfo
self.height = airutils.get_box_height(self) self.height = airutils.get_box_height(self)
-- physics comes first -- physics comes first
local vel = self.object:get_velocity() local vel = self.object:get_velocity()
local pos = self.object:get_pos() local pos = self.object:get_pos()
@ -154,8 +154,8 @@ function airutils.on_step(self,dtime,colinfo)
props.show_on_minimap = false props.show_on_minimap = false
self.object:set_properties(props) self.object:set_properties(props)
end end
if colinfo then if colinfo then
self.isonground = colinfo.touching_ground self.isonground = colinfo.touching_ground
else else
if self.lastvelocity.y==0 and vel.y==0 then if self.lastvelocity.y==0 and vel.y==0 then
@ -164,7 +164,7 @@ function airutils.on_step(self,dtime,colinfo)
self.isonground = false self.isonground = false
end end
end end
if self.hp_max <= 0 then if self.hp_max <= 0 then
airutils.destroy(self) airutils.destroy(self)
end end
@ -174,7 +174,7 @@ function airutils.on_step(self,dtime,colinfo)
if self.logic then if self.logic then
self:logic() self:logic()
end end
self.lastvelocity = self.object:get_velocity() self.lastvelocity = self.object:get_velocity()
self.time_total=self.time_total+self.dtime self.time_total=self.time_total+self.dtime
end end
@ -205,7 +205,7 @@ local function ground_pitch(self, longit_speed, curr_pitch)
if newpitch > math.rad(self._tail_angle) then newpitch = math.rad(self._tail_angle) end --não queremos arrastar o cauda no chão if newpitch > math.rad(self._tail_angle) then newpitch = math.rad(self._tail_angle) end --não queremos arrastar o cauda no chão
end end
return newpitch return newpitch
end end
@ -280,7 +280,6 @@ function airutils.logic(self)
local rotation = self.object:get_rotation() local rotation = self.object:get_rotation()
local yaw = rotation.y local yaw = rotation.y
local newyaw=yaw local newyaw=yaw
local pitch = rotation.x
local roll = rotation.z local roll = rotation.z
local newroll=roll local newroll=roll
newroll = math.floor(newroll/360) newroll = math.floor(newroll/360)
@ -411,11 +410,12 @@ function airutils.logic(self)
--is an stall, force a recover --is an stall, force a recover
if longit_speed < (self._min_speed+0.5) and climb_rate < -1.5 and is_flying then if longit_speed < (self._min_speed+0.5) and climb_rate < -1.5 and is_flying then
--[[
if player and self.driver_name then if player and self.driver_name then
--minetest.chat_send_player(self.driver_name,core.colorize('#ff0000', " >>> STALL")) minetest.chat_send_player(self.driver_name,core.colorize('#ff0000', " >>> STALL"))
end end
]]--
self._elevator_angle = 0 self._elevator_angle = 0
actuator_angle = 0
self._angle_of_attack = -1 self._angle_of_attack = -1
newpitch = math.rad(self._angle_of_attack) newpitch = math.rad(self._angle_of_attack)
else else
@ -439,7 +439,7 @@ function airutils.logic(self)
end --limiting the very high climb angle due to strange behavior]]--]]-- end --limiting the very high climb angle due to strange behavior]]--]]--
if self._inverted_pitch_reaction then self._elevator_angle = -1*actuator_angle end --revert the reversion if self._inverted_pitch_reaction then self._elevator_angle = -1*actuator_angle end --revert the reversion
end end
end end
@ -516,7 +516,7 @@ function airutils.logic(self)
--end accell --end accell
--get disconnected players --get disconnected players
if not self._autoflymode == true then if self._autoflymode ~= true then
airutils.rescueConnectionFailedPassengers(self) airutils.rescueConnectionFailedPassengers(self)
end end
@ -557,7 +557,7 @@ function airutils.logic(self)
if longit_speed > self._min_speed*0.66 then if longit_speed > self._min_speed*0.66 then
--[[lets do something interesting: --[[lets do something interesting:
here I'll fake the longit speed effect for takeoff, to force the airplane here I'll fake the longit speed effect for takeoff, to force the airplane
to use more runway to use more runway
]]-- ]]--
local factorized_longit_speed = longit_speed local factorized_longit_speed = longit_speed
if is_flying == false and airutils.quadBezier then if is_flying == false and airutils.quadBezier then
@ -727,27 +727,26 @@ function airutils.on_punch(self, puncher, ttime, toolcaps, dir, damage)
end end
if self._vehicle_name then airutils.setText(self, self._vehicle_name) end if self._vehicle_name then airutils.setText(self, self._vehicle_name) end
if (string.find(puncher:get_wielded_item():get_name(), "rayweapon") or if (string.find(puncher:get_wielded_item():get_name(), "rayweapon") or
toolcaps.damage_groups.vehicle) then toolcaps.damage_groups.vehicle) then
damage_vehicle(self, toolcaps, ttime, damage) damage_vehicle(self, toolcaps, ttime, damage)
end end
local is_admin = false local is_admin = minetest.check_player_privs(puncher, {server=true})
is_admin = minetest.check_player_privs(puncher, {server=true})
if self.owner == nil then if self.owner == nil then
self.owner = name self.owner = name
end end
if self.owner and self.owner ~= name and self.owner ~= "" then if self.owner and self.owner ~= name and self.owner ~= "" then
if is_admin == false then return end if is_admin == false then return end
end end
if is_admin == false and minetest.check_player_privs(puncher, {protection_bypass=false}) then if is_admin == false and minetest.check_player_privs(puncher, {protection_bypass=false}) then
if self.driver_name and self.driver_name ~= name then if self.driver_name and self.driver_name ~= name then
-- do not allow other players to remove the object while there is a driver -- do not allow other players to remove the object while there is a driver
return return
end end
end end
local is_attached = false local is_attached = false
local player_attach = puncher:get_attach() local player_attach = puncher:get_attach()
if player_attach then if player_attach then
@ -758,7 +757,7 @@ function airutils.on_punch(self, puncher, ttime, toolcaps, dir, damage)
is_attached = true is_attached = true
end end
end end
if puncher:get_attach() == self.object then is_attached = true end if puncher:get_attach() == self.object then is_attached = true end
--if puncher:get_attach() == self.pilot_seat_base then is_attached = true end --if puncher:get_attach() == self.pilot_seat_base then is_attached = true end
@ -831,9 +830,9 @@ local function get_vehicle(self, player)
local lua_ent = self.object:get_luaentity() local lua_ent = self.object:get_luaentity()
local staticdata = lua_ent:get_staticdata(self) local staticdata = lua_ent:get_staticdata(self)
local obj_name = lua_ent.name local obj_name = lua_ent.name
local pos = self.object:get_pos()
local stack = ItemStack(obj_name) local stack = ItemStack(obj_name)
local max = stack:get_stack_max()
local tool = false local tool = false
if stack:get_stack_max() == 1 then tool = true end if stack:get_stack_max() == 1 then tool = true end
@ -863,7 +862,7 @@ local function get_vehicle(self, player)
return true return true
end end
return false return false
end end
@ -886,8 +885,6 @@ function airutils.on_rightclick(self, clicker)
--minetest.chat_send_all(dump(self.driver_name)) --minetest.chat_send_all(dump(self.driver_name))
local touching_ground, liquid_below = airutils.check_node_below(self.object, 2.5)
local is_on_ground = self.isinliquid or touching_ground or liquid_below
local is_under_water = airutils.check_is_under_water(self.object) local is_under_water = airutils.check_is_under_water(self.object)
--minetest.chat_send_all('name '.. dump(name) .. ' - pilot: ' .. dump(self.driver_name) .. ' - pax: ' .. dump(copilot_name)) --minetest.chat_send_all('name '.. dump(name) .. ' - pilot: ' .. dump(self.driver_name) .. ' - pax: ' .. dump(copilot_name))
@ -900,7 +897,7 @@ function airutils.on_rightclick(self, clicker)
local plane = seat:get_attach() local plane = seat:get_attach()
if plane == self.object then is_attached = true end if plane == self.object then is_attached = true end
end end
if name == self.driver_name then if name == self.driver_name then
if is_attached then if is_attached then
local itmstck=clicker:get_wielded_item() local itmstck=clicker:get_wielded_item()
@ -946,8 +943,6 @@ function airutils.on_rightclick(self, clicker)
if self.owner == name or minetest.check_player_privs(clicker, {protection_bypass=true}) then if self.owner == name or minetest.check_player_privs(clicker, {protection_bypass=true}) then
local itmstck=clicker:get_wielded_item() local itmstck=clicker:get_wielded_item()
local item_name = ""
if itmstck then item_name = itmstck:get_name() end
if itmstck then if itmstck then
if airutils.set_param_paint(self, clicker, itmstck, 2) == true then if airutils.set_param_paint(self, clicker, itmstck, 2) == true then
@ -963,10 +958,10 @@ function airutils.on_rightclick(self, clicker)
else else
if is_under_water then return end if is_under_water then return end
--remove the passengers first --remove the passengers first
local max_seats = table.getn(self._seats) local max_seats = table.getn(self._seats)
for i = max_seats,1,-1 for i = max_seats,1,-1
do do
if self._passengers[i] and self._passengers[i] ~= "" then if self._passengers[i] and self._passengers[i] ~= "" then
local passenger = minetest.get_player_by_name(self._passengers[i]) local passenger = minetest.get_player_by_name(self._passengers[i])
if passenger then airutils.dettach_pax(self, passenger) end if passenger then airutils.dettach_pax(self, passenger) end

View file

@ -87,7 +87,7 @@ function airutils.pilot_formspec(name)
ver_pos = ver_pos + 0.5 ver_pos = ver_pos + 0.5
expand_form = true expand_form = true
end end
if ent._have_copilot and name == ent.driver_name then if ent._have_copilot and name == ent.driver_name then
basic_form = basic_form.."button[6,"..ver_pos..";4,1;copilot_form;" .. S("Co-pilot Manager") .. "]" basic_form = basic_form.."button[6,"..ver_pos..";4,1;copilot_form;" .. S("Co-pilot Manager") .. "]"
ver_pos = ver_pos + 1.25 ver_pos = ver_pos + 1.25
@ -101,7 +101,7 @@ function airutils.pilot_formspec(name)
end end
if ent._have_manual then if ent._have_manual then
basic_form = basic_form.."button[6,5.2;4,1;manual;" .. S("Manual") .. "]" basic_form = basic_form.."button[6,5.2;4,1;manual;" .. S("Manual") .. "]"
expand_form = true expand_form = true
end end
@ -168,8 +168,6 @@ function airutils.adf_formspec(name)
z = math.floor(ent._adf_destiny.z) z = math.floor(ent._adf_destiny.z)
end end
end end
else
--return
end end
local basic_form = table.concat({ local basic_form = table.concat({
@ -280,7 +278,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
airutils.attach_pax(ent, player) airutils.attach_pax(ent, player)
end end
if fields.go_out then if fields.go_out then
local touching_ground, liquid_below = airutils.check_node_below(plane_obj, 2.5) local touching_ground, _ = airutils.check_node_below(plane_obj, 2.5)
if ent.isinliquid or touching_ground then --isn't flying? if ent.isinliquid or touching_ground then --isn't flying?
airutils.dettach_pax(ent, player) airutils.dettach_pax(ent, player)
else else
@ -308,21 +306,20 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
if fields.go_out then if fields.go_out then
local touch_point = ent.initial_properties.collisionbox[2]-1.0 local touch_point = ent.initial_properties.collisionbox[2]-1.0
-----//// -----////
local is_on_ground = false
local pos = plane_obj:get_pos() local pos = plane_obj:get_pos()
pos.y = pos.y + touch_point pos.y = pos.y + touch_point
local node_below = minetest.get_node(pos).name local node_below = minetest.get_node(pos).name
local nodedef = minetest.registered_nodes[node_below] local nodedef = minetest.registered_nodes[node_below]
is_on_ground = not nodedef or nodedef.walkable or false -- unknown nodes are solid local is_on_ground = not nodedef or nodedef.walkable or false -- unknown nodes are solid
if ent.driver_name == name and ent.owner == ent.driver_name then --just the owner can do this if ent.driver_name == name and ent.owner == ent.driver_name then --just the owner can do this
--minetest.chat_send_all(dump(noded)) --minetest.chat_send_all(dump(noded))
if is_on_ground then --or clicker:get_player_control().sneak then if is_on_ground then --or clicker:get_player_control().sneak then
--minetest.chat_send_all(dump("is on ground")) --minetest.chat_send_all(dump("is on ground"))
--remove the passengers first --remove the passengers first
local max_seats = table.getn(ent._seats) local max_seats = table.getn(ent._seats)
for i = max_seats,1,-1 for i = max_seats,1,-1
do do
--minetest.chat_send_all("index: "..i.." - "..dump(ent._passengers[i])) --minetest.chat_send_all("index: "..i.." - "..dump(ent._passengers[i]))
if ent._passengers[i] then if ent._passengers[i] then
local passenger = minetest.get_player_by_name(ent._passengers[i]) local passenger = minetest.get_player_by_name(ent._passengers[i])
@ -409,8 +406,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
if fields.copilot then if fields.copilot then
--look for a free seat first --look for a free seat first
local is_there_a_free_seat = false local is_there_a_free_seat = false
for i = 2,1,-1 for i = 2,1,-1
do do
if ent._passengers[i] == nil then if ent._passengers[i] == nil then
is_there_a_free_seat = true is_there_a_free_seat = true
break break

View file

@ -25,10 +25,10 @@ function airutils.loadFuel(self, player_name)
self._energy = self._energy + fuel self._energy = self._energy + fuel
if self._energy > self._max_fuel then self._energy = self._max_fuel end if self._energy > self._max_fuel then self._energy = self._max_fuel end
local energy_indicator_angle = airutils.get_gauge_angle(self._energy) --local energy_indicator_angle = airutils.get_gauge_angle(self._energy)
--self.fuel_gauge:set_attach(self.object,'',self._gauge_fuel_position,{x=0,y=0,z=energy_indicator_angle}) --self.fuel_gauge:set_attach(self.object,'',self._gauge_fuel_position,{x=0,y=0,z=energy_indicator_angle})
end end
return true return true
end end

View file

@ -1,15 +1,16 @@
--[[
local function get_pointer(pointer_angle, gauge_center_x, gauge_center_y, full_pointer) local function get_pointer(pointer_angle, gauge_center_x, gauge_center_y, full_pointer)
full_pointer = full_pointer or 1 full_pointer = full_pointer or 1
local retval = "" local retval = ""
local ind_pixel = "airutils_ind_box_2.png" local ind_pixel = "airutils_ind_box_2.png"
pointer_img_size = 8 local pointer_img_size = 8
local pointer_rad = math.rad(pointer_angle) local pointer_rad = math.rad(pointer_angle)
local dim = 2*(pointer_img_size/2) local dim = 2*(pointer_img_size/2)
local pos_x = math.sin(pointer_rad) * dim local pos_x = math.sin(pointer_rad) * dim
local pos_y = math.cos(pointer_rad) * dim local pos_y = math.cos(pointer_rad) * dim
retval = retval..(gauge_center_x+pos_x)..","..(gauge_center_y+pos_y).."="..ind_pixel..":" retval = retval..(gauge_center_x+pos_x)..","..(gauge_center_y+pos_y).."="..ind_pixel..":"
dim = 4*(pointer_img_size/2) dim = 4*(pointer_img_size/2)
pos_x = math.sin(pointer_rad) * dim pos_x = math.sin(pointer_rad) * dim
pos_y = math.cos(pointer_rad) * dim pos_y = math.cos(pointer_rad) * dim
@ -33,10 +34,11 @@ local function get_pointer(pointer_angle, gauge_center_x, gauge_center_y, full_p
end end
return retval return retval
end end
]]--
function airutils.plot_altimeter_gauge(self, scale, place_x, place_y) function airutils.plot_altimeter_gauge(self, scale, place_x, place_y)
local bg_width_height = 100 local bg_width_height = 100
local pointer_img = 8 local pointer_img = 8
local gauge_center = (bg_width_height / 2) - (pointer_img/2) local gauge_center = (bg_width_height / 2) - (pointer_img/2)
local gauge_center_x = place_x + gauge_center local gauge_center_x = place_x + gauge_center
local gauge_center_y = place_y + gauge_center local gauge_center_y = place_y + gauge_center
@ -76,7 +78,7 @@ end
function airutils.plot_fuel_gauge(self, scale, place_x, place_y) function airutils.plot_fuel_gauge(self, scale, place_x, place_y)
local bg_width_height = 100 local bg_width_height = 100
local pointer_img = 8 local pointer_img = 8
local gauge_center = (bg_width_height / 2) - (pointer_img/2) local gauge_center = (bg_width_height / 2) - (pointer_img/2)
local gauge_center_x = place_x + gauge_center local gauge_center_x = place_x + gauge_center
local gauge_center_y = place_y + gauge_center local gauge_center_y = place_y + gauge_center
@ -95,7 +97,7 @@ end
function airutils.plot_speed_gauge(self, scale, place_x, place_y) function airutils.plot_speed_gauge(self, scale, place_x, place_y)
local bg_width_height = 100 local bg_width_height = 100
local pointer_img = 8 local pointer_img = 8
local gauge_center = (bg_width_height / 2) - (pointer_img/2) local gauge_center = (bg_width_height / 2) - (pointer_img/2)
local gauge_center_x = place_x + gauge_center local gauge_center_x = place_x + gauge_center
local gauge_center_y = place_y + gauge_center local gauge_center_y = place_y + gauge_center
@ -114,7 +116,7 @@ end
function airutils.plot_power_gauge(self, scale, place_x, place_y) function airutils.plot_power_gauge(self, scale, place_x, place_y)
local bg_width_height = 100 local bg_width_height = 100
local pointer_img = 8 local pointer_img = 8
local gauge_center = (bg_width_height / 2) - (pointer_img/2) local gauge_center = (bg_width_height / 2) - (pointer_img/2)
local gauge_center_x = place_x + gauge_center local gauge_center_x = place_x + gauge_center
local gauge_center_y = place_y + gauge_center local gauge_center_y = place_y + gauge_center

View file

@ -73,7 +73,7 @@ function airutils.update_hud(player, climb, speed, power, fuel)
scale = { x = 0.5, y = 0.5}, scale = { x = 0.5, y = 0.5},
alignment = { x = 1, y = 0 }, alignment = { x = 1, y = 0 },
}) })
ids["clb_pt_1"] = player:hud_add({ ids["clb_pt_1"] = player:hud_add({
hud_elem_type = "image", hud_elem_type = "image",
position = {x = 0, y = 1}, position = {x = 0, y = 1},

View file

@ -17,11 +17,3 @@ dofile(minetest.get_modpath("airutils") .. DIR_DELIM .. "lib_planes" .. DIR_DELI
-- --
-- items -- items
-- --
settings = Settings(minetest.get_worldpath() .. "/settings.conf")
local function fetch_setting(name)
local sname = name
return settings and settings:get(sname) or minetest.settings:get(sname)
end

View file

@ -77,7 +77,7 @@ function airutils.attach(self, player, instructor_mode)
eye_y = -4 eye_y = -4
--airutils.seat_create(self, 1) --airutils.seat_create(self, 1)
--airutils.seat_create(self, 2) --airutils.seat_create(self, 2)
if not self.co_pilot_seat_base then if not self.co_pilot_seat_base then
self.co_pilot_seat_base = self._passengers_base[2] self.co_pilot_seat_base = self._passengers_base[2]
end end
@ -99,7 +99,7 @@ function airutils.attach(self, player, instructor_mode)
if airutils.detect_player_api(player) == 2 then if airutils.detect_player_api(player) == 2 then
eye_y = -4 eye_y = -4
end end
player:set_eye_offset({x = 0, y = eye_y, z = 2}, {x = 0, y = 1, z = -30}) player:set_eye_offset({x = 0, y = eye_y, z = 2}, {x = 0, y = 1, z = -30})
sit_player(player, name) sit_player(player, name)
end end
@ -173,8 +173,8 @@ function airutils.check_passenger_is_attached(self, name)
if self._passenger == name then is_attached = true end if self._passenger == name then is_attached = true end
if is_attached == false then if is_attached == false then
local max_occupants = table.getn(self._seats) local max_occupants = table.getn(self._seats)
for i = max_occupants,1,-1 for i = max_occupants,1,-1
do do
if self._passengers[i] == name then if self._passengers[i] == name then
is_attached = true is_attached = true
break break
@ -272,7 +272,7 @@ function airutils.dettach_pax(self, player, is_flying)
else else
local max_seats = table.getn(self._seats) local max_seats = table.getn(self._seats)
for i = max_seats,1,-1 for i = max_seats,1,-1
do do
if self._passengers[i] == name then if self._passengers[i] == name then
self._passengers[i] = "" self._passengers[i] = ""
break break
@ -365,10 +365,10 @@ function airutils.destroy(self, by_name, by_automation)
self.sound_handle = nil self.sound_handle = nil
end end
--remove the passengers first --remove the passengers first
local max_seats = table.getn(self._seats) local max_seats = table.getn(self._seats)
for i = max_seats,2,-1 for i = max_seats,2,-1
do do
if self._passengers[i] and self._passengers[i] ~= "" then if self._passengers[i] and self._passengers[i] ~= "" then
local passenger = minetest.get_player_by_name(self._passengers[i]) local passenger = minetest.get_player_by_name(self._passengers[i])
if passenger then airutils.dettach_pax(self, passenger) end if passenger then airutils.dettach_pax(self, passenger) end
@ -535,7 +535,6 @@ function airutils.testImpact(self, velocity, position)
}, true) }, true)
self.hp_max = self.hp_max - self._damage_by_wind_speed self.hp_max = self.hp_max - self._damage_by_wind_speed
if self.driver_name then if self.driver_name then
local player_name = self.driver_name
airutils.setText(self, self._vehicle_name) airutils.setText(self, self._vehicle_name)
end end
if self.hp_max < 0 then --if acumulated damage is greater than 50, adieu if self.hp_max < 0 then --if acumulated damage is greater than 50, adieu
@ -580,7 +579,7 @@ function airutils.testImpact(self, velocity, position)
self._power_lever = 0 self._power_lever = 0
self._engine_running = false self._engine_running = false
end end
airutils.setText(self, self._vehicle_name) airutils.setText(self, self._vehicle_name)
if self.driver_name then if self.driver_name then
@ -621,8 +620,8 @@ function airutils.rescueConnectionFailedPassengers(self)
if self._disconnection_check_time > 1 then if self._disconnection_check_time > 1 then
--minetest.chat_send_all(dump(self._passengers)) --minetest.chat_send_all(dump(self._passengers))
self._disconnection_check_time = 0 self._disconnection_check_time = 0
for i = max_seats,1,-1 for i = max_seats,1,-1
do do
if self._passengers[i] and self._passengers[i] ~= "" then if self._passengers[i] and self._passengers[i] ~= "" then
local player = minetest.get_player_by_name(self._passengers[i]) local player = minetest.get_player_by_name(self._passengers[i])
if player then --we have a player! if player then --we have a player!
@ -672,11 +671,11 @@ function airutils.checkattachBug(self)
local base_value = 1.0 local base_value = 1.0
if self._seat_check_interval == nil then self._seat_check_interval = base_value end if self._seat_check_interval == nil then self._seat_check_interval = base_value end
self._seat_check_interval = self._seat_check_interval + self.dtime self._seat_check_interval = self._seat_check_interval + self.dtime
if self._seat_check_interval >= base_value then if self._seat_check_interval >= base_value then
self._seat_check_interval = 0 self._seat_check_interval = 0
local max_seats = table.getn(self._seats) local max_seats = table.getn(self._seats)
for i = max_seats,1,-1 for i = max_seats,1,-1
do do
if self._passengers[i] and self._passengers[i] ~= "" then if self._passengers[i] and self._passengers[i] ~= "" then
local player = minetest.get_player_by_name(self._passengers[i]) local player = minetest.get_player_by_name(self._passengers[i])
@ -734,7 +733,7 @@ function airutils.set_param_paint(self, puncher, itmstck, mode)
mode = mode or 1 mode = mode or 1
local item_name = "" local item_name = ""
if itmstck then item_name = itmstck:get_name() end if itmstck then item_name = itmstck:get_name() end
if item_name == "automobiles_lib:painter" or item_name == "bike:painter" then if item_name == "automobiles_lib:painter" or item_name == "bike:painter" then
self._skin = "" self._skin = ""
--painting with bike painter --painting with bike painter
@ -751,7 +750,7 @@ function airutils.set_param_paint(self, puncher, itmstck, mode)
else else
--painting with dyes --painting with dyes
local split = string.split(item_name, ":") local split = string.split(item_name, ":")
local color, indx, _ local indx, _
if split[1] then _,indx = split[1]:find('dye') end if split[1] then _,indx = split[1]:find('dye') end
if indx then if indx then
self._skin = "" self._skin = ""
@ -784,7 +783,7 @@ end
local function _paint(self, l_textures, colstr, paint_list, mask_associations) local function _paint(self, l_textures, colstr, paint_list, mask_associations)
paint_list = paint_list or self._painting_texture paint_list = paint_list or self._painting_texture
mask_associations = mask_associations or self._mask_painting_associations mask_associations = mask_associations or self._mask_painting_associations
for _, texture in ipairs(l_textures) do for _, texture in ipairs(l_textures) do
for i, texture_name in ipairs(paint_list) do --textures list for i, texture_name in ipairs(paint_list) do --textures list
local indx = texture:find(texture_name) local indx = texture:find(texture_name)
@ -879,7 +878,7 @@ end
function airutils.paint_with_mask(self, colstr, target_texture, mask_texture) function airutils.paint_with_mask(self, colstr, target_texture, mask_texture)
if colstr then if colstr then
self._color = colstr self._color = colstr
self._det_color = mask_colstr self._det_color = mask_colstr -- !!! accessing undefined variable mask_colstr
local l_textures = self.initial_properties.textures local l_textures = self.initial_properties.textures
for _, texture in ipairs(l_textures) do for _, texture in ipairs(l_textures) do
local indx = texture:find(target_texture) local indx = texture:find(target_texture)
@ -904,7 +903,7 @@ function airutils.pid_controller(current_value, setpoint, last_error, d_time, kp
local _error = setpoint - current_value local _error = setpoint - current_value
local derivative = _error - last_error local derivative = _error - last_error
--local output = kpv*erro + (kpv/Tiv)*I + kpv*Tdv*((erro - erro_passado)/delta_t); --local output = kpv*erro + (kpv/Tiv)*I + kpv*Tdv*((erro - erro_passado)/delta_t);
if integrative == nil then integrative = 0 end if integrative == nil then integrative = 0 end -- !!! accessing undefined variable integrative
integrative = integrative + (((_error + last_error)/delta_t)/2); integrative = integrative + (((_error + last_error)/delta_t)/2);
local output = kp*_error + (kp/ti)*integrative + kp * td*((_error - last_error)/delta_t) local output = kp*_error + (kp/ti)*integrative + kp * td*((_error - last_error)/delta_t)
last_error = _error last_error = _error
@ -927,7 +926,6 @@ function airutils.add_smoke_trail(self, smoke_type)
end end
if self._smoke_spawner == nil then if self._smoke_spawner == nil then
local radius = 1
self._smoke_spawner = minetest.add_particlespawner({ self._smoke_spawner = minetest.add_particlespawner({
amount = 3, amount = 3,
time = 0, time = 0,
@ -1017,7 +1015,7 @@ function airutils.add_blast_damage(pos, radius, damage_cal)
local obj_pos = obj:get_pos() local obj_pos = obj:get_pos()
local dist = math.max(1, vector.distance(pos, obj_pos)) local dist = math.max(1, vector.distance(pos, obj_pos))
local damage = (damage_cal / dist) * radius local damage = (damage_cal / dist) * radius
if obj:is_player() then if obj:is_player() then
obj:set_hp(obj:get_hp() - damage) obj:set_hp(obj:get_hp() - damage)
else else
@ -1044,7 +1042,7 @@ function airutils.add_blast_damage(pos, radius, damage_cal)
}, nil) }, nil)
end end
for _, item in pairs(entity_drops) do for _, item in pairs(entity_drops) do
add_drop(drops, item) add_drop(drops, item) -- !!! accessing undefined variable add_drop, drops
end end
end end
@ -1114,7 +1112,7 @@ function airutils.camera_reposition(player, pitch, roll)
--minetest.chat_send_all("2") --minetest.chat_send_all("2")
eye_y = -5 eye_y = -5
end end
local z, y = airutils.get_xz_from_hipotenuse(0, eye_y, pitch, player_properties.eye_height) local z, y = airutils.get_xz_from_hipotenuse(0, eye_y, pitch, player_properties.eye_height)
new_eye_offset.z = z*7 new_eye_offset.z = z*7
new_eye_offset.y = y*1.5 new_eye_offset.y = y*1.5
@ -1129,7 +1127,7 @@ function airutils.seats_create(self)
local pos = self.object:get_pos() local pos = self.object:get_pos()
self._passengers_base = {} self._passengers_base = {}
self._passengers = {} self._passengers = {}
if self._seats then if self._seats then
local max_seats = table.getn(self._seats) local max_seats = table.getn(self._seats)
for i=1, max_seats do for i=1, max_seats do
self._passengers_base[i] = minetest.add_entity(pos,'airutils:seat_base') self._passengers_base[i] = minetest.add_entity(pos,'airutils:seat_base')
@ -1154,7 +1152,7 @@ function airutils.seat_create(self, index)
local pos = self.object:get_pos() local pos = self.object:get_pos()
if not self._passengers_base then if not self._passengers_base then
self._passengers_base = {} self._passengers_base = {}
if self._seats then if self._seats then
local max_seats = table.getn(self._seats) local max_seats = table.getn(self._seats)
for i=1, max_seats do for i=1, max_seats do
self._passengers_base[i] = 0 self._passengers_base[i] = 0
@ -1162,7 +1160,7 @@ function airutils.seat_create(self, index)
end end
end end
if self._passengers_base[index] == 0 then if self._passengers_base[index] == 0 then
if self._seats then if self._seats then
local max_seats = table.getn(self._seats) local max_seats = table.getn(self._seats)
for i=1, max_seats do for i=1, max_seats do
if i == index then if i == index then
@ -1179,8 +1177,7 @@ end
function airutils.seats_update(self) function airutils.seats_update(self)
if self.object then if self.object then
local pos = self.object:get_pos() if self._passengers_base then
if self._passengers_base then
local max_seats = table.getn(self._passengers_base) local max_seats = table.getn(self._passengers_base)
for i=1, max_seats do for i=1, max_seats do
if self._passengers_base[i] then if self._passengers_base[i] then
@ -1324,8 +1321,6 @@ function airutils.destroyed_save_static_data(self)
end end
function airutils.destroyed_on_activate(self, staticdata, dtime_s) function airutils.destroyed_on_activate(self, staticdata, dtime_s)
local pos = self.object:get_pos()
if staticdata ~= "" and staticdata ~= nil then if staticdata ~= "" and staticdata ~= nil then
local data = minetest.deserialize(staticdata) or {} local data = minetest.deserialize(staticdata) or {}
self.owner = data.stored_owner self.owner = data.stored_owner
@ -1354,7 +1349,6 @@ local function check_shared_by_time(self)
end end
function airutils.destroyed_open_inventory(self, clicker) function airutils.destroyed_open_inventory(self, clicker)
local message = ""
if not clicker or not clicker:is_player() then if not clicker or not clicker:is_player() then
return return
end end
@ -1386,8 +1380,7 @@ function airutils.destroyed_on_punch(self, puncher, ttime, toolcaps, dir, damage
local shared_by_time = check_shared_by_time(self) local shared_by_time = check_shared_by_time(self)
local pos = self.object:get_pos() local pos = self.object:get_pos()
local is_admin = false local is_admin = minetest.check_player_privs(puncher, {server=true})
is_admin = minetest.check_player_privs(puncher, {server=true})
if shared_by_time == false then if shared_by_time == false then
if self.owner and self.owner ~= name and self.owner ~= "" then if self.owner and self.owner ~= name and self.owner ~= "" then
if is_admin == false then return end if is_admin == false then return end

View file

@ -45,7 +45,7 @@ function airutils.swap_node(self, pos)
count = count + 1 count = count + 1
target_pos.y = target_pos.y + 1 target_pos.y = target_pos.y + 1
end end
if have_air then if have_air then
minetest.set_node(target_pos, {name='airutils:light'}) minetest.set_node(target_pos, {name='airutils:light'})
airutils.remove_light(self) airutils.remove_light(self)

View file

@ -48,7 +48,7 @@ function airutils.get_stand_pos(thing) -- thing can be luaentity or objectref.
pos = thing:get_pos() pos = thing:get_pos()
if not thing:get_properties() then return false end if not thing:get_properties() then return false end
colbox = thing:get_properties().collisionbox colbox = thing:get_properties().collisionbox
else else
return false return false
end end
return airutils.pos_shift(pos,{y=colbox[2]+0.01}), pos return airutils.pos_shift(pos,{y=colbox[2]+0.01}), pos
@ -78,7 +78,7 @@ function airutils.set_acceleration(thing,vec,limit)
vec.x=airutils.minmax(vec.x,limit) vec.x=airutils.minmax(vec.x,limit)
vec.y=airutils.minmax(vec.y,limit) vec.y=airutils.minmax(vec.y,limit)
vec.z=airutils.minmax(vec.z,limit) vec.z=airutils.minmax(vec.z,limit)
thing:set_acceleration(vec) thing:set_acceleration(vec)
end end
@ -86,7 +86,7 @@ function airutils.actfunc(self, staticdata, dtime_s)
self.logic = self.logic or self.brainfunc self.logic = self.logic or self.brainfunc
self.physics = self.physics or airutils.physics self.physics = self.physics or airutils.physics
self.lqueue = {} self.lqueue = {}
self.hqueue = {} self.hqueue = {}
self.nearby_objects = {} self.nearby_objects = {}
@ -97,29 +97,29 @@ function airutils.actfunc(self, staticdata, dtime_s)
self.water_drag = self.water_drag or 1 self.water_drag = self.water_drag or 1
local sdata = minetest.deserialize(staticdata) local sdata = minetest.deserialize(staticdata)
if sdata then if sdata then
for k,v in pairs(sdata) do for k,v in pairs(sdata) do
self[k] = v self[k] = v
end end
end end
if self.textures==nil then if self.textures==nil then
local prop_tex = self.object:get_properties().textures local prop_tex = self.object:get_properties().textures
if prop_tex then self.textures=prop_tex end if prop_tex then self.textures=prop_tex end
end end
if not self.memory then -- this is the initial activation if not self.memory then -- this is the initial activation
self.memory = {} self.memory = {}
-- texture variation -- texture variation
if #self.textures > 1 then self.texture_no = random(#self.textures) end if #self.textures > 1 then self.texture_no = random(#self.textures) end
end end
if self.timeout and ((self.timeout>0 and dtime_s > self.timeout and next(self.memory)==nil) or if self.timeout and ((self.timeout>0 and dtime_s > self.timeout and next(self.memory)==nil) or
(self.timeout<0 and dtime_s > abs(self.timeout))) then (self.timeout<0 and dtime_s > abs(self.timeout))) then
self.object:remove() self.object:remove()
end end
-- apply texture -- apply texture
if self.textures and self.texture_no then if self.textures and self.texture_no then
local props = {} local props = {}
@ -136,7 +136,7 @@ function airutils.actfunc(self, staticdata, dtime_s)
end end
self.armor_groups.immortal = 1 self.armor_groups.immortal = 1
self.object:set_armor_groups(self.armor_groups) self.object:set_armor_groups(self.armor_groups)
self.buoyancy = self.buoyancy or 0 self.buoyancy = self.buoyancy or 0
self.oxygen = self.oxygen or self.lung_capacity self.oxygen = self.oxygen or self.lung_capacity
self.lastvelocity = {x=0,y=0,z=0} self.lastvelocity = {x=0,y=0,z=0}
@ -147,7 +147,7 @@ function airutils.get_box_height(self)
local colbox = self:get_properties().collisionbox local colbox = self:get_properties().collisionbox
local height = 0.1 local height = 0.1
if colbox then height = colbox[5]-colbox[2] end if colbox then height = colbox[5]-colbox[2] end
return height > 0 and height or 0.1 return height > 0 and height or 0.1
end end
@ -155,11 +155,11 @@ function airutils.stepfunc(self,dtime,colinfo)
self.dtime = min(dtime,0.2) self.dtime = min(dtime,0.2)
self.colinfo = colinfo self.colinfo = colinfo
self.height = airutils.get_box_height(self) self.height = airutils.get_box_height(self)
-- physics comes first -- physics comes first
local vel = self.object:get_velocity() local vel = self.object:get_velocity()
if colinfo then if colinfo then
self.isonground = colinfo.touching_ground self.isonground = colinfo.touching_ground
else else
if self.lastvelocity.y==0 and vel.y==0 then if self.lastvelocity.y==0 and vel.y==0 then
@ -168,15 +168,15 @@ function airutils.stepfunc(self,dtime,colinfo)
self.isonground = false self.isonground = false
end end
end end
self:physics() self:physics()
if self.logic then if self.logic then
if self.view_range then self:sensefunc() end if self.view_range then self:sensefunc() end
self:logic() self:logic()
execute_queues(self) execute_queues(self) -- !!! accessing undefined variable execute_queues
end end
self.lastvelocity = self.object:get_velocity() self.lastvelocity = self.object:get_velocity()
self.time_total=self.time_total+self.dtime self.time_total=self.time_total+self.dtime
end end

View file

@ -3,8 +3,6 @@ local S = airutils.S
airutils.pilot_textures = {"pilot_clothes1.png","pilot_clothes2.png","pilot_clothes3.png","pilot_clothes4.png", airutils.pilot_textures = {"pilot_clothes1.png","pilot_clothes2.png","pilot_clothes3.png","pilot_clothes4.png",
"pilot_novaskin_girl.png","pilot_novaskin_girl_steampunk.png","pilot_novaskin_girl_2.png","pilot_novaskin_girl_steampunk_2.png"} "pilot_novaskin_girl.png","pilot_novaskin_girl_steampunk.png","pilot_novaskin_girl_2.png","pilot_novaskin_girl_steampunk_2.png"}
local skinsdb_mod_path = minetest.get_modpath("skinsdb") local skinsdb_mod_path = minetest.get_modpath("skinsdb")
local backup = "airutils:bcp_last_skin"
local curr_skin = "airutils:skin"
minetest.register_chatcommand("au_uniform", { minetest.register_chatcommand("au_uniform", {
func = function(name, param) func = function(name, param)
@ -99,7 +97,7 @@ function airutils.set_player_skin(player, skin)
else else
--remove texture --remove texture
local old_texture = player_meta:get_string("backup") local old_texture = player_meta:get_string("backup")
if set_skin then if set_skin then -- !!! accessing undefined variable set_skin
if player:get_attribute("set_skin:player_skin") ~= nil and player:get_attribute("set_skin:player_skin") ~= "" then if player:get_attribute("set_skin:player_skin") ~= nil and player:get_attribute("set_skin:player_skin") ~= "" then
old_texture = player:get_attribute("set_skin:player_skin") old_texture = player:get_attribute("set_skin:player_skin")
end end

View file

@ -58,20 +58,20 @@ local function clamp_characters(text, max_lenght)
local c = "" local c = ""
for i = 1, #new_string, 1 do for i = 1, #new_string, 1 do
c = string.sub(new_string,i,i) c = string.sub(new_string,i,i)
if not (c == control_char) then if c ~= control_char then
count = count + 1 count = count + 1
end end
curr_index = i curr_index = i
if count == max_lenght then break end if count == max_lenght then break end
end end
local cutstring = string.sub(new_string,1,curr_index) local cutstring = string.sub(new_string,1,curr_index)
--now reconstruct the string --now reconstruct the string
local outputstring = "" local outputstring = ""
local control_order_curr_intex = 0 local control_order_curr_intex = 0
for i = 1, #cutstring, 1 do for i = 1, #cutstring, 1 do
c = string.sub(cutstring,i,i) c = string.sub(cutstring,i,i)
if not (c == control_char) then if c ~= control_char then
outputstring = outputstring .. (c or "") outputstring = outputstring .. (c or "")
else else
control_order_curr_intex = control_order_curr_intex + 1 control_order_curr_intex = control_order_curr_intex + 1
@ -92,10 +92,10 @@ local function file_exists(name, return_handle, mode)
if (return_handle) then if (return_handle) then
return f return f
end end
io.close(f) io.close(f)
return true return true
else else
return false return false
end end
end end
@ -217,7 +217,7 @@ local function make_text_texture(text, default_color, line_width, line_height, c
table.insert(texture, (":%d,%d=%s"):format(xpos + ch.off, ypos, ch.tex)) table.insert(texture, (":%d,%d=%s"):format(xpos + ch.off, ypos, ch.tex))
end end
table.insert( table.insert(
texture, texture,
(":%d,%d="):format(xpos + word.w, ypos) .. char_tex(font_name, " ") (":%d,%d="):format(xpos + word.w, ypos) .. char_tex(font_name, " ")
) )
xpos = xpos + word.w + cwidth_tab[" "] xpos = xpos + word.w + cwidth_tab[" "]

View file

@ -48,7 +48,7 @@ local function getTexturesFromItem(itemDef)
end end
--function to remove duplicates and invalid for textlist --function to remove duplicates and invalid for textlist
function filter_texture_names(list_to_test) local function filter_texture_names(list_to_test)
local hash = {} local hash = {}
local result = {} local result = {}
for _,v in ipairs(list_to_test) do for _,v in ipairs(list_to_test) do
@ -63,7 +63,7 @@ function filter_texture_names(list_to_test)
end end
-- Function to list all loaded textures -- Function to list all loaded textures
function listLoadedTextures() local function listLoadedTextures()
local loadedTextures = {} local loadedTextures = {}
--nodes --nodes

View file

@ -6,7 +6,7 @@ local function calculateVelocity(magnitude, angle)
y = 0, -- Se a velocidade não tem componente z y = 0, -- Se a velocidade não tem componente z
z = magnitude * math.sin(angle), z = magnitude * math.sin(angle),
} }
return velocity return velocity
end end
@ -30,14 +30,14 @@ end
function airutils.add_splash(pos, yaw, x_pos) function airutils.add_splash(pos, yaw, x_pos)
local direction = yaw local direction = yaw
local spl_pos = vector.new(pos) local spl_pos = vector.new(pos)
--water_particle(spl_pos, {x=0,y=0,z=0}) --water_particle(spl_pos, {x=0,y=0,z=0})
--right --right
local move = x_pos/10 local move = x_pos/10
spl_pos.x = spl_pos.x + move * math.cos(direction) spl_pos.x = spl_pos.x + move * math.cos(direction)
spl_pos.z = spl_pos.z + move * math.sin(direction) spl_pos.z = spl_pos.z + move * math.sin(direction)
local velocity = calculateVelocity(0.2, yaw) local velocity = calculateVelocity(0.2, yaw)
water_particle(spl_pos, velocity) water_particle(spl_pos, velocity)
@ -46,7 +46,7 @@ function airutils.add_splash(pos, yaw, x_pos)
spl_pos = vector.new(pos) spl_pos = vector.new(pos)
spl_pos.x = spl_pos.x + move * math.cos(direction) spl_pos.x = spl_pos.x + move * math.cos(direction)
spl_pos.z = spl_pos.z + move * math.sin(direction) spl_pos.z = spl_pos.z + move * math.sin(direction)
velocity = calculateVelocity(0.2, yaw - math.rad(180)) velocity = calculateVelocity(0.2, yaw - math.rad(180))
water_particle(spl_pos, velocity) water_particle(spl_pos, velocity)
end end