mirror of
https://github.com/kuhyx/WUT_Computer_Science.git
synced 2026-11-10 21:47:08 +01:00
Soldiers are placed on tile and spawed periodically (when possible)
This commit is contained in:
parent
93ba29703e
commit
a0c9226757
36
theProject/Assets/Scripts/Managers/SoldierSpawning.cs
Normal file
36
theProject/Assets/Scripts/Managers/SoldierSpawning.cs
Normal file
@ -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<Squad>();
|
||||
TickSystem.OnTick += HandleTick;
|
||||
tilemapManager = FindObjectOfType<TilemapManager>();//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);
|
||||
}
|
||||
}
|
||||
11
theProject/Assets/Scripts/Managers/SoldierSpawning.cs.meta
Normal file
11
theProject/Assets/Scripts/Managers/SoldierSpawning.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 46491169607191d40bf2df92f03ef895
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -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<Squad>();
|
||||
playerSquad.gameObject.name = "Player Squad";
|
||||
playerSquad.transform.SetParent(transform);
|
||||
playerSquad.SetOwnTeam(Entity.Team.Ally);
|
||||
playerSquad.gameObject.AddComponent<SoldierSpawning>();
|
||||
playerSquad.GetComponent<SoldierSpawning>().SetSpawnCoords(playerSpawnCoords);
|
||||
|
||||
enemySquad = Instantiate(squadPrefab).GetComponent<Squad>();
|
||||
enemySquad.gameObject.name = "Enemy Squad";
|
||||
|
||||
@ -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<Base>();
|
||||
@ -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<Soldier>();
|
||||
|
||||
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)
|
||||
|
||||
@ -35,6 +35,7 @@ public class Squad : MonoBehaviour
|
||||
#endregion
|
||||
|
||||
[SerializeField] private List<Entity> soldiers = new List<Entity>(); // soldiers belonging to the squad
|
||||
public List<Entity> GetSoldiers() { return soldiers; }
|
||||
private Queue<Order> orders = new Queue<Order>(); // orders given to the squad
|
||||
|
||||
public void AddSoldierToSquad(Entity soldier)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user