예제 #1
0
 public void ExecuteEffect(AbilityExecuteParameters parameters, AbilityResultContainer results)
 {
     if (results.Successful)
     {
         (parameters.Target as IGameUnit)?.ResetActionsConsumed();
     }
 }
예제 #2
0
        public AbilityResultContainer PreviewResults(AbilityExecuteParameters parameters)
        {
            // This just always succeeds so mark our return container accordingly
            var result = new AbilityResultContainer();

            result.Successful = parameters.Target is IGameUnit;

            return(result);
        }
예제 #3
0
        public AbilityResultContainer PreviewResults(AbilityExecuteParameters parameters)
        {
            var results = new AbilityResultContainer();

            results.BaseDamage = CalculateDamage(parameters);
            CreateDamageModifiers(parameters, results);

            return(results);
        }
예제 #4
0
        public void ExecuteEffect(AbilityExecuteParameters parameters, AbilityResultContainer results)
        {
            if (!results.Successful)
            {
                return;
            }

            var targetUnit = parameters.Target as IGameUnit;

            targetUnit.TakeDamage(results.CalculateDamage());
        }
예제 #5
0
        public void CreateDamageModifiers(AbilityExecuteParameters parameters, AbilityResultContainer abilityResultContainer)
        {
            var user = parameters.UnitExecuting;

            if (!(parameters.Target is IGameUnit))
            {
                return;
            }
            var target = parameters.Target as IGameUnit;

            var sizeDifference    = SizeCalculator.GetSizeDifference(user.SizeCategory, target.SizeCategory);
            var absSizeDifference = Math.Abs(sizeDifference);

            // Static size difference modifiers
            if (sizeDifference > 0)
            {
                var multiplier = Mathf.Pow(1.2f, absSizeDifference);
                abilityResultContainer.DamageModifiers.Add(new DamageModifierContainer {
                    DamageMultiplier = multiplier, Name = "Bigger Size Bonus"
                });
            }
            else if (sizeDifference < 0)
            {
                var multiplier = Mathf.Pow(0.8f, absSizeDifference);
                abilityResultContainer.DamageModifiers.Add(new DamageModifierContainer {
                    DamageMultiplier = multiplier, Name = "Smaller Size Bonus"
                });
            }

            // Ability-based Size Difference
            if (_damageParameters.SizeBiggerDamageMultiplier > 1 && sizeDifference > 0)
            {
                var multiplier = Mathf.Pow(_damageParameters.SizeBiggerDamageMultiplier, absSizeDifference);
                abilityResultContainer.DamageModifiers.Add(new DamageModifierContainer {
                    DamageMultiplier = multiplier, Name = "Ability Bigger Size Bonus"
                });
            }
            else if (_damageParameters.SizeBiggerDamageMultiplier < 1 && sizeDifference > 0)
            {
                var multiplier = Mathf.Pow(_damageParameters.SizeBiggerDamageMultiplier, absSizeDifference);
                abilityResultContainer.DamageModifiers.Add(new DamageModifierContainer {
                    DamageMultiplier = multiplier, Name = "Ability Bigger Size Penalty"
                });
            }


            if (_damageParameters.SizeSmallerDamageMultiplier > 1 && sizeDifference < 0)
            {
                var multiplier = Mathf.Pow(_damageParameters.SizeSmallerDamageMultiplier, absSizeDifference);
                abilityResultContainer.DamageModifiers.Add(new DamageModifierContainer {
                    DamageMultiplier = multiplier, Name = "Ability Smaller Size Bonus"
                });
            }
            else if (_damageParameters.SizeSmallerDamageMultiplier < 1 && sizeDifference < 0)
            {
                var multiplier = Mathf.Pow(_damageParameters.SizeSmallerDamageMultiplier, absSizeDifference);
                abilityResultContainer.DamageModifiers.Add(new DamageModifierContainer {
                    DamageMultiplier = multiplier, Name = "Ability Smaller Size Penalty"
                });
            }
        }