This covers the cinematic sequencer in general:
In your case you are going to create a level sequence by right clicking in the content browser and creating a new level sequence. Then you are going to add your post process volume as an actor in the sequence by pressing the green “+” symbol.
Then add “Blend Weight” by clicking the green “+” next to your post process volume in the level sequence editor. (This is that visibility property I couldn’t remember the name of)
You need to create KeyFrames, create one at frame 0 with your default blend weight (most likely 0.0 for off / none), go a few frames forward and add another KeyFrame, then change the blend weight.
Be sure you right click the “Blend Weight” in the editor on the left and select: Edit Selection → When Finished: Keep State.
Drag a Cinematic Sequencer and a trigger onto your level, in the cinematic sequencer set the Level Sequence to the one you just created, then using direct binding bind Show in the cinematic sequencer to the triggers “triggered” event. Make Certain the cinematic sequencer is set to display for the instigator only and not all players.
I recommend duplicating this entire setup with a level sequence that transitions the blend weight back to zero (KeyFrames are swapped Start at the ending Blend Weight and transition to 0)
When you want to start and stop them using verse:
#Pseudo Verse:
@editable
StartTrigger : trigger_device = trigger_device{}
@editable
StopTrigger : trigger_device = trigger_device{}
ShowEffectForPlayer(InPlayer : agent) : void =
StartTrigger.Trigger(InPlayer)
HideEffectForPlayer(InPlayer : agent) : void =
StopTrigger.Trigger(InPlayer)
Only problem I see, and maybe someone else can chime in for this, You need a way to detect when the player is moving into / out of the storm. I don’t see any events for the storm controller you could bind to. However you can get the storms transform with creative_object_base GetTransform after checking IsValid[] of course.
Then in a loop somewhere you could get the player Translations and calculate the distance using: Distance(vector3, vector3) and checking that this distance is < the circle radius meaning the player is inside the storm otherwise outside. Track each players state with a map PlayerStormState : [agent]logic = map{} if needed. (Shouldn’t if you only are interested in a one off response to the event such as effect on/off)
Another possible way would be to periodically teleport an invisible damage volume that is set to cylinder shape and has the same radius as the storm. You would need to scale this show how to match the changing storm circle radius? Possibly by setting scale in a transform and passing the transform into your moveTo vs just a vector3. Then bind to the agentEnters / agentExits events of the damage volume.