Пример #1
0
        public void AttackUnitByUnit(BoardUnit attackingUnit, BoardUnit attackedUnit, int additionalDamage = 0)
        {
            int damageAttacked = 0;
            int damageAttacking;

            if (attackingUnit != null && attackedUnit != null)
            {
                int additionalDamageAttacker =
                    _abilitiesController.GetStatModificatorByAbility(attackingUnit, attackedUnit, true);
                int additionalDamageAttacked =
                    _abilitiesController.GetStatModificatorByAbility(attackedUnit, attackingUnit, false);

                damageAttacking = attackingUnit.CurrentDamage + additionalDamageAttacker + additionalDamage;

                if (damageAttacking > 0 && attackedUnit.HasBuffShield)
                {
                    damageAttacking = 0;
                    attackedUnit.HasUsedBuffShield = true;
                }

                attackedUnit.CurrentHp -= damageAttacking;

                _vfxController.SpawnGotDamageEffect(attackedUnit, -damageAttacking);

                attackedUnit.InvokeUnitDamaged(attackingUnit);
                attackingUnit.InvokeUnitAttacked(attackedUnit, damageAttacking, true);

                if (attackedUnit.CurrentHp > 0 && attackingUnit.AttackAsFirst || !attackingUnit.AttackAsFirst)
                {
                    damageAttacked = attackedUnit.CurrentDamage + additionalDamageAttacked;

                    if (damageAttacked > 0 && attackingUnit.HasBuffShield)
                    {
                        damageAttacked = 0;
                        attackingUnit.HasUsedBuffShield = true;
                    }

                    attackingUnit.CurrentHp -= damageAttacked;

                    _vfxController.SpawnGotDamageEffect(attackingUnit, -damageAttacked);

                    attackingUnit.InvokeUnitDamaged(attackedUnit);
                    attackedUnit.InvokeUnitAttacked(attackingUnit, damageAttacked, false);
                }

                _actionsQueueController.PostGameActionReport(_actionsQueueController.FormatGameActionReport(
                                                                 Enumerators.ActionType.ATTACK_CREATURE_BY_CREATURE, new object[]
                {
                    attackingUnit, damageAttacking, attackedUnit, damageAttacked
                }));

                _tutorialManager.ReportAction(Enumerators.TutorialReportAction.ATTACK_CARD_CARD);
            }
        }