add numberstand to downcount
This commit is contained in:
133
Assets/Quiz/Scripts/DownCount/NumberStand.cs
Normal file
133
Assets/Quiz/Scripts/DownCount/NumberStand.cs
Normal file
@@ -0,0 +1,133 @@
|
||||
|
||||
using UdonSharp;
|
||||
using UnityEngine;
|
||||
using VRC.SDKBase;
|
||||
using VRC.Udon;
|
||||
|
||||
public class NumberStand : UdonSharpBehaviour
|
||||
{
|
||||
public GameObject[] bigNumberPoints;
|
||||
public GameObject[] smallNumberPoints;
|
||||
public GameObject[] bigNumberCards;
|
||||
public GameObject[] smallNumberCards;
|
||||
|
||||
public TMPro.TextMeshProUGUI targetNumberText;
|
||||
[UdonSynced] public int targetNumber;
|
||||
|
||||
public int[] bigNumbers = { 25, 50, 75, 100 };
|
||||
public int[] smallNumbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
|
||||
|
||||
private int _spinCount = 0;
|
||||
private bool _isSpinning = false;
|
||||
|
||||
public void Start()
|
||||
{
|
||||
if (Networking.IsOwner(gameObject))
|
||||
{
|
||||
ResetCards();
|
||||
}
|
||||
}
|
||||
|
||||
public void GenerateTargetNumber()
|
||||
{
|
||||
targetNumber = Random.Range(101, 1000);
|
||||
UpdateTargetNumberDisplay();
|
||||
RequestSerialization();
|
||||
}
|
||||
|
||||
public void UpdateTargetNumberDisplay()
|
||||
{
|
||||
_spinCount = 10;
|
||||
if (!_isSpinning)
|
||||
{
|
||||
SpinStep();
|
||||
}
|
||||
}
|
||||
|
||||
public void SpinStep()
|
||||
{
|
||||
if (targetNumberText == null) return;
|
||||
|
||||
if (_spinCount > 0)
|
||||
{
|
||||
_isSpinning = true;
|
||||
targetNumberText.text = Random.Range(101, 1000).ToString();
|
||||
_spinCount--;
|
||||
SendCustomEventDelayedSeconds(nameof(SpinStep), 0.1f);
|
||||
}
|
||||
else
|
||||
{
|
||||
_isSpinning = false;
|
||||
targetNumberText.text = targetNumber.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private int _lastTargetNumber;
|
||||
|
||||
public override void OnDeserialization()
|
||||
{
|
||||
if (targetNumber != _lastTargetNumber)
|
||||
{
|
||||
_lastTargetNumber = targetNumber;
|
||||
UpdateTargetNumberDisplay();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void ResetCards()
|
||||
{
|
||||
// Reset Big Numbers
|
||||
for (int i = 0; i < bigNumberPoints.Length && i < bigNumberCards.Length; i++)
|
||||
{
|
||||
if (bigNumberCards[i] != null && bigNumberPoints[i] != null)
|
||||
{
|
||||
bigNumberCards[i].transform.position = bigNumberPoints[i].transform.position;
|
||||
bigNumberCards[i].transform.rotation = bigNumberPoints[i].transform.rotation;
|
||||
|
||||
LetterCard card = bigNumberCards[i].GetComponent<LetterCard>();
|
||||
if (card != null && bigNumbers.Length > 0)
|
||||
{
|
||||
// Reshuffle if we are starting a new pass through the numbers
|
||||
if (i % bigNumbers.Length == 0)
|
||||
{
|
||||
ShuffleIntArray(bigNumbers);
|
||||
}
|
||||
card.SetLetter(bigNumbers[i % bigNumbers.Length].ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Reset Small Numbers
|
||||
for (int i = 0; i < smallNumberPoints.Length && i < smallNumberCards.Length; i++)
|
||||
{
|
||||
if (smallNumberCards[i] != null && smallNumberPoints[i] != null)
|
||||
{
|
||||
smallNumberCards[i].transform.position = smallNumberPoints[i].transform.position;
|
||||
smallNumberCards[i].transform.rotation = smallNumberPoints[i].transform.rotation;
|
||||
|
||||
LetterCard card = smallNumberCards[i].GetComponent<LetterCard>();
|
||||
if (card != null && smallNumbers.Length > 0)
|
||||
{
|
||||
// Reshuffle if we are starting a new pass through the numbers
|
||||
if (i % smallNumbers.Length == 0)
|
||||
{
|
||||
ShuffleIntArray(smallNumbers);
|
||||
}
|
||||
card.SetLetter(smallNumbers[i % smallNumbers.Length].ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ShuffleIntArray(int[] arr)
|
||||
{
|
||||
for (int i = 0; i < arr.Length; i++)
|
||||
{
|
||||
int temp = arr[i];
|
||||
int randomIndex = Random.Range(i, arr.Length);
|
||||
arr[i] = arr[randomIndex];
|
||||
arr[randomIndex] = temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user