using UnityEngine; using System.Collections; public class Reel : MonoBehaviour { public Sprite maskSprite; // The sprite to use as the mask public Sprite[] faces; // Array of face sprites public float faceSpriteSize = 1.0f; // Size of the face sprites public float spacing = 0.5f; // Spacing between the face sprites public float baseSpinSpeed = 5.0f; // Base speed at which the faces move public float minSpinTime = 2.0f; // Minimum spin time public float maxSpinTime = 5.0f; // Maximum spin time private void Start() { BuildReel(); } public void BuildReel() { // Add and configure mask GameObject maskObj = new GameObject("Mask"); maskObj.transform.SetParent(transform); maskObj.transform.localPosition = Vector3.zero; // Add a SpriteRenderer to the mask object SpriteRenderer maskRenderer = maskObj.AddComponent(); maskRenderer.sprite = maskSprite; maskRenderer.sortingLayerName = "Masks"; maskRenderer.sortingOrder = 0; // Add and configure the SpriteMask SpriteMask mask = maskObj.AddComponent(); mask.sprite = maskSprite; mask.isCustomRangeActive = true; mask.frontSortingOrder = maskRenderer.sortingOrder; mask.backSortingOrder = maskRenderer.sortingOrder - 1; // Create and position face objects float reelHeight = (faces.Length - 1) * (faceSpriteSize + spacing); for (int i = 0; i < faces.Length; i++) { GameObject faceObj = new GameObject("Face" + (i + 1)); faceObj.transform.SetParent(transform); faceObj.transform.localPosition = new Vector3(0, reelHeight / 2 - i * (faceSpriteSize + spacing), 0); SpriteRenderer faceRenderer = faceObj.AddComponent(); faceRenderer.sprite = faces[i]; faceRenderer.sortingLayerName = "Reels"; faceRenderer.sortingOrder = i + 1; faceRenderer.maskInteraction = SpriteMaskInteraction.VisibleInsideMask; faceRenderer.enabled = true; } } public void StartSpin() { StartCoroutine(SpinReel()); } private IEnumerator SpinReel() { float spinTime = Random.Range(minSpinTime, maxSpinTime); float spinSpeed = baseSpinSpeed * Random.Range(0.8f, 1.2f); float elapsed = 0.0f; float reelHeight = (faces.Length - 1) * (faceSpriteSize + spacing); while (elapsed < spinTime) { elapsed += Time.deltaTime; for (int i = 0; i < faces.Length; i++) { Transform faceTransform = transform.GetChild(i); SpriteRenderer faceRenderer = faceTransform.GetComponent(); float newY = faceTransform.localPosition.y - (spinSpeed * Time.deltaTime); faceTransform.localPosition = new Vector3(faceTransform.localPosition.x, newY, faceTransform.localPosition.z); faceRenderer.enabled = faceTransform.localPosition.y <= reelHeight / 2 && faceTransform.localPosition.y >= -reelHeight / 2; if (faceTransform.localPosition.y < -reelHeight / 2) { faceTransform.localPosition = new Vector3(faceTransform.localPosition.x, reelHeight / 2, faceTransform.localPosition.z); } } yield return null; } int winningIndex = Random.Range(0, faces.Length); Transform winningFace = transform.GetChild(winningIndex); float centerY = 0; winningFace.localPosition = new Vector3(winningFace.localPosition.x, centerY, winningFace.localPosition.z); for (int i = 0; i < faces.Length; i++) { if (i != winningIndex) { Transform faceTransform = transform.GetChild(i); float offset = (i - winningIndex) * (faceSpriteSize + spacing); faceTransform.localPosition = new Vector3(faceTransform.localPosition.x, centerY + offset, faceTransform.localPosition.z); } } Debug.Log("Winning Face: " + faces[winningIndex].name); } }