少年修仙传客户端代码仓库
client_Hale
2019-04-19 052b74e5e665134d961d51270d9586d74fa269ce
382 前端战斗AI流程控制逻辑 配置相关提交
2个文件已修改
2个文件已添加
208 ■■■■■ 已修改文件
Fight/Actor/AI/Process/ProcessManager.cs.cs 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/ProcessNode.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/SoProcessNode.cs 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/SoProcessNode.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/Process/ProcessManager.cs.cs
@@ -1,14 +1,73 @@
using System.Collections.Generic;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
public class ProcessManager : Singleton<ProcessManager>
{
    private const string SoProcessNode_Suffix = "SoProcessNode_";
    private Queue<ProcessNode> m_NodeQueue = new Queue<ProcessNode>();
    public void Load(int npcID)
    {
        m_NodeQueue.Clear();
        SoProcessNode _config = null;
        if (AssetSource.refdataFromEditor)
        {
#if UNITY_EDITOR
            string _resourcePath = StringUtility.Contact(ResourcesPath.ResourcesOutAssetPath,
                                                         "Refdata/ScriptableObject/SoProcessNode/",
                                                         SoProcessNode_Suffix,
                                                         npcID,
                                                         ".asset");
            _config = AssetDatabase.LoadAssetAtPath<SoProcessNode>(_resourcePath);
#endif
        }
        else
        {
            string _assetName = StringUtility.Contact(SoProcessNode_Suffix, npcID);
            AssetInfo _assetInfo = new AssetInfo(ScriptableObjectLoader.bundleName, _assetName);
            _config = AssetBundleUtility.Instance.Sync_LoadAsset(_assetInfo) as SoProcessNode;
        }
        if (_config == null)
        {
            Debug.LogErrorFormat("ProcessManager.Load() => 加载不到资源: {0}.", npcID);
            return;
        }
        foreach (var _node in _config.nodeList)
        {
            switch (_node.nodeType)
            {
                case ProcessNode.E_ProcessType.AttackCount:
                    break;
                case ProcessNode.E_ProcessType.AutoAI:
                    break;
                case ProcessNode.E_ProcessType.BeAttackCount:
                    break;
                case ProcessNode.E_ProcessType.CastSkill:
                    break;
                case ProcessNode.E_ProcessType.CommonAttack:
                    break;
                case ProcessNode.E_ProcessType.Die:
                    break;
                case ProcessNode.E_ProcessType.HpPer:
                    break;
                case ProcessNode.E_ProcessType.LockHp:
                    break;
                case ProcessNode.E_ProcessType.OpenDialog:
                    break;
                case ProcessNode.E_ProcessType.ShowMotion:
                    break;
            }
        }
    }
    public void Update()
Fight/Actor/AI/Process/ProcessNode.cs
@@ -2,11 +2,17 @@
{
    public enum E_ProcessType
    {
        CommonAttack,
        CastSkill,
        AutoAI,
        Die,
        BeAttackCount,
        AttackCount,
        HpPer,
        LockHp,
        UnLockHp,
        OpenDialog,
        ShowMotion,
        WaitTime,
    }
    public int param;
Fight/Actor/AI/Process/SoProcessNode.cs
New file
@@ -0,0 +1,129 @@
using UnityEngine;
using System.Collections.Generic;
#if UNITY_EDITOR
using UnityEditor;
#endif
[CreateAssetMenu(menuName = "流程进度配置")]
public class SoProcessNode : ScriptableObject
{
    public List<Node> nodeList = new List<Node>();
    [System.Serializable]
    public class Node
    {
        public ProcessNode.E_ProcessType nodeType;
        public int param;
    }
}
#if UNITY_EDITOR
[CustomEditor(typeof(SoProcessNode))]
public class SoProcessNodeEditor : Editor
{
    private GUISkin guiSkin;
    public override void OnInspectorGUI()
    {
        if (guiSkin == null)
        {
            guiSkin = AssetDatabase.LoadAssetAtPath<GUISkin>("Assets/Scripts/Core/MapEditor/Editor/EditorResources/EditorSkin.guiskin");
        }
        serializedObject.Update();
        var _root = target as SoProcessNode;
        int _removeIndex = -1;
        SoProcessNode.Node _node = null;
        for (int i = 0; i < _root.nodeList.Count; ++i)
        {
            _node = _root.nodeList[i];
            EditorGUILayout.BeginHorizontal(guiSkin.box);
            EditorGUILayout.LabelField((i + 1).ToString(), guiSkin.customStyles[2], GUILayout.Width(20), GUILayout.Height(22));
            EditorGUILayout.BeginVertical(guiSkin.box);
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("节点类型", GUILayout.Width(90));
            _node.nodeType = (ProcessNode.E_ProcessType)EditorGUILayout.EnumPopup(_node.nodeType);
            EditorGUILayout.EndHorizontal();
            if (_node.nodeType == ProcessNode.E_ProcessType.AttackCount)
            {
                _Item(ref _node, "攻击次数");
            }
            else if (_node.nodeType == ProcessNode.E_ProcessType.BeAttackCount)
            {
                _Item(ref _node, "被击次数");
            }
            else if (_node.nodeType == ProcessNode.E_ProcessType.HpPer)
            {
                _Item(ref _node, "生命值(百分率)");
            }
            else if (_node.nodeType == ProcessNode.E_ProcessType.CommonAttack)
            {
            }
            else if (_node.nodeType == ProcessNode.E_ProcessType.CastSkill)
            {
                _Item(ref _node, "使用技能");
            }
            else if (_node.nodeType == ProcessNode.E_ProcessType.AutoAI)
            {
            }
            else if (_node.nodeType == ProcessNode.E_ProcessType.WaitTime)
            {
                _Item(ref _node, "等待时间(毫秒)");
            }
            else if (_node.nodeType == ProcessNode.E_ProcessType.LockHp)
            {
                _Item(ref _node, "锁定血量(百分率)");
            }
            else if (_node.nodeType == ProcessNode.E_ProcessType.Die)
            {
            }
            else if (_node.nodeType == ProcessNode.E_ProcessType.OpenDialog)
            {
                _Item(ref _node, "打开对话");
            }
            else if (_node.nodeType == ProcessNode.E_ProcessType.ShowMotion)
            {
                _Item(ref _node, "表演动画");
            }
            EditorGUILayout.EndVertical();
            if (GUILayout.Button("删除", GUILayout.Height(22)))
            {
                _removeIndex = i;
            }
            EditorGUILayout.EndHorizontal();
        }
        if (_removeIndex != -1)
        {
            _root.nodeList.RemoveAt(_removeIndex);
        }
        if (GUILayout.Button("增加流程节点", guiSkin.button, GUILayout.Height(32)))
        {
            _root.nodeList.Add(new SoProcessNode.Node());
        }
        if (GUI.changed)
        {
            EditorUtility.SetDirty(target);
            serializedObject.ApplyModifiedProperties();
        }
    }
    private void _Item(ref SoProcessNode.Node node, string name)
    {
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField(name, GUILayout.Width(90));
        node.param = EditorGUILayout.IntField(node.param);
        EditorGUILayout.EndHorizontal();
    }
}
#endif
Fight/Actor/AI/Process/SoProcessNode.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 0d04f3cb90acc2042931f21bad1dcd2c
timeCreated: 1555641825
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant: