You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.4 KiB
70 lines
1.4 KiB
using System;
|
|
using UnityEngine;
|
|
|
|
public abstract class GameMod : MonoBehaviour
|
|
{
|
|
public enum Result
|
|
{
|
|
Success, Timeout, Dead, Quit, MissionFail
|
|
}
|
|
|
|
[SerializeField] GameModProperty property;
|
|
|
|
GameModData data;
|
|
bool isInitialized = false;
|
|
|
|
public uint ModID => property.id;
|
|
public GameModData Data
|
|
{
|
|
get
|
|
{
|
|
if(data is null)
|
|
{
|
|
GameModDataGroup.Instance.TryGetModData(ModID, out data);
|
|
Debug.Assert(Data != null, "Data is null");
|
|
}
|
|
|
|
return data;
|
|
}
|
|
}
|
|
|
|
public event Action<Result> OnDone;
|
|
|
|
private void Awake()
|
|
{
|
|
gameObject.SetActive(false);
|
|
}
|
|
|
|
public void StartMod()
|
|
{
|
|
if (!isInitialized)
|
|
{
|
|
OnInitialize();
|
|
isInitialized = true;
|
|
}
|
|
|
|
Logger.Log("Start Dungeon " + GetType().Name);
|
|
OnStartMod();
|
|
gameObject.SetActive(true);
|
|
}
|
|
|
|
public void EndMod()
|
|
{
|
|
Logger.Log("End Dungeon " + GetType().Name);
|
|
OnEndMod();
|
|
gameObject.SetActive(false);
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (!isInitialized) return;
|
|
OnUpdate();
|
|
}
|
|
|
|
protected virtual void OnInitialize() { }
|
|
protected abstract void OnStartMod();
|
|
protected abstract void OnUpdate();
|
|
protected abstract void OnEndMod();
|
|
|
|
protected void FireOnDone(Result result) => OnDone?.Invoke(result);
|
|
}
|