Fix proiettili.
parent
8ec527a4d4
commit
db7b0fda85
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue