public void TogglePlayAction(object obj)
        {
            if (SelectedAction != null && SelectedAction is AnimatedAbility.AnimatedAbility && !(obj is AnimatedAbility.AnimatedAbility))
            {
                StopAction(SelectedAction);
            }

            if (SelectedAction is AnimatedAbility.AnimatedAbility)
            {
                AnimatedAbility.AnimatedAbility ability = obj as AnimatedAbility.AnimatedAbility;
                // If it's not persistent- play
                // If it's persistent but hasn't been played yet - play
                // If it's persistent and has been played already - stop
                if (!(ability.Persistent && (ability.Owner as AnimatedAbility.AnimatedCharacter).ActiveStates.FirstOrDefault(state => state.Ability == ability && state.AbilityAlreadyPlayed) != null))
                {
                    PlayAction(obj);
                }
                else
                {
                    StopAction(obj);
                }
            }
            else if (SelectedAction is CharacterMovement)
            {
                CharacterMovement characterMovement = obj as CharacterMovement;
                if (!characterMovement.IsActive)
                {
                    PlayAction(obj);
                }
                else
                {
                    StopAction(obj);
                }
            }
        }
 public void StopAction(object action)
 {
     if (action is AnimatedAbility.AnimatedAbility)
     {
         AnimatedAbility.AnimatedAbility abilityToStop = action as AnimatedAbility.AnimatedAbility;
         AnimatedAbility.AnimatedAbility ability       = SelectedAction as AnimatedAbility.AnimatedAbility;
         if (ability != null && abilityToStop != null && ability == abilityToStop)
         {
             this.SpawnAndTargetOwnerCharacter();
             ability.Stop();
             this.CharacterActionList.Active = default(T);
             this.SaveActionGroup();
         }
     }
     else
     {
         CharacterMovement characterMovement = action as CharacterMovement;
         if (characterMovement != null && characterMovement.Movement != null && characterMovement.IsActive)
         {
             //characterMovement.DeactivateMovement();
             //owner.ActiveMovement = null;
             this.CharacterActionList.Active = default(T);
             this.EventAggregator.Publish(new DeactivateMovementEvent(characterMovement), act => System.Windows.Application.Current.Dispatcher.Invoke(act));
         }
     }
 }
 public void PlayAction(object action)
 {
     if (action is AnimatedAbility.AnimatedAbility)
     {
         AnimatedAbility.AnimatedAbility ability = action as AnimatedAbility.AnimatedAbility;
         if (ability != null)
         {
             this.CharacterActionList.Active = (T)ability;
             this.SpawnAndTargetOwnerCharacter();
             this.EventAggregator.Publish(new PlayAnimatedAbilityEvent(ability), act => System.Windows.Application.Current.Dispatcher.Invoke(act));
             if (!ability.Persistent && !(ability is AnimatedAttack))
             {
                 TurnOffActiveStateForAbilityAfterPredefinedTime();
             }
         }
     }
     else
     {
         CharacterMovement characterMovement = action as CharacterMovement;
         if (characterMovement != null && characterMovement.Movement != null && !characterMovement.IsActive)
         {
             //owner.ActiveMovement = characterMovement;
             //characterMovement.ActivateMovement();
             this.CharacterActionList.Active = (T)characterMovement;
             this.EventAggregator.Publish(new ActivateMovementEvent(characterMovement), act => System.Windows.Application.Current.Dispatcher.Invoke(act));
         }
     }
 }
 public void PlayAppropriateAbility(Direction direction, List <MovableCharacter> targets)
 {
     if (MovementMembers.Any(mm => mm.Direction == direction))
     {
         AnimatedAbility.AnimatedAbility ability = MovementMembers.First(mm => mm.Direction == direction).Ability;
         ability.Play(targets.Cast <AnimatedCharacter>().ToList());
         ability.Play(targets.Where(t => t.GhostShadow != null).Cast <AnimatedCharacter>().ToList());
     }
 }
        public void AddMovementMember(Direction direction, AnimatedAbility.AnimatedAbility ability)
        {
            MovementMember member = new MovementMemberImpl();

            member.Direction = direction;
            member.Name      = direction.ToString();
            if (ability == null)
            {
                ability      = new AnimatedAbilityImpl();
                ability.Name = GetDefaultMemberAbilityName(direction);
            }
            member.Ability = ability;
            MovementMembers.Add(member);
        }
 private void CreateAbilitiesViewSource(List <AnimatedAbility.AnimatedAbility> abilities)
 {
     abilitiesCVS = new CollectionViewSource();
     AnimatedAbility.AnimatedAbility none = new AnimatedAbility.AnimatedAbilityImpl();
     none.Name  = "None";
     none.Owner = this.Owner;
     abilities.Add(none);
     abilitiesCVS.Source       = new ObservableCollection <AnimatedAbility.AnimatedAbility>(abilities.Where((an) => { return(an.Owner == this.Owner); /*&& an.IsAttack == false;*/ }).OrderBy(a => a.Order));
     abilitiesCVS.View.Filter += abilitiesCVS_Filter;
     AnimatedAbility.AnimatedAbility moveTo = null;
     if (EditedIdentity != null && EditedIdentity.AnimationOnLoad != null)
     {
         moveTo = EditedIdentity.AnimationOnLoad;
     }
     else
     {
         moveTo = none;
     }
     abilitiesCVS.View.MoveCurrentTo(moveTo);
     NotifyOfPropertyChange(() => AbilitiesCVS);
 }