public void ExecuteEffect(AbilityExecuteParameters parameters, AbilityResultContainer results) { if (results.Successful) { (parameters.Target as IGameUnit)?.ResetActionsConsumed(); } }
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); }
public AbilityResultContainer PreviewResults(AbilityExecuteParameters parameters) { var results = new AbilityResultContainer(); results.BaseDamage = CalculateDamage(parameters); CreateDamageModifiers(parameters, results); return(results); }
public void ExecuteEffect(AbilityExecuteParameters parameters, AbilityResultContainer results) { if (!results.Successful) { return; } var targetUnit = parameters.Target as IGameUnit; targetUnit.TakeDamage(results.CalculateDamage()); }
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" }); } }