Advertisement
Guest User

Untitled

a guest
Apr 19th, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.73 KB | None | 0 0
  1. using UnityEngine;
  2. using TMPro;
  3. using UnityEngine.UI;
  4. using UnityEngine.SceneManagement;
  5.  
  6. public class RotateTicker : MonoBehaviour
  7. {
  8.     //Initialise
  9.     public float spinSpeed = 0.5f;
  10.     private bool spinStop = false;
  11.     private float spinStopMaxTime = 0.25f;
  12.     public float spinStopTime = 0f;
  13.     public float tickZoneAngle = 0f;
  14.     public float tickZoneSpread = 45f;
  15.     public float tickZoneSpreadDecay = 7f;
  16.     public float tickerAngle;
  17.     public int score = 0;
  18.     public GameObject tickZoneParent;
  19.     public GameObject tickZoneImage;
  20.     public GameObject scoreKeeper;
  21.     public TextMeshPro textMeshScore;
  22.     private Image tickZoneFill;
  23.     private float lastTick;
  24.     public float lastMoveDir = 1;
  25.  
  26.     //Move tickzone function
  27.     void moveTickZone()
  28.     {
  29.         //Reposition the tickZone
  30.         //Clockwise
  31.         if (lastMoveDir == 1)
  32.         {
  33.             tickZoneParent.transform.Rotate(0,0, transform.eulerAngles.z + Random.Range(60, 180));
  34.         }
  35.         //Counter clockwise
  36.         else
  37.         {
  38.             tickZoneParent.transform.Rotate(0,0, transform.eulerAngles.z - Random.Range(60, 180));
  39.         }
  40.  
  41.     }
  42.  
  43.     void spinSpeedZero()
  44.     {
  45.         spinSpeed = 0;
  46.     }
  47.  
  48.     void missZone()
  49.     {
  50.         moveTickZone();
  51.         spinStop = true;
  52.         lastTick = transform.eulerAngles.z;
  53.         spinStopTime = spinStopMaxTime;
  54.         tickZoneSpread -= tickZoneSpreadDecay;
  55.     }
  56.  
  57.     // Start is called before the first frame update
  58.     void Start()
  59.     {
  60.         moveTickZone();
  61.         //Get components:
  62.         textMeshScore = scoreKeeper.GetComponent<TextMeshPro>();
  63.         tickZoneFill = tickZoneImage.GetComponent<Image>();
  64.     }    
  65.  
  66.     // Update is called once per frame
  67.     void Update()
  68.     {
  69.         //Keep z rotations in range
  70.         tickZoneAngle = tickZoneParent.transform.eulerAngles.z;
  71.         tickerAngle = transform.eulerAngles.z - 360;
  72.  
  73.         //Get spin direction
  74.         if (spinSpeed != 0)
  75.         {
  76.             lastMoveDir = Mathf.Sign(spinSpeed);
  77.         }
  78.  
  79.         //Spin ticker
  80.         if (!spinStop)
  81.         {
  82.             transform.Rotate(Vector3.forward * -spinSpeed);
  83.         }
  84.  
  85.         //Check if went past tickzone:
  86.         //Clockwise
  87.         if (Mathf.Sign(spinSpeed) == 1)
  88.         {
  89.             if (tickerAngle >= tickZoneAngle - tickZoneSpread && tickerAngle < tickZoneAngle - tickZoneSpread + spinSpeed || tickerAngle + 360 >= tickZoneAngle - tickZoneSpread && tickerAngle + 360 < tickZoneAngle - tickZoneSpread + spinSpeed)
  90.             {
  91.                 missZone();
  92.             }
  93.         }
  94.         //Counter clockwise
  95.         if (Mathf.Sign(spinSpeed) == -1)
  96.         {
  97.             if (tickerAngle >= tickZoneAngle + spinSpeed && tickerAngle < tickZoneAngle || tickerAngle + 360 >= tickZoneAngle + spinSpeed && tickerAngle + 360 < tickZoneAngle)
  98.             {
  99.                 missZone();
  100.             }
  101.         }
  102.  
  103.         //Pause ticker when pressing spacebar
  104.         var spacebar = Input.GetKeyDown(KeyCode.Space);
  105.         if (spacebar) {
  106.  
  107.             spinStop = true;
  108.             lastTick = transform.eulerAngles.z;
  109.             spinStopTime = spinStopMaxTime;
  110.  
  111.             //Check if ticker is in tick zone (or statement for when tick zone is before (360-405) but ticker is after 0 (0 - 45))
  112.             //Yes
  113.             if ((tickerAngle < tickZoneParent.transform.eulerAngles.z && tickerAngle > (tickZoneParent.transform.eulerAngles.z - tickZoneSpread)) || (tickerAngle + 360 < tickZoneParent.transform.eulerAngles.z && tickerAngle + 360 > (tickZoneParent.transform.eulerAngles.z - tickZoneSpread)))
  114.             {
  115.                 score++;
  116.                 textMeshScore.SetText(score.ToString());
  117.             }
  118.             //No
  119.             else
  120.             {
  121.                 tickZoneSpread -= tickZoneSpreadDecay;
  122.             }
  123.  
  124.             //Debug.Log("Ticker Angle: " + transform.eulerAngles.z);
  125.             moveTickZone();
  126.         }
  127.  
  128.         //Restart
  129.         var rKey = Input.GetKeyDown(KeyCode.R);
  130.         if (rKey)
  131.         {
  132.             SceneManager.LoadScene(SceneManager.GetActiveScene().name);
  133.         }
  134.  
  135.         //Timer
  136.         spinStopTime -= Time.deltaTime;
  137.  
  138.         //Clamp spinStopTime so it doesn't fall into negative values
  139.         if (spinStopTime <= 0) { spinStopTime = 0; }
  140.  
  141.         //Update tickZone graphic
  142.         tickZoneFill.fillAmount = tickZoneSpread/360;
  143.  
  144.         //Spin in opposite direction
  145.         if (spinStopTime <= 0 && spinStop) {
  146.             spinSpeed = (spinSpeed + (Mathf.Sign(spinSpeed) * 0.05f)) * -1;
  147.             spinStop = false;
  148.         }
  149.  
  150.         //Missed all zones
  151.         if (tickZoneSpread <= 0)
  152.         {
  153.             spinSpeedZero();
  154.         }
  155.     }
  156. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement