public Movement GetNewMovement()
        {
            MovableCharacter defaultCharacter  = this.Repository.CharacterByName[HeroVirtualTabletop.AnimatedAbility.DefaultAbilities.CHARACTERNAME] as MovableCharacter;
            string           validMovementName = GetNewValidMovementName(defaultCharacter);
            Movement         movement          = new MovementImpl(validMovementName);

            foreach (var member in movement.MovementMembers)
            {
                defaultCharacter.Abilities.AddNew(member.Ability);
                ReferenceResource refResource = new ReferenceResourceImpl {
                    Ability = member.Ability, Character = defaultCharacter
                };
                member.AbilityReference = refResource;
            }
            return(movement);
        }
 public void CopyAbilitiesTo(AnimatedCharacter targetCharacter)
 {
     foreach (AnimatedAbility ability in this.Abilities)
     {
         string            abilityName   = targetCharacter.GetNewValidAbilityName(ability.Name);
         AnimatedAbility   copiedAbility = new AnimatedAbilityImpl();
         ReferenceElement  refElement    = new ReferenceElementImpl();
         ReferenceResource refResource   = new ReferenceResourceImpl();
         refResource.Ability   = ability;
         refResource.Character = this;
         refElement.Reference  = refResource;
         refElement.Name       = ability.Name;
         copiedAbility.InsertElement(refElement);
         copiedAbility.Name = abilityName;
         if (ability is AnimatedAttack)
         {
             AnimatedAttack    attack             = ability as AnimatedAttack;
             AnimatedAttack    copiedAttack       = ability.TransformToAttack();
             AnimatedAbility   copiedOnHitAbility = new AnimatedAbilityImpl();
             ReferenceElement  refElementOnHit    = new ReferenceElementImpl();
             ReferenceResource refResourceOnHit   = new ReferenceResourceImpl();
             refResource.Ability       = attack.OnHitAnimation;
             refResource.Character     = this;
             refElementOnHit.Reference = refResourceOnHit;
             refElementOnHit.Name      = attack.OnHitAnimation.Name;
             copiedOnHitAbility.InsertElement(refElementOnHit);
             copiedAttack.OnHitAnimation = copiedOnHitAbility;
             if (ability is AreaEffectAttack)
             {
                 copiedAttack = copiedAttack.TransformToAreaEffectAttack();
             }
             copiedAbility = copiedAttack;
         }
         targetCharacter.Abilities.InsertAction(copiedAbility);
     }
 }