public void TakeDamage(DamageToken newDamageToken, bool isCampaignDamage = false) { CurrentDamageTokens.Add(newDamageToken); var damageableComponent = GetDamageableComponent(newDamageToken); damageableComponent?.SetDamaged(isCampaignDamage); if (newDamageToken == DamageToken.Structural && isCampaignDamage) { HasStructuralCarryoverDamage = true; } }
public bool TakeDamage(int damage) { var damageDone = DebuffsBySource.Values .Where(debuff => debuff == ZoneDebuff.DoubleDamage) .Aggregate(damage, (current, doubleDamageDebuff) => current * 2); var newDamageTokens = GetNewDamageTokens(damageDone); CurrentDamageTokens.AddRange(newDamageTokens); AllDamageTokensTaken.AddRange(newDamageTokens); TotalDamage += damageDone; var shipDestroyed = TotalDamage >= 7; if (!shipDestroyed) { foreach (var token in newDamageTokens) { switch (token) { case DamageToken.BackCannon: LowerStation.Cannon.SetDamaged(); break; case DamageToken.FrontCannon: UpperStation.Cannon.SetDamaged(); break; case DamageToken.Gravolift: Gravolift.SetDamaged(); break; case DamageToken.Reactor: LowerStation.EnergyContainer.SetDamaged(); break; case DamageToken.Shield: UpperStation.EnergyContainer.SetDamaged(); break; case DamageToken.Structural: break; } } } return(shipDestroyed); }
public void RepairFirstDamage(Player player) { if (!CurrentDamageTokens.Any()) { return; } var damageRepairOrder = player.CurrentStation.StationLocation.IsUpperDeck() ? DamageTokenRepairOrderInUpperDeck : DamageTokenRepairOrderInLowerDeck; var damageToRepair = damageRepairOrder.First(damage => CurrentDamageTokens.Contains(damage)); CurrentDamageTokens.Remove(damageToRepair); var component = GetDamageableComponent(damageToRepair); component?.Repair(); if (damageToRepair == DamageToken.Structural) { HasStructuralCarryoverDamage = false; } }