using System.Collections.Generic; using UnityEngine; #if UNITY_EDITOR using UnityEditor; #endif public class ProcessManager { private const string SoProcessNode_Suffix = "SoProcessNode_"; private Queue m_NodeQueue = new Queue(); 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(_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(); } } }