Feature Request: Sequences of Parts and, ideally, a Visual State Machine

I’ve completed an initial test integration of reactional into my game, and have identified one area where it does not work so well for my use case.

In my use case, I imported a piece of classical music, divided into a parts A, B, C, and D. I set the engine to play Part A, and expected it to progress through B, C, and D before looping back to A. But Reactional treats each Part in a Theme as a self contained track, and will loop the current Part endlessly.

I was able to solve this in the short term by creating a “Whole” Part that encompasses the entire piece. However, in the future I want to be able to tell the system to progress to, say, Part C after the current part completes, If I did this currently in code, I think I would need to be careful with the timing, to make sure that the transition did not happen before the current part concludes, and Part C would begin to loop instead of progressing to Part D.

I haven’t yet experimented with the Progress block, but from what I understand, I don’t think it fits my use case, or would require me to create a lot of Progress macros and an external logic system to switch them on and off.

The Requested Feature:

The smallest viable version of the feature would be this: Allow me to create a playlist of Parts in Reactional Composer, and create API methods to let me start the Theme playlist in unity and queue up a jump to a specific place in the playlist (after the current Part finishes playing).

Long term, I encourage the team to think about building a visual state machine editor for Reactional projects to allow for logically controlled flow through sequences of parts. Something similar to the animation state graphs used by game engines. The Rive Engine is a great example a state graph feature adds reactivity to a temporal media management system. I suspect that Rive might become a dominant 2D animation tool in the game’s industry, largely do to its inclusion of its state graph feature.

I recognize that a state machine editor would be a large project, but I wanted to throw it out there since I think it would put the software significantly ahead of any competing software that lacked this feature.

Very good points, and something that has been in the works for a long time.
In the next version of composer there will be a Parts view.
In there you can add any interactive block to either a part start or part end.

So for instance on Part: A End, you can add a Jump to Section: B. Or pick a random based on the incoming value.

Early December we are aiming to release this.

I’m excited to take a look at it!

Sorry for the delay in reply, I was planning to evaluate this alongside Unity plugin v 1.0.4 so that I could also test the script control of performer parameters, but I don’t want to delay giving feedback while I wait for the new Unity plugin version.

Part End is definitely a step in the right direction. Previously I didn’t see an obvious way to get one section to play seamlessly after another. The current setup looks like it works really well for situations where track choice is governed by a single linear progression. For example, a developer could map the Part End control to a bosses remaining health, so sections are added and removed from the game’s music loop as the player gets closer to finishing off the boss.

In my use case, I’d like to make a section flow chart based on whether the player is close enough to certain world-space instrument locations, what state the player is in, various pieces of level state, etc… I do think that this is now possible using section jumps in Part End. Currently I would do it like this:

Build an animation controller-like system in unity to hold my playback flow model. This system would continuously evaluate its model and update what the next section would be. I have not tried yet: is it possible in code to alter the Part End control and change the jump target? If not, I could manually configure each section in Rive Composer with a section jump to each other section I might want it to jump to. For sanity, I could say that control range (0, 0.1) corresponds to the section with index 0. Range (0.5, 0.6) corresponds to the section with index 5, etc… But that’s an unfeasible amount of fiddly manual configuration.