Files
QuizzinMk5.1/Assets/Quiz/Scripts/DownCount/NumberStand.cs
2025-12-03 01:44:40 +00:00

134 lines
3.8 KiB
C#

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;
}
}
}