using System.Collections; using System.Collections.Generic; using UnityEngine; public class UnitSpawner : MonoBehaviour { //on loading scene, find the singleton and collect the roster information. Spawn units onto the field within a set area. private List<UnitStatBlock> allUnits = new(); [SerializeField] private GameObject baseUnit; [SerializeField] private Transform unitSpawnTransform, spawnParent; [SerializeField] private MovementGrid movementGrid; [SerializeField] private RectInt spawnOffset; [SerializeField] private UnitHud hud; private void Awake() { allUnits = Singleton.Instance.UnitRoster.units; SpawnPlayerUnits(); } private void SpawnPlayerUnits() { for (int i = 0; i < allUnits.Count; i++) { unitSpawnTransform.localPosition = new Vector3( (i * spawnOffset.x) % spawnOffset.width, ((i * spawnOffset.x) / spawnOffset.width) * spawnOffset.y, -0.99f); Unit newUnit = Instantiate(baseUnit, spawnParent).GetComponent<Unit>(); newUnit.transform.position = unitSpawnTransform.position; newUnit.OnSelect.AddListener((u) => movementGrid.Display(u)); newUnit.OnSelect.AddListener((u) => hud.Display(u)); newUnit.UnitStats = allUnits[i]; newUnit.RemainingMovement = newUnit.UnitStats.moveRange; newUnit.UnitVisual.sprite = newUnit.UnitStats.sprite; } } }