63 lines
1.6 KiB
C#
63 lines
1.6 KiB
C#
#nullable enable
|
|
using System;
|
|
using System.Collections;
|
|
using NaughtyAttributes;
|
|
using UnityEngine;
|
|
using Random = UnityEngine.Random;
|
|
|
|
public class Arena : MonoBehaviour {
|
|
[Serializable]
|
|
struct GladiatorEntrance {
|
|
public Vector2 position;
|
|
public Vector2 direction;
|
|
}
|
|
|
|
[SerializeField] [Required]
|
|
GameFlowManager gameFlowManager = null!;
|
|
|
|
//TODO probably add initial direction too
|
|
//TODO Add some kind of "MinLength(1)" attribute
|
|
[SerializeField]
|
|
GladiatorEntrance[] spawners = null!;
|
|
[SerializeField] [Required]
|
|
ArenaStats stats = null!;
|
|
[SerializeField] [Required]
|
|
GameObject entityPrefab = null!;
|
|
|
|
SafeZone safeZone = null!;
|
|
|
|
void Awake() => safeZone = GetComponentInChildren<SafeZone>();
|
|
|
|
void Start() => StartCoroutine(SpawnEnemies());
|
|
|
|
void SpawnEnemy(int spawnerIndex) {
|
|
if (!gameFlowManager.CanDoAction)
|
|
return;
|
|
|
|
var entity = Instantiate(entityPrefab, spawners[spawnerIndex].position, Quaternion.identity).GetComponent<Entity>();
|
|
entity.direction = spawners[spawnerIndex].direction;
|
|
entity.gameFlowManager = gameFlowManager;
|
|
}
|
|
|
|
IEnumerator SpawnEnemies() {
|
|
yield return new WaitForSeconds(stats.secondsBetweenSpawners);
|
|
|
|
int currentSpawner = 0;
|
|
|
|
while (true) {
|
|
SpawnEnemy(currentSpawner);
|
|
currentSpawner = Random.Range(0, spawners.Length);
|
|
yield return new WaitForSeconds(stats.secondsBetweenSpawners);
|
|
}
|
|
}
|
|
|
|
#if UNITY_EDITOR
|
|
void OnDrawGizmosSelected() {
|
|
Gizmos.color = Color.blue;
|
|
foreach (GladiatorEntrance entrance in spawners) {
|
|
Gizmos.DrawWireCube(entrance.position, Vector3.one);
|
|
Gizmos.DrawLine(entrance.position, entrance.position + entrance.direction);
|
|
}
|
|
}
|
|
#endif
|
|
} |