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

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);
}