237 lines
8.2 KiB
Lua
Executable File
237 lines
8.2 KiB
Lua
Executable File
|
|
|
|
trike={}
|
|
|
|
local TRIKE_GAUGE_FUEL_POSITION = {x=1.5,y=6.2,z=15.2}
|
|
local TRIKE_GAUGE_POWER_POSITION = {x=1.5,y=7.7,z=15.2}
|
|
local TRIKE_GAUGE_CLIMBER_POSITION = {x=-1.2,y=7.55,z=15.2}
|
|
|
|
trike.S = nil
|
|
|
|
if(minetest.get_translator ~= nil) then
|
|
trike.S = minetest.get_translator(minetest.get_current_modname())
|
|
|
|
else
|
|
trike.S = function ( s ) return s end
|
|
|
|
end
|
|
|
|
local S = trike.S
|
|
|
|
function trike.register_parts_method(self)
|
|
local pos = self.object:get_pos()
|
|
|
|
local wheels=minetest.add_entity(pos,'trike:wheels')
|
|
wheels:set_attach(self.object,'',{x=0,y=0,z=0},{x=0,y=0,z=0})
|
|
self.wheels = wheels
|
|
|
|
local fuel_gauge=minetest.add_entity(pos,'trike:pointer')
|
|
local fuel_percentage = (self._energy*100)/self._max_fuel
|
|
local fuel_angle = -(fuel_percentage*180)/100
|
|
fuel_gauge:set_attach(self.object,'',TRIKE_GAUGE_FUEL_POSITION,{x=0,y=0,z=fuel_angle+90})
|
|
self.fuel_pointer = fuel_gauge
|
|
|
|
local power_gauge=minetest.add_entity(pos,'trike:pointer')
|
|
local power_indicator_angle = airutils.get_gauge_angle(self._power_lever/10)
|
|
power_gauge:set_attach(self.object,'',TRIKE_GAUGE_POWER_POSITION,{x=0,y=0,z=power_indicator_angle})
|
|
self.power_pointer = power_gauge
|
|
|
|
local climb_gauge=minetest.add_entity(pos,'trike:pointer')
|
|
local climb_angle = airutils.get_gauge_angle(0)
|
|
climb_gauge:set_attach(self.object,'',TRIKE_GAUGE_CLIMBER_POSITION,{x=0,y=0,z=climb_angle})
|
|
self.climb_pointer = climb_gauge
|
|
end
|
|
|
|
function trike.destroy_parts_method(self)
|
|
if self.wheels then self.wheels:remove() end
|
|
if self.fuel_pointer then self.fuel_pointer:remove() end
|
|
if self.power_pointer then self.power_pointer:remove() end
|
|
if self.climb_pointer then self.climb_pointer:remove() end
|
|
|
|
local pos = self.object:get_pos()
|
|
|
|
pos.y=pos.y+2
|
|
minetest.add_item({x=pos.x+math.random()-0.5,y=pos.y,z=pos.z+math.random()-0.5},'trike:wing')
|
|
|
|
for i=1,6 do
|
|
minetest.add_item({x=pos.x+math.random()-0.5,y=pos.y,z=pos.z+math.random()-0.5},'default:mese_crystal')
|
|
minetest.add_item({x=pos.x+math.random()-0.5,y=pos.y,z=pos.z+math.random()-0.5},'default:diamond')
|
|
end
|
|
|
|
for i=1,3 do
|
|
minetest.add_item({x=pos.x+math.random()-0.5,y=pos.y,z=pos.z+math.random()-0.5},'default:steel_ingot')
|
|
end
|
|
|
|
end
|
|
|
|
function trike.step_additional_function(self)
|
|
self.object:set_bone_position("wing", {x=0,y=29,z=0}, {x=-self._elevator_angle/2.5,y=0,z=(self._rudder_angle/2.5)})
|
|
if (self.driver_name==nil) and (self.co_pilot==nil) then --pilot or copilot
|
|
return
|
|
end
|
|
local pos = self.object:get_pos()
|
|
|
|
local fuel_percentage = (self._energy*100)/self._max_fuel
|
|
local fuel_angle = -(fuel_percentage*180)/100
|
|
self.fuel_pointer:set_attach(self.object,'',TRIKE_GAUGE_FUEL_POSITION,{x=0,y=0,z=fuel_angle+90})
|
|
|
|
local power_indicator_angle = airutils.get_gauge_angle(self._power_lever/10)
|
|
self.power_pointer:set_attach(self.object,'',TRIKE_GAUGE_POWER_POSITION,{x=0,y=0,z=power_indicator_angle})
|
|
|
|
local climb_angle = airutils.get_gauge_angle(self._climb_rate)
|
|
self.climb_pointer:set_attach(self.object,'',TRIKE_GAUGE_CLIMBER_POSITION,{x=0,y=0,z=climb_angle})
|
|
end
|
|
|
|
trike.plane_properties = {
|
|
initial_properties = {
|
|
physical = true,
|
|
collide_with_objects = true,
|
|
collisionbox = {-1.2, 0.0, -1.2, 1.2, 3, 1.2}, --{-1,0,-1, 1,0.3,1},
|
|
selectionbox = {-2, 0, -2, 2, 1, 2},
|
|
visual = "mesh",
|
|
backface_culling = false,
|
|
mesh = "trike_body.b3d",
|
|
stepheight = 0.5,
|
|
textures = {
|
|
"trike_black.png", --bancos
|
|
"airutils_metal.png",
|
|
"airutils_metal.png",
|
|
"airutils_metal.png",
|
|
"airutils_metal.png",
|
|
"airutils_metal.png",
|
|
"trike_painting.png", --pintura
|
|
"trike_grey.png", --motor
|
|
"airutils_metal.png", --trem nariz
|
|
"trike_white.png", --tanque
|
|
"trike_black.png", --tampa do tanque
|
|
"trike_black.png", --carburador
|
|
"trike_black.png", --escape
|
|
"trike_grey.png", --interior
|
|
"trike_metal.png", --estrutura asa
|
|
"trike_black.png", -- cabos
|
|
"trike_wing.png", --bordo de fuga
|
|
"trike_painting.png", --bordo de ataque
|
|
"trike_panel.png", --painel
|
|
"trike_rotor.png", --helice
|
|
"trike_black.png", --cubo helice
|
|
"airutils_red.png",
|
|
"airutils_green.png",
|
|
"airutils_blue.png",
|
|
"airutils_metal.png",
|
|
},
|
|
},
|
|
textures = {},
|
|
_anim_frames = 11,
|
|
driver_name = nil,
|
|
sound_handle = nil,
|
|
owner = "",
|
|
static_save = true,
|
|
infotext = "",
|
|
hp_max = 50,
|
|
shaded = true,
|
|
show_on_minimap = true,
|
|
springiness = 0.1,
|
|
buoyancy = 1.02,
|
|
physics = airutils.physics,
|
|
_vehicle_name = "trike",
|
|
_use_camera_relocation = false,
|
|
_seats = {{x=0,y=7,z=8},{x=0,y=9,z=1.6},},
|
|
_seats_rot = {0,0}, --necessary when using reversed seats
|
|
_have_copilot = false, --wil use the second position of the _seats list
|
|
_max_plane_hp = 50,
|
|
_enable_fire_explosion = false,
|
|
_longit_drag_factor = 0.13*0.13,
|
|
_later_drag_factor = 2.0,
|
|
_wing_angle_of_attack = 1.5,
|
|
_wing_span = 12, --meters
|
|
_min_speed = 3,
|
|
_max_speed = 7.5,
|
|
_max_fuel = 10,
|
|
_fuel_consumption_divisor = 1200000,
|
|
_speed_not_exceed = 14,
|
|
_damage_by_wind_speed = 4,
|
|
_hard_damage = true,
|
|
_min_attack_angle = 0.2,
|
|
_max_attack_angle = 90,
|
|
_elevator_auto_estabilize = 100,
|
|
_tail_lift_min_speed = 3,
|
|
_tail_lift_max_speed = 5,
|
|
_max_engine_acc = 7.5,
|
|
_tail_angle = 0, --degrees
|
|
_lift = 18,
|
|
_trunk_slots = 2, --the trunk slots
|
|
_rudder_limit = 30.0,
|
|
_elevator_limit = 40.0,
|
|
_elevator_response_attenuation = 10,
|
|
_pitch_intensity = 0.6,
|
|
_yaw_intensity = 40,
|
|
_yaw_turn_rate = 12,
|
|
_elevator_pos = {x=0, y=0, z=0},
|
|
_rudder_pos = {x=0,y=0,z=0},
|
|
_aileron_r_pos = {x=0,y=0,z=0},
|
|
_aileron_l_pos = {x=0,y=0,z=0},
|
|
_color = "#0063b0",
|
|
_color_2 = "#0063b0",
|
|
_rudder_angle = 0,
|
|
_acceleration = 0,
|
|
_engine_running = false,
|
|
_angle_of_attack = 0,
|
|
_elevator_angle = 0,
|
|
_power_lever = 0,
|
|
_last_applied_power = 0,
|
|
_energy = 1.0,
|
|
_last_vel = {x=0,y=0,z=0},
|
|
_longit_speed = 0,
|
|
_show_hud = true,
|
|
_instruction_mode = false, --flag to intruction mode
|
|
_command_is_given = false, --flag to mark the "owner" of the commands now
|
|
_autopilot = false,
|
|
_auto_pilot_altitude = 0,
|
|
_last_accell = {x=0,y=0,z=0},
|
|
_last_time_command = 1,
|
|
_inv = nil,
|
|
_inv_id = "",
|
|
_collision_sound = "airutils_collision", --the col sound
|
|
_engine_sound = "trike_engine",
|
|
_painting_texture = {"trike_painting.png",}, --the texture to paint
|
|
_painting_texture_2 = {"airutils_painting_2.png",}, --the texture to paint
|
|
_mask_painting_associations = {},
|
|
_register_parts_method = trike.register_parts_method, --the method to register plane parts
|
|
_destroy_parts_method = trike.destroy_parts_method,
|
|
_plane_y_offset_for_bullet = 1,
|
|
_custom_step_additional_function = trike.step_additional_function,
|
|
_inverted_pitch_reaction = true,
|
|
|
|
get_staticdata = airutils.get_staticdata,
|
|
on_deactivate = airutils.on_deactivate,
|
|
on_activate = airutils.on_activate,
|
|
logic = airutils.logic,
|
|
on_step = airutils.on_step,
|
|
on_punch = airutils.on_punch,
|
|
on_rightclick = airutils.on_rightclick,
|
|
}
|
|
|
|
dofile(minetest.get_modpath("trike") .. DIR_DELIM .. "crafts.lua")
|
|
dofile(minetest.get_modpath("trike") .. DIR_DELIM .. "entities.lua")
|
|
|
|
--
|
|
-- items
|
|
--
|
|
|
|
settings = Settings(minetest.get_worldpath() .. "/trike_settings.conf")
|
|
local function fetch_setting(name)
|
|
local sname = name
|
|
return settings and settings:get(sname) or minetest.settings:get(sname)
|
|
end
|
|
|
|
local old_entities = {"trike:seat_base","trike:engine","trike:front_wheel"}
|
|
for _,entity_name in ipairs(old_entities) do
|
|
minetest.register_entity(":"..entity_name, {
|
|
on_activate = function(self, staticdata)
|
|
self.object:remove()
|
|
end,
|
|
})
|
|
end
|
|
|
|
|