using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine.Events;
using UnityEngine;
///
/// GameManager is a singleton that manages the game state of
/// a single scene.
///
public class GameManager : MonoBehaviour
{
public static GameManager Instance => _instance;
private static GameManager _instance;
public MapSwitchEvent onMapSwitch;
public RespawnEvent onRespawn;
public int currentMapIdx;
public List maps;
public List cubes;
private void Awake()
{
if (_instance != null && _instance != this)
{
Destroy(gameObject);
return;
}
_instance = this;
}
public void SwitchMap(int mapIdx)
{
Vector3 offset = maps[mapIdx].transform.position - maps[currentMapIdx].transform.position;
currentMapIdx = mapIdx;
onMapSwitch?.Invoke(currentMapIdx, offset);
}
public void ResetCubes()
{
foreach (var cube in cubes.Where(x=> x.currentMap == currentMapIdx && x.originMap != x.currentMap))
{
cube.Respawn();
}
}
private void Update()
{
if (!Input.GetKeyDown(KeyCode.J)) return;
SwitchMap((currentMapIdx + 1) % maps.Count);
}
}
[Serializable]
public class MapSwitchEvent : UnityEvent
{
}
[Serializable]
public class RespawnEvent : UnityEvent
{
}