UnityGameProjectsCode / DiceAndMenGame / UnitSpawner.cs
UnitSpawner.cs
Raw
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;
        }
    }
}