using System.Collections.Generic;
|
using UnityEngine;
|
|
#if UNITY_EDITOR
|
using UnityEditor;
|
#endif
|
|
public class ProcessManager
|
{
|
private const string SoProcessNode_Suffix = "SoProcessNode_";
|
|
private Queue<ProcessNode> m_NodeQueue = new Queue<ProcessNode>();
|
public ProcessNode Current { get; private set; }
|
|
public void UnLoad()
|
{
|
Current = null;
|
foreach (var _node in m_NodeQueue)
|
{
|
_node.UnInit();
|
}
|
m_NodeQueue.Clear();
|
|
}
|
|
public void Load(GA_NpcClientFightNorm npc)
|
{
|
m_NodeQueue.Clear();
|
|
SoProcessNode _config = null;
|
if (AssetSource.refdataFromEditor)
|
{
|
#if UNITY_EDITOR
|
string _resourcePath = StringUtility.Contact(ResourcesPath.ResourcesOutAssetPath,
|
"Refdata/ScriptableObject/SoProcessNode/",
|
SoProcessNode_Suffix,
|
npc.NpcConfig.NPCID,
|
".asset");
|
|
_config = AssetDatabase.LoadAssetAtPath<SoProcessNode>(_resourcePath);
|
#endif
|
}
|
else
|
{
|
string _assetName = StringUtility.Contact(SoProcessNode_Suffix, npc.NpcConfig.NPCID);
|
AssetInfo _assetInfo = new AssetInfo(ScriptableObjectLoader.bundleName, _assetName);
|
|
_config = AssetBundleUtility.Instance.Sync_LoadAsset(_assetInfo) as SoProcessNode;
|
}
|
|
if (_config == null)
|
{
|
return;
|
}
|
|
foreach (var _node in _config.nodeList)
|
{
|
switch (_node.nodeType)
|
{
|
case ProcessNode.E_ProcessType.AttackCount:
|
m_NodeQueue.Enqueue(new PN_AttackCount(npc, _node.param));
|
break;
|
case ProcessNode.E_ProcessType.AutoAI:
|
m_NodeQueue.Enqueue(new PN_AutoAI());
|
break;
|
case ProcessNode.E_ProcessType.BeAttackCount:
|
m_NodeQueue.Enqueue(new PN_BeAttackCount(npc, _node.param));
|
break;
|
case ProcessNode.E_ProcessType.CastSkill:
|
m_NodeQueue.Enqueue(new PN_CastSkill(npc, _node.param));
|
break;
|
case ProcessNode.E_ProcessType.CommonAttack:
|
m_NodeQueue.Enqueue(new PN_CommonAttack(npc));
|
break;
|
case ProcessNode.E_ProcessType.Die:
|
m_NodeQueue.Enqueue(new PN_Die(npc));
|
break;
|
case ProcessNode.E_ProcessType.HpPer:
|
m_NodeQueue.Enqueue(new PN_HpPer(npc, _node.param));
|
break;
|
case ProcessNode.E_ProcessType.LockHp:
|
m_NodeQueue.Enqueue(new PN_LockHp(npc, _node.param));
|
break;
|
case ProcessNode.E_ProcessType.OpenDialog:
|
m_NodeQueue.Enqueue(new PN_OpenDialog(npc, _node.param));
|
break;
|
case ProcessNode.E_ProcessType.ShowMotion:
|
m_NodeQueue.Enqueue(new PN_ShowMotion(npc, _node.param));
|
break;
|
case ProcessNode.E_ProcessType.StopAI:
|
m_NodeQueue.Enqueue(new PN_StopAI(npc, _node.param));
|
break;
|
case ProcessNode.E_ProcessType.PlayEffect:
|
m_NodeQueue.Enqueue(new PN_PlayEffect(npc, _node.param));
|
break;
|
case ProcessNode.E_ProcessType.StopEffect:
|
m_NodeQueue.Enqueue(new PN_StopEffect(npc, _node.param));
|
break;
|
case ProcessNode.E_ProcessType.StartPlayerAI:
|
m_NodeQueue.Enqueue(new PN_StartPlayerAI(_node.param));
|
break;
|
case ProcessNode.E_ProcessType.ShowSkillTip:
|
m_NodeQueue.Enqueue(new PN_ShowSkillTip(_node.param));
|
break;
|
case ProcessNode.E_ProcessType.DieNoFall:
|
m_NodeQueue.Enqueue(new PN_DieNoFall(npc));
|
break;
|
case ProcessNode.E_ProcessType.FallAndRelease:
|
m_NodeQueue.Enqueue(new PN_FallAndRelease(npc));
|
break;
|
case ProcessNode.E_ProcessType.ChangeHitSound:
|
m_NodeQueue.Enqueue(new PN_ChangeHitSound(npc, _node.param));
|
break;
|
}
|
}
|
}
|
|
public void Update()
|
{
|
if (m_NodeQueue.Count == 0)
|
{
|
return;
|
}
|
|
var _node = m_NodeQueue.Peek();
|
|
if (Current != _node)
|
{
|
_node.Init();
|
Current = _node;
|
}
|
_node.Update();
|
|
if (_node.IsOver())
|
{
|
_node.UnInit();
|
|
m_NodeQueue.Dequeue();
|
}
|
}
|
}
|