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); } }