using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using Variables;
|
|
|
|
public class GameManager : MonoBehaviour
|
|
{
|
|
|
|
[SerializeField]
|
|
private PlayerList m_PlayerList;
|
|
|
|
[SerializeField]
|
|
private GameObject m_playerPrefab;
|
|
|
|
[SerializeField]
|
|
private Reference<float> m_TimeLeft;
|
|
|
|
[SerializeField]
|
|
private Reference<float> m_TotalTime;
|
|
|
|
[SerializeField,NaughtyAttributes.Scene]
|
|
private string m_creditScene;
|
|
|
|
private bool m_gameEndCalled;
|
|
private Camera m_camera;
|
|
|
|
private void OnEnable()
|
|
{
|
|
m_PlayerList.OnPlayerJoin += OnPlayerJoin;
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
m_PlayerList.OnPlayerJoin -= OnPlayerJoin;
|
|
}
|
|
|
|
// Start is called before the first frame update
|
|
void Start()
|
|
{
|
|
SetUpPlayers();
|
|
m_camera = Camera.main;
|
|
m_TimeLeft.Value = m_TotalTime;
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
m_TimeLeft.Value -= Time.deltaTime;
|
|
|
|
if (m_TimeLeft < 0 && !m_gameEndCalled)
|
|
OnGameEnd();
|
|
|
|
}
|
|
|
|
private void SetUpPlayers()
|
|
{
|
|
foreach (PlayerData data in m_PlayerList.AllPlayers)
|
|
{
|
|
SpawnPlayer(data);
|
|
}
|
|
}
|
|
|
|
private void OnGameEnd()
|
|
{
|
|
m_gameEndCalled = true;
|
|
UnityEngine.SceneManagement.SceneManager.LoadScene(m_creditScene);
|
|
}
|
|
|
|
private void SpawnPlayer(PlayerData data)
|
|
{
|
|
GameObject newPlayer = Instantiate(m_playerPrefab);
|
|
|
|
data.Input.SwitchCurrentActionMap("Gameplay");
|
|
|
|
foreach (InputBehaviour input in newPlayer.GetComponentsInChildren<InputBehaviour>())
|
|
input.Initialise(data);
|
|
|
|
newPlayer.GetComponentInChildren<PlayerVisuals>().Initalise(data);
|
|
|
|
newPlayer.transform.position += Vector3.ProjectOnPlane(Random.insideUnitSphere, Vector3.up);
|
|
}
|
|
|
|
private void OnPlayerJoin(object sender, PlayerData data)
|
|
{
|
|
SpawnPlayer(data);
|
|
}
|
|
|
|
}
|