animancer icon indicating copy to clipboard operation
animancer copied to clipboard

Multiple Animancer Events with the same name

Open KybernetikGames opened this issue 2 years ago • 1 comments

Use Case

This issue is split out from https://github.com/KybernetikGames/animancer/issues/262 since it could be implemented separately from the main idea presented there.

Multiple events on the same animation could have the same key.

That can already be done by calling state.Events.IndexOf(name, startIndex) in a loop. Each time it finds an index you call SetCallback(index, callback) then repeat the IndexOf call starting at the index it just found +1 to keep searching the rest of the sequence.

Solution

Add this to AnimancerEvent.Sequence.cs:

public int AddCallbacks(string name, Action callback)
{
    var count = 0;
    var index = -1;
    while (true)
    {
        index = IndexOf(name, index + 1);
        if (index < 0)
            return count;

        count++;
        AddCallback(index, callback);
    }
}

A SetCallbacks method would be identical except for its AddCallback being replaced by SetCallback.

Unfortunately, it wouldn't be able to handle nested states because the AnimancerEvent.Sequence has no connection to a state or transition, so I'll need to add recursive methods to the appropriate states and transitions like the one I gave you a while ago which could now simply call AddCallbacks.

KybernetikGames avatar Feb 18 '23 04:02 KybernetikGames