141 lines
3.6 KiB
C#
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");
|
|
}
|
|
} |