public void CastAbility(int n)
    {
        if (n >= this.Abilities.Count)
        {
            return;
        }
        if (this.Abilities[n] == null)
        {
            return;
        }
        if (this.Abilities[n].Ability == null)
        {
            return;
        }
        if (this.Abilities[n].AbilityTarget == null)
        {
            return;
        }

        var Ability           = this.Abilities[n].Ability;
        var Target            = this.Abilities[n].AbilityTarget;
        var eventTag          = Ability.Tags.AbilityTags.Added.Count > 0 ? Ability.Tags.AbilityTags.Added[0] : new GameplayTag();
        var gameplayEventData = new GameplayEventData();

        gameplayEventData.EventTag = eventTag;
        gameplayEventData.Target   = Target;

        // If ability can be activated
        if (SelfAbilitySystem.TryActivateAbility(Ability))
        {
            // Send gameplay event to this player with information on target etc
            AbilitySystemStatics.SendGameplayEventToComponent(SelfAbilitySystem, eventTag, gameplayEventData);
        }
    }
        /// <inheritdoc />
        public void HandleGameplayEvent(GameplayTag EventTag, GameplayEventData Payload)
        {
            /**
             * TODO: Handle triggered abilities
             * Search component for all abilities that are automatically triggered from a gameplay event
             */

            OnGameplayEvent.Invoke(EventTag, Payload);
        }
    public void CastAbility2()
    {
        var eventTag          = Ability2.Tags.AbilityTags.Count > 0 ? Ability2.Tags.AbilityTags[0] : new GameplayTag();
        var gameplayEventData = new GameplayEventData();

        gameplayEventData.EventTag = eventTag;
        gameplayEventData.Target   = this.Target2;

        // If ability can be activated
        if (SelfAbilitySystem.TryActivateAbility(Ability2))
        {
            // Send gameplay event to this player with information on target etc
            AbilitySystemStatics.SendGameplayEventToComponent(SelfAbilitySystem, eventTag, gameplayEventData);
        }
    }
Пример #4
0
        public override async void ActivateAbility(AbilitySystemComponent Source, AbilitySystemComponent Target, IAbilityBehaviour Ability)
        {
            var abilitySystemActor            = Source.GetActor();
            var animationEventSystemComponent = abilitySystemActor.GetComponent <AnimationEventSystem>();
            var animatorComponent             = abilitySystemActor.GetComponent <Animator>();

            // Ability.State = AbilityState.Activated;

            // Make sure we have enough resources.  End ability if we don't

            animatorComponent.SetTrigger(AnimationTriggerName);
            //(_, var gameplayEventData) = await AbilitySystem.OnGameplayEvent.WaitForEvent((gameplayTag, eventData) => gameplayTag == WaitForEventTag);
            var gameplayEventData = new GameplayEventData()
            {
                Instigator = Source,
                Target     = Target
            };

            List <GameObject> objectsSpawned = new List <GameObject>();

            GameObject instantiatedProjectile = null;

            await animationEventSystemComponent.CustomAnimationEvent.WaitForEvent((x) => x == CastingInitiated);

            if (Projectile != null)
            {
                instantiatedProjectile = Instantiate(Projectile);
                instantiatedProjectile.transform.position = abilitySystemActor.transform.position + this.ProjectilePositionOffset + abilitySystemActor.transform.forward * 1.2f;
            }

            animatorComponent.SetTrigger(ProjectileFireTriggerName);

            await animationEventSystemComponent.CustomAnimationEvent.WaitForEvent((x) => x == FireProjectile);

            // Animation complete.  Spawn and send projectile at target
            if (instantiatedProjectile != null)
            {
                SeekTargetAndDestroy(Source, gameplayEventData, instantiatedProjectile);
            }


            var beh = animatorComponent.GetBehaviour <AnimationBehaviourEventSystem>();
            await beh.StateEnter.WaitForEvent((animator, stateInfo, layerIndex) => stateInfo.fullPathHash == Animator.StringToHash(CompletionAnimatorStateFullHash));
        }
Пример #5
0
        private async void SeekTargetAndDestroy(IGameplayAbilitySystem AbilitySystem, GameplayEventData gameplayEventData, GameObject projectile)
        {
            await projectile.GetComponent <Projectile>().SeekTarget(gameplayEventData.Target.TargettingLocation.gameObject, gameplayEventData.Target.gameObject);

            _ = AbilitySystem.ApplyGameEffectToTarget(TargetGameplayEffect, gameplayEventData.Target);
            DestroyImmediate(projectile);
        }
Пример #6
0
 public static void SendGameplayEventToComponent(AbilitySystemComponent TargetAbilitySystem, GameplayTag EventTag, GameplayEventData Payload)
 {
     TargetAbilitySystem.HandleGameplayEvent(EventTag, Payload);
 }