Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using TMPro;
- using UnityEngine.UI;
- using UnityEngine.SceneManagement;
- public class RotateTicker : MonoBehaviour
- {
- //Initialise
- public float spinSpeed = 0.5f;
- private bool spinStop = false;
- private float spinStopMaxTime = 0.25f;
- public float spinStopTime = 0f;
- public float tickZoneAngle = 0f;
- public float tickZoneSpread = 45f;
- public float tickZoneSpreadDecay = 7f;
- public float tickerAngle;
- public int score = 0;
- public GameObject tickZoneParent;
- public GameObject tickZoneImage;
- public GameObject scoreKeeper;
- public TextMeshPro textMeshScore;
- private Image tickZoneFill;
- private float lastTick;
- public float lastMoveDir = 1;
- //Move tickzone function
- void moveTickZone()
- {
- //Reposition the tickZone
- //Clockwise
- if (lastMoveDir == 1)
- {
- tickZoneParent.transform.Rotate(0,0, transform.eulerAngles.z + Random.Range(60, 180));
- }
- //Counter clockwise
- else
- {
- tickZoneParent.transform.Rotate(0,0, transform.eulerAngles.z - Random.Range(60, 180));
- }
- }
- void spinSpeedZero()
- {
- spinSpeed = 0;
- }
- void missZone()
- {
- moveTickZone();
- spinStop = true;
- lastTick = transform.eulerAngles.z;
- spinStopTime = spinStopMaxTime;
- tickZoneSpread -= tickZoneSpreadDecay;
- }
- // Start is called before the first frame update
- void Start()
- {
- moveTickZone();
- //Get components:
- textMeshScore = scoreKeeper.GetComponent<TextMeshPro>();
- tickZoneFill = tickZoneImage.GetComponent<Image>();
- }
- // Update is called once per frame
- void Update()
- {
- //Keep z rotations in range
- tickZoneAngle = tickZoneParent.transform.eulerAngles.z;
- tickerAngle = transform.eulerAngles.z - 360;
- //Get spin direction
- if (spinSpeed != 0)
- {
- lastMoveDir = Mathf.Sign(spinSpeed);
- }
- //Spin ticker
- if (!spinStop)
- {
- transform.Rotate(Vector3.forward * -spinSpeed);
- }
- //Check if went past tickzone:
- //Clockwise
- if (Mathf.Sign(spinSpeed) == 1)
- {
- if (tickerAngle >= tickZoneAngle - tickZoneSpread && tickerAngle < tickZoneAngle - tickZoneSpread + spinSpeed || tickerAngle + 360 >= tickZoneAngle - tickZoneSpread && tickerAngle + 360 < tickZoneAngle - tickZoneSpread + spinSpeed)
- {
- missZone();
- }
- }
- //Counter clockwise
- if (Mathf.Sign(spinSpeed) == -1)
- {
- if (tickerAngle >= tickZoneAngle + spinSpeed && tickerAngle < tickZoneAngle || tickerAngle + 360 >= tickZoneAngle + spinSpeed && tickerAngle + 360 < tickZoneAngle)
- {
- missZone();
- }
- }
- //Pause ticker when pressing spacebar
- var spacebar = Input.GetKeyDown(KeyCode.Space);
- if (spacebar) {
- spinStop = true;
- lastTick = transform.eulerAngles.z;
- spinStopTime = spinStopMaxTime;
- //Check if ticker is in tick zone (or statement for when tick zone is before (360-405) but ticker is after 0 (0 - 45))
- //Yes
- 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)))
- {
- score++;
- textMeshScore.SetText(score.ToString());
- }
- //No
- else
- {
- tickZoneSpread -= tickZoneSpreadDecay;
- }
- //Debug.Log("Ticker Angle: " + transform.eulerAngles.z);
- moveTickZone();
- }
- //Restart
- var rKey = Input.GetKeyDown(KeyCode.R);
- if (rKey)
- {
- SceneManager.LoadScene(SceneManager.GetActiveScene().name);
- }
- //Timer
- spinStopTime -= Time.deltaTime;
- //Clamp spinStopTime so it doesn't fall into negative values
- if (spinStopTime <= 0) { spinStopTime = 0; }
- //Update tickZone graphic
- tickZoneFill.fillAmount = tickZoneSpread/360;
- //Spin in opposite direction
- if (spinStopTime <= 0 && spinStop) {
- spinSpeed = (spinSpeed + (Mathf.Sign(spinSpeed) * 0.05f)) * -1;
- spinStop = false;
- }
- //Missed all zones
- if (tickZoneSpread <= 0)
- {
- spinSpeedZero();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement