2024-02-16 18:23:56 -03:00

248 lines
7.9 KiB
Lua
Executable File

ap_airship={}
ap_airship.gravity = tonumber(minetest.settings:get("movement_gravity")) or 9.8
ap_airship.trunk_slots = 50
ap_airship.fuel = {['biofuel:biofuel'] = {amount=1},['biofuel:bottle_fuel'] = {amount=1},
['biofuel:phial_fuel'] = {amount=0.25}, ['biofuel:fuel_can'] = {amount=10}}
ap_airship.ideal_step = 0.02
ap_airship.rudder_limit = 30
ap_airship.iddle_rotation = 50
ap_airship.max_engine_acc = 1.5
ap_airship.max_speed = 8
ap_airship.max_pos = 12
ap_airship.max_seats = 21
ap_airship.pilot_base_pos = {x=0.0,y=-29,z=170}
ap_airship.passenger_pos = {
[1] = {x=0.0,y=0,z=60},
[2] = {x=-32,y=0,z=20},
[3] = {x=32,y=0,z=20},
[4] = {x=-32,y=0,z=80},
[5] = {x=32,y=0,z=80},
[6] = {x=0.0,y=0,z=50},
[7] = {x=-32,y=0,z=30},
[8] = {x=32,y=0,z=30},
[9] = {x=-32,y=0,z=70},
[10] = {x=32,y=0,z=70},
[11] = {x=0.0,y=0,z=40},
[12] = {x=0.0,y=0,z=30},
}
ap_airship.canvas_texture = "wool_white.png^[colorize:#f4e7c1:128"
ap_airship.grey_texture = "ap_airship_base.png^[colorize:#535c5c:128"
ap_airship.white_texture = "ap_airship_base.png^[colorize:#a3acac:128"
ap_airship.metal_texture = "ap_airship_metal.png"
ap_airship.black_texture = "ap_airship_base.png^[colorize:#030303:200"
ap_airship.rotor_texture = "ap_airship_helice.png"
ap_airship.textures = {
ap_airship.grey_texture, --"ap_airship_painting.png", --balao
ap_airship.metal_texture, --ponteira nariz
"airutils_name_canvas.png",
"ap_airship_brown.png", --mobilia
ap_airship.metal_texture, --mobilia
ap_airship.black_texture, -- corpo da bussola
ap_airship.metal_texture, -- indicador bussola
ap_airship.grey_texture, --"ap_airship_painting.png", --empenagem
ap_airship.metal_texture, --timao
ap_airship.black_texture, --timao
"ap_airship_compass.png", --bussola
"ap_airship_sup_eng.png", --suporte motores
"ap_airship_helice.png", --helice
ap_airship.black_texture, --eixo helice
ap_airship.grey_texture, --interior cabine
"default_ladder_steel.png", --escada
ap_airship.white_texture, --interior cabine 2
"ap_airship_walls.png",
"ap_airship_glass_2.png", --vidros do deck superior
ap_airship.grey_texture, -- "ap_airship_painting.png", --motor
ap_airship.grey_texture, --"ap_airship_painting.png", --cabine
"ap_airship_glass.png", --janelas
ap_airship.black_texture, --piso
"ap_airship_alpha_logo.png", --logo
ap_airship.metal_texture,
"wool_red.png",
}
ap_airship.colors ={
black='black',
blue='blue',
brown='brown',
cyan='cyan',
dark_green='dark_green',
dark_grey='dark_grey',
green='green',
grey='grey',
magenta='magenta',
orange='orange',
pink='pink',
red='red',
violet='violet',
white='white',
yellow='yellow',
}
dofile(minetest.get_modpath("ap_airship") .. DIR_DELIM .. "utilities.lua")
dofile(minetest.get_modpath("ap_airship") .. DIR_DELIM .. "control.lua")
dofile(minetest.get_modpath("ap_airship") .. DIR_DELIM .. "fuel_management.lua")
dofile(minetest.get_modpath("ap_airship") .. DIR_DELIM .. "engine_management.lua")
dofile(minetest.get_modpath("ap_airship") .. DIR_DELIM .. "custom_physics.lua")
dofile(minetest.get_modpath("ap_airship") .. DIR_DELIM .. "hud.lua")
dofile(minetest.get_modpath("ap_airship") .. DIR_DELIM .. "entities.lua")
dofile(minetest.get_modpath("ap_airship") .. DIR_DELIM .. "forms.lua")
dofile(minetest.get_modpath("ap_airship") .. DIR_DELIM .. "manual.lua")
dofile(minetest.get_modpath("ap_airship") .. DIR_DELIM .. "walk_map.lua")
--
-- helpers and co.
--
function ap_airship.get_hipotenuse_value(point1, point2)
return math.sqrt((point1.x - point2.x) ^ 2 + (point1.y - point2.y) ^ 2 + (point1.z - point2.z) ^ 2)
end
function ap_airship.dot(v1,v2)
return v1.x*v2.x+v1.y*v2.y+v1.z*v2.z
end
function ap_airship.sign(n)
return n>=0 and 1 or -1
end
function ap_airship.minmax(v,m)
return math.min(math.abs(v),m)*ap_airship.sign(v)
end
minetest.register_privilege("ap_airship_anchor", {
description = "The player can anchor the airship anywhere in any speed",
give_to_singleplayer = false
})
-----------
-- items
-----------
-- airship
minetest.register_craftitem("ap_airship:airship", {
description = "Airship",
inventory_image = "ap_airship_icon.png",
liquids_pointable = true,
on_place = function(itemstack, placer, pointed_thing)
if pointed_thing.type ~= "node" then
return
end
local pointed_pos = pointed_thing.under
--local node_below = minetest.get_node(pointed_pos).name
--local nodedef = minetest.registered_nodes[node_below]
pointed_pos.y=pointed_pos.y+4.6
local airship = minetest.add_entity(pointed_pos, "ap_airship:airship")
if airship and placer then
local ent = airship:get_luaentity()
ent._passengers = ap_airship.copy_vector({[1]=nil, [2]=nil, [3]=nil, [4]=nil, [5]=nil, [6]=nil, [7]=nil, [8]=nil, [9]=nil, [10]=nil, [11]=nil, [12]=nil})
--minetest.chat_send_all('passengers: '.. dump(ent._passengers))
local owner = placer:get_player_name()
ent.owner = owner
airship:set_yaw(placer:get_look_horizontal())
itemstack:take_item()
airutils.create_inventory(ent, ap_airship.trunk_slots, owner)
local properties = ent.object:get_properties()
properties.infotext = owner .. " nice airship"
airship:set_properties(properties)
--ap_airship.attach_pax(ent, placer)
end
return itemstack
end,
})
--
-- crafting
--
if not minetest.settings:get_bool('ap_airship.disable_craftitems') then
--[[minetest.register_craft({
output = "ap_airship:cylinder_part",
recipe = {
{"default:stick", "wool:white", "default:stick"},
{"wool:white", "group:wood", "wool:white"},
{"default:stick", "wool:white", "default:stick"},
}
})
minetest.register_craft({
output = "ap_airship:cylinder",
recipe = {
{"ap_airship:cylinder_part", "ap_airship:cylinder_part", "ap_airship:cylinder_part"},
}
})
minetest.register_craft({
output = "ap_airship:rotor",
recipe = {
{"wool:white", "default:stick", ""},
{"wool:white", "default:stick", "default:steelblock"},
{"wool:white", "default:stick", ""},
}
})
minetest.register_craft({
output = "ap_airship:boiler",
recipe = {
{"default:steel_ingot","default:steel_ingot"},
{"default:steelblock","default:steel_ingot",},
{"default:steelblock","default:steel_ingot"},
}
})
minetest.register_craft({
output = "ap_airship:boat",
recipe = {
{"group:wood", "group:wood", "ap_airship:rotor"},
{"group:wood", "ap_airship:boiler", "group:wood"},
{"group:wood", "group:wood", "ap_airship:rotor"},
}
})
minetest.register_craft({
output = "ap_airship:airship",
recipe = {
{"ap_airship:cylinder",},
{"ap_airship:boat",},
}
})]]--
-- cylinder section
--[[minetest.register_craftitem("ap_airship:cylinder_part",{
description = "ap_airship cylinder section",
inventory_image = "ap_airship_cylinder_part.png",
})
-- cylinder
minetest.register_craftitem("ap_airship:cylinder",{
description = "ap_airship cylinder",
inventory_image = "ap_airship_cylinder.png",
})
-- boiler
minetest.register_craftitem("ap_airship:boiler",{
description = "ap_airship boiler",
inventory_image = "ap_airship_boiler.png",
})
-- boiler
minetest.register_craftitem("ap_airship:rotor",{
description = "ap_airship rotor",
inventory_image = "ap_airship_rotor.png",
})
-- fuselage
minetest.register_craftitem("ap_airship:boat",{
description = "ap_airship fuselage",
inventory_image = "ap_airship_boat.png",
})]]--
end