69 lines
1.6 KiB
C#
69 lines
1.6 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using PixelCrushers;
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
|
|
namespace Beyond
|
|
{
|
|
public class KillTrigger : Saver
|
|
{
|
|
[SerializeField] EnemySpawner[] m_spawners;
|
|
|
|
public UnityEvent<KillTrigger> OnTrigger;
|
|
|
|
[Serializable]
|
|
public class SaveData
|
|
{
|
|
public bool wasTriggered = false;
|
|
}
|
|
|
|
private SaveData m_data = new SaveData();
|
|
void Start()
|
|
{
|
|
foreach (var s in m_spawners)
|
|
{
|
|
s.m_OnDead.AddListener(OnEnemyKilled);
|
|
}
|
|
}
|
|
|
|
public void CheckSpawners()
|
|
{
|
|
if (m_data.wasTriggered)
|
|
return;
|
|
foreach (var spawner in m_spawners)
|
|
{
|
|
if (!spawner.SpawnedAndDead())
|
|
return;
|
|
}
|
|
OnTrigger?.Invoke(this);
|
|
m_data.wasTriggered = true;
|
|
}
|
|
private void OnEnemyKilled(EnemySpawner arg0)
|
|
{
|
|
CheckSpawners();
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
foreach (var s in m_spawners)
|
|
{
|
|
s.m_OnDead.RemoveListener(OnEnemyKilled);
|
|
}
|
|
}
|
|
|
|
public override string RecordData()
|
|
{
|
|
return SaveSystem.Serialize(m_data);
|
|
}
|
|
|
|
public override void ApplyData(string s)
|
|
{
|
|
var data = SaveSystem.Deserialize<SaveData>(s);
|
|
if (data != null)
|
|
m_data = data;
|
|
}
|
|
}
|
|
}
|