94 lines
2.3 KiB
C#
94 lines
2.3 KiB
C#
|
|
using System.Collections;
|
|||
|
|
using UnityEngine;
|
|||
|
|
|
|||
|
|
public class vShooterTrainingController : MonoBehaviour
|
|||
|
|
{
|
|||
|
|
public vShooterScore shooterScore;
|
|||
|
|
public float timeToStartTraining = 3f;
|
|||
|
|
public float timeToFinishTraining = 60f;
|
|||
|
|
public UnityEngine.UI.Text timeDisplay;
|
|||
|
|
|
|||
|
|
public UnityEngine.Events.UnityEvent onInit, onStartCounter, onFinishCounter, onCancelTraining;
|
|||
|
|
|
|||
|
|
Coroutine currentRoutine;
|
|||
|
|
float currentTime;
|
|||
|
|
public bool initOnStart;
|
|||
|
|
|
|||
|
|
private void Start()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if (shooterScore)
|
|||
|
|
{
|
|||
|
|
if (initOnStart) StartTraining();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
public void StartTraining()
|
|||
|
|
{
|
|||
|
|
if (!shooterScore) return;
|
|||
|
|
shooterScore.StartScore();
|
|||
|
|
FinishTraining();
|
|||
|
|
currentRoutine = StartCoroutine(RunTraining());
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
public void CancelTraining()
|
|||
|
|
{
|
|||
|
|
if (!shooterScore) return;
|
|||
|
|
if (currentRoutine != null)
|
|||
|
|
{
|
|||
|
|
StopCoroutine(currentRoutine);
|
|||
|
|
currentRoutine = null;
|
|||
|
|
onCancelTraining.Invoke();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public void FinishTraining()
|
|||
|
|
{
|
|||
|
|
if (!shooterScore) return;
|
|||
|
|
if (currentRoutine != null)
|
|||
|
|
{
|
|||
|
|
StopCoroutine(currentRoutine);
|
|||
|
|
currentRoutine = null;
|
|||
|
|
shooterScore.FinishScore();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
timeDisplay.text = "";
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
IEnumerator RunTraining()
|
|||
|
|
{
|
|||
|
|
onInit.Invoke();
|
|||
|
|
yield return new WaitForSeconds(1f);
|
|||
|
|
timeDisplay.text = "";
|
|||
|
|
var timeToEnd = Time.time + timeToStartTraining;
|
|||
|
|
while (timeToEnd > Time.time)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
timeDisplay.text = (timeToEnd - Time.time).ToString("00");
|
|||
|
|
yield return null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
yield return new WaitForSeconds(.2f);
|
|||
|
|
timeDisplay.text = "";
|
|||
|
|
yield return new WaitForSeconds(.2f);
|
|||
|
|
timeDisplay.text = "GO!";
|
|||
|
|
yield return new WaitForSeconds(1f);
|
|||
|
|
timeDisplay.text = "";
|
|||
|
|
onStartCounter.Invoke();
|
|||
|
|
yield return new WaitForSeconds(.2f);
|
|||
|
|
timeToEnd = Time.time + timeToFinishTraining;
|
|||
|
|
|
|||
|
|
while (timeToEnd > Time.time)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
timeDisplay.text = (timeToEnd - Time.time).ToString("00");
|
|||
|
|
yield return null;
|
|||
|
|
}
|
|||
|
|
onFinishCounter.Invoke();
|
|||
|
|
|
|||
|
|
shooterScore.FinishScore();
|
|||
|
|
timeDisplay.text = "";
|
|||
|
|
}
|
|||
|
|
}
|