118 lines
No EOL
2.7 KiB
C#
118 lines
No EOL
2.7 KiB
C#
/*
|
|
* Author: Livinia Poo
|
|
* Date: 4/2/25
|
|
* Description:
|
|
* Starting/Ending Shifts
|
|
*/
|
|
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
|
|
public class ShiftManager : MonoBehaviour
|
|
{
|
|
/// <summary>
|
|
/// Shift details
|
|
/// </summary>
|
|
[SerializeField] private float shiftDuration;
|
|
private float remainingTime;
|
|
|
|
/// <summary>
|
|
/// Shift box collider trigger
|
|
/// </summary>
|
|
private Collider shiftTrigger;
|
|
|
|
/// <summary>
|
|
/// Gamemanager reference
|
|
/// </summary>
|
|
private GameManager gm;
|
|
|
|
/// <summary>
|
|
/// Day manager reference
|
|
/// </summary>
|
|
private DayManager dayManager;
|
|
|
|
/// <summary>
|
|
/// Displaying the timer
|
|
/// </summary>
|
|
public TextMeshProUGUI timerText;
|
|
|
|
/// <summary>
|
|
/// Assigning variables and references
|
|
/// </summary>
|
|
void Awake()
|
|
{
|
|
gm = GameObject.Find("Game Manager").GetComponent<GameManager>();
|
|
dayManager = GameObject.Find("Day Manager").GetComponent<DayManager>();
|
|
|
|
gm.shiftStarted = false;
|
|
remainingTime = shiftDuration;
|
|
|
|
shiftTrigger = GetComponent<Collider>();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Start shift on trigger
|
|
/// </summary>
|
|
/// <param name="other"></param>
|
|
void OnTriggerEnter(Collider other)
|
|
{
|
|
if (other.CompareTag("Player") && !gm.shiftStarted)
|
|
{
|
|
Debug.Log("Shift started");
|
|
|
|
gm.shiftStarted = true;
|
|
shiftTrigger.enabled = false;
|
|
StartCoroutine(StartWorkShift());
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Timer to count down shift end
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
IEnumerator StartWorkShift()
|
|
{
|
|
while (remainingTime > 0)
|
|
{
|
|
remainingTime -= Time.deltaTime;
|
|
UpdateTimerText();
|
|
|
|
if (Player.score < 0)
|
|
{
|
|
Debug.Log("Too many mistakes! Shift ended!");
|
|
break;
|
|
}
|
|
|
|
yield return null;
|
|
}
|
|
|
|
EndShift();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Stop all shift-related logic
|
|
/// </summary>
|
|
void EndShift()
|
|
{
|
|
Debug.Log("Shift ended!");
|
|
|
|
AudioManager.instance.PlaySFX(AudioManager.instance.shiftAlarm);
|
|
remainingTime = shiftDuration;
|
|
timerText.text = "3:00";
|
|
gm.shiftStarted = false;
|
|
dayManager.doneAShift = true;
|
|
NpcManager.instance.EndDay();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Formatting timer text
|
|
/// </summary>
|
|
void UpdateTimerText()
|
|
{
|
|
int minutes = Mathf.FloorToInt(remainingTime / 60);
|
|
int seconds = Mathf.FloorToInt(remainingTime % 60);
|
|
timerText.text = string.Format("{0}:{1:00}", minutes, seconds);
|
|
}
|
|
} |