2025-02-21 18:35:51 +00:00

73 lines
2.1 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RiftSpawner : MonoBehaviour
{
[Header("Rifts:")]
[SerializeField] private List<GameObject> riftPrefabs = new List<GameObject>();
[Header("Interactable Rifts:")]
[SerializeField] private List<GameObject> interactableRiftPrefabs = new List<GameObject>();
[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 = Instantiate(riftPrefabs[riftSettings.riftIndex], riftSettings.zoneData.spawnPoints[Random.Range(0, riftSettings.zoneData.spawnPoints.Count)].position, Quaternion.identity);
spawnedRift = spawnedRiftGO.GetComponent<Rift>();
spawnedRift.InitializeRift(riftSettings, this);
spawnedRift.StartSpawning();
}
private void SpawnInteractableRift(JobInstance bonusRiftJob)
{
spawnedRiftGO = Instantiate(interactableRiftPrefabs[(int)bonusRiftJob.bonusRiftType], currentZoneData.spawnPoints[lastUsedSpawnpoint].position, Quaternion.identity);
spawnedInteractableRift = spawnedRiftGO.GetComponent<InteractableRift>();
spawnedInteractableRift.bonusRiftInstance = bonusRiftJob;
}
}
[System.Serializable]
public class RiftSettings
{
public int riftIndex;
public Dictionary<int,int> enemyIndexes_Quantity;
public int numberOfWaves;
public int bossIndex;
public ZoneData zoneData;
}
[System.Serializable]
public enum RiftType
{
Blue = 0,
Green,
Yellow,
Purple,
Red,
Count
}