using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameMode : MonoBehaviour { public List wavesToSpawn = new List(); public static GameMode instance; private int currentWave; public List enemies = new List(); public Transform spawnPointParent; private List spawnPoints = new List(); public LayerMask mask; public GameObject enemy_Default; public GameObject enemy_Fast; private IEnumerator Start() { Screen.fullScreen = false; Screen.SetResolution(1800, 1000, false); Cursor.visible = false; Cursor.lockState = CursorLockMode.Locked; Invoke("DebugGame", 1); Init(); while (true) { yield return new WaitForSeconds(3f); //SpawnWave(); yield return WaitForWaveToEnd(); } } // ²âÊÔ private void DebugGame() { REPL.StartREPL(); } private IEnumerator WaitForWaveToEnd() { while (enemies.Count > 0) { yield return null; } } private void Update() { for (int num = enemies.Count - 1; num >= 0; num--) { if (enemies[num] == null) { enemies.RemoveAt(num); } else if (enemies[num].IsDead()) { enemies.RemoveAt(num); } } } private void Init() { mask = LayerMask.GetMask("Map"); for (int i = 0; i < spawnPointParent.childCount; i++) { spawnPoints.Add(spawnPointParent.GetChild(i)); } } private void SpawnWave() { for (int i = 0; i < wavesToSpawn[currentWave].groups.Count; i++) { for (int j = 0; (float)j < wavesToSpawn[currentWave].groups[i].number; j++) { SpawnEnemy(wavesToSpawn[currentWave].groups[i].enemyType); } } currentWave++; if (currentWave >= wavesToSpawn.Count) { currentWave = wavesToSpawn.Count - 1; } } private void SpawnEnemy(EnemyGroup.EnemyType enemyType) { GameObject gameObject = Object.Instantiate(GetEnemyFromType(enemyType), GetSpawnPos(), Quaternion.identity); gameObject.GetComponent().target = Player.localPlayer.torso; enemies.Add(gameObject.GetComponent()); } private Vector3 GetSpawnPos() { bool flag = false; int num = 100000; while (true && num > 0) { num--; Vector3 vector = spawnPoints[Random.Range(0, spawnPoints.Count)].position + Vector3.up * 0.3f; RaycastHit hitInfo = default(RaycastHit); Ray ray = new Ray(vector, vector - Player.localPlayer.transform.position); Physics.Raycast(ray, out hitInfo, Vector3.Distance(vector, Player.localPlayer.transform.position), mask); if (hitInfo.collider == null) { return vector; } } return spawnPoints[Random.Range(0, spawnPoints.Count)].position + Vector3.up * 0.3f; } private GameObject GetEnemyFromType(EnemyGroup.EnemyType enemyType) { if (enemyType == EnemyGroup.EnemyType.Fast) { return enemy_Fast; } return enemy_Default; } }