Tiny optimisations and luacheck fixesc

master^2
ROllerozxa 2022-08-29 22:32:48 +02:00
parent 49a7451781
commit 13a0a513d2
2 changed files with 103 additions and 116 deletions

211
api.lua
View File

@ -123,7 +123,7 @@ function vehicles.object_drive(entity, dtime, def)
local jump_speed = def.jump_speed or 5
local simple_vehicle = def.simple_vehicle or false
local is_watercraft = def.is_watercraft or false
local swims = def.swims or false
--local swims = def.swims or false
local driving_sound = def.driving_sound or nil
local sound_duration = def.sound_duration or 5
local extra_yaw = def.extra_yaw or 0
@ -149,7 +149,6 @@ function vehicles.object_drive(entity, dtime, def)
local vec_stop = {x=velo.x*decell,y=velo.y+1*-2,z=velo.z*decell}
local pos = entity.object:get_pos()
local node = minetest.get_node(pos).name
local node_under = minetest.get_node({x=pos.x, y=pos.y+2, z=pos.z})
local accell = 1
--lava explode
@ -168,8 +167,11 @@ function vehicles.object_drive(entity, dtime, def)
return cache.water[node]
end
entity.on_water = is_water(node)
entity.in_water = is_water(minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name)
or is_water(node_under.name)
local function in_water()
return is_water(minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name)
or is_water(minetest.get_node({x=pos.x, y=pos.y+2, z=pos.z}).name)
end
local function is_watercraft_and_in_water()
entity.object:set_velocity({x=velo.x*0.9, y=math.min(2, velo.y+0.5), z=velo.z*0.9})
@ -183,17 +185,17 @@ function vehicles.object_drive(entity, dtime, def)
if not entity.driver then
--apply water effects
if is_watercraft and entity.in_water then
if is_watercraft and in_water() then
is_watercraft_and_in_water()
elseif is_watercraft and not entity.on_water then
is_watercraft_and_not_on_water()
elseif (entity.on_water or entity.in_water) and not is_watercraft then
elseif entity.on_water and not is_watercraft then
not_watercraft_and_on_or_in_water()
else
--stop
entity.object:set_velocity(vec_stop)
--animation
if moving_anim ~= nil and entity.moving and not hovering then
if moving_anim ~= nil and entity.moving then
entity.object:set_animation(stand_anim, 20, 0)
entity.moving = false
end
@ -202,9 +204,7 @@ function vehicles.object_drive(entity, dtime, def)
--variables
local ctrl = entity.driver:get_player_control()
local dir = entity.driver:get_look_dir()
local vec_backward = {x=-dir.x*speed/4,y=velo.y+1*-2,z=-dir.z*speed/4}
local yaw = entity.driver:get_look_horizontal()
local creative_mode = creative and creative.is_enabled_for and creative.is_enabled_for(entity.driver:get_player_name())
--dummy variables
local vec_rise = {}
@ -242,7 +242,7 @@ function vehicles.object_drive(entity, dtime, def)
end
--death_node
if death_node ~= nil and node == death_node then
if death_node and node == death_node then
if entity.driver then
vehicles.object_detach(entity, entity.driver, {x=1, y=0, z=1})
end
@ -252,9 +252,8 @@ function vehicles.object_drive(entity, dtime, def)
end
--place node
if place_node ~= nil and node == "air" or
place_node ~= nil and node == "default:snow" or
place_node ~= nil and minetest.get_item_group(node, "flora") ~= 0 then
if place_node and (node == "air" or node == "default:snow"
or minetest.get_item_group(node, "flora")) ~= 0 then
if place_trigger == nil and math.random(1, place_chance) == 1 then
minetest.set_node(pos, {name=place_node})
end
@ -265,7 +264,7 @@ function vehicles.object_drive(entity, dtime, def)
end
--destroy node
if destroy_node ~= nil and node == destroy_node then
if destroy_node and node == destroy_node then
minetest.dig_node(pos)
local item = minetest.get_node_drops(destroy_node)
if item[1] ~= nil then
@ -276,38 +275,35 @@ function vehicles.object_drive(entity, dtime, def)
end
end
local turning_factor = 2
local turning_factor
--brakes
local braking = 0
local timer2 = 0
if ctrl.jump and brakes then
braking = 1
timer2 = timer2 + dtime*1
local velo3 = nil
if velo3 == nil then
velo3 = velo
end
local effect_pos = {x=pos.x-dir.x*2, y=pos.y, z=pos.z-dir.z*2}
minetest.add_particlespawner(
4, --amount
0.5, --time
{x=effect_pos.x, y=effect_pos.y, z=effect_pos.z}, --minpos
{x=effect_pos.x, y=effect_pos.y, z=effect_pos.z}, --maxpos
{x=0, y=0, z=0}, --minvel
{x=-velo3.x, y=0.4, z=-velo3.z}, --maxvel
{x=-0,y=-0,z=-0}, --minacc
{x=0,y=0,z=0}, --maxacc
0.5, --minexptime
1, --maxexptime
10, --minsize
15, --maxsize
false, --collisiondetection
braking_effect --texture
)
minetest.add_particlespawner({
amount = 4,
time = 0.5,
minpos = {x=effect_pos.x, y=effect_pos.y, z=effect_pos.z},
maxpos = {x=effect_pos.x, y=effect_pos.y, z=effect_pos.z},
minvel = {x=0, y=0, z=0},
maxvel = {x=-velo3.x, y=0.4, z=-velo3.z},
minacc = {x=-0,y=-0,z=-0},
maxacc = {x=0,y=0,z=0},
minexptime = 0.5,
maxexptime = 1,
minsize = 10,
maxsize = 15,
collisiondetection = false,
texture = braking_effect
})
turning_factor = handling.initial
else
timer2 = 0
turning_factor = handling.braking
end
@ -333,11 +329,11 @@ function vehicles.object_drive(entity, dtime, def)
end
--apply water effects
if is_watercraft and entity.in_water then
if is_watercraft and in_water() then
is_watercraft_and_in_water()
elseif is_watercraft and not entity.on_water then
is_watercraft_and_not_on_water()
elseif (entity.on_water or entity.in_water) and not is_watercraft then
elseif entity.on_water and not is_watercraft then
not_watercraft_and_on_or_in_water()
--brakes
@ -348,22 +344,23 @@ function vehicles.object_drive(entity, dtime, def)
end
local effect_pos = {x=pos.x-dir.x*2, y=pos.y, z=pos.z-dir.z*2}
entity.object:set_velocity({x=velo2.x*(0.95), y=velo.y, z=velo2.z*(0.95)})
minetest.add_particlespawner(
4, --amount
0.5, --time
{x=effect_pos.x, y=effect_pos.y, z=effect_pos.z}, --minpos
{x=effect_pos.x, y=effect_pos.y, z=effect_pos.z}, --maxpos
{x=0, y=0.1, z=0}, --minvel
{x=-velo2.x, y=0.4, z=-velo2.z}, --maxvel
{x=-0,y=-0,z=-0}, --minacc
{x=0,y=0,z=0}, --maxacc
0.5, --minexptime
1, --maxexptime
10, --minsize
15, --maxsize
false, --collisiondetection
braking_effect --texture
)
minetest.add_particlespawner({
amount = 4,
time = 0.5,
minpos = {x=effect_pos.x, y=effect_pos.y, z=effect_pos.z},
maxpos = {x=effect_pos.x, y=effect_pos.y, z=effect_pos.z},
minvel = {x=0, y=0.1, z=0},
maxvel = {x=-velo2.x, y=0.4, z=-velo2.z},
minacc = {x=-0,y=-0,z=-0},
maxacc = {x=0,y=0,z=0},
minexptime = 0.5,
maxexptime = 1,
minsize = 10,
maxsize = 15,
collisiondetection = false,
texture = braking_effect
})
if vtimer >= 0.5 then
vtimer = vtimer-vtimer/10
end
@ -376,29 +373,29 @@ function vehicles.object_drive(entity, dtime, def)
z=dir.z*(speed*0.2)*math.log(vtimer+0.5)+8*dir.z})
if boost_effect ~= nil then
local effect_pos = {x=pos.x-dir.x*2, y=pos.y, z=pos.z-dir.z*2}
minetest.add_particlespawner(
10, --amount
0.25, --time
{x=effect_pos.x, y=effect_pos.y+0.2, z=effect_pos.z}, --minpos
{x=effect_pos.x, y=effect_pos.y+0.2, z=effect_pos.z}, --maxpos
{x=-velo.x, y=-velo.y, z=-velo.z}, --minvel
{x=-velo.x, y=-velo.y, z=-velo.z}, --maxvel
{x=-0,y=-0,z=-0}, --minacc
{x=0,y=1,z=0}, --maxacc
0.02, --minexptime
0.02, --maxexptime
20, --minsize
20, --maxsize
false, --collisiondetection
boost_effect --texture
)
minetest.add_particlespawner({
amount = 10,
time = 0.25,
minpos = {x=effect_pos.x, y=effect_pos.y+0.2, z=effect_pos.z},
maxpos = {x=effect_pos.x, y=effect_pos.y+0.2, z=effect_pos.z},
mixvel = {x=-velo.x, y=-velo.y, z=-velo.z},
maxvel = {x=-velo.x, y=-velo.y, z=-velo.z},
minacc = {x=-0,y=-0,z=-0},
maxacc = {x=0,y=1,z=0},
minexptime = 0.02,
maxexptime = 0.02,
minsize = 20,
maxsize = 20,
collisiondetection = false,
texture = boost_effect
})
end
minetest.after(boost_duration, function()
entity.boost = false
end)
--animation
if moving_anim ~= nil and not entity.moving and not hovering then
entity.object:set_animation(move_anim, anim_speed, 0)
entity.object:set_animation(moving_anim, anim_speed, 0)
entity.moving = true
end
--rise
@ -445,22 +442,22 @@ function vehicles.object_drive(entity, dtime, def)
end
local effect_pos = {x=pos.x-dir.x*2, y=pos.y, z=pos.z-dir.z*2}
entity.object:set_velocity({x=velo2.x*(0.95), y=velo.y, z=velo2.z*(0.95)})
minetest.add_particlespawner(
4, --amount
0.5, --time
{x=effect_pos.x, y=effect_pos.y, z=effect_pos.z}, --minpos
{x=effect_pos.x, y=effect_pos.y, z=effect_pos.z}, --maxpos
{x=0, y=0.1, z=0}, --minvel
{x=-velo2.x, y=0.4, z=-velo2.z}, --maxvel
{x=-0,y=-0,z=-0}, --minacc
{x=0,y=0,z=0}, --maxacc
0.5, --minexptime
1, --maxexptime
10, --minsize
15, --maxsize
false, --collisiondetection
braking_effect --texture
)
minetest.add_particlespawner({
amount = 4,
time = 0.5,
minpos = {x=effect_pos.x, y=effect_pos.y, z=effect_pos.z},
maxpos = {x=effect_pos.x, y=effect_pos.y, z=effect_pos.z},
minvel = {x=0, y=0.1, z=0},
maxvel = {x=-velo2.x, y=0.4, z=-velo2.z},
minacc = {x=-0,y=-0,z=-0},
maxacc = {x=0,y=0,z=0},
minexptime = 0.5,
maxexptime = 1,
minsize = 10,
maxsize = 15,
collisiondetection = false,
texture = braking_effect
})
if vtimer >= 0.5 then
vtimer = vtimer-vtimer/10
end
@ -478,22 +475,22 @@ function vehicles.object_drive(entity, dtime, def)
end
local effect_pos = {x=pos.x-dir.x*2, y=pos.y, z=pos.z-dir.z*2}
entity.object:set_velocity({x=velo2.x*(0.95), y=velo.y, z=velo2.z*(0.95)})
minetest.add_particlespawner(
4, --amount
0.5, --time
{x=effect_pos.x, y=effect_pos.y, z=effect_pos.z}, --minpos
{x=effect_pos.x, y=effect_pos.y, z=effect_pos.z}, --maxpos
{x=0, y=0.1, z=0}, --minvel
{x=-velo2.x, y=0.4, z=-velo2.z}, --maxvel
{x=-0,y=-0,z=-0}, --minacc
{x=0,y=0,z=0}, --maxacc
0.5, --minexptime
1, --maxexptime
10, --minsize
15, --maxsize
false, --collisiondetection
braking_effect --texture
)
minetest.add_particlespawner({
amount = 4,
time = 0.5,
minpos = {x=effect_pos.x, y=effect_pos.y, z=effect_pos.z},
maxpos = {x=effect_pos.x, y=effect_pos.y, z=effect_pos.z},
minvel = {x=0, y=0.1, z=0},
maxvel = {x=-velo2.x, y=0.4, z=-velo2.z},
minacc = {x=-0,y=-0,z=-0},
maxacc = {x=0,y=0,z=0},
minexptime = 0.5,
maxexptime = 1,
minsize = 10,
maxsize = 15,
collisiondetection = false,
texture = braking_effect
})
if vtimer >= 0.5 then
vtimer = vtimer-vtimer/10
end
@ -518,7 +515,7 @@ function vehicles.object_drive(entity, dtime, def)
--shoot weapons
if ctrl.sneak and shoots and entity.loaded then
if inv:contains_item("main", arrow.."_item") or infinite_arrow then
if not creative_mode then inv:remove_item("main", arrow.."_item") end
if not minetest.is_creative_enabled(entity.driver:get_player_name()) then inv:remove_item("main", arrow.."_item") end
entity.loaded = false
local obj = minetest.add_entity({x=pos.x+0+dir.x*2,y=pos.y+shoot_y+dir.y,z=pos.z+0+dir.z*2}, arrow)
local vec = {x=dir.x*14,y=dir.y*14+shoot_angle,z=dir.z*14}
@ -542,7 +539,7 @@ function vehicles.object_drive(entity, dtime, def)
if ctrl.aux1 and shoots2 and entity.loaded2 then
if inv:contains_item("main", arrow2.."_item") or infinite_arrow2 then
if not creative_mode then inv:remove_item("main", arrow2.."_item") end
if not minetest.is_creative_enabled(entity.driver:get_player_name()) then inv:remove_item("main", arrow2.."_item") end
entity.loaded2 = false
local obj = minetest.add_entity({x=pos.x+0+dir.x*2,y=pos.y+shoot_y2+dir.y,z=pos.z+0+dir.z*2}, arrow2)
local vec = {x=dir.x*20,y=dir.y*20+shoot_angle,z=dir.z*20}
@ -661,10 +658,8 @@ function vehicles.object_glide(self, dtime, speed, decell, gravity, moving_anim,
for dy=-1,1 do
for dz=-1,1 do
local p = {x=pos.x+dx, y=pos.y-1, z=pos.z+dz}
local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
local n = minetest.get_node(p).name
if n ~= "massdestruct:parachute" and n ~= "air" then
local pos = self.object:get_pos()
self.object:remove()
return
end
@ -681,9 +676,7 @@ function vehicles.register_spawner(vehicle, desc, texture, is_boat)
liquids_pointable = is_boat,
wield_scale = {x = 1.5, y = 1.5, z = 1},
on_place = function(item, placer, pointed_thing)
local dir = placer:get_look_dir()
local playerpos = placer:get_pos()
local creative_mode = creative and creative.is_enabled_for and creative.is_enabled_for(placer:get_player_name())
local creative_mode = minetest.is_creative_enabled(placer:get_player_name())
if pointed_thing.type == "node" and not is_boat then
local obj = minetest.add_entity(pointed_thing.above, vehicle)
local object = obj:get_luaentity()
@ -753,7 +746,7 @@ function vehicles.on_punch(self, puncher)
vehicles.explodinate(self, 5)
end
if not self.driver then return end
local creative_mode = creative and creative.is_enabled_for and creative.is_enabled_for(self.driver:get_player_name())
local creative_mode = minetest.is_creative_enabled(self.driver:get_player_name())
if self.driver == puncher and (hp == self.hp_max-5 or hp == self.hp_max or creative_mode) then
local name = self.object:get_luaentity().name
local pos = self.object:get_pos()

View File

@ -38,7 +38,6 @@ local function missile_bullet_hit_check(self, obj, pos)
for dy=-1,1 do
for dz=-1,1 do
local p = {x=pos.x+dx, y=pos.y, z=pos.z+dz}
local t = {x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}
local n = minetest.env:get_node(p)
if n.name ~= "air" and n.drawtype ~= "airlike" then
return {}
@ -193,7 +192,6 @@ minetest.register_entity("vehicles:bullet", {
damage = 2,
collisionbox = {0, 0, 0, 0, 0, 0},
on_activate = function(self)
local pos = self.object:get_pos()
minetest.sound_play("shot",
{gain = 0.4, max_hear_distance = 3, loop = false})
end,
@ -1706,7 +1704,6 @@ minetest.register_tool("vehicles:backpack", {
on_use = function(item, placer, pointed_thing)
local dir = placer:get_look_dir()
local playerpos = placer:get_pos()
local pname = placer:get_player_name()
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1+dir.y,z=playerpos.z+0+dir.z}, "vehicles:parachute")
local entity = obj:get_luaentity()
if obj.driver and placer == obj.driver then
@ -1735,8 +1732,6 @@ minetest.register_entity("vehicles:wing_glider", {
on_step = function(self, dtime)
if self.driver then
local dir = self.driver:get_look_dir()
local velo = self.object:get_velocity()
local speed = math.sqrt(math.pow(velo.x, 2)+math.pow(velo.z, 2))
local vec = {x=dir.x*16,y=dir.y*16+1,z=dir.z*16}
local yaw = self.driver:get_look_horizontal()
self.object:set_yaw(yaw+math.pi)
@ -1803,7 +1798,6 @@ minetest.register_tool("vehicles:wings", {
local entity = obj:get_luaentity()
placer:set_attach(entity.object, "", {x=0,y=-5,z=0}, {x=0,y=-3,z=0})
entity.driver = placer
local dir = placer:get_look_dir()
placer:set_properties({
visual_size = {x=1, y=-1},
})
@ -1831,7 +1825,7 @@ minetest.register_tool("vehicles:rc", {
local pname = placer:get_player_name()
local inv = minetest.get_inventory({type="player", name=pname})
if inv:contains_item("main", "vehicles:missile_2_item") then
local creative_mode = creative and creative.is_enabled_for and creative.is_enabled_for(placer:get_player_name())
local creative_mode = minetest.is_creative_enabled(placer:get_player_name())
if not creative_mode then inv:remove_item("main", "vehicles:missile_2_item") end
local obj = minetest.env:add_entity({x=playerpos.x+0+dir.x,y=playerpos.y+1+dir.y,z=playerpos.z+0+dir.z}, "vehicles:missile")
local object = obj:get_luaentity()