Abilities should wait for character rotation completed

I’m currently struggling to achieve the following behavior with my top down game using GAS: I can control the directional movement with WASD and am able to shoot a projectile in the direction of the mouse cursor. However, I want my characters rotation to be effected by slow effects such that

  1. when I change direction via WASD the character should wait for the rotation and only start moving when facing the final direction. Currently the movement occurs simultaneously with the rotation which feels weird.
  2. when standing still and I shoot a projectile behind the character, the character should first rotate to that direction and then start shooting. Currently the projectile is shot first and after the montage the rotation finishes.

So far, I implemented gameplay abilities GA_ShootProjectile, GA_Move_WASD and GA_Rotate as following. I also tried different variations with “Use Controller Desired Rotation“ and “Orient Rotation to Movement” flags without success.

GA_Move_WASD: takes enhanced input values and uses Pawn→AddMovementInput

GA_Rotate: rotates character via Controller→SetControlRotation to current mouse position. Since this function returns immediately I added a delay to simulate the rotation. Additionally I block all other abilities via tag.

As for the shooting the idea was to chain GA_Rotate and GA_ShootProjectile:

I now have the following issues:

  1. for shooting: the character just rotates but then does not shoot since when the TryActivateAbility is executed, it is invalid due to the blocking tag and just skips it
  2. for the movement: this is completely unaffected by the rotation yet. I’m not sure if I should add the rotation logic directly in GA_Move_WASD or not
  3. I have no indicator wether the rotation is finished or not. Something like WaitForRotation would be nice. Is this something I have to implement by myself?
  4. Since it is multiplayer, this functionality needs to be replicated as well.

I built something similar to what you are trying to do. I can’t remember exactly what I did but maybe I can push you in the right direction.

I’m not sure Gameplay Ability is the right fit for rotating the character do a desired direction.

I used a combination of bools to tell the character what I (the player) wants vs what he is doing.
for instance, the character movement starts unlocked and moves freely. When you click attack set a ShouldFaceMouse bool and use a rotation on tick with InterpTo t get the character facing the mouse, the ShuldFaceMouse should lock the character rotation to the mouse.
Then have a IsFacingAttackDirecfion bool that gets set and then trigger the actual attacking.

I know setting this up is not super simple but these mechanics for a top down take a bit of work to feel good and function well.
I was for V Rising style setup and eventually got what I wanted.