From 7d8e3ed8acae7fd34140e92c72e93d9ebb2e97bd Mon Sep 17 00:00:00 2001
From: client_Wu Xijin <364452445@qq.com>
Date: 星期三, 13 二月 2019 14:12:49 +0800
Subject: [PATCH] 3335 配置表读取重构。
---
Core/GameEngine/Model/ConfigManager.cs | 2
Core/GameEngine/Model/Config/ActorShowConfig.cs.meta | 2
Utility/LogicUpdate.cs | 51 +++++
Utility/LogicUpdate.cs.meta | 12 +
Utility/LogicEngine.cs | 61 ++++++
Utility/ConfigInitiator.cs | 52 +++++
Utility/ConfigInitiator.cs.meta | 12 +
Core/GameEngine/Model/Config/ActorShowConfig.cs | 315 +++++++++++++++++++++-------------
Utility/LogicEngine.cs.meta | 12 +
9 files changed, 396 insertions(+), 123 deletions(-)
diff --git a/Core/GameEngine/Model/Config/ActorShowConfig.cs b/Core/GameEngine/Model/Config/ActorShowConfig.cs
index 955f8f9..639309e 100644
--- a/Core/GameEngine/Model/Config/ActorShowConfig.cs
+++ b/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;
+ });
+ }
+ }
}
diff --git a/Core/GameEngine/Model/Config/ActorShowConfig.cs.meta b/Core/GameEngine/Model/Config/ActorShowConfig.cs.meta
index 96539f5..a2a9a17 100644
--- a/Core/GameEngine/Model/Config/ActorShowConfig.cs.meta
+++ b/Core/GameEngine/Model/Config/ActorShowConfig.cs.meta
@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: bda508e995d835441ae75633251ca0d2
-timeCreated: 1549978954
+timeCreated: 1550037241
licenseType: Pro
MonoImporter:
serializedVersion: 2
diff --git a/Core/GameEngine/Model/ConfigManager.cs b/Core/GameEngine/Model/ConfigManager.cs
index f54bcfd..5cae9c7 100644
--- a/Core/GameEngine/Model/ConfigManager.cs
+++ b/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>();
diff --git a/Utility/ConfigInitiator.cs b/Utility/ConfigInitiator.cs
new file mode 100644
index 0000000..b04a56c
--- /dev/null
+++ b/Utility/ConfigInitiator.cs
@@ -0,0 +1,52 @@
+锘縰sing 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;
+ }
+
+
+}
diff --git a/Utility/ConfigInitiator.cs.meta b/Utility/ConfigInitiator.cs.meta
new file mode 100644
index 0000000..c424666
--- /dev/null
+++ b/Utility/ConfigInitiator.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 6731b290e00f46a40a7f7974c3ddb503
+timeCreated: 1550036577
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Utility/LogicEngine.cs b/Utility/LogicEngine.cs
new file mode 100644
index 0000000..5918237
--- /dev/null
+++ b/Utility/LogicEngine.cs
@@ -0,0 +1,61 @@
+锘縰sing 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);
+ }
+ }
+ }
+
+ }
+
+}
diff --git a/Utility/LogicEngine.cs.meta b/Utility/LogicEngine.cs.meta
new file mode 100644
index 0000000..4d3554a
--- /dev/null
+++ b/Utility/LogicEngine.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 0e911575c672d8f4eab0e066f163a2fd
+timeCreated: 1550036706
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Utility/LogicUpdate.cs b/Utility/LogicUpdate.cs
new file mode 100644
index 0000000..1c2a344
--- /dev/null
+++ b/Utility/LogicUpdate.cs
@@ -0,0 +1,51 @@
+锘縰sing 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();
+ }
+ }
+ }
+
+}
diff --git a/Utility/LogicUpdate.cs.meta b/Utility/LogicUpdate.cs.meta
new file mode 100644
index 0000000..47162e2
--- /dev/null
+++ b/Utility/LogicUpdate.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: c0ac79931c41d0e4c8a56f85e740ccdc
+timeCreated: 1550036706
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
--
Gitblit v1.8.0