90 lines
2.3 KiB
C#
90 lines
2.3 KiB
C#
using UnityEngine;
|
|
|
|
public class EnemyDeathManager : MonoBehaviour
|
|
{
|
|
public static EnemyDeathManager Instance { get; private set; }
|
|
|
|
[System.Serializable]
|
|
public class AreaConfig
|
|
{
|
|
public int areaID;
|
|
public GameObject objectToSpawn;
|
|
public int deathThreshold;
|
|
public Transform spawnPosition;
|
|
public bool isCompleted;
|
|
}
|
|
|
|
[Header("Area Settings")]
|
|
public AreaConfig[] areaConfigs;
|
|
public GameObject wall;
|
|
|
|
[Header("Final Object Settings")]
|
|
public GameObject finalObjectToActivate; // ganti nama jadi lebih jelas
|
|
|
|
private int currentDeathCount = 0;
|
|
private AreaConfig currentArea;
|
|
|
|
private void Awake()
|
|
{
|
|
if (Instance == null) Instance = this;
|
|
else Destroy(gameObject);
|
|
}
|
|
|
|
public void ActivateArea(int areaID)
|
|
{
|
|
foreach (var config in areaConfigs)
|
|
{
|
|
if (config.areaID == areaID)
|
|
{
|
|
currentArea = config;
|
|
currentDeathCount = 0;
|
|
Debug.Log("Area " + areaID + " aktif.");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void ReportEnemyDeath(GameObject enemy)
|
|
{
|
|
if (currentArea == null) return;
|
|
|
|
currentDeathCount++;
|
|
Debug.Log($"Enemy mati di Area {currentArea.areaID}: {enemy.name} | Total mati: {currentDeathCount}");
|
|
|
|
if (currentDeathCount >= currentArea.deathThreshold)
|
|
{
|
|
if (currentArea.objectToSpawn != null)
|
|
Instantiate(currentArea.objectToSpawn, currentArea.spawnPosition.position, currentArea.spawnPosition.rotation);
|
|
|
|
if (wall != null)
|
|
wall.SetActive(false);
|
|
|
|
currentArea.isCompleted = true;
|
|
currentDeathCount = 0;
|
|
|
|
// Mainkan Victory BGM saat area selesai
|
|
BackgroundSoundManager.Instance.PlayVictoryBGMThenBackToNormal();
|
|
|
|
currentArea = null;
|
|
CheckIfAllAreasCompleted();
|
|
}
|
|
}
|
|
|
|
|
|
private void CheckIfAllAreasCompleted()
|
|
{
|
|
foreach (var config in areaConfigs)
|
|
{
|
|
if (!config.isCompleted) return;
|
|
}
|
|
|
|
Debug.Log("Semua area selesai!");
|
|
|
|
if (finalObjectToActivate != null)
|
|
{
|
|
finalObjectToActivate.SetActive(true);
|
|
Debug.Log("Final object diaktifkan.");
|
|
}
|
|
}
|
|
}
|