Fix proiettili.

master
_Zaizen_ 2020-08-01 15:21:46 +02:00
parent 8ec527a4d4
commit db7b0fda85
1 changed files with 29 additions and 6 deletions

View File

@ -76,6 +76,9 @@ function quake.register_bullet(name, def)
--moveresult è una metatabella dove vengono passati i dati delle collisioni della collisionbox
--TODO fare che si possa colpire più di un player in quanto la collisione può avvenire con 2 player contemporaneamente
--ed in quel caso moveresult.collisions ha dentro anche l'altra collisione.
function bulletentity:on_step(dtime, moveresult)
-- incremento tempo di vita
self.lifetime = self.lifetime + dtime
@ -95,29 +98,49 @@ function quake.register_bullet(name, def)
if moveresult.collisions[1].object then
--controlla se è un player
if moveresult.collisions[1].object:is_player() then
if moveresult.collisions[1].object:get_player_name() ~= self.p_name then
quake.shoot(self.p_name, moveresult.collisions.object, self.initial_properties.damage, false)
self:_destroy()
return
elseif moveresult.collisions[1].object:get_player_name() == self.p_name then
if self.lifetime < (15 / self.initial_properties.speed) then
self.object:set_velocity({
x=(moveresult.collisions[1].old_velocity.x),
y=(moveresult.collisions[1].old_velocity.y),
z=(moveresult.collisions[1].old_velocity.z),
})
return
end
else
self:_destroy()
return
end
self:_destroy()
return
end
--quando non è un player allora è una entity quindi la memorizzo per alleggerire il numero di accessi
local entity = moveresult.collisions[1].object:get_luaentity()
--i prossimi 2 check servono a verificare l'entità sia un proiettile
if entity.initial_properties ~= nil then
if entity.initial_properties.is_bullet then
--distrugge sia il proiettile con cui collide che se stesso
entity:_destroy()
self:_destroy()
return
end
end
else
--se non è presente il campo object distrugge comunque il proiettile per prevenire crash ed errori
self:_destroy()
return
end
--se non è presente il campo object distrugge comunque il proiettile per prevenire crash ed errori
self:_destroy()
return
end
--quando non esiste collisions[1] distrugge comunque perchè sta collidendo con qualcosa
self:_destroy()
@ -146,7 +169,7 @@ function quake.shoot_bullet(shooter, bullet, pos_head, dir)
y=(dir.y * speed),
z=(dir.z * speed),
})
bullet:set_acceleration({ x=dir.x, y=dir.y, z=dir.z })
--bullet:set_acceleration({ x=dir.x, y=dir.y, z=dir.z })
end