private void RollIfGameBreaks() { int randomNum = Random.Range(0, 10000); switch (m_workType) { case SlaveWorkType.Work: { if (randomNum < 25) { m_workType = SlaveWorkType.Bug; } else if (randomNum < 5) { m_workType = SlaveWorkType.Error; } break; } case SlaveWorkType.Bug: { if (randomNum < 15) { m_workType = SlaveWorkType.Error; } break; } default: break; } }
private void HandlePlayerTrigger() { switch (m_workType) { case SlaveWorkType.Start: //get position from world space to canvas space Vector2 relativeCanvasPos = RectTransformUtility.WorldToScreenPoint(Camera.main, transform.position) - m_gameCanvas.pixelRect.size / 2.0f; m_progressBar = Instantiate(m_radialBar); //attach it to the canvas m_progressBar.transform.SetParent(m_gameCanvas.transform, false); //move it to the relative position m_progressBar.rectTransform.anchoredPosition = relativeCanvasPos; m_progressScript = m_progressBar.GetComponent <ProgressBar>(); m_progressScript.m_maximum = WORK_TIME; m_progressScript.m_colour = m_workColour; //make slave do work m_workType = SlaveWorkType.Work; break; case SlaveWorkType.Work: if (!m_needsCooldown && !m_boostedWork) { m_workType = SlaveWorkType.Boosted; m_progressScript.m_colour = m_boostColour; m_boostedWork = true; } break; case SlaveWorkType.Bug: m_workType = SlaveWorkType.Work; m_needsCooldown = true; break; case SlaveWorkType.Error: m_needsCooldown = true; m_workType = SlaveWorkType.Work; break; default: //HandleSlaveWork(NO_ROTATION_SPEED); break; } }
// Start is called before the first frame update void Start() { m_boostedWork = false; m_needsCooldown = true; m_gameCanvas = FindObjectOfType <Canvas>(); m_workType = SlaveWorkType.Start; //this gives 0 or 1 ----min is inclusive and max is exclusive m_rotateDirection = Random.Range(0, 2); if (m_rotateDirection == 0) { m_rotateDirection = -1; } m_rotation = transform.localRotation.eulerAngles.y; m_maxLeftRotation = m_rotation - ROTATION_DIFFERENCE; m_maxRightRotation = m_rotation + ROTATION_DIFFERENCE; }
// Update is called once per frame void Update() { if (!m_boostedWork) { RollIfGameBreaks(); } if (m_workType != SlaveWorkType.Start && m_workType != SlaveWorkType.Error) { m_timer += Time.deltaTime; } else { m_boostedWork = false; m_timer = 0.0f; } //handle boosted work if (m_boostedWork && m_timer >= BOOST_TIME) { m_boostedWork = false; m_needsCooldown = true; m_workType = SlaveWorkType.Work; m_timer = 0.0f; } else if (m_needsCooldown && m_timer >= BOOST_COOLDOWN_TIME) { m_needsCooldown = false; m_timer = 0.0f; } switch (m_workType) { case SlaveWorkType.Work: m_progressScript.m_colour = m_workColour; HandleSlaveWork(WORK_ROTATION_SPEED); break; case SlaveWorkType.Bug: m_progressScript.m_colour = m_bugColour; HandleSlaveWork(BUG_ROTATION_SPEED); break; case SlaveWorkType.Error: m_progressScript.m_colour = m_errorColour; HandleSlaveWork(NO_ROTATION_SPEED); break; case SlaveWorkType.Boosted: m_progressScript.m_colour = m_boostColour; HandleSlaveWork(BOOST_WORK_ROTATION_SPEED); break; default: HandleSlaveWork(NO_ROTATION_SPEED); break; } transform.localRotation = Quaternion.Euler(new Vector3(0.0f, m_rotation, 0.0f)); if (m_progressScript != null && m_progressScript.m_current >= m_progressScript.m_maximum) { Destroy(gameObject); } }