public new void Execute(CharacterObservable caller, CharacterObservable characterToAttack) { if (caller == null) throw new ArgumentException(); if (characterToAttack == null) throw new ArgumentException(); //On Later commit //if (!(caller is BaseEnemy) && !(characterToAttack is BaseEnemy)) // throw new Exception("Cannot attack team member"); //if (caller is Healer && characterToAttack is BaseEnemy) // throw new Exception("Cannot heal enemies"); //if (caller is BaseEnemy && characterToAttack is BaseEnemy // && !(caller is NormalHealer || caller is HardHealer)) // throw new Exception("No friendly-fire amongst AI"); if (caller.Equals(characterToAttack))//To be tested November 20th 2015 throw new Exception("Cannot harm self"); Target = characterToAttack; if (Target == null) return; //if (caller is NormalHealer || caller is HardHealer && Target is BaseEnemy) //{ // Target.Health.RestoreHealth((int)caller.BaseStats.Power); //} else { var attackStrenght = caller.Stats.GetAttackStrenght(caller, Target); Target.Health.TakeDamageFromCharacter(caller); } Target.Notify(); // Single cal of notify here will either restore health, reduce health or make so that the manager call Death animation and destroy game object IsExecuted = true; }
private void HarmCharacter(CharacterObservable human) { var isSelfWizardType = Observable.IsOfTypeWizard(); var isDefenseBonusActivated = human.Stats.DefenseBonusActivated; Observable.Animator.SetTrigger(isSelfWizardType ? "Attack" : "Conjuring"); var attackPower = isSelfWizardType ? Observable.Stats.Power + Observable.Stats.MagicPower - CalculateDamageReduction(human) : Observable.Stats.Power - CalculateDamageReduction(human); if (CanDoExtraDamage()) { attackPower *= GetIncreaseTemporaryStrength(attackPower); } human.Health.TakeDamageFromCharacter((isDefenseBonusActivated ? (attackPower - human.Stats.TemporaryDefenseBonusValue) : attackPower)); human.Animator.SetTrigger(isDefenseBonusActivated ? "Hurt" : "Defense"); human.Notify(); }
public new void Execute(CharacterObservable caller, CharacterObservable characterToAttack) { if (caller == null) { throw new ArgumentException(); } if (characterToAttack == null) { throw new ArgumentException(); } //On Later commit //if (!(caller is BaseEnemy) && !(characterToAttack is BaseEnemy)) // throw new Exception("Cannot attack team member"); //if (caller is Healer && characterToAttack is BaseEnemy) // throw new Exception("Cannot heal enemies"); //if (caller is BaseEnemy && characterToAttack is BaseEnemy // && !(caller is NormalHealer || caller is HardHealer)) // throw new Exception("No friendly-fire amongst AI"); if (caller.Equals(characterToAttack))//To be tested November 20th 2015 { throw new Exception("Cannot harm self"); } Target = characterToAttack; if (Target == null) { return; } //if (caller is NormalHealer || caller is HardHealer && Target is BaseEnemy) //{ // Target.Health.RestoreHealth((int)caller.BaseStats.Power); //} else { var attackStrenght = caller.Stats.GetAttackStrenght(caller, Target); Target.Health.TakeDamageFromCharacter(caller); } Target.Notify(); // Single cal of notify here will either restore health, reduce health or make so that the manager call Death animation and destroy game object IsExecuted = true; }
//TODO: Update method's signature public void Undo(CharacterObservable caller, CharacterObservable active) { if (!Equals(caller, active)) { throw new Exception("Cannot Undo on non-active character"); } PreviousAction = (ICharacterActionCommand)CommandStack.Pop(); if (PreviousAction is AttackCommand && LastCharacterAttacked != null) { var attackStrenght = caller.Stats.GetAttackStrenght(caller, LastCharacterAttacked); LastCharacterAttacked.Health.RaiseHealth(caller); LastCharacterAttacked.healthWasRaised = true; LastCharacterAttacked.Notify(); LastCharacterAttacked.healthWasRaised = false; ((AttackCommand)PreviousAction).IsExecuted = false; return; } if (PreviousAction is DefendCommand) { caller.Stats.DefenseBonusActivated = false; caller.Stats.ResetTemporaryBonus(); ((DefendCommand)PreviousAction).IsExecuted = false; return; } //Implementation to come if (PreviousAction is MoveCommand) { //caller.CurrentCoordinates = caller.OldCoordinates; //((MoveCommand)PreviousAction).Execute(caller.CurrentCoordinates); //((MoveCommand)PreviousAction).IsExecuted = false; } if (PreviousAction is RotateCommand) { } }
private void HarmCharacter(CharacterObservable human) { var isSelfWizardType = Observable.IsOfTypeWizard(); var isDefenseBonusActivated = human.Stats.DefenseBonusActivated; Observable.Animator.SetTrigger(isSelfWizardType ? "Attack" : "Conjuring"); var attackPower = isSelfWizardType ? Observable.Stats.Power + Observable.Stats.MagicPower - CalculateDamageReduction(human) : Observable.Stats.Power - CalculateDamageReduction(human); if (CanDoExtraDamage()) attackPower *= GetIncreaseTemporaryStrength(attackPower); human.Health.TakeDamageFromCharacter((isDefenseBonusActivated ? (attackPower - human.Stats.TemporaryDefenseBonusValue) : attackPower)); human.Animator.SetTrigger(isDefenseBonusActivated ? "Hurt" : "Defense"); human.Notify(); }