public class PrizeWheel : MiniGame
Selector |
|
RectTransform _Selector |
Reference to the Selector Object. This is the object that points to the reward you will get and that also flaps as it collides with the wheel's knots. |
eSelectorDirection _SelectorDirection |
Where the selector is going to be attached (top, right, bottom, left) |
bool _AnchorSelectorToCenter |
True = selector it's on the center. False will place it on the outside. When in the center, the selector will not collide with the knots. |
float _SelectorElasticDuration |
Knots collide with the selector and rotate them. This variable represents how long it takes for the selector to return to the initial rotation. |
float _SelectorElasticAmplitud |
Higher values make the selector oscillate farther when returning to the initial orientation. |
float _SelectorElasticPeriod |
How many times, the selector will oscillate before resting. |
Wheel |
|
Transform _Wheel |
Reference to the Wheel Object. This object is rotated to spin the wheel. |
float _Elements_Spread |
Angular empty space between elements.Bigger values, increase the gap between elements. |
float _Elements_Offset |
Distance between the element and the wheel center. Positive values push elements to the outside |
bool _Elements_EqualDistribution |
When false, Elements with higher Probability will get a wider section of the wheel. If true, Probability is used for deciding in which element the wheel should end after spinning, but all elements get the same size regardless of their probability. |
Knots |
|
Transform _Knots |
This is the root node of all Knots. All knots should be child of this object in the hierarchy. Only enabled objects will be used as knots. |
float _KnotsOffset |
By default, knots are distributed around the wheel. This variable adds an offset to the first knot. So, if knots are placed every 30 degrees, and this value is set to 5 degrees. Then knots are placed at: 5, 35, 65, 95, etc. This is useful to make knots aligned to the center of the elements instead to the beginning. Just add an offset equal to half the element angular size. |
AudioClip[] _Sounds_KnotCollision |
Every time the selector hit's a knot, it will pick a random AudioClip from this array and play it. |
float _Sound_KnotCollision_MinVolume |
To make the sounds more random, the volume can be random as well. So that even when the same audio clip is used, it will sound different. volume = Random( Min_Volume, Max_Volume) |
float _Sound_KnotCollision_MaxVolume |
|
UnityEventAudioClip _PlayKnotSound |
When a sound should be played, this callback is used. Normally it should be referencing the PlayOneShot function of an AudioSource. However, if you are using a custom audio solution to play the sounds, this can be used to call your own functions. |
Simulation |
|
bool _CenterOnElement |
If true, when the wheel stops it will stop in the center of a reward. |
bool _RotateSelector |
Either rotates the Selector or rotate the Wheel while keeping the selector fixed. |
float _Rotation_MinCycles |
How many full laps it does every time it plays |
float _Rotation_MaxCycles |
Num_Rotations = Random( Min_Cycles, Max_Cycles ) |
float _Rotation_MinTime |
How long it stays rotating |
float _Rotation_MaxTime |
How long will it take for the wheel to stop |
float _SpeedUpTime |
Total_Spin_time = Random( Min_Time, Max_Time ) |
float _Friction |
When 0, the rotation will use a linear approach where it keeps a constant velocity. As this value gets higher, the rotation speed is slowly decreased until it stops. This creates an EasyOut effect. Actually there is a fake small EasyIn, so the actual movement happens using an EasyInOut, where the In and Out have different weights. |
UnityEvent _OnStartSpinning |
Callback invoked when the wheel start spinning. Can be used for effects and triggering other custom game logic. |
UnityEventInt _OnFinishSpinning |
Callback to spawn effects and sounds when the wheel stops |
Timing |
|
float _TimeCollectReward |
How long to wait once the wheel stops to show the reward. This can be used to wait for sounds or effects to finish. |
float _TimeNewRound |
How long to wait before allowing the wheel to be spun again |
List<RectTransform> mKnots |
List of all enabled knots found as children of _Knots |
bool mIsPlaying |
Is the wheel currently spinning? |
float mSelectorMaxAngle |
Maximum angle that can have a selector because of been pushed by a knot |
float mWheelMaxAngleForKnot |
Maximum angle at which the wheel can rotate and still a knot will be touching the selector. |
float mSelectorElasticStartTime |
This is used to update the selector flapping. It changes every time the selector looses touch of a knot |
float mSelectorElasticStartAngle |
Another variable to control the starting point of the flapping effect |
int mForceReward |
Index of the reward where the wheel is going to stop. |
.
override void ApplyLayout() |
Fills the mRewards and mKnots. Distributes the rewards around the wheel and places the Selector in the correct location. |
override void FilterRewards() |
Called right after mRewards is filled. This is used to remove any reward that doesn't make sense at that time according to gameplay and progression. |
void ApplyLayout_Knots( float StartAngle ) |
Called from ApplyLayout, this distributes the knots around the wheel |
void StartSpinning() |
Starts the play. Computes the reward that should be selected and executes the DoPlay coroutine |
void StartSpinning( int forceReward ) |
Once the reward is selected, this starts the DoPlay coroutine |
override void StartRound() |
Computes the reward that should be selected and calls StartSpinning to execute the DoPlay coroutine |
void StopPlay() |
Stops spinning the wheel |
void GetRandomElement( ref int ElementIdx, out float Angle ) |
Selects a random reward based on their probabilities. Returns the angle at which the wheel should stop. |
IEnumerator DoPlay( int TargetElementIdx, float ElementAngle ) |
Executes the spinning and then spinning back if the selector is not in the resting orientation |
bool UpdateRotation(float initialAngle, float totalRotation, float initialTime, float totalTime, float speedUpTime) |
Update the wheel rotation |
bool UpdateSelector( ref int currentKnot, bool rotateback ) |
Updates the selector angle, detects collision against the knots |
float GetElasticOut( float t, float a, float b, float amplitude, float period ) |
Easy In-Out with a short In and a long Out range |
void GetSelectorAngles () |
Find selectorAngle: highest angle the selector reaches because of the knots |
Created with the Personal Edition of HelpNDoc: Create help files for the Qt Help Framework