diff --git a/theProject/Assets/Scripts/Managers/SoldierSpawning.cs b/theProject/Assets/Scripts/Managers/SoldierSpawning.cs new file mode 100644 index 00000000..f8e43754 --- /dev/null +++ b/theProject/Assets/Scripts/Managers/SoldierSpawning.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +//[RequireComponent] +public class SoldierSpawning : MonoBehaviour +{ + [SerializeField] int spawnInterval = 1000; // ticks between spawning soldiers + [SerializeField] int lastSpawnTick = 0; + [SerializeField] Squad squad; + [SerializeField] TilemapManager tilemapManager; + [SerializeField] Vector2Int spawnCoords = Vector2Int.one * -1; + public Vector2Int GetSpawnCoords() { return spawnCoords; } + public void SetSpawnCoords(Vector2Int newSpawnCoords) { spawnCoords = newSpawnCoords; } + + private void Awake() + { + squad = GetComponent(); + TickSystem.OnTick += HandleTick; + tilemapManager = FindObjectOfType();//DEPENDENCY_INJECTION + } + + private void HandleTick(TickSystem.OnTickEventArgs tickEventArgs) + { + if (lastSpawnTick + spawnInterval > tickEventArgs.tickNumber) + return; + + Soldier spawnedSoldier = tilemapManager.SpawnSoldier(spawnCoords.x, spawnCoords.y, squad.GetOwnTeam() == Entity.Team.Ally) as Soldier; + if (spawnedSoldier == null) + return; + // managed to spawn the soldier + lastSpawnTick = tickEventArgs.tickNumber; + squad.AddSoldierToSquad(spawnedSoldier); + } +} diff --git a/theProject/Assets/Scripts/Managers/SoldierSpawning.cs.meta b/theProject/Assets/Scripts/Managers/SoldierSpawning.cs.meta new file mode 100644 index 00000000..7339a2df --- /dev/null +++ b/theProject/Assets/Scripts/Managers/SoldierSpawning.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 46491169607191d40bf2df92f03ef895 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/theProject/Assets/Scripts/Managers/SquadManager.cs b/theProject/Assets/Scripts/Managers/SquadManager.cs index 45afd820..4550e4f3 100644 --- a/theProject/Assets/Scripts/Managers/SquadManager.cs +++ b/theProject/Assets/Scripts/Managers/SquadManager.cs @@ -8,12 +8,16 @@ public class SquadManager : MonoBehaviour [SerializeField] GameObject squadPrefab; Squad playerSquad; Squad enemySquad; + + Vector2Int playerSpawnCoords = Vector2Int.up; //TEMP SPAWN BY BASE private void Awake() { playerSquad = Instantiate(squadPrefab).GetComponent(); playerSquad.gameObject.name = "Player Squad"; playerSquad.transform.SetParent(transform); playerSquad.SetOwnTeam(Entity.Team.Ally); + playerSquad.gameObject.AddComponent(); + playerSquad.GetComponent().SetSpawnCoords(playerSpawnCoords); enemySquad = Instantiate(squadPrefab).GetComponent(); enemySquad.gameObject.name = "Enemy Squad"; diff --git a/theProject/Assets/Scripts/Managers/TilemapManager.cs b/theProject/Assets/Scripts/Managers/TilemapManager.cs index 3c1c2294..632b7a65 100644 --- a/theProject/Assets/Scripts/Managers/TilemapManager.cs +++ b/theProject/Assets/Scripts/Managers/TilemapManager.cs @@ -95,10 +95,10 @@ public class TilemapManager : MonoBehaviour // ---------- public functions - public bool SpawnSoldier(int x, int y, bool isAlly, bool isBase=false) + public Entity SpawnSoldier(int x, int y, bool isAlly, bool isBase=false) { if (GetTileState(x, y) != TileState.free) - return false; + return null; if (isBase) tiles[x, y].standingEntity = Instantiate(basePrefab, tilemap.CellToWorld(new Vector3Int(x, y, 0)) + WORLD_SPACE_OFFSET, Quaternion.identity).GetComponent(); @@ -106,7 +106,7 @@ public class TilemapManager : MonoBehaviour tiles[x, y].standingEntity = Instantiate(soldierPrefab, tilemap.CellToWorld(new Vector3Int(x, y, 0)) + WORLD_SPACE_OFFSET, Quaternion.identity).GetComponent(); if (tiles[x, y].standingEntity == null) - return false; + return null; if (isAlly) tiles[x, y].standingEntity.SetOwnTeam(Base.Team.Ally); @@ -115,7 +115,7 @@ public class TilemapManager : MonoBehaviour tiles[x, y].standingEntity.SetTileCoords(new Vector2Int(x, y)); - return true; + return tiles[x, y].standingEntity; } public bool DespawnSoldier(int x, int y) diff --git a/theProject/Assets/Scripts/Squad.cs b/theProject/Assets/Scripts/Squad.cs index 42c7c5a2..172bbe6d 100644 --- a/theProject/Assets/Scripts/Squad.cs +++ b/theProject/Assets/Scripts/Squad.cs @@ -35,6 +35,7 @@ public class Squad : MonoBehaviour #endregion [SerializeField] private List soldiers = new List(); // soldiers belonging to the squad + public List GetSoldiers() { return soldiers; } private Queue orders = new Queue(); // orders given to the squad public void AddSoldierToSquad(Entity soldier)