少年修仙传客户端代码仓库
client_Wu Xijin
2019-02-13 7d8e3ed8acae7fd34140e92c72e93d9ebb2e97bd
3335 配置表读取重构。
3个文件已修改
6个文件已添加
519 ■■■■ 已修改文件
Core/GameEngine/Model/Config/ActorShowConfig.cs 315 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/ActorShowConfig.cs.meta 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/ConfigManager.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/ConfigInitiator.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/ConfigInitiator.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/LogicEngine.cs 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/LogicEngine.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/LogicUpdate.cs 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/LogicUpdate.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Config/ActorShowConfig.cs
@@ -1,136 +1,211 @@
//--------------------------------------------------------
//    [Author]:            第二世界
//    [  Date ]:           Tuesday, February 12, 2019
//    [Author]:           Fish
//    [  Date ]:           Wednesday, February 13, 2019
//--------------------------------------------------------
using UnityEngine;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System;
using UnityEngine;
namespace TableConfig {
public partial class ActorShowConfig
{
    public partial class ActorShowConfig : ConfigBase {
    public readonly int ID;
    public readonly int NpcID;
    public readonly int MapID;
    public readonly int line;
    public readonly int[] showNpcs;
    public readonly int length;
    public readonly int showNameTime;
    public readonly int BindMissionID;
    public readonly int type;
    public readonly int[] scale;
    public readonly int[] NpcFace;
    public readonly int[] PosX;
    public readonly int[] PosY;
    public readonly int shadow;
    public readonly int effect;
    public readonly int uieffect;
    public readonly string[] mob;
    public readonly string cam;
    public readonly int[] Height;
    public readonly int DialogueTime;
    public readonly int Dialogue;
    public readonly int soundId;
    public readonly int soundTime;
    public readonly int step;
        public int ID;
        public int NpcID;
        public int MapID;
        public int line;
        public int[] showNpcs;
        public int length;
        public int showNameTime;
        public int BindMissionID;
        public int type;
        public int[] scale;
        public int[] NpcFace;
        public int[] PosX;
        public int[] PosY;
        public int shadow;
        public int effect;
        public int uieffect;
        public string[] mob;
        public string cam;
        public int[] Height;
        public int DialogueTime;
        public int Dialogue;
        public int soundId;
        public int soundTime;
        public int step;
        public override string getKey()
    public ActorShowConfig(string input)
    {
        try
        {
            return ID.ToString();
            var tables = input.Split('\t');
            int.TryParse(tables[0],out ID);
            int.TryParse(tables[1],out NpcID);
            int.TryParse(tables[2],out MapID);
            int.TryParse(tables[3],out line);
            string[] showNpcsStringArray = tables[4].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
            showNpcs = new int[showNpcsStringArray.Length];
            for (int i=0;i<showNpcsStringArray.Length;i++)
            {
                 int.TryParse(showNpcsStringArray[i],out showNpcs[i]);
            }
            int.TryParse(tables[5],out length);
            int.TryParse(tables[6],out showNameTime);
            int.TryParse(tables[7],out BindMissionID);
            int.TryParse(tables[8],out type);
            string[] scaleStringArray = tables[9].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
            scale = new int[scaleStringArray.Length];
            for (int i=0;i<scaleStringArray.Length;i++)
            {
                 int.TryParse(scaleStringArray[i],out scale[i]);
            }
            string[] NpcFaceStringArray = tables[10].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
            NpcFace = new int[NpcFaceStringArray.Length];
            for (int i=0;i<NpcFaceStringArray.Length;i++)
            {
                 int.TryParse(NpcFaceStringArray[i],out NpcFace[i]);
            }
            string[] PosXStringArray = tables[11].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
            PosX = new int[PosXStringArray.Length];
            for (int i=0;i<PosXStringArray.Length;i++)
            {
                 int.TryParse(PosXStringArray[i],out PosX[i]);
            }
            string[] PosYStringArray = tables[12].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
            PosY = new int[PosYStringArray.Length];
            for (int i=0;i<PosYStringArray.Length;i++)
            {
                 int.TryParse(PosYStringArray[i],out PosY[i]);
            }
            int.TryParse(tables[13],out shadow);
            int.TryParse(tables[14],out effect);
            int.TryParse(tables[15],out uieffect);
            mob = tables[16].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
            cam = tables[17];
            string[] HeightStringArray = tables[18].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
            Height = new int[HeightStringArray.Length];
            for (int i=0;i<HeightStringArray.Length;i++)
            {
                 int.TryParse(HeightStringArray[i],out Height[i]);
            }
            int.TryParse(tables[19],out DialogueTime);
            int.TryParse(tables[20],out Dialogue);
            int.TryParse(tables[21],out soundId);
            int.TryParse(tables[22],out soundTime);
            int.TryParse(tables[23],out step);
        }
        catch (Exception ex)
        {
            DebugEx.Log(ex);
        }
    }
    static Dictionary<int, ActorShowConfig> configs = new Dictionary<int, ActorShowConfig>();
    public static ActorShowConfig Get(int id)
    {
        if (!inited)
        {
            Debug.Log("ActorShowConfig 还未完成初始化。");
            return null;
        }
        if (configs.ContainsKey(id))
        {
            return configs[id];
        }
        public override void Parse(string content) {
            try
            {
                var contents = content.Split('\t');
        ActorShowConfig config = null;
        if (rawDatas.ContainsKey(id))
        {
            config = configs[id] = new ActorShowConfig(rawDatas[id]);
            rawDatas.Remove(id);
        }
                int.TryParse(contents[0],out ID);
                int.TryParse(contents[1],out NpcID);
                int.TryParse(contents[2],out MapID);
                int.TryParse(contents[3],out line);
                var showNpcsStringArray = contents[4].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                showNpcs = new int[showNpcsStringArray.Length];
                for (int i=0;i<showNpcsStringArray.Length;i++)
                {
                     int.TryParse(showNpcsStringArray[i],out showNpcs[i]);
                }
                int.TryParse(contents[5],out length);
                int.TryParse(contents[6],out showNameTime);
                int.TryParse(contents[7],out BindMissionID);
                int.TryParse(contents[8],out type);
                var scaleStringArray = contents[9].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                scale = new int[scaleStringArray.Length];
                for (int i=0;i<scaleStringArray.Length;i++)
                {
                     int.TryParse(scaleStringArray[i],out scale[i]);
                }
                var NpcFaceStringArray = contents[10].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                NpcFace = new int[NpcFaceStringArray.Length];
                for (int i=0;i<NpcFaceStringArray.Length;i++)
                {
                     int.TryParse(NpcFaceStringArray[i],out NpcFace[i]);
                }
                var PosXStringArray = contents[11].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                PosX = new int[PosXStringArray.Length];
                for (int i=0;i<PosXStringArray.Length;i++)
                {
                     int.TryParse(PosXStringArray[i],out PosX[i]);
                }
                var PosYStringArray = contents[12].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                PosY = new int[PosYStringArray.Length];
                for (int i=0;i<PosYStringArray.Length;i++)
                {
                     int.TryParse(PosYStringArray[i],out PosY[i]);
                }
                int.TryParse(contents[13],out shadow);
                int.TryParse(contents[14],out effect);
                int.TryParse(contents[15],out uieffect);
                mob = contents[16].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                cam = contents[17];
                var HeightStringArray = contents[18].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                Height = new int[HeightStringArray.Length];
                for (int i=0;i<HeightStringArray.Length;i++)
                {
                     int.TryParse(HeightStringArray[i],out Height[i]);
                }
                int.TryParse(contents[19],out DialogueTime);
                int.TryParse(contents[20],out Dialogue);
                int.TryParse(contents[21],out soundId);
                int.TryParse(contents[22],out soundTime);
                int.TryParse(contents[23],out step);
            }
            catch (Exception ex)
        return config;
    }
    public static bool Has(int id)
    {
        return configs.ContainsKey(id) || rawDatas.ContainsKey(id);
    }
    public static bool inited { get; private set; }
    protected static Dictionary<int, string> rawDatas = null;
    public static void Init(bool sync=false)
    {
        inited = false;
        var path = string.Empty;
        if (AssetSource.refdataFromEditor)
        {
            path = ResourcesPath.CONFIG_FODLER +"/ActorShow.txt";
        }
        else
        {
            path = AssetVersionUtility.GetAssetFilePath("config/ActorShow.txt");
        }
        if (sync)
        {
            var lines = File.ReadAllLines(path);
            rawDatas = new Dictionary<int, string>(lines.Length - 3);
            for (int i = 3; i < lines.Length; i++)
            {
                DebugEx.Log(ex);
                var line = lines[i];
                var index = line.IndexOf("\t");
                var idString = line.Substring(0, index);
                var id = int.Parse(idString);
                rawDatas[id] = line;
            }
        }
    }
            inited = true;
        }
        else
        {
            ThreadPool.QueueUserWorkItem((object _object) =>
            {
                var lines = File.ReadAllLines(path);
                rawDatas = new Dictionary<int, string>(lines.Length - 3);
                for (int i = 3; i < lines.Length; i++)
                {
                    var line = lines[i];
                    var index = line.IndexOf("\t");
                    var idString = line.Substring(0, index);
                    var id = int.Parse(idString);
                    rawDatas[id] = line;
                }
                inited = true;
            });
        }
    }
}
Core/GameEngine/Model/Config/ActorShowConfig.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: bda508e995d835441ae75633251ca0d2
timeCreated: 1549978954
timeCreated: 1550037241
licenseType: Pro
MonoImporter:
  serializedVersion: 2
Core/GameEngine/Model/ConfigManager.cs
@@ -134,7 +134,6 @@
        AddAsyncTask<QuestionBankConfig>();
        AddAsyncTask<WingRefineExpConfig>();
        AddAsyncTask<UnionLivenConfig>();
        AddAsyncTask<ActorShowConfig>();
        AddAsyncTask<FunctionForecastConfig>();
        AddAsyncTask<GmCmdConfig>();
        AddAsyncTask<GetItemWaysConfig>();
@@ -289,7 +288,6 @@
    {
        StartSyncTask<NPCConfig>();
        StartSyncTask<ModelResConfig>();
        StartSyncTask<ActorShowConfig>();
        StartSyncTask<IconConfig>();
        StartSyncTask<SysInfoConfig>();
        StartSyncTask<LanguageConfig>();
Utility/ConfigInitiator.cs
New file
@@ -0,0 +1,52 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ConfigInitiator
{
    public static bool preInited {
        get {
            return false;
        }
    }
    public static void PreInit()
    {
    }
    static int taskCount = 0;
    static int completeCount = 0;
    static bool done = false;
    public static float progress { get; private set; }
    public static void Init()
    {
        ActorShowConfig.Init();
        taskCount++;
        //初始化结束
        var logicUpdate = new LogicUpdate();
        logicUpdate.Start(
            () =>
            {
                CountInitedConfig();
                if (done)
                {
                    logicUpdate.Destroy();
                }
            }
            );
    }
    private static void CountInitedConfig()
    {
        completeCount += ActorShowConfig.inited ? 1 : 0;
        //统计配置表解析进度
        done = completeCount >= taskCount;
        progress = (float)completeCount / taskCount;
    }
}
Utility/ConfigInitiator.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 6731b290e00f46a40a7f7974c3ddb503
timeCreated: 1550036577
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Utility/LogicEngine.cs
New file
@@ -0,0 +1,61 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LogicEngine : MonoBehaviour
{
    public static LogicEngine Instance { get; private set; }
    [RuntimeInitializeOnLoadMethod]
    static void Init()
    {
        if (FindObjectOfType<LogicEngine>() == null)
        {
            var gameObject = new GameObject("LogicEngine");
            Instance = gameObject.AddMissingComponent<LogicEngine>();
            GameObject.DontDestroyOnLoad(gameObject);
        }
    }
    List<LogicUpdate> logicUpdates = new List<LogicUpdate>();
    public void Register(LogicUpdate logicUpdate)
    {
        if (!logicUpdates.Contains(logicUpdate))
        {
            logicUpdates.Add(logicUpdate);
        }
    }
    public void UnRegister(LogicUpdate logicUpdate)
    {
        if (logicUpdates.Contains(logicUpdate))
        {
            logicUpdates.Remove(logicUpdate);
        }
    }
    void Update()
    {
        for (var i = logicUpdates.Count - 1; i >= 0; i--)
        {
            var item = logicUpdates[i];
            if (item.destroyDirty)
            {
                logicUpdates.RemoveAt(i);
            }
            else
            {
                try
                {
                    item.Update();
                }
                catch (System.Exception ex)
                {
                    DebugEx.LogError(ex);
                }
            }
        }
    }
}
Utility/LogicEngine.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 0e911575c672d8f4eab0e066f163a2fd
timeCreated: 1550036706
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Utility/LogicUpdate.cs
New file
@@ -0,0 +1,51 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Threading;
using System;
public class LogicUpdate
{
    public readonly float stepInterval = 0.033333f;
    public bool destroyDirty { get; private set; }
    float nextUpdateTime = 0f;
    Action update;
    public LogicUpdate(float stepInterval = 0.033333f)
    {
        this.stepInterval = Mathf.Clamp(stepInterval, 0.033333f, float.MaxValue);
    }
    public void Start(Action updateCallBack)
    {
        this.destroyDirty = false;
        this.update = updateCallBack;
        LogicEngine.Instance.Register(this);
    }
    public void Destroy()
    {
        this.destroyDirty = true;
        this.update = null;
        OnDestroy();
    }
    public virtual void OnDestroy()
    {
    }
    public void Update()
    {
        if (Time.time >= nextUpdateTime)
        {
            nextUpdateTime = Time.time + stepInterval;
            if (update != null)
            {
                this.update();
            }
        }
    }
}
Utility/LogicUpdate.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: c0ac79931c41d0e4c8a56f85e740ccdc
timeCreated: 1550036706
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant: