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); } }
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)); }
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); }
public static void SendGameplayEventToComponent(AbilitySystemComponent TargetAbilitySystem, GameplayTag EventTag, GameplayEventData Payload) { TargetAbilitySystem.HandleGameplayEvent(EventTag, Payload); }