using Photon.Pun; using System.Collections; using System.Collections.Generic; using UnityEngine; public class RiftSpawner : MonoBehaviour { [Header("Rifts:")] [SerializeField] private List riftPrefabs = new List(); [Header("Interactable Rifts:")] [SerializeField] private List interactableRiftPrefabs = new List(); [Header("Listeners:")] [SerializeField] private GameEventListener_RiftSettings onSpawnRiftRequest; [SerializeField] private GameEventListener_JobInstance OnMultiJobBonusRiftReadyToSpawn; GameObject spawnedRiftGO; Rift spawnedRift; InteractableRift spawnedInteractableRift; public int lastUsedSpawnpoint; ZoneData currentZoneData; private void Awake() { DontDestroyOnLoad(this); onSpawnRiftRequest.Response.AddListener(SpawnRiftOnRequest); OnMultiJobBonusRiftReadyToSpawn.Response.AddListener(SpawnInteractableRift); } private void SpawnRiftOnRequest(RiftSettings riftSettings) { currentZoneData = riftSettings.zoneData; spawnedRiftGO = PhotonNetwork.Instantiate("Rifts/" + riftPrefabs[riftSettings.riftIndex].name, riftSettings.zoneData.spawnPoints[Random.Range(0, riftSettings.zoneData.spawnPoints.Count)].position, Quaternion.identity); spawnedRift = spawnedRiftGO.GetComponent(); spawnedRift.InitializeRift(riftSettings, this); spawnedRift.StartSpawning(); } private void SpawnInteractableRift(JobInstance bonusRiftJob) { spawnedRiftGO = PhotonNetwork.Instantiate("Rifts/Interactables/" + interactableRiftPrefabs[(int)bonusRiftJob.bonusRiftType].name, currentZoneData.spawnPoints[lastUsedSpawnpoint].position, Quaternion.identity); spawnedInteractableRift = spawnedRiftGO.GetComponent(); spawnedInteractableRift.bonusRiftInstance = bonusRiftJob; } } [System.Serializable] public class RiftSettings { public int riftIndex; public Dictionary enemyIndexes_Quantity; public int numberOfWaves; public int bossIndex; public ZoneData zoneData; } [System.Serializable] public enum RiftType { Blue = 0, Green, Yellow, Purple, Red, Count }