implement beam rendering if shooter or target is already destroyed
This commit is contained in:
@@ -5,6 +5,8 @@
|
||||
#include "Ship.h"
|
||||
#include "ShipSystem.h"
|
||||
|
||||
static constexpr Tick kWeaponImpactDelayTicks = 5; // 0.15 s × 30 Hz, rounded to nearest
|
||||
|
||||
CombatSystem::CombatSystem(const GameConfig& config)
|
||||
: m_config(config)
|
||||
{
|
||||
@@ -71,15 +73,7 @@ void CombatSystem::resolveShipWeapon(Ship& ship, Tick currentTick,
|
||||
return;
|
||||
}
|
||||
|
||||
// Apply damage to the correct pool.
|
||||
if (ships.findShip(targetId))
|
||||
{
|
||||
ships.damageShip(targetId, w.damage);
|
||||
}
|
||||
else
|
||||
{
|
||||
buildings.damageBuilding(targetId, w.damage);
|
||||
}
|
||||
m_pendingDamage.push_back({targetId, w.damage, currentTick + kWeaponImpactDelayTicks});
|
||||
|
||||
FireEvent evt;
|
||||
evt.shooter = ship.id;
|
||||
@@ -153,14 +147,7 @@ void CombatSystem::resolveStationWeapon(Building& station, Tick currentTick,
|
||||
return;
|
||||
}
|
||||
|
||||
if (ships.findShip(targetId))
|
||||
{
|
||||
ships.damageShip(targetId, w.damage);
|
||||
}
|
||||
else
|
||||
{
|
||||
buildings.damageBuilding(targetId, w.damage);
|
||||
}
|
||||
m_pendingDamage.push_back({targetId, w.damage, currentTick + kWeaponImpactDelayTicks});
|
||||
|
||||
FireEvent evt;
|
||||
evt.shooter = station.id;
|
||||
@@ -203,6 +190,32 @@ std::optional<EntityId> CombatSystem::acquireStationTarget(
|
||||
return best;
|
||||
}
|
||||
|
||||
void CombatSystem::applyPendingDamage(Tick currentTick,
|
||||
ShipSystem& ships,
|
||||
BuildingSystem& buildings)
|
||||
{
|
||||
auto it = m_pendingDamage.begin();
|
||||
while (it != m_pendingDamage.end())
|
||||
{
|
||||
if (it->appliesAt <= currentTick)
|
||||
{
|
||||
if (ships.findShip(it->target))
|
||||
{
|
||||
ships.damageShip(it->target, it->amount);
|
||||
}
|
||||
else if (buildings.findBuilding(it->target))
|
||||
{
|
||||
buildings.damageBuilding(it->target, it->amount);
|
||||
}
|
||||
it = m_pendingDamage.erase(it);
|
||||
}
|
||||
else
|
||||
{
|
||||
++it;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::optional<QVector2D> CombatSystem::targetPosition(
|
||||
EntityId id,
|
||||
const ShipSystem& ships,
|
||||
|
||||
Reference in New Issue
Block a user