少年修仙传客户端代码仓库
hch
2025-06-12 204ef05a831c9484e2abc561d27ecbff7c797453
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
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();
        }
    }
}