using System; using System.Collections; using System.Collections.Generic; using System.Linq; using Cinemachine; using UnityEngine; using UnityEngine.Tilemaps; using UnityEngine.UI; public class GameManagerScript : MonoBehaviour { CinemachineBrain camBrain; RoundManager roundManager; [SerializeField] List enemies; [SerializeField] List humans; [SerializeField] GameObject initPanel; [SerializeField] GameObject initCreaturePanel; [SerializeField] Grid grid; [SerializeField] Tilemap tileMap; List combatants = new(); static GameManagerScript instance; public static GameManagerScript GetInstance() { return instance; } private void Start() { instance = this; combatants.AddRange(enemies.Select(e => e.GetComponent())); combatants.AddRange(humans.Select(h => h.GetComponent())); } private void Awake() { if (camBrain == null) { camBrain = Camera.main.GetComponent(); } if (roundManager == null) { roundManager = GameObject.Find("RoundManager").GetComponent(); } } public CinemachineVirtualCamera GetActiveCamera() { CinemachineVirtualCamera cam = camBrain.ActiveVirtualCamera as CinemachineVirtualCamera; return cam; } internal void RollInitiative() { combatants.ForEach(creature => { creature.RollInit(); }); combatants.Sort((x, y) => x.GetInit().CompareTo(y.GetInit())); ClearInitPanel(); BuildInitPanel(); roundManager.StartFirstRound(combatants); } private void ClearInitPanel() { int children = initPanel.transform.childCount; for (int i = children - 1; i >= 0; i--) { GameObject.Destroy(initPanel.transform.GetChild(i).gameObject); } } public void ShowInitPanel(Boolean show) { initPanel.SetActive(show); } internal void BuildInitPanel() { initPanel.SetActive(true); combatants.ForEach(c => { GameObject creturePanel = GameObject.Instantiate(initCreaturePanel, Vector3.zero, Quaternion.identity); creturePanel.transform.localScale = new Vector3(1, 1, 1); creturePanel.transform.SetParent(initPanel.transform); creturePanel.GetComponent().SetImage(c.GetComponent().GetSprite()); Debug.Log(c.name + " init: " + c.GetComponent().GetInit() + " Dex " + c.GetComponent().Dex + " pos: " + grid.WorldToCell(c.transform.localPosition)); c.SetPositionInGrid(grid.WorldToCell(c.transform.localPosition)); }); } public List GetCombatants() { return combatants; } }