Files
TheAuction-GS/Assets/GameScrips/GameController.cs

141 lines
3.6 KiB
C#

using UnityEngine;
using UnityEngine.SceneManagement;
public class GameController : MonoBehaviour {
public static GameController Instance { get; private set; }
[SerializeField] private MainHUDController _mainHudController;
[SerializeField] private DayEndHUDController _dayEndHudController;
[SerializeField] private GameObject _playerGameObject;
private float _money = 0; //The money the player has
private int _charisma = 0; //The charisma of the player, 0 - 100;
//Time stuff
[SerializeField] private int _hoursPerDay = 8; //9 - 17
[SerializeField] private int _realLifeMinutes = 5;
private float _time; //The actual time in gameHours
private float _timeScale;
private float _elapsedTime;
//End of day variables
private float _gains;
private float _rent;
private float _profit;
private float _startingMoney;
private bool _dayEnded = false;
public enum LooseCondition {
Bankrupt,
Charisma
}
public float Money {
get => _money;
//Set the money and update the HUD
set {
_money = value;
_mainHudController.SetMoneyText(_money);
}
}
public int Charisma {
get => _charisma;
set {
_charisma = value;
_mainHudController.SetCharisma(_charisma);
}
}
public void Reset() {
//Start a new day
_time = 0;
_dayEnded = false;
_gains = 0;
_rent = 0;
_profit = 0;
_startingMoney = Money;
HUDManager.Instance.HideCurrentHUD();
_playerGameObject.SetActive(true);
}
private void Awake() {
if (Instance != null) {
Debug.LogError("What? 2 GameControllers crazy!!!");
}
Instance = this;
}
private void CustomerLeft(object sender, CustomerManager.OnCustomerLeftArgs e) {
if (e.Angry) {
//Customer left angry
Charisma -= 10;
if(Charisma <= 0) {
GameOver(LooseCondition.Charisma);
}
}
else {
if (_charisma + 10 <= 100) {
_charisma += 10;
}
}
}
private void Start() {
Money = 100;
Charisma = 50;
_timeScale = (float)_hoursPerDay / (_realLifeMinutes * 60);
Reset();
CustomerManager.Instance.OnCustomerLeft += CustomerLeft;
}
private void DayEnd() {
_playerGameObject.SetActive(false);
HUDManager.Instance.ShowDayEndHUD();
_gains = _money - _startingMoney;
_rent = 10;
_profit = _gains - _rent;
_money += _profit; //Add the profit to the money, also includes rent
_mainHudController.SetMoneyText(_money);
HUDManager.Instance.GetDayEndController().DayEnd(_gains, _rent, _profit);
}
private void Update() {
if (!_dayEnded) {
Debug.Log("Time: " + _time + " Elapsed Time: " + _elapsedTime + " TimeScale: " + _timeScale);
_elapsedTime += UnityEngine.Time.deltaTime * _timeScale;
if (_elapsedTime >= 1) {
_time += 1;
_elapsedTime = 0;
}
int hours = (int)_time;
_mainHudController.SetTime(hours + 9); //Offset by 9 so it starts at 9 am
if (_time >= _hoursPerDay) {
//End the day
Debug.Log("Day Ended");
_dayEnded = true;
DayEnd();
}
}
}
public static void GameOver(LooseCondition condition) {
SceneManager.LoadScene(condition == LooseCondition.Bankrupt ? "Bankrupt" : "Charisma");
}
}