Seems I have to change my understanding on the Trigger once as a sub event. Although logically I see how it works, it doesn’t sit well intuitively. I should have read the link below a bit slower and taken it in .
So here’s my take on why it’s not working when you have multiple pawns. First off, here’s an explanation of how GDevelop implements the Trigger Once. Understanding this is important to understand the why it behaves the way it does.
If you have multiple pawns, one always has the State set to “Idle” which means that first event (Pawn.State = “Idle”) is always being actioned. As such, the Tigger Once UID stays in the storage, and isn’t actioned again event when another pawn’s state changes to idle. Those pawns already have an State of “Idle” prevent that.
However, the only time the State is set to “Drag” is when the pawn is dragged. If it’s not dragged (i.e. it has never been dragged or it was dropped), then the State of a Pawn is “Idle”. When you drag, the trigger once is activated because there was no pawn with that state for quite a few game frames and the Trigger Once UID is removed from the storage.
It’s not so much a problem with trigger once, it’s understanding the logic behind it. It is logical, but not intuitive. And that’s what throws most users. From a quick skim read, that GitHub thread is about adding a more “instinctive” Trigger Once implementation.