I presume you are having trouble with keeping track of the value on each wheel, or how to store that?
You’ve probably got most of this done, but I’ll show you how I done it and how I keep track of states.
I have a blueprint with 3 movable static mesh actors, they are cylinders with 12 sides each (also 3 text render components, to test the state).
Below is an overview of the blueprints event graph:
(The set world rotation should actually be set relative rotation)
Here are the functions. First, MakeRandomRotation. It makes a random rotation, that is rounded to the nearest 30 degree angle, the 30 works for the 12 sided cylinder obviously but you could change it if you had less sides… You can also set min and max turns, mine are arbitrarily set at 16-24. This function is called to create a random rotation for each wheel.
The next bit after the MakeRandomRotation functions, the modulo of the full rotation, divided by 30 and truncated gives you the amount the wheel value has increased by. It’s ignoring complete rotations, and getting how many 30 degree rotations are left, so if there’s 2 30 degree rotations then the value of the wheel has increased to whatever it was at plus two numbers higher.
I added a function to set the play rate of the timeline based on how much the wheel is turning, so more turns, the timeline will take longer to complete, this is just visual. The *4 is just a multiplier so you can speed it up:
The timelines themselves are 1 second long, and have a float track and event track. The float goes from 0 to 1, curved like this so the wheel slows down before stopping, just a simple way of doing it. The event track calls an event at .25, this starts the next wheel.
The timeline sets the rotation of the wheel. Start rotation starts at 0 and is set in the next function. This should be understandable from the overview screenshot.
There’s a fucntion for each wheel to update their values - their state and start rotation, for when they are rotated again.
CurrentNumber, plus the amount it has increased, mod 12 so it loops back around. Doing it like this way actually makes side 12 equal to 0, but that shouldn’t matter.
I make a custom struct that contains 3 integers. This is used to store the result when all wheels are finished as below:
You could then make a function which checks if your result matches some value, like this:
So you can enter 1,1,1 or 7,7,7 or whichever into the function, and check if the result matches, you check for any you want to, and either branch, or set an enum based on the return value. You could then swithc on enum, for whatever happens for those results.
Obviously by doing it this way, the rotation value continues increasing if you never reset it, it wouldn’t really be neccesary to do it this way, it could be faked by spinning it and then just setting the rotation directly. Though you’ve probably got that part set up