상속: MonoBehaviour, ICharacterObservable
예제 #1
0
    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;
    }
예제 #2
0
    public void Undo(CharacterObservable caller, CharacterObservable personaeToInteracWith, GameManager gm)
    {
        PreviousAction = (ICharacterActionCommand)CommandStack.Pop();

        if (PreviousAction is AttackCommand && LastCharacterAttacked != null)
        {
            var attackStrenght = caller.Stats.GetAttackStrenght(caller, LastCharacterAttacked);
            LastCharacterAttacked.Health.RaiseHealth(caller);
            ((AttackCommand)PreviousAction).IsExecuted = false;
            return;
        }
        if (PreviousAction is DefendCommand)
        {
            caller.Stats.DefenseBonusActivated = false;
            caller.Stats.ResetTemporaryBonus();
            ((DefendCommand)PreviousAction).IsExecuted = false;
            return;
        }
        if (PreviousAction is MoveCommand)
        {
            //caller.CurrentCoordinates = caller.OldCoordinates;
            //((MoveCommand)PreviousAction).Execute(caller.CurrentCoordinates);
            //((MoveCommand)PreviousAction).IsExecuted = false;
        }
        PreviousAction.Execute(caller);
    }
예제 #3
0
 public void Execute(CharacterObservable character, PlayerDirection newDirection)
 {
     Receiver.SetUserAction(GameActions.RotateAction);
     if (character.Direction == newDirection) return;
     character.Direction = newDirection;
     MakeCharacterRotate(character);
 }
 //TODO: Move directly inside CommandSequence
 public void AddObservable(CharacterObservable obs)
 {
     if (obs != null)
         Observable = obs;
     else
         throw new ArgumentNullException();
 }
예제 #5
0
    //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 AttackPlayer(CharacterObservable bs)
        {
            if (!CanSelfMove())
            {
                return;
            }

            if (_selfAsEnemy.IsOfTypeWizard())
            {
                _closestEnemyToAttackSequence.Add(() => WizardAttackPattern(bs));
            }
            else
            {
                if (CanAttackWithoutMoving(bs))
                {
                    _closestEnemyToAttackSequence.Add(HarmTarget);
                }
                else
                {
                    _closestEnemyToAttackSequence.Add(() => MoveTowardsCharacter(bs));
                    if (!_isFacingCharacter)
                    {
                        _closestEnemyToAttackSequence.Add(() => LookAtHuman(bs));
                    }

                    if (CanPerformCloseRangeAttack())
                    {
                        _closestEnemyToAttackSequence.Add(HarmTarget);
                    }
                }
            }
        }
예제 #7
0
    //IsOfType methods will have to be optimized to a single method in the future by simply passing a params of Type array
    //Presently, code works this way

    public static CharacterObservable ConvertAbstractToConcreteSniper(this CharacterObservable observable)
    {
        var go = observable.ObservableGameObject;

        if (!observable.IsOfTypeSniper())
        {
            return(null);
        }
        if (observable is Archer)
        {
            var archer = go.AddComponent <Archer>();
            archer.Health        = observable.Health;
            archer.Stats         = observable.Stats;
            archer.CharacterType = CharacterType.Archer;
            archer.CharacterRole = CharacterRole.Sniper;
            archer.Direction     = observable.Direction;
            return(archer);
        }
        if (!(observable is NormalArcher))
        {
            return(null);
        }
        {
            var archer = go.AddComponent <NormalArcher>();
            archer.Health        = observable.Health;
            archer.Stats         = observable.Stats;
            archer.CharacterType = CharacterType.Archer;
            archer.CharacterRole = CharacterRole.Sniper;
            archer.Direction     = observable.Direction;
            return(archer);
        }
    }
    public void Undo(CharacterObservable caller, CharacterObservable personaeToInteracWith, GameManager gm)
    {
        PreviousAction = (ICharacterActionCommand)CommandStack.Pop();

        if (PreviousAction is AttackCommand && LastCharacterAttacked != null)
        {
            var attackStrenght = caller.Stats.GetAttackStrenght(caller, LastCharacterAttacked);
            LastCharacterAttacked.Health.RaiseHealth(caller);
            ((AttackCommand)PreviousAction).IsExecuted = false;
            return;
        }
        if (PreviousAction is DefendCommand)
        {
            caller.Stats.DefenseBonusActivated = false;
            caller.Stats.ResetTemporaryBonus();
            ((DefendCommand)PreviousAction).IsExecuted = false;
            return;
        }
        if (PreviousAction is MoveCommand)
        {
            //caller.CurrentCoordinates = caller.OldCoordinates;
            //((MoveCommand)PreviousAction).Execute(caller.CurrentCoordinates);
            //((MoveCommand)PreviousAction).IsExecuted = false;
        }
        PreviousAction.Execute(caller);
    }
 public static void ClearCharacterFromMap(this GameMap gm, CharacterObservable obs)
 {
     var firstOrDefault = gm.CellGameMap.SelectMany(x => x).FirstOrDefault(x => x.Equals(obs.CurrentCoordinates));
     if (firstOrDefault != null)
         firstOrDefault.UseByCharacter =
             false;
 }
예제 #10
0
 public void RaiseHealth(CharacterObservable observable)
 {
     if (!IsDead)
     {
         CurrentHealth += (int)observable.Stats.MagicPower;
         CapHealth();
     }
 }
예제 #11
0
 public void TakeDamageFromCharacter(CharacterObservable observable)
 {
     CurrentHealth -= (int)observable.Stats.Power;
     if (CurrentHealth <= 0)
     {
         IsDead = true;
     }
 }
예제 #12
0
 public void RaiseHealth(CharacterObservable observable)
 {
     if (!IsDead)
     {
         CurrentHealth += (int)observable.Stats.MagicPower;
         CapHealth();
     }
 }
 public static IEnumerable<Cell> GetAvailableMoveActions(this GameMap gm, CharacterObservable self)
 {
     var coor = self.CurrentCoordinates.gridPosition;
     return
         gm.CellGameMap.SelectMany(
             row => row.Where(cell => Math.Abs(cell.gridPosition.x - (coor.x + 0x1)) < double.Epsilon ||
                          Math.Abs(cell.gridPosition.x - (coor.x - 0x1)) < double.Epsilon ||
                          Math.Abs(cell.gridPosition.y - (coor.y + 0x1)) < double.Epsilon ||
                          Math.Abs(cell.gridPosition.y - (coor.y - 0x1)) < double.Epsilon));
 }
예제 #14
0
    public static void ClearCharacterFromMap(this GameMap gm, CharacterObservable obs)
    {
        var firstOrDefault = gm.CellGameMap.SelectMany(x => x).FirstOrDefault(x => x.Equals(obs.CurrentCoordinates));

        if (firstOrDefault != null)
        {
            firstOrDefault.UseByCharacter =
                false;
        }
    }
 public override void MoveTowardsCharacter(CharacterObservable character)
 {
     var enemyObservable = (EnemyBase)Observable;
     var start = enemyObservable.CurrentCoordinates;
     var end = character.CurrentCoordinates;
     var pathfinder = enemyObservable.PathFinder;
     pathfinder.FindPath(start, end, enemyObservable.Map.CellGameMap, false);
     enemyObservable.Animator.SetTrigger("Move");
     //need to call move command
 }
 public void Execute(CharacterObservable character, PlayerDirection newDirection)
 {
     Receiver.SetUserAction(GameActions.RotateAction);
     if (character.Direction == newDirection)
     {
         return;
     }
     character.Direction = newDirection;
     MakeCharacterRotate(character);
 }
        public override void MoveTowardsCharacter(CharacterObservable character)
        {
            var enemyObservable = (EnemyBase)Observable;
            var start           = enemyObservable.CurrentCoordinates;
            var end             = character.CurrentCoordinates;
            var pathfinder      = enemyObservable.PathFinder;

            pathfinder.FindPath(start, end, enemyObservable.Map.CellGameMap, false);
            enemyObservable.Animator.SetTrigger("Move");
            //need to call move command
        }
예제 #18
0
    public static IEnumerable <Cell> GetAvailableMoveActions(this GameMap gm, CharacterObservable self)
    {
        var coor = self.CurrentCoordinates.gridPosition;

        return
            (gm.CellGameMap.SelectMany(
                 row => row.Where(cell => Math.Abs(cell.gridPosition.x - (coor.x + 0x1)) < double.Epsilon ||
                                  Math.Abs(cell.gridPosition.x - (coor.x - 0x1)) < double.Epsilon ||
                                  Math.Abs(cell.gridPosition.y - (coor.y + 0x1)) < double.Epsilon ||
                                  Math.Abs(cell.gridPosition.y - (coor.y - 0x1)) < double.Epsilon)));
    }
 public void AddObservable(CharacterObservable obs)
 {
     if (obs != null)
     {
         Observable = obs;
     }
     else
     {
         throw new ArgumentNullException();
     }
 }
예제 #20
0
 public new void Execute(CharacterObservable caller)
 {
     if (caller == null)
         throw new ArgumentException();
     if (caller.Stats == null)
         throw new Exception();
     if (caller.Stats.DefenseBonusActivated)
         return;
     Receiver.SetUserAction(GameActions.DefendAction);
     caller.Stats.Defense += caller.Stats.DetermineDefenseBonusForTurn();
     caller.Stats.DefenseBonusActivated = true;
     IsExecuted = true;
 }
 private void WizardAttackPattern(CharacterObservable obs)
 {
     if (!_isMoveNeeded)
     {
         return;
     }
     _closestEnemyToAttackSequence.Add(() => MoveTowardsCharacter(obs));
     if (!IsInsideAttackRange(obs))
     {
         return;
     }
     _closestEnemyToAttackSequence.Add(HarmTarget);
 }
 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();
 }
예제 #23
0
 public void UpdateObserver(CharacterObservable obs, float strength, bool wasAttacked)
 {
     if (wasAttacked)
     {
         obs.Health.TakeDamageFromCharacter(strength);
         //Make sure the Health UI was changed too !
         if (obs.Health.IsDead)
             GameManager.instance.UpdateObserver(obs);
     }
     else
     {
         obs.Health.RaiseHealth((int)strength);
     }
 }
예제 #24
0
 public void Execute(CharacterObservable caller, CharacterObservable interactWith, CommandManager cm, GameManager gm)
 {
     if (caller == null)
         throw new ArgumentException("Caller cannot be null");
     if (cm.CommandStack == null)
         throw new NullReferenceException("Command stack cannot be null in order to perform an undo");
     if (cm.CurrentCharater == null && gm.ActivePlayer == null)
         throw new ArgumentException("The command and game manager can't be null at the same time");
     if (cm.CommandStack.Count == 0)
         throw new Exception("Active player did not select any actions that can be undone");
     if (cm != null && gm != null && !cm.CurrentCharater.Equals(gm.ActivePlayer))
         throw new Exception("Cannot Undo action of previous player");
     cm.Undo(caller, gm.ActivePlayer);
 }
예제 #25
0
 public void UpdateObserver(CharacterObservable obs, float strength, bool wasAttacked)
 {
     if (wasAttacked)
     {
         obs.Health.TakeDamageFromCharacter(strength);
         //Make sure the Health UI was changed too !
         if (obs.Health.IsDead)
         {
             GameManager.instance.UpdateObserver(obs);
         }
     }
     else
     {
         obs.Health.RaiseHealth((int)strength);
     }
 }
 public void UpdateCommandStack(ICharacterActionCommand cmd)
 {
     if (CurrentCharater == null)
     {
         throw new NullReferenceException();
     }
     if (!cmd.IsExecuted)
     {
         throw new Exception("Cannot update stack if command was not executed!");
     }
     CommandStack.Push(cmd);
     if (cmd is AttackCommand)
     {
         LastCharacterAttacked = ((AttackCommand)cmd).Target;
     }
     PreviousAction = cmd;
 }
예제 #27
0
    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();
    }
예제 #28
0
    private void MakeCharacterRotate(CharacterObservable obs)
    {
        var dir = obs.Direction;
        switch (dir)
        {
            case PlayerDirection.Down:
                break;

            case PlayerDirection.Up:
                break;

            case PlayerDirection.Left:
                break;

            case PlayerDirection.Right:
                break;
        }
    }
    private void MakeCharacterRotate(CharacterObservable obs)
    {
        var dir = obs.Direction;

        switch (dir)
        {
        case PlayerDirection.Down:
            break;

        case PlayerDirection.Up:
            break;

        case PlayerDirection.Left:
            break;

        case PlayerDirection.Right:
            break;
        }
    }
 public new void Execute(CharacterObservable caller)
 {
     if (caller == null)
     {
         throw new ArgumentException();
     }
     if (caller.Stats == null)
     {
         throw new Exception();
     }
     if (caller.Stats.DefenseBonusActivated)
     {
         return;
     }
     Receiver.SetUserAction(GameActions.DefendAction);
     caller.Stats.Defense += caller.Stats.DetermineDefenseBonusForTurn();
     caller.Stats.DefenseBonusActivated = true;
     IsExecuted = true;
 }
 public static bool IsInRange(this GameMap gm, CharacterObservable self, CharacterObservable target)
 {
     var mp = self.MovementPoints;
     var currentPos = self.CurrentCoordinates;//Pos in x, y
     var row = gm.CellGameMap.ElementAt((int)currentPos.gridPosition.x);
     var start = gm.CellGameMap.IndexOf(row) - mp;
     if (start <= 0)
         start = 0;
     for (; start < gm.CellGameMap.IndexOf(row) + mp; start++)
     {
         var counter = start;
         for (; counter < 2 * mp + start; counter++)
         {
             if (row.ElementAt(counter).gridPosition == target.CurrentCoordinates.gridPosition)
                 return true;
         }
     }
     return false;
 }
    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)
        {
        }
    }
 public void Execute(CharacterObservable caller, CharacterObservable interactWith, CommandManager cm, GameManager gm)
 {
     if (caller == null)
     {
         throw new ArgumentException("Caller cannot be null");
     }
     if (cm.CommandStack == null)
     {
         throw new NullReferenceException("Command stack cannot be null in order to perform an undo");
     }
     if (cm.CurrentCharater == null && gm.ActivePlayer == null)
     {
         throw new ArgumentException("The command and game manager can't be null at the same time");
     }
     if (cm.CommandStack.Count == 0)
     {
         throw new Exception("Active player did not select any actions that can be undone");
     }
     if (cm != null && gm != null && !cm.CurrentCharater.Equals(gm.ActivePlayer))
     {
         throw new Exception("Cannot Undo action of previous player");
     }
     cm.Undo(caller, gm.ActivePlayer);
 }
예제 #35
0
    public static bool IsInRange(this GameMap gm, CharacterObservable self, CharacterObservable target)
    {
        var mp         = self.MovementPoints;
        var currentPos = self.CurrentCoordinates;//Pos in x, y
        var row        = gm.CellGameMap.ElementAt((int)currentPos.gridPosition.x);
        var start      = gm.CellGameMap.IndexOf(row) - mp;

        if (start <= 0)
        {
            start = 0;
        }
        for (; start < gm.CellGameMap.IndexOf(row) + mp; start++)
        {
            var counter = start;
            for (; counter < 2 * mp + start; counter++)
            {
                if (row.ElementAt(counter).gridPosition == target.CurrentCoordinates.gridPosition)
                {
                    return(true);
                }
            }
        }
        return(false);
    }
 public void UpdateObserver(CharacterObservable character)
 {
     character.Animator.SetTrigger("Death");
     //wait 0.5-1s
     Destroy(character, 2f);
 }
 public void GoToNextCharacter()
 {
     _indexOfCharacters = _indexOfCharacters + 1 < GameCharacters.Count ? _indexOfCharacters + 1 : 0;
     ActivePlayer       = GameCharacters[_indexOfCharacters];
     _commandManager.EmptyCommandStack();
 }
 // Use this for initialization
 public void Start()
 {
     loadMapFromXml();
     _indexOfCharacters = 0;
     ActivePlayer       = GameCharacters[_indexOfCharacters];
 }
 public override void MoveTowardsCharacter(CharacterObservable character)
 {
     throw new NotImplementedException();
 }
예제 #40
0
 public void GoToNextCharacter()
 {
     _indexOfCharacters = _indexOfCharacters + 1 < GameCharacters.Count ? _indexOfCharacters + 1 : 0;
     ActivePlayer = GameCharacters[_indexOfCharacters];
     _commandManager.EmptyCommandStack();
 }
 public override void SelectTarget(CharacterObservable[] humans)
 {
     throw new NotImplementedException();
 }
예제 #42
0
 public static bool IsOfTypeWizard(this CharacterObservable obs)
 {
     return(obs.CharacterRole.Equals(CharacterRole.Wizard));
 }
예제 #43
0
 public static bool IsSubClassOfType(this CharacterObservable obs, Type parentType)
 {
     return(obs.GetType().IsInstanceOfType(parentType));
 }
예제 #44
0
 public virtual void Execute(CharacterObservable caller, int raiseDefense)
 {
 }
예제 #45
0
 public virtual void Execute(CharacterObservable caller, CharacterObservable chracterToInteractWith)
 {
 }
예제 #46
0
 public void RotateTowardsCharacter(CharacterObservable character)
 {
     throw new NotImplementedException();
 }
예제 #47
0
 // Use this for initialization
 public void Start()
 {
     loadMapFromXml();
     _indexOfCharacters = 0;
     ActivePlayer = GameCharacters[_indexOfCharacters];
 }
 private int CalculateDamageReduction(CharacterObservable human)
 {
     return (int)(human.IsOfTypeWizard()
         ? human.Stats.Defense + human.Stats.MagicResist
         : human.Stats.Defense);
 }
예제 #49
0
 public virtual void Execute(CharacterObservable caller)
 {
 }
예제 #50
0
 public abstract void MoveTowardsCharacter(CharacterObservable character);
예제 #51
0
 public static bool IsNull(this CharacterObservable obs)
 {
     return(obs == null);
 }
예제 #52
0
 public bool IsFacingCharacter(CharacterObservable self, CharacterObservable target)
 {
     return Math.Abs(self.Direction - target.Direction) == 1;
 }
예제 #53
0
 public static bool IsSubClassOfType(this CharacterObservable obs, params Type[] types)
 {
     return(types.Any(t => obs.GetType().IsInstanceOfType(t)));
 }
예제 #54
0
 public static bool IsOfTypeWarrior(this CharacterObservable obs)
 {
     return(obs.CharacterRole.Equals(CharacterRole.Warrior));
 }
예제 #55
0
 public static bool IsOfTypeSniper(this CharacterObservable obs)
 {
     return(obs.CharacterRole.Equals(CharacterRole.Sniper));
 }
예제 #56
0
 public void UpdateObserver(CharacterObservable character)
 {
     character.Animator.SetTrigger("Death");
     //wait 0.5-1s
     Destroy(character,2f);
 }
예제 #57
0
 public static bool IsOfTypeThief(this CharacterObservable obs)
 {
     return(obs.CharacterRole.Equals(CharacterRole.Thief));
 }
예제 #58
0
 public void UpdateObserver(CharacterObservable character)
 {
     throw new NotImplementedException();
 }
예제 #59
0
 public void UpdateCommandStack(ICharacterActionCommand cmd)
 {
     if (CurrentCharater == null)
         throw new NullReferenceException();
     if (!cmd.IsExecuted)
         throw new Exception("Cannot update stack if command was not executed!");
     CommandStack.Push(cmd);
     if (cmd is AttackCommand)
     {
         LastCharacterAttacked = ((AttackCommand)cmd).Target;
     }
     PreviousAction = cmd;
 }
예제 #60
0
 public void TakeDamageFromCharacter(CharacterObservable observable)
 {
     CurrentHealth -= (int)observable.Stats.Power;
     if (CurrentHealth <= 0)
         IsDead = true;
 }