using System.Collections.Generic;
using UnityEngine;
using Articy.Unity;
using Articy.Touhou;
namespace Game
{
///
/// 剧情管理
///
public class DramaManager : ManagerBase
{
private GameObject _dramaRoot;
private ArticyFlowPlayer _articyFlowPlayer;
private DramaFlowPlayer _flowPlayer;
public DramaManager()
{
}
public override void OnCreate()
{
Object.DontDestroyOnLoad(GameObject.Find("FlowRoot"));
_dramaRoot = GameObject.Find("FlowRoot/DramaRoot");
_articyFlowPlayer = _dramaRoot.GetComponent();
_flowPlayer = _dramaRoot.GetComponent();
_dramaRoot.SetActive(false);
}
public override void Update()
{
}
public override void OnDestroy()
{
Object.DestroyImmediate(_dramaRoot);
}
public void StartDrama(string dramaId)
{
if (_dramaRoot.activeSelf)
{
return;
}
var dialog = ArticyDatabase.GetObject(dramaId);
if (dialog == null)
{
Util.Print("剧情不存在:", dramaId);
return;
}
Util.EntityStopMove(Util.GetMasterID());
UIManager.Instance.Open(EuiPage.Drama);
_articyFlowPlayer.StartOn = dialog;
_dramaRoot.SetActive(true);
}
public void EndDrama()
{
_dramaRoot.SetActive(false);
SendDialogEnd();
}
public void NextDrama()
{
_flowPlayer.NextDrama();
}
public void NextDramaChoice(int index)
{
_flowPlayer.NextDramaChoice(index);
}
public void SendDialog(string name, string content, ArticyObject icon)
{
var param = new PDialog()
{
Name = name,
Content = content,
Pic = icon,
};
EventManager.Instance.SendEvent(EEvent.Dialog, param);
}
public void SendDialogChoice(List choices)
{
var param = new PDialogChoice()
{
Choices = choices,
};
EventManager.Instance.SendEvent(EEvent.DialogChoice, param);
}
private void SendDialogEnd()
{
EventManager.Instance.SendEvent(EEvent.DialogEnd);
}
}
public abstract partial class Util
{
public static void StartDrama(string dramaId)
{
DramaManager.Instance.StartDrama(dramaId);
}
public static void EndDrama()
{
DramaManager.Instance.EndDrama();
}
public static void NextDrama()
{
DramaManager.Instance.NextDrama();
}
public static void NextDramaChoice(int index)
{
DramaManager.Instance.NextDramaChoice(index);
}
public static void SendDialog(string name, string content, ArticyObject icon)
{
DramaManager.Instance.SendDialog(name, content, icon);
}
public static void SendDialogChoice(List choices)
{
DramaManager.Instance.SendDialogChoice(choices);
}
}
}