Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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;
            }
        }