From 03f2465a84f5a6b3e0495950352413884fcc95c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E5=87=AF?= Date: Sun, 20 Aug 2017 16:42:59 +0800 Subject: [PATCH 001/108] =?UTF-8?q?=E4=BF=AE=E5=A4=8DREusingScrollBUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Android.meta | 9 +++ Assets/Plugins.meta | 9 +++ Assets/Script/Core/Editor/Network.meta | 9 +++ .../Script/Core/Editor/Network/Protocol.meta | 9 +++ .../Network/Protocol/ProtocolHelper.cs.meta | 12 ++++ .../Editor/Utils/BatchReplaceNameTool.cs.meta | 12 ++++ .../ReusingScrollRect/ReusingScrollRect.cs | 30 +++++--- .../Script/GameStatus/LuaTestStstus.cs.meta | 12 ++++ Assets/XiaoMi.meta | 9 +++ ...256\241\347\220\206\345\231\250).png.meta" | 68 +++++++++++++++++++ ...6\241\347\220\206\345\231\250).xmind.meta" | 8 +++ 11 files changed, 178 insertions(+), 9 deletions(-) create mode 100644 Assets/Android.meta create mode 100644 Assets/Plugins.meta create mode 100644 Assets/Script/Core/Editor/Network.meta create mode 100644 Assets/Script/Core/Editor/Network/Protocol.meta create mode 100644 Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs.meta create mode 100644 Assets/Script/Core/Editor/Utils/BatchReplaceNameTool.cs.meta create mode 100644 Assets/Script/GameStatus/LuaTestStstus.cs.meta create mode 100644 Assets/XiaoMi.meta create mode 100644 "Assets/doc/Xmind/Export/InputManager(\350\276\223\345\205\245\347\256\241\347\220\206\345\231\250).png.meta" create mode 100644 "Assets/doc/Xmind/InputManager(\350\276\223\345\205\245\347\256\241\347\220\206\345\231\250).xmind.meta" diff --git a/Assets/Android.meta b/Assets/Android.meta new file mode 100644 index 00000000..cc055d1b --- /dev/null +++ b/Assets/Android.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ec72be2de5d599040a68cae39394cb37 +folderAsset: yes +timeCreated: 1499593847 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins.meta b/Assets/Plugins.meta new file mode 100644 index 00000000..48c20cbd --- /dev/null +++ b/Assets/Plugins.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 409b5ecb02a33a4438dbae99e7827ed5 +folderAsset: yes +timeCreated: 1499593847 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/Network.meta b/Assets/Script/Core/Editor/Network.meta new file mode 100644 index 00000000..9028965b --- /dev/null +++ b/Assets/Script/Core/Editor/Network.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4a956c54a281a8649a47619841adb6c7 +folderAsset: yes +timeCreated: 1503200325 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/Network/Protocol.meta b/Assets/Script/Core/Editor/Network/Protocol.meta new file mode 100644 index 00000000..48c2366c --- /dev/null +++ b/Assets/Script/Core/Editor/Network/Protocol.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 883e858bb8ec9304493c2251e5bb1f59 +folderAsset: yes +timeCreated: 1503200325 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs.meta b/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs.meta new file mode 100644 index 00000000..aca59ba7 --- /dev/null +++ b/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 734cc2e11a4ccda4cadde413b5847e20 +timeCreated: 1503200325 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/Utils/BatchReplaceNameTool.cs.meta b/Assets/Script/Core/Editor/Utils/BatchReplaceNameTool.cs.meta new file mode 100644 index 00000000..2ee66b05 --- /dev/null +++ b/Assets/Script/Core/Editor/Utils/BatchReplaceNameTool.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 08e6071aa6fd0a54c84709e2bcd6b506 +timeCreated: 1503200325 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs b/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs index 44600680..d2338e71 100644 --- a/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs +++ b/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs @@ -111,16 +111,28 @@ public void SetPos(Vector3 pos) SetItemDisplay(); } - #endregion + public void UpdateContent() + { + Debug.Log("m_items.Count " + m_items.Count); - #region 继承方法 - //protected override void SetContentAnchoredPosition(Vector2 position) - //{ - // InputUIEventProxy.DispatchScrollEvent("", "", position); + for (int j = m_startPos,i = 0; i < m_items.Count; i++,j++) + { + m_items[i].SetContent(j, m_datas[j]); + } + } - // //base.SetContentAnchoredPosition(position); - // //SetItemDisplay(); - //} + #endregion + + #region 继承方法 + bool m_rebuild = false; + public void Update() + { + if(m_rebuild) + { + m_rebuild = false; + SetItemDisplay(); + } + } protected override void OnSetContentAnchoredPosition(InputUIOnScrollEvent e) { @@ -139,7 +151,7 @@ public override void Rebuild(CanvasUpdate executing) base.Rebuild(executing); UpdateBound(); - SetItemDisplay(true); + m_rebuild = true; } #endregion diff --git a/Assets/Script/GameStatus/LuaTestStstus.cs.meta b/Assets/Script/GameStatus/LuaTestStstus.cs.meta new file mode 100644 index 00000000..4ba1a5f0 --- /dev/null +++ b/Assets/Script/GameStatus/LuaTestStstus.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3f6278a2781b97e40a95035a29e9f1da +timeCreated: 1503200325 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/XiaoMi.meta b/Assets/XiaoMi.meta new file mode 100644 index 00000000..da6ec53b --- /dev/null +++ b/Assets/XiaoMi.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8fc4bcb73a3765444bb04c9c945d5ec8 +folderAsset: yes +timeCreated: 1499593861 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/doc/Xmind/Export/InputManager(\350\276\223\345\205\245\347\256\241\347\220\206\345\231\250).png.meta" "b/Assets/doc/Xmind/Export/InputManager(\350\276\223\345\205\245\347\256\241\347\220\206\345\231\250).png.meta" new file mode 100644 index 00000000..921a7237 --- /dev/null +++ "b/Assets/doc/Xmind/Export/InputManager(\350\276\223\345\205\245\347\256\241\347\220\206\345\231\250).png.meta" @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 98356ea4dfad05c468c2ea2cc8f5c5e2 +timeCreated: 1503200336 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/doc/Xmind/InputManager(\350\276\223\345\205\245\347\256\241\347\220\206\345\231\250).xmind.meta" "b/Assets/doc/Xmind/InputManager(\350\276\223\345\205\245\347\256\241\347\220\206\345\231\250).xmind.meta" new file mode 100644 index 00000000..69401e74 --- /dev/null +++ "b/Assets/doc/Xmind/InputManager(\350\276\223\345\205\245\347\256\241\347\220\206\345\231\250).xmind.meta" @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d8f7b74f752ecfc48ac27a3f497f06c2 +timeCreated: 1503200325 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: From ac0c838ed9ff515197e5ce5b23eee0d06757c771 Mon Sep 17 00:00:00 2001 From: xinliang zhu Date: Thu, 24 Aug 2017 17:15:02 +0800 Subject: [PATCH 002/108] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=96=B0=E6=89=8B?= =?UTF-8?q?=E5=BC=95=E5=AF=BC=E6=98=AF=E5=90=A6=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/Editor/GuideSystem/GuideSystemEditor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Script/Core/Editor/GuideSystem/GuideSystemEditor.cs b/Assets/Script/Core/Editor/GuideSystem/GuideSystemEditor.cs index 82abf60e..4793ad3c 100644 --- a/Assets/Script/Core/Editor/GuideSystem/GuideSystemEditor.cs +++ b/Assets/Script/Core/Editor/GuideSystem/GuideSystemEditor.cs @@ -20,7 +20,7 @@ public static void ShowAllMethod() [MenuItem("Tools/新手引导/初始化")] public static void InitGuideSystem() { - if(GetGuideIsInit()) + if(!GetGuideIsInit()) { //创建数据表 SaveDataTable(); From 86612fc874e19913ad88b146acedd7bd9ba33f59 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Fri, 1 Sep 2017 18:11:13 +0800 Subject: [PATCH 003/108] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E5=8D=B8=E8=BD=BD=E7=9A=84=E4=B8=80=E4=B8=AA=E4=B8=A5=E9=87=8D?= =?UTF-8?q?bug,=E5=A2=9E=E5=8A=A0fbx=E5=AF=BC=E5=85=A5=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/Application/ApplicationManager.cs | 9 + .../Application/ApplicationStatusManager.cs | 7 + .../Core/Application/IApplicationStatus.cs | 5 + Assets/Script/Core/Audio/AudioManager.cs | 2 +- .../Script/Core/Data/DataGenerateManager.cs | 19 +- .../Core/Develop/DevelopReplayManager.cs | 10 +- .../Script/Core/Editor/Lua/LuaEditorWindow.cs | 24 +- .../Editor/Network/Protocol/ProtocolHelper.cs | 47 +- .../Core/Editor/Utils/BatchReplaceNameTool.cs | 83 ++- .../Script/Core/Editor/Utils/EditorUtilGUI.cs | 12 +- Assets/Script/Core/Editor/Utils/ImportTool.cs | 242 +++++++ .../Core/Editor/res/LuaLib/FrameWork.meta | 2 +- .../Editor/res/LuaLib/FrameWork/Data.meta | 2 +- .../FrameWork/Data/LuaDataHelper.txt.meta | 2 +- .../FrameWork/LuaFrameWorkEventName.txt.meta | 2 +- .../Editor/res/LuaLib/FrameWork/Status.meta | 2 +- .../Status/LuaStatusManager.txt.meta | 2 +- .../Status/LuaStatusMetaTable.txt.meta | 2 +- .../Core/Editor/res/LuaLib/FrameWork/UI.meta | 2 +- .../LuaLib/FrameWork/UI/LuaUIManager.txt.meta | 2 +- .../UI/LuaUIWindowMetatable.txt.meta | 2 +- .../Editor/res/LuaLib/FrameWork/Update.meta | 2 +- .../FrameWork/Update/LuaUpdate.txt.meta | 2 +- .../Editor/res/LuaLib/LuaDataHelper.txt.meta | 2 +- .../res/LuaLib/LuaEventDispatcher.txt.meta | 2 +- .../Editor/res/LuaLib/LuaFormatTools.txt.meta | 2 +- .../Editor/res/LuaLib/LuaPrintTable.txt.meta | 2 +- .../res/LuaLib/LuaStringHelper.txt.meta | 2 +- .../Script/Core/Editor/res/LuaLib/Unity.meta | 2 +- .../res/LuaLib/Unity/LuaUnityDefine.txt.meta | 2 +- .../Core/Editor/res/LuaLib/luaJson.txt.meta | 2 +- .../Script/Core/HotUpdate/HotUpdateManager.cs | 1 + .../Input/Events/NetWork/InputNetworkEvent.cs | 10 +- .../Core/Input/Interface/IInputEventBase.cs | 5 +- Assets/Script/Core/Lua/ToLua/Plugins/iOS.meta | 2 + .../Core/ResourceLoad/AssetsBundleManager.cs | 62 +- .../Core/ResourceLoad/ResourceManager.cs | 2 +- .../UI/Components/JoyStick/UGUIJoyStick.cs | 2 +- Assets/Script/Core/UI/Control/UIManager.cs | 50 ++ Assets/Script/Core/UI/Model/UIBase.cs | 46 ++ Assets/Script/Core/Utils/DeJson.cs | 650 ++++++++++++++++++ Assets/Script/Core/Utils/ExpandMethod.cs | 16 + Assets/Script/Core/Utils/FileTool.cs | 62 ++ Assets/Script/Core/Utils/ResourceIOTool.cs | 36 +- Assets/Script/Core/Utils/UGUITool.cs | 5 +- 45 files changed, 1357 insertions(+), 92 deletions(-) create mode 100644 Assets/Script/Core/Editor/Utils/ImportTool.cs create mode 100644 Assets/Script/Core/Utils/DeJson.cs diff --git a/Assets/Script/Core/Application/ApplicationManager.cs b/Assets/Script/Core/Application/ApplicationManager.cs index 728a2d30..b6db8f33 100644 --- a/Assets/Script/Core/Application/ApplicationManager.cs +++ b/Assets/Script/Core/Application/ApplicationManager.cs @@ -118,6 +118,7 @@ public void AppLaunch() public static ApplicationVoidCallback s_OnApplicationFixedUpdate = null; public static ApplicationVoidCallback s_OnApplicationOnGUI = null; public static ApplicationVoidCallback s_OnApplicationOnDrawGizmos = null; + public static ApplicationVoidCallback s_OnApplicationLateUpdate = null; void OnApplicationQuit() { @@ -174,6 +175,14 @@ void Update() s_OnApplicationUpdate(); } + private void LateUpdate() + { + if(s_OnApplicationLateUpdate != null) + { + s_OnApplicationLateUpdate(); + } + } + private void FixedUpdate() { if (s_OnApplicationFixedUpdate != null) diff --git a/Assets/Script/Core/Application/ApplicationStatusManager.cs b/Assets/Script/Core/Application/ApplicationStatusManager.cs index 63d00cc8..fe4ce97b 100644 --- a/Assets/Script/Core/Application/ApplicationStatusManager.cs +++ b/Assets/Script/Core/Application/ApplicationStatusManager.cs @@ -16,6 +16,13 @@ public class ApplicationStatusManager public static void Init() { ApplicationManager.s_OnApplicationUpdate += AppUpdate; + ApplicationManager.s_OnApplicationOnGUI += AppOnGUI; + } + + private static void AppOnGUI() + { + if (s_currentAppStatus != null) + s_currentAppStatus.OnGUI(); } /// diff --git a/Assets/Script/Core/Application/IApplicationStatus.cs b/Assets/Script/Core/Application/IApplicationStatus.cs index 85467334..3951ef3d 100644 --- a/Assets/Script/Core/Application/IApplicationStatus.cs +++ b/Assets/Script/Core/Application/IApplicationStatus.cs @@ -72,6 +72,11 @@ public virtual void OnUpdate() } + public virtual void OnGUI() + { + + } + public virtual IEnumerator InChangeScene(ChangSceneFinish handle) { if (handle != null) diff --git a/Assets/Script/Core/Audio/AudioManager.cs b/Assets/Script/Core/Audio/AudioManager.cs index 62ee73e7..c01606c2 100644 --- a/Assets/Script/Core/Audio/AudioManager.cs +++ b/Assets/Script/Core/Audio/AudioManager.cs @@ -232,7 +232,7 @@ public static AudioClip GetAudioClip(string l_soundName) { AudioClip clipTmp = null; - clipTmp = ResourceManager.Load(l_soundName) as AudioClip; + clipTmp = ResourceManager.Load(l_soundName); if (clipTmp == null) { diff --git a/Assets/Script/Core/Data/DataGenerateManager.cs b/Assets/Script/Core/Data/DataGenerateManager.cs index 448f8c0a..1e43daf7 100644 --- a/Assets/Script/Core/Data/DataGenerateManager.cs +++ b/Assets/Script/Core/Data/DataGenerateManager.cs @@ -49,15 +49,28 @@ public static void PreLoad() GlobalEvent.AddEvent(MemoryEvent.FreeHeapMemory, CleanCache); } - string dataName = typeof(T).Name.Replace("Generate",""); - - DataTable data = DataManager.GetData(dataName); + + DataTable data= GetDataTable(); for (int i = 0; i < data.TableIDs.Count; i++) { GetData(data.TableIDs[i]); } } + public static Dictionary GetAllData() + { + CleanCache(); + PreLoad(); + return s_dict; + } + public static DataTable GetDataTable() + { + string dataName = typeof(T).Name.Replace("Generate", ""); + + return DataManager.GetData(dataName); + + } + public static void CleanCache(params object[] objs) { s_dict.Clear(); diff --git a/Assets/Script/Core/Develop/DevelopReplayManager.cs b/Assets/Script/Core/Develop/DevelopReplayManager.cs index 8d429165..c399573b 100644 --- a/Assets/Script/Core/Develop/DevelopReplayManager.cs +++ b/Assets/Script/Core/Develop/DevelopReplayManager.cs @@ -129,7 +129,7 @@ public static void OnEveryEventCallBack(string eventName, IInputEventBase inputE tmp.Add(c_serializeInfoKey, inputEvent.Serialize()); try { - WriteInputEvent(Json.Serialize(tmp)); + WriteInputEvent(Serializer.Serialize(tmp)); } catch(Exception e) { @@ -199,6 +199,8 @@ static void WriteRandomRecord(int random) static void WriteInputEvent(string EventSerializeContent) { + //Debug.Log("EventSerializeContent: " + EventSerializeContent); + if (m_EventWriter != null) { m_EventWriter.WriteLine(EventSerializeContent); @@ -228,7 +230,7 @@ public static void LoadReplayFile(string fileName) LoadEventStream(eventContent.Split('\n')); LoadRandomList(randomContent.Split('\n')); } - + public static Deserializer Deserializer = new Deserializer(); static void LoadEventStream(string[] content) { s_eventStream = new List(); @@ -236,8 +238,8 @@ static void LoadEventStream(string[] content) { if (content[i] != "") { - Dictionary info = (Dictionary)(Json.Deserialize(content[i])); - IInputEventBase eTmp = (IInputEventBase)JsonUtility.FromJson(info[c_serializeInfoKey].ToString(), Type.GetType(info[c_eventNameKey].ToString())); + Dictionary info = (Deserializer.Deserialize> (content[i])); + IInputEventBase eTmp = (IInputEventBase)Deserializer.Deserialize(Type.GetType(info[c_eventNameKey].ToString()),info[c_serializeInfoKey].ToString()); s_eventStream.Add(eTmp); } } diff --git a/Assets/Script/Core/Editor/Lua/LuaEditorWindow.cs b/Assets/Script/Core/Editor/Lua/LuaEditorWindow.cs index 596a6a6b..5e164c2f 100644 --- a/Assets/Script/Core/Editor/Lua/LuaEditorWindow.cs +++ b/Assets/Script/Core/Editor/Lua/LuaEditorWindow.cs @@ -227,25 +227,23 @@ void LuaFileGUI() void LuaWarpFileGUI() { - if (Directory.Exists(CustomSettings.saveDir)) + if (!File.Exists(CustomSettings.saveDir + "/LuaBinderCatch.cs")) { - if (!File.Exists(CustomSettings.saveDir + "/LuaBinderCatch.cs")) - { - if (GUILayout.Button("清除Lua Warp脚本")) - { - FileTool.DeleteDirectory(CustomSettings.saveDir); - CreateLuaBinder(); - AssetDatabase.Refresh(); - } - } - - if (GUILayout.Button("重新生成Lua Warp脚本")) + if (GUILayout.Button("清除Lua Warp脚本")) { + FileTool.CreatFilePath(CustomSettings.saveDir); FileTool.DeleteDirectory(CustomSettings.saveDir); - ToLuaMenu.GenLuaAll(); + CreateLuaBinder(); + AssetDatabase.Refresh(); } } + if (GUILayout.Button("重新生成Lua Warp脚本")) + { + FileTool.CreatPath(CustomSettings.saveDir); + FileTool.DeleteDirectory(CustomSettings.saveDir); + ToLuaMenu.GenLuaAll(); + } } /// diff --git a/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs b/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs index 58764e0c..cd15ef83 100644 --- a/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs +++ b/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs @@ -344,6 +344,7 @@ static void GenerateProtocolToCsharp() { log += ("跳过了 " + className + " 类\n"); + //检查类的子结构,放入Struct列表中 string name = "m_" + item.Value + "_c"; if (protocolInfo.ContainsKey(name)) { @@ -370,14 +371,24 @@ static void GenerateProtocolToCsharp() output += GetTab(1) + "#region Struct\n"; for (int i = 0; i < s_SubStruct.Count; i++) { - try + if(GetAimStructType(s_SubStruct[i]) == null) { - output += GenerateProtocolClass(2, SendMode.Both, null, s_SubStruct[i], protocolInfo[s_SubStruct[i]], true); + try + { + output += GenerateProtocolClass(2, SendMode.Both, null, s_SubStruct[i], protocolInfo[s_SubStruct[i]], true); + } + catch (Exception e) + { + throw new Exception("s_SubStruct[i] ->" + s_SubStruct[i] + "\n" + e.ToString()); + } } - catch(Exception e) + else { - throw new Exception("s_SubStruct[i] ->" + s_SubStruct[i] + "\n" + e.ToString()); + log += ("跳过了 " + s_SubStruct[i] + " 结构\n"); + //检查结构的子结构,放入Struct列表中 + GenerateProtocolClass(2, SendMode.Both, null, s_SubStruct[i], protocolInfo[s_SubStruct[i]], true); } + } output += GetTab(1) + "#endregion \n"; @@ -514,7 +525,24 @@ static Type GetAimType(string name) for (int i = 0; i < types.Length; i++) { - if (typeof(CsharpProtocolInterface).IsAssignableFrom(types[i]) + if ((typeof(CsharpProtocolInterface).IsAssignableFrom(types[i])|| typeof(IProtocolStructInterface).IsAssignableFrom(types[i])) + && types[i].Name.ToLower() == name.ToLower() + ) + { + return types[i]; + } + } + + return null; + } + + static Type GetAimStructType(string name) + { + Type[] types = EditorTool.GetTypes(); + + for (int i = 0; i < types.Length; i++) + { + if (typeof(IProtocolStructInterface).IsAssignableFrom(types[i]) && types[i].Name.ToLower() == name.ToLower() ) { @@ -872,7 +900,14 @@ static int sort(Type x, Type y) vy = ((ModuleAttribute)objy[0]).MessageCode; } - return vx.CompareTo(vy); + if (vx == vy) + { + return x.Name.CompareTo(y.Name); + } + else + { + return vx.CompareTo(vy); + } } static bool GetIsModule(Type type) diff --git a/Assets/Script/Core/Editor/Utils/BatchReplaceNameTool.cs b/Assets/Script/Core/Editor/Utils/BatchReplaceNameTool.cs index 986d1d60..1498dca0 100644 --- a/Assets/Script/Core/Editor/Utils/BatchReplaceNameTool.cs +++ b/Assets/Script/Core/Editor/Utils/BatchReplaceNameTool.cs @@ -6,7 +6,6 @@ [ExecuteInEditMode] public class BatchReplaceNameTool : EditorWindow { - [MenuItem("Tools/批量修改名称")] public static void ShowWindow() @@ -14,9 +13,11 @@ public static void ShowWindow() GetWindow(typeof(BatchReplaceNameTool)); } + bool selectChild = false; string m_content = ""; string m_replace = ""; Object[] selects; + List selectList = new List(); Vector3 pos = Vector3.zero; Vector3 pos2 = Vector3.zero; @@ -27,44 +28,49 @@ void OnGUI() pos = GUILayout.BeginScrollView(pos); + selectChild = EditorGUILayout.Toggle("包括选中子节点", selectChild); EditorGUILayout.LabelField("已选列表:"); EditorGUI.indentLevel++; - for (int i = 0; i < selects.Length; i++) + for (int i = 0; i < selectList.Count; i++) { - EditorGUILayout.ObjectField(selects[i], typeof(Object)); + EditorGUILayout.ObjectField(selectList[i], typeof(Object)); } EditorGUI.indentLevel--; GUILayout.EndScrollView(); EditorGUILayout.Space(); - m_content = EditorGUILayout.TextField("replace content:", m_content); - m_replace = EditorGUILayout.TextField("replace to:", m_replace); + EditorGUILayout.LabelField("预览:"); + EditorGUI.indentLevel++; - EditorGUILayout.Space(); + pos2 = GUILayout.BeginScrollView(pos2); - if(m_content != "") + for (int i = 0; i < selectList.Count; i++) { - EditorGUILayout.LabelField("预览:"); - EditorGUI.indentLevel++; + string tmp = selectList[i].name; - pos2 = GUILayout.BeginScrollView(pos2); - - for (int i = 0; i < selects.Length; i++) + if (m_content != "") { - string tmp = selects[i].name; - tmp = tmp.Replace(m_content, m_replace); - - EditorGUILayout.LabelField(tmp); } - GUILayout.EndScrollView(); - EditorGUI.indentLevel--; - if (GUILayout.Button("Repalce!")) + EditorGUILayout.LabelField(tmp); + } + GUILayout.EndScrollView(); + EditorGUI.indentLevel--; + + + m_content = EditorGUILayout.TextField("replace content:", m_content); + m_replace = EditorGUILayout.TextField("replace to:", m_replace); + + EditorGUILayout.Space(); + + if (GUILayout.Button("Repalce!")) + { + if (m_content != "") { - ChangeName(selects, m_content, m_replace); + ChangeName(selectList, m_content, m_replace); } } } @@ -72,29 +78,46 @@ void OnGUI() private void Update() { selects = Selection.GetFiltered(typeof(GameObject), SelectionMode.Unfiltered); - EnterLogic(selects, m_content); + + selectList.Clear(); + for (int i = 0; i < selects.Length; i++) + { + if(selectChild) + { + GameObject go = (GameObject)selects[i]; + AddChild(go); + } + else + { + selectList.Add((GameObject)selects[i]); + } + } Repaint(); } - void EnterLogic(Object[] objs, string newName) + void AddChild(GameObject go) { - if (Input.GetKeyDown(KeyCode.A)) + if(!selectList.Contains(go)) { - Debug.Log("Enter"); - ChangeName(objs, newName, m_replace); + selectList.Add(go); + + foreach (Transform tf in go.transform) + { + AddChild(tf.gameObject); + } } } - void ChangeName(Object[] objs, string newName,string replaceTo) + void ChangeName(List list, string newName,string replaceTo) { - Undo.RecordObjects(objs, "ReplaceName->" + newName); - for (int i = 0; i < objs.Length; i++) + Undo.RecordObjects(list.ToArray(), "ReplaceName->" + newName); + for (int i = 0; i < list.Count; i++) { - string tmp = objs[i].name; + string tmp = list[i].name; tmp = tmp.Replace(newName, replaceTo); - objs[i].name = tmp; + list[i].name = tmp; } } } diff --git a/Assets/Script/Core/Editor/Utils/EditorUtilGUI.cs b/Assets/Script/Core/Editor/Utils/EditorUtilGUI.cs index 9a256e96..1759c51c 100644 --- a/Assets/Script/Core/Editor/Utils/EditorUtilGUI.cs +++ b/Assets/Script/Core/Editor/Utils/EditorUtilGUI.cs @@ -33,8 +33,16 @@ public static string FieldGUI_TypeValue(SingleField data) public static string FieldGUI_Type(FieldType type,string enumType,string content, string labelContent = "字段内容") { - SingleField data = new SingleField(type, content, enumType); - return EditorUtilGUI.FieldGUI_Type(data, labelContent); + try + { + SingleField data = new SingleField(type, content, enumType); + return EditorUtilGUI.FieldGUI_Type(data, labelContent); + } + catch(Exception e) + { + EditorGUILayout.LabelField("解析错误:", e.ToString(), "ErrorLabel"); + return content; + } } public static string FieldGUI_Type(SingleField data, string labelContent = "字段内容") diff --git a/Assets/Script/Core/Editor/Utils/ImportTool.cs b/Assets/Script/Core/Editor/Utils/ImportTool.cs new file mode 100644 index 00000000..1e1777db --- /dev/null +++ b/Assets/Script/Core/Editor/Utils/ImportTool.cs @@ -0,0 +1,242 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using UnityEditor; +using UnityEditor.Animations; +using UnityEngine; + +public class ImportTool : AssetPostprocessor +{ + static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) + { + for (int i = 0; i < importedAssets.Length; i++) + { + string expandName = FileTool.GetExpandName(importedAssets[i]); + + if (expandName.ToUpper() == "FBX") + { + OnImportFBX(importedAssets[i]); + } + } + } + + #region FBX + + const char c_FBXspltChar = '@'; + const char c_FBXsubSpltChar = '_'; + + void OnPostprocessModel(GameObject g) + { + ModelImporter model = (ModelImporter)assetImporter; + if (model != null) + { + + if (isLoopAnimation(g.name)) + { + //由于我们采用动画分离的导出策略,每个fbx只有一个动画 + if (model.defaultClipAnimations.Length > 0) + { + List actions = new List(); + ModelImporterClipAnimation anim = model.defaultClipAnimations[0]; + if (!anim.loopTime) + { + anim.loopTime = true; + anim.loopPose = true; + actions.Add(anim); + model.clipAnimations = actions.ToArray(); + // model.SaveAndReimport(); + } + } + + } + + if (model.isReadable) + { + model.isReadable = false; + model.SaveAndReimport(); + } + } + Debug.Log("OnPostprocessModel : " + g.name); + } + bool isLoopAnimation(string objectName) + { + bool res = false; + if (objectName.Contains("wait")) + { + res = true; + } + else if (objectName.Contains("walk")) + { + res = true; + } + else if (objectName.Contains("run")) + { + res = true; + } + else if (objectName.Contains("air")) + { + res = true; + } + else if (objectName.Contains("move")) + { + res = true; + } + return res; + } + + static string ModelPathDre = "Assets/_Res/Models/Charactors/Player/male"; + [MenuItem("Tools/模型动画转换AnimatorController")] + static void ReCreateFBXAnimations() + { + List paths = FileTool.GetAllFileNamesByPath(ModelPathDre,new string[] { "fbx","FBX"}); + foreach (var item in paths) + { + // Debug.Log(item); + OnImportFBX(item); + } + } + + static void OnImportFBX(string assetPath) + { + AnimatorController ac =null; + try + { + string fileName = FileTool.GetFileNameByPath(assetPath); + + string[] fileSplitTmp = fileName.Split(c_FBXspltChar); + if (fileSplitTmp.Length > 1 && fileSplitTmp[0] == "FBX") + { + //动作 + if (fileSplitTmp.Length >= 3) + { + Debug.Log("FBXImportTool :检测到导入了 " + fileName); + + //建立文件夹 + string animPath = "Assets/_Res/Anim/"; + string modelName = fileSplitTmp[1]; + //string animName = modelName + "_" + FileTool.RemoveExpandName(fileSplitTmp[2]); + string animName = FileTool.RemoveExpandName(fileSplitTmp[2]); + int animLayer = 0; + + if (fileSplitTmp.Length > 3) + { + animLayer = int.Parse(FileTool.RemoveExpandName(fileSplitTmp[3])); + } + + string[] tmp = modelName.Split(c_FBXsubSpltChar); + + if (tmp.Length > 1) + { + string subPath = ""; + for (int i = 0; i < tmp.Length; i++) + { + subPath += tmp[i] + "/"; + } + + animPath += subPath; + } + + animPath += "CTR_" + modelName + ".controller"; + + + //创建AnimControl文件 + if (!File.Exists(animPath)) + { + FileTool.CreatFilePath(animPath); + ac = AnimatorController.CreateAnimatorControllerAtPath(animPath); + } + else + { + ac = AssetDatabase.LoadAssetAtPath(animPath); + } + + while (ac.layers.Length <= animLayer) + { + ac.AddLayer("Layer " + ac.layers.Length); + //AnimatorControllerLayer layer = ac.layers[animLayer]; + + //AddStateTransition("Empty", "", ac.layers[ac.layers.Length]); + } + + //自动绑定动画 + AnimatorControllerLayer layer = ac.layers[animLayer]; + AddStateTransition(animName, assetPath, layer); + + } + //模型 + else + { + + } + } + else + { + Debug.LogWarning("FBXImportTool: " + assetPath + " 资源不满足 FBX" + c_FBXspltChar + "模型名(下划线分级)" + c_FBXspltChar + "动作名" + c_FBXspltChar + "分层数(可选) 的格式,不能被自动导入"); + } + } + catch(Exception e) + { + Debug.LogError("FBXImportTool 导入资源出错 ->" + assetPath + "<- " + e.ToString()); + } + if(ac!=null) + for (int i = 0; i < ac.layers.Length; i++) + { + if (i == 0) + continue; + + AnimatorControllerLayer item= ac.layers[i]; + string emptyName = "empty"; + AnimatorState state= GetState(item.stateMachine, emptyName); + if (state == null) + { + state = item.stateMachine.AddState(emptyName); + item.stateMachine.defaultState = state; + } + } + + } + + const int xSpace = 250; + const int ySpace = 50; + + const int colCount = 7; + + private static void AddStateTransition(string animName, string path, AnimatorControllerLayer layer) + { + AnimatorStateMachine sm = layer.stateMachine; + //根据动画文件读取它的AnimationClip对象 + AnimationClip newClip = AssetDatabase.LoadAssetAtPath(path, typeof(AnimationClip)) as AnimationClip; + AnimatorState state = GetState(sm, animName); + + if(state == null) + { + Vector3 pos = new Vector3(((sm.states.Length / colCount)+ 1) * xSpace , ((sm.states.Length % colCount) + 4) * ySpace); + state = sm.AddState(animName, pos); + if (animName.Contains("wait")) + { + sm.defaultState = state; + } + // Debug.Log("Add :" + animName); + } + + //取出动画名子 添加到state里面 + state.motion = newClip; + newClip.name = animName; + } + + static AnimatorState GetState(AnimatorStateMachine sm, string animName) + { + for (int i = 0; i < sm.states.Length; i++) + { + if (sm.states[i].state.name == animName) + { + return sm.states[i].state; + } + } + + return null; + } + + #endregion +} diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork.meta index fb2a9684..ca9824f5 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2bbd1b357c000a8459d956705811be8a +guid: ff2a2f1dce34c7e40a92a7783e430a28 folderAsset: yes timeCreated: 1484192362 licenseType: Pro diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data.meta index 1d432d0d..e105be9e 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 13a4eb2cd8a46b740b18723912e45fb3 +guid: d780b84b98b09e04c8de87040cad363e folderAsset: yes timeCreated: 1484207744 licenseType: Pro diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data/LuaDataHelper.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data/LuaDataHelper.txt.meta index 4347a6c9..8878e454 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data/LuaDataHelper.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data/LuaDataHelper.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ce0d52a43cf3d10499555096e49e9f6c +guid: e44f100664822d64fb3c97199e39e2ce timeCreated: 1484128663 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/LuaFrameWorkEventName.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/LuaFrameWorkEventName.txt.meta index c4822f0c..74794ba9 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/LuaFrameWorkEventName.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/LuaFrameWorkEventName.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ebec223e738cfa64292c438fb9f6bd52 +guid: 4adb41b46c02b37488c49a683a97c9d3 timeCreated: 1484207614 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status.meta index 556c6439..b44babae 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 34c46144b136ca9448e6f527bcf3535f +guid: f6e5203268f3aa743a6639220ac4d987 folderAsset: yes timeCreated: 1484207744 licenseType: Pro diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusManager.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusManager.txt.meta index 311ad3bc..ad9cff90 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusManager.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusManager.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 05416ed039716a7458554cab2c82b7f6 +guid: b0411e9fd364e7b46a1ce54f656f7f88 timeCreated: 1483583261 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusMetaTable.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusMetaTable.txt.meta index ea8097c0..b5d3ba9b 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusMetaTable.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusMetaTable.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 438fde22acf8c394098a9732b01c6815 +guid: 48f3961b8970ad84f84d39a8598c61a0 timeCreated: 1483584427 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI.meta index 778a4dd6..2b5c07ba 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0271c42a6170a544cab79b56af9f666f +guid: af8955bf1ad0c994bb8887e1b4c936bd folderAsset: yes timeCreated: 1484207743 licenseType: Pro diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIManager.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIManager.txt.meta index c6a14455..0c4ca59d 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIManager.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIManager.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ee142013577497c4791ebc7e2b0ce2ce +guid: 5e22bcf50d9d55a4abbab9b4a6dbeece timeCreated: 1483408582 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIWindowMetatable.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIWindowMetatable.txt.meta index 0749c87b..7c545ee4 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIWindowMetatable.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIWindowMetatable.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 255ba82f9f55a31499f0f309ba1ab806 +guid: 3e2abdb8dcdc74b448ffe39b60d542ff timeCreated: 1483408582 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update.meta index 9c6ceaef..92e3a796 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4ff5dc49af7714649a8775d5b33523c8 +guid: 6b4884196e4d11d4ab0ef4c200f0f212 folderAsset: yes timeCreated: 1484207744 licenseType: Pro diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update/LuaUpdate.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update/LuaUpdate.txt.meta index 8d0aa56d..b45f1b55 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update/LuaUpdate.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update/LuaUpdate.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: be47f7a6c8386eb478c8e77238c55e08 +guid: 2e54a1ea4d516b14483649476f908c99 timeCreated: 1484192777 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/LuaDataHelper.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/LuaDataHelper.txt.meta index 21026280..78c7254f 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/LuaDataHelper.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/LuaDataHelper.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2983b66a6a8986d458ce1f70beca16ff +guid: 462a33f48cfbd5e4ea72a00e2bfbc02b timeCreated: 1484128663 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/LuaEventDispatcher.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/LuaEventDispatcher.txt.meta index 2bf9675b..5d7b94c1 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/LuaEventDispatcher.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/LuaEventDispatcher.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 86da7efc204179e49b516670b7729bff +guid: d3a6cfb05c20cac46b9f8212cbbdd3a0 timeCreated: 1484192797 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/LuaFormatTools.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/LuaFormatTools.txt.meta index 6053d3d1..f92bd303 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/LuaFormatTools.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/LuaFormatTools.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 630c6bdb335b0254f96a3c34887eb1d4 +guid: 91c832fd50f59c14c9591a063d32dc61 timeCreated: 1486691786 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/LuaPrintTable.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/LuaPrintTable.txt.meta index 5be10027..9cbf687f 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/LuaPrintTable.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/LuaPrintTable.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fcfd323051881c442bea587f100493dc +guid: 840e07686d9ea654793ca3cd47e9a384 timeCreated: 1483587801 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/LuaStringHelper.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/LuaStringHelper.txt.meta index 9f62b443..1bd998d3 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/LuaStringHelper.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/LuaStringHelper.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8bbc6c2206954744ab7358f75f149152 +guid: 506d492ff00984f419fe79d4c84be7e0 timeCreated: 1486697665 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/Unity.meta b/Assets/Script/Core/Editor/res/LuaLib/Unity.meta index 2591c4b6..395fc835 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/Unity.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/Unity.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4a46641591ccde949bd3c1b054217bcb +guid: bbc24aef5b7a7bd4797ee8a344aaffaa folderAsset: yes timeCreated: 1486951508 licenseType: Pro diff --git a/Assets/Script/Core/Editor/res/LuaLib/Unity/LuaUnityDefine.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/Unity/LuaUnityDefine.txt.meta index 1678fb86..67c4683f 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/Unity/LuaUnityDefine.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/Unity/LuaUnityDefine.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 36ed4937e7501034fb2920ee3e356716 +guid: dfdce21bd5144154590676ba2634cdb3 timeCreated: 1486799727 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/luaJson.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/luaJson.txt.meta index fd622d31..5b57044a 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/luaJson.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/luaJson.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e58d5c4d26238ab479559ec3efa9ef01 +guid: 74a25163d3fedd6478bdd0e1c2e4cd57 timeCreated: 1484110323 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/HotUpdate/HotUpdateManager.cs b/Assets/Script/Core/HotUpdate/HotUpdateManager.cs index eb445798..65c71a85 100644 --- a/Assets/Script/Core/HotUpdate/HotUpdateManager.cs +++ b/Assets/Script/Core/HotUpdate/HotUpdateManager.cs @@ -290,6 +290,7 @@ static void Init() } string downLoadPath = downLoadServicePath + "/" + platform + "/" + Application.version + "/"; + Debug.Log("=====>"+downLoadPath); s_versionFileDownLoadPath = downLoadPath + HotUpdateManager.c_versionFileName + "." + AssetsBundleManager.c_AssetsBundlesExpandName; s_Md5FileDownLoadPath = downLoadPath + ResourcesConfigManager.c_ManifestFileName + "." + AssetsBundleManager.c_AssetsBundlesExpandName; diff --git a/Assets/Script/Core/Input/Events/NetWork/InputNetworkEvent.cs b/Assets/Script/Core/Input/Events/NetWork/InputNetworkEvent.cs index 67311572..9bdaa618 100644 --- a/Assets/Script/Core/Input/Events/NetWork/InputNetworkEvent.cs +++ b/Assets/Script/Core/Input/Events/NetWork/InputNetworkEvent.cs @@ -24,7 +24,7 @@ public Dictionary Data { if (m_content != null && m_content != "") { - m_data = Json.Deserialize(m_content) as Dictionary; + m_data = DevelopReplayManager.Deserializer.Deserialize>(m_content); } else { @@ -41,6 +41,12 @@ public Dictionary Data } } + public override void Reset() + { + base.Reset(); + m_content = null; + } + protected override string GetEventKey() { return m_MessgaeType; @@ -50,7 +56,7 @@ public override string Serialize() { if (m_content == null || m_content == "") { - m_content = Json.Serialize(Data); + m_content = Serializer.Serialize(Data); } return base.Serialize(); diff --git a/Assets/Script/Core/Input/Interface/IInputEventBase.cs b/Assets/Script/Core/Input/Interface/IInputEventBase.cs index 95789214..9993a6d2 100644 --- a/Assets/Script/Core/Input/Interface/IInputEventBase.cs +++ b/Assets/Script/Core/Input/Interface/IInputEventBase.cs @@ -1,5 +1,6 @@ using UnityEngine; using System.Collections; +using FrameWork; public abstract class IInputEventBase { @@ -27,7 +28,7 @@ public IInputEventBase() Reset(); } - public void Reset() + public virtual void Reset() { m_eventKey = null; m_t = DevelopReplayManager.CurrentTime; @@ -48,7 +49,7 @@ protected virtual string GetEventKey() /// public virtual string Serialize() { - return JsonUtility.ToJson(this); + return Serializer.Serialize(this); } /// diff --git a/Assets/Script/Core/Lua/ToLua/Plugins/iOS.meta b/Assets/Script/Core/Lua/ToLua/Plugins/iOS.meta index 18cdae52..f85aae2d 100644 --- a/Assets/Script/Core/Lua/ToLua/Plugins/iOS.meta +++ b/Assets/Script/Core/Lua/ToLua/Plugins/iOS.meta @@ -3,3 +3,5 @@ guid: f3f3ab55ec6f8fe4a8ad1581c66be646 folderAsset: yes DefaultImporter: userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/ResourceLoad/AssetsBundleManager.cs b/Assets/Script/Core/ResourceLoad/AssetsBundleManager.cs index ff567472..9aa9f29f 100644 --- a/Assets/Script/Core/ResourceLoad/AssetsBundleManager.cs +++ b/Assets/Script/Core/ResourceLoad/AssetsBundleManager.cs @@ -204,14 +204,14 @@ public static T Load(string name) where T: UnityEngine.Object { if (s_bundles.ContainsKey(name)) { - return (T)s_bundles[name].mainAsset; + return s_bundles[name].Load(); } else { #if !UNITY_WEBGL if (MemoryManager.s_allowDynamicLoad) { - return (T)LoadBundle(name).mainAsset; + return (T)LoadBundle(name).Load(); } else { @@ -294,7 +294,8 @@ public static void UnLoadBundle(string bundleName) UnLoadRelyBundle(configTmp.relyPackages[i]); } - s_bundles[bundleName].bundle.Unload(true); + //这里不能执行Unload(true); + UnloadBundle(s_bundles[bundleName]); s_bundles.Remove(bundleName); } @@ -304,12 +305,43 @@ public static void UnLoadBundle(string bundleName) } } + static void UnloadBundle(Bundle bundle) + { + UnloadObject(bundle.mainAsset); + + for (int i = 0; i < bundle.allAsset.Length; i++) + { + UnloadObject(bundle.allAsset[i]); + } + } + + static void UnloadObject(UnityEngine.Object obj) + { + if (!(obj is GameObject) + && !(obj is Component) + && !(obj is AssetBundle) + ) + { + Resources.UnloadAsset(obj); + } + else if ((obj is GameObject) + && !(obj is Component)) + { + UnityEngine.Object.DestroyImmediate(obj, true); + } + } + /// /// 卸载依赖包 /// /// public static void UnLoadRelyBundle(string relyBundleName) { + if(relyBundleName == "") + { + return; + } + if (s_relyBundle.ContainsKey(relyBundleName)) { s_relyBundle[relyBundleName].relyCount --; @@ -349,8 +381,11 @@ static Bundle AddBundle(string bundleName, AssetBundle asset) bundleTmp.bundle = asset; bundleTmp.bundle.name = bundleName; bundleTmp.mainAsset = bundleTmp.bundle.mainAsset; + bundleTmp.allAsset = bundleTmp.bundle.LoadAllAssets(); bundleTmp.bundle.Unload(false); + Debug.Log("Unload false"); + //如果有缓存起来的回调这里一起回调 if( LoadAsyncDict.ContainsKey(bundleName)) { @@ -428,9 +463,28 @@ static string GetBundlePath(ResourcesConfig config) public delegate void RelyBundleLoadCallBack(LoadState state, RelyBundle bundlle); public class Bundle { - public object mainAsset; + public UnityEngine.Object mainAsset; + public UnityEngine.Object[] allAsset; public AssetBundle bundle; public ResourcesConfig bundleConfig; + + public T Load() where T : UnityEngine.Object + { + if (mainAsset.GetType() == typeof(T)) + { + return (T)mainAsset; + } + + for (int i = 0; i < allAsset.Length; i++) + { + if(allAsset[i].GetType() == typeof(T)) + { + return (T)allAsset[i]; + } + } + + throw new Exception("Bundle Load Exception : not find by " + typeof(T).Name + " "); + } } public class RelyBundle diff --git a/Assets/Script/Core/ResourceLoad/ResourceManager.cs b/Assets/Script/Core/ResourceLoad/ResourceManager.cs index 7ae82b10..df78bd06 100644 --- a/Assets/Script/Core/ResourceLoad/ResourceManager.cs +++ b/Assets/Script/Core/ResourceLoad/ResourceManager.cs @@ -27,7 +27,7 @@ public static ResLoadLocation GetLoadType(ResLoadLocation loadType) //读取一个文本 public static string ReadTextFile(string textName) { - TextAsset text = (TextAsset)Load(textName); + TextAsset text = Load(textName); if (text == null) { diff --git a/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick.cs b/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick.cs index 90b4bf93..c639d4a2 100644 --- a/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick.cs +++ b/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick.cs @@ -41,7 +41,7 @@ public void OnDrag(PointerEventData eventData) public void OnEndDrag(PointerEventData eventData) { content.anchoredPosition3D = Vector3.zero; - //onJoyStick(Vector3.zero); + onJoyStick(Vector3.zero); } public Vector3 GetDir() diff --git a/Assets/Script/Core/UI/Control/UIManager.cs b/Assets/Script/Core/UI/Control/UIManager.cs index 72b28a76..d2092b31 100644 --- a/Assets/Script/Core/UI/Control/UIManager.cs +++ b/Assets/Script/Core/UI/Control/UIManager.cs @@ -2,6 +2,7 @@ using System.Collections; using System.Collections.Generic; using System; +using System.Text.RegularExpressions; [RequireComponent(typeof(UILayerManager))] [RequireComponent(typeof(UIAnimManager))] @@ -401,6 +402,55 @@ public static UIWindowBase GetUI(string UIname) } } + public static UIBase GetUIBaseByEventKey(string eventKey) + { + string UIkey = eventKey.Split('.')[0]; + string[] keyArray = UIkey.Split('_'); + + string uiEventKey = ""; + + UIBase uiTmp = null; + for (int i = 0; i < keyArray.Length; i++) + { + if(i == 0) + { + uiEventKey = keyArray[0]; + uiTmp = GetUIWindowByEventKey(uiEventKey); + } + else + { + uiEventKey += "_" + keyArray[i]; + uiTmp = uiTmp.GetItemByKey(uiEventKey); + } + + Debug.Log("uiEventKey " + uiEventKey); + } + + return uiTmp; + } + + static Regex uiKey = new Regex(@"(\S+)\d+"); + static UIWindowBase GetUIWindowByEventKey(string eventKey) + { + string UIname = uiKey.Match(eventKey).Groups[1].Value; + + if (!s_UIs.ContainsKey(UIname)) + { + throw new Exception("UIManager: GetUIWindowByEventKey error dont find UI name: ->" + eventKey + "<- " + UIname); + } + + List list = s_UIs[UIname]; + for (int i = 0; i < list.Count; i++) + { + if(list[i].UIEventKey == eventKey) + { + return list[i]; + } + } + + throw new Exception("UIManager: GetUIWindowByEventKey error dont find UI name: ->" + eventKey + "<- " + UIname); + } + static bool GetIsExits(UIWindowBase UI) { if (!s_UIs.ContainsKey(UI.name)) diff --git a/Assets/Script/Core/UI/Model/UIBase.cs b/Assets/Script/Core/UI/Model/UIBase.cs index db97691a..7dc3fe52 100644 --- a/Assets/Script/Core/UI/Model/UIBase.cs +++ b/Assets/Script/Core/UI/Model/UIBase.cs @@ -533,6 +533,8 @@ public virtual void RemoveAllListener() #endregion } + #region 添加监听 + public void AddOnClickListener(string buttonName, InputEventHandle callback, string parm = null) { InputEventRegisterInfo info = InputUIEventProxy.AddOnClickListener(GetButton(buttonName), UIEventKey, buttonName, parm, callback); @@ -582,6 +584,37 @@ public void AddEventListener(Enum EventEnum, EventHandle handle) #endregion + #region 移除监听 + + //TODO 逐步添加所有的移除监听方法 + + public InputEventRegisterInfo GetClickRegisterInfo(string buttonName, InputEventHandle callback, string parm ) + { + string eventKey = InputUIOnClickEvent.GetEventKey(UIEventKey, buttonName, parm); + for (int i = 0; i < m_OnClickEvents.Count; i++) + { + if(m_OnClickEvents[i].eventKey == eventKey + && m_OnClickEvents[i].callBack == callback) + { + return m_OnClickEvents[i]; + } + } + + throw new Exception("GetClickRegisterInfo Exception not find RegisterInfo by " + buttonName + " parm " + parm); + } + + public void RemoveOnClickListener(string buttonName, InputEventHandle callback, string parm = null) + { + InputEventRegisterInfo info = GetClickRegisterInfo(buttonName, callback, parm); + + info.RemoveListener(); + m_OnClickEvents.Remove(info); + } + + #endregion + + #endregion + #region 创建对象 List m_ChildList = new List(); @@ -667,6 +700,19 @@ public UIBase GetItem(string itemName) throw new Exception(UIName + " GetItem Exception Dont find Item: " + itemName); } + public UIBase GetItemByKey(string uiEvenyKey) + { + for (int i = 0; i < m_ChildList.Count; i++) + { + if (m_ChildList[i].UIEventKey == uiEvenyKey) + { + return m_ChildList[i]; + } + } + + throw new Exception(UIName + " GetItemByKey Exception Dont find Item: " + uiEvenyKey); + } + public bool GetItemIsExist(string itemName) { for (int i = 0; i < m_ChildList.Count; i++) diff --git a/Assets/Script/Core/Utils/DeJson.cs b/Assets/Script/Core/Utils/DeJson.cs new file mode 100644 index 00000000..ed2f2980 --- /dev/null +++ b/Assets/Script/Core/Utils/DeJson.cs @@ -0,0 +1,650 @@ +/* + * Copyright 2014, Gregg Tavares. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Gregg Tavares. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using FrameWork; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; + +public class Deserializer { + + /// + /// A Class used to direct which class to make when it's not obvious, like if you have a class + /// with a member that's a base class but the actual class could be one of many derived classes. + /// + public abstract class CustomCreator { + + /// + /// Creates an new derived class when a base is expected + /// + /// A dictionary of the json fields that belong to the object to be created. + /// A dictionary of the json fields that belong to the object that is the parent of the object to be created. + /// + /// Example: Assume you have the following classes + /// + /// class Fruit { public int type; } + /// class Apple : Fruit { public float height; public float radius; }; + /// class Raspberry : Fruit { public int numBulbs; } + /// + /// You'd register a dervied CustomCreator for type `Fruit`. When the Deserialize needs to create + /// a `Fruit` it will call your Create function. Using `src` you could look at `type` and + /// decide whether to make an Apple or a Raspberry. + /// + /// int type = src["type"]; + /// if (type == 0) { return new Apple; } + /// if (type == 1) { return new Raspberry; } + /// .. + /// + /// If the parent has info on the type you can do this + /// + /// class Fruit { } + /// class Apple : Fruit { public float height; public float radius; }; + /// class Raspberry : Fruit { public int numBulbs; } + /// class Basket { public int typeInBasket; Fruit fruit; } + /// + /// In this case again, when trying to create a `Fruit` your CustomCreator.Create function + /// will be called. You can use `'parentSrc`' to look at the fields from 'Basket' as in + /// + /// int typeInBasket = parentSrc['typeInBasket']; + /// if (type == 0) { return new Apple; } + /// if (type == 1) { return new Raspberry; } + /// .. + /// + /// + /// The created object + public abstract object Create(Dictionary src, Dictionary parentSrc); + + /// + /// The base type this CustomCreator makes. + /// + /// The type this CustomCreator makes. + public abstract System.Type TypeToCreate(); + } + + static public System.Type GetTypeByString(string typeStr) { + return System.Type.GetType (typeStr); + } + + /// + /// Deserializer for Json to your classes. + /// + public Deserializer(bool includePrivateFields = false) { + m_creators = new Dictionary(); + m_fieldFlags = + System.Reflection.BindingFlags.Instance | + System.Reflection.BindingFlags.Public | + (includePrivateFields ? System.Reflection.BindingFlags.NonPublic : 0); + } + + /// + /// Deserializes a json string into classes. + /// + /// String containing JSON + /// An instance of class T. + /// + /// + /// public class Foo { + /// public int num; + /// public string name; + /// public float weight; + /// }; + /// + /// public class Bar { + /// public int hp; + /// public Foo someFoo; + /// }; + /// ... + /// Deserializer deserializer = new Deserializer(); + /// + /// string json = "{\"hp\":123,\"someFoo\":{\"num\":456,\"name\":\"gman\",\"weight\":156.4}}"; + /// + /// Bar bar = deserializer.Deserialize(json); + /// + /// print("bar.hp: " + bar.hp); + /// print("bar.someFoo.num: " + bar.someFoo.num); + /// print("bar.someFoo.name: " + bar.someFoo.name); + /// print("bar.someFoo.weight: " + bar.someFoo.weight); + /// + /// + /// + public T Deserialize(string json) { + object o = Json.Deserialize(json); + return Deserialize(o); + } + + /// + /// Deserializes a object into classes. + /// + /// Object containing data + /// An instance of class T. + /// + /// + /// public class Foo { + /// public int num; + /// public string name; + /// public float weight; + /// }; + /// + /// public class Bar { + /// public int hp; + /// public Foo someFoo; + /// }; + /// ... + /// Deserializer deserializer = new Deserializer(); + /// + /// Dictionary d = new Dictionary + /// d["num"] = 123; + /// d["name"] = "Bob"; + /// d["weight] = 4.5f; + /// + /// Foo foo = deserializer.Deserialize(d); + /// + /// print("foo.num: " + foo.num); + /// print("foo.name: " + foo.name); + /// print("foo.weight: " + foo.weight); + /// + /// + /// + public T Deserialize(object o) { + return (T)ConvertToType(o, typeof(T), null); + } + + public object Deserialize(Type type, string json) + { + object o = Json.Deserialize(json); + return ConvertToType(o, type, null); + } + + public object Deserialize(string typeName, string json) + { + object o = Json.Deserialize(json); + Type type = Type.GetType(typeName); + return ConvertToType(o, type, null); + } + + /// + /// Registers a CustomCreator. + /// + /// The creator to register + public void RegisterCreator(CustomCreator creator) { + System.Type t = creator.TypeToCreate(); + m_creators[t] = creator; + } + + private object DeserializeO(Type destType, Dictionary src, Dictionary parentSrc) { + object dest = null; + + // This seems like a hack but for now maybe it's the right thing? + // Basically if the thing you want is a Dictionary + // Then just give it to you since that's the source. No need + // to try to copy it. + if (destType == typeof(System.Object) || + destType == typeof(System.Collections.Generic.Dictionary)) { + return src; + } + + // First see if there is a CustomCreator for this type. + CustomCreator creator; + if (m_creators.TryGetValue(destType, out creator)) { + dest = creator.Create(src, parentSrc); + } + + if (dest == null) { + // Check if there is a type serialized for this + object typeNameObject; + if (src.TryGetValue("$dotNetType", out typeNameObject)) { + destType = System.Type.GetType((string)typeNameObject); + } + dest = Activator.CreateInstance(destType); + } + + DeserializeIt(dest, src); + return dest; + } + + private void DeserializeIt(object dest, Dictionary src) { + System.Type type = dest.GetType(); + System.Reflection.FieldInfo[] fields = type.GetFields(m_fieldFlags); + DeserializeClassFields(dest, fields, src); + } + + private void DeserializeClassFields(object dest, System.Reflection.FieldInfo[] fields, Dictionary src) { + foreach (System.Reflection.FieldInfo info in fields) { + if (info.IsStatic) { + continue; + } + object value; + if (src.TryGetValue(info.Name, out value)) { + DeserializeField(dest, info, value, src); + } + } + } + + private void DeserializeField(object dest, System.Reflection.FieldInfo info, object value, Dictionary src) { + Type fieldType = info.FieldType; + object o = ConvertToType(value, fieldType, src); + if (fieldType.IsAssignableFrom(o.GetType())) { + info.SetValue(dest, o); + } + } + + public static bool IsGenericList(System.Type type) + { + return type.IsGenericType && (type.GetGenericTypeDefinition() == typeof(List<>)); + } + + public static bool IsGenericDictionary(System.Type type) + { + return type.IsGenericType && (type.GetGenericTypeDefinition() == typeof(Dictionary<,>)); + } + + private object ConvertToType(object value, System.Type type, Dictionary src) { + if (type.IsArray) { + return ConvertToArray(value, type, src); + } else if (Deserializer.IsGenericList(type)) { + return ConvertToList(value, type, src); + } else if (Deserializer.IsGenericDictionary(type)) { + return ConvertToDictionary(value, type, src); +// } else if (type == typeof(List)) { +// object[] oArray = ((List)value).ToArray(); +// return ConvertToArray(oArray, type, src); +// } else if (type.IsPrimitive) { +// return System.ComponentModel.TypeDescriptor.GetConverter(type).ConvertFromInvariantString(value.ToString ()); + } else if (type.IsEnum) { + return System.Enum.Parse(type, Convert.ToString(value)); + } else if (type == typeof(string)) { + return Convert.ToString(value); + } else if (type == typeof(Byte)) { + return Convert.ToByte(value); + } else if (type == typeof(SByte)) { + return Convert.ToSByte(value); + } else if (type == typeof(Int16)) { + return Convert.ToInt16(value); + } else if (type == typeof(UInt16)) { + return Convert.ToUInt16(value); + } else if (type == typeof(Int32)) { + return Convert.ToInt32(value); + } else if (type == typeof(UInt32)) { + return Convert.ToUInt32(value); + } else if (type == typeof(Int64)) { + return Convert.ToInt64(value); + } else if (type == typeof(UInt64)) { + return Convert.ToUInt64(value); + } else if (type == typeof(Char)) { + return Convert.ToChar(value); + } else if (type == typeof(Double)) { + return Convert.ToDouble(value); + } else if (type == typeof(Single)) { + return Convert.ToSingle(value); + } else if (type == typeof(int)) { + return Convert.ToInt32(value); + } else if (type == typeof(float)) { + return Convert.ToSingle(value); + } else if (type == typeof(double)) { + return Convert.ToDouble(value); + } else if (type == typeof(bool)) { + return Convert.ToBoolean(value); + } else if (type == typeof(Boolean)) { + return Convert.ToBoolean(value); + } else if (type.IsValueType) { + return DeserializeO(type, (Dictionary)value, src); + } else if (type == typeof(System.Object)) { + return value; + } else if (type.IsClass) { + return DeserializeO(type, (Dictionary)value, src); + } else { + // Should we throw here? + } + return value; + } + + private object ConvertToDictionary(object value, System.Type type, Dictionary src) { + Type typeDef = type.GetGenericTypeDefinition(); + Type[] typeArgs = type.GetGenericArguments(); + Type constructed = typeDef.MakeGenericType(typeArgs); + object dict = Activator.CreateInstance(constructed); + Dictionary srcDict = (Dictionary)value; + foreach(KeyValuePair entry in srcDict) + { + object elementKey = ConvertToType(entry.Key, typeArgs[0], src); + object elementValue = ConvertToType(entry.Value, typeArgs[1], src); + dict.GetType().GetMethod("Add").Invoke(dict, new[] {elementKey, elementValue}); + } + return dict; + } + + private object ConvertToList(object value, System.Type type, Dictionary src) { + Type typeDef = type.GetGenericTypeDefinition(); + Type[] typeArgs = type.GetGenericArguments(); + Type constructed = typeDef.MakeGenericType(typeArgs); + object list = Activator.CreateInstance(constructed); + List elements = (List)value; + int index = 0; + foreach (object elementValue in elements) { + object o = ConvertToType(elementValue, typeArgs[0], src); + list.GetType().GetMethod("Add").Invoke(list, new[] {o}); + ++index; + } + return list; + } + + private object ConvertToArray(object value, System.Type type, Dictionary src) { + List elements = (List)value; + int numElements = elements.Count; + Type elementType = type.GetElementType(); + Array array = Array.CreateInstance(elementType, numElements); + int index = 0; + foreach (object elementValue in elements) { + object o = ConvertToType(elementValue, elementType, src); + array.SetValue(o, index); + ++index; + } + return array; + } + + private Dictionary m_creators; + private System.Reflection.BindingFlags m_fieldFlags; +}; + +/// +/// At this point this is just a namespace. +/// See Serializer.Serialize +/// +public class Serializer { + + /// + /// Serializes an object to JSON. + /// + /// Only Public fields will be serialized. + /// + /// Object to serialized + /// true if you want it to add type data for derived types + /// try if you want whitespace, linebreaks, and indention + /// a json string representing the object passed in. + public static string Serialize(object obj, bool includeTypeInfoForDerivedTypes = false, bool prettyPrint = false, bool includePrivateFields = false) { + Serializer s = new Serializer(includeTypeInfoForDerivedTypes, prettyPrint, includePrivateFields); + s.SerializeValue(obj); + return s.GetJson(); + } + + private Serializer(bool includeTypeInfoForDerivedTypes, bool prettyPrint, bool includePrivateFields) { + m_builder = new StringBuilder(); + m_includeTypeInfoForDerivedTypes = includeTypeInfoForDerivedTypes; + m_prettyPrint = prettyPrint; + m_includePrivateFields = includePrivateFields; + m_prefix = ""; + + m_fieldFlags = + System.Reflection.BindingFlags.Instance | + System.Reflection.BindingFlags.Public | + (m_includePrivateFields ? System.Reflection.BindingFlags.NonPublic : 0); + } + + private string GetJson() { + return m_builder.ToString(); + } + + private StringBuilder m_builder; + private bool m_includeTypeInfoForDerivedTypes; + private bool m_prettyPrint; + private bool m_includePrivateFields; + private System.Reflection.BindingFlags m_fieldFlags; + private string m_prefix; + + private void Indent() { + if (m_prettyPrint) { + m_prefix = m_prefix + " "; + } + } + + private void Outdent() { + if (m_prettyPrint) { + m_prefix = m_prefix.Substring(2); + } + } + + private void AddIndent() { + if (m_prettyPrint) { + m_builder.Append(m_prefix); + } + } + + private void AddLine() { + if (m_prettyPrint) { + m_builder.Append("\n"); + } + } + + private void AddSpace() { + if (m_prettyPrint) { + m_builder.Append(" "); + } + } + + private void SerializeValue(object obj) { + if (obj == null) { + m_builder.Append("undefined"); + return; + } + System.Type type = obj.GetType(); + + if (type.IsArray) { + SerializeArray(obj); + } else if (Deserializer.IsGenericList(type)) { //(type == typeof(List)) { + Type elementType = type.GetGenericArguments()[0]; + System.Reflection.MethodInfo castMethod = typeof(System.Linq.Enumerable).GetMethod("Cast").MakeGenericMethod( new System.Type[]{ elementType } ); + System.Reflection.MethodInfo toArrayMethod = typeof(System.Linq.Enumerable).GetMethod("ToArray").MakeGenericMethod( new System.Type[]{ elementType } ); + var castedObjectEnum = castMethod.Invoke(null, new object[] { obj }); + var castedObject = toArrayMethod.Invoke(null, new object[] { castedObjectEnum }); +// object[] oArray = ((List)obj).ToArray(); +// SerializeArray(oArray); + SerializeArray(castedObject); + } else if (type.IsEnum) { + SerializeString(obj.ToString()); + } else if (type == typeof(string)) { + SerializeString(obj as string); + } else if (type == typeof(Char)) { + SerializeString(obj.ToString()); + } else if (type == typeof(bool)) { + m_builder.Append((bool)obj ? "true" : "false"); + } else if (type == typeof(Boolean)) { + m_builder.Append((Boolean)obj ? "true" : "false"); +// } else if (type.IsPrimitive) { +// m_builder.Append(System.ComponentModel.TypeDescriptor.GetConverter(type).ConvertToInvariantString(obj)); + + m_builder.Append(Convert.ChangeType(obj, typeof(string))); + } else if (type == typeof(int)) { + m_builder.Append(obj); + } else if (type == typeof(Byte)) { + m_builder.Append(obj); + } else if (type == typeof(SByte)) { + m_builder.Append(obj); + } else if (type == typeof(Int16)) { + m_builder.Append(obj); + } else if (type == typeof(UInt16)) { + m_builder.Append(obj); + } else if (type == typeof(Int32)) { + m_builder.Append(obj); + } else if (type == typeof(UInt32)) { + m_builder.Append(obj); + } else if (type == typeof(Int64)) { + m_builder.Append(obj); + } else if (type == typeof(UInt64)) { + m_builder.Append(obj); + } else if (type == typeof(Single)) { + m_builder.Append(((Single)obj).ToString("R", System.Globalization.CultureInfo.InvariantCulture)); + } else if (type == typeof(Double)) { + m_builder.Append(((Double)obj).ToString("R", System.Globalization.CultureInfo.InvariantCulture)); + } else if (type == typeof(float)) { + m_builder.Append(((float)obj).ToString("R", System.Globalization.CultureInfo.InvariantCulture)); + } else if (type == typeof(double)) { + m_builder.Append(((double)obj).ToString("R", System.Globalization.CultureInfo.InvariantCulture)); + } else if (type.IsValueType) { + SerializeObject(obj); + } else if (type.IsClass) { + SerializeObject(obj); + } else { + throw new System.InvalidOperationException("unsupport type: " + type.Name); + } + } + + private void SerializeArray(object obj) { + m_builder.Append("["); + AddLine(); + Indent(); + Array array = obj as Array; + bool first = true; + foreach (object element in array) { + if (!first) { + m_builder.Append(","); + AddLine(); + } + AddIndent(); + SerializeValue(element); + first = false; + } + AddLine(); + Outdent(); + AddIndent(); + m_builder.Append("]"); + } + + private void SerializeDictionary(IDictionary obj) { + bool first = true; + foreach (object key in obj.Keys) { + if (!first) { + m_builder.Append(','); + AddLine(); + } + + AddIndent(); + SerializeString(key.ToString()); + m_builder.Append(':'); + AddSpace(); + + SerializeValue(obj[key]); + + first = false; + } + } + + private void SerializeObject(object obj) { + m_builder.Append("{"); + AddLine(); + Indent(); + bool first = true; + if (m_includeTypeInfoForDerivedTypes) { + // Only inlcude type info for derived types. + System.Type type = obj.GetType(); + System.Type baseType = type.BaseType; + if (baseType != null && baseType != typeof(System.Object)) { + AddIndent(); + SerializeString("$dotNetType"); // assuming this won't clash with user's properties. + m_builder.Append(":"); + AddSpace(); + SerializeString(type.AssemblyQualifiedName); + } + } + + IDictionary asDict; + if ((asDict = obj as IDictionary) != null) { + SerializeDictionary(asDict); + } else { + System.Reflection.FieldInfo[] fields = obj.GetType().GetFields(m_fieldFlags); + foreach (System.Reflection.FieldInfo info in fields) { + if (info.IsStatic) { + continue; + } + object fieldValue = info.GetValue(obj); + if (fieldValue != null) { + if (!first) { + m_builder.Append(","); + AddLine(); + } + AddIndent(); + SerializeString(info.Name); + m_builder.Append(":"); + AddSpace(); + SerializeValue(fieldValue); + first = false; + } + } + } + AddLine(); + Outdent(); + AddIndent(); + m_builder.Append("}"); + } + + private void SerializeString(string str) { + m_builder.Append('\"'); + + char[] charArray = str.ToCharArray(); + foreach (var c in charArray) { + switch (c) { + case '"': + m_builder.Append("\\\""); + break; + case '\\': + m_builder.Append("\\\\"); + break; + case '\b': + m_builder.Append("\\b"); + break; + case '\f': + m_builder.Append("\\f"); + break; + case '\n': + m_builder.Append("\\n"); + break; + case '\r': + m_builder.Append("\\r"); + break; + case '\t': + m_builder.Append("\\t"); + break; + default: + int codepoint = Convert.ToInt32(c); + if ((codepoint >= 32) && (codepoint <= 126)) { + m_builder.Append(c); + } else { + m_builder.Append("\\u"); + m_builder.Append(codepoint.ToString("x4")); + } + break; + } + } + + m_builder.Append('\"'); + } +} + diff --git a/Assets/Script/Core/Utils/ExpandMethod.cs b/Assets/Script/Core/Utils/ExpandMethod.cs index 4b33d25f..c08ff0ac 100644 --- a/Assets/Script/Core/Utils/ExpandMethod.cs +++ b/Assets/Script/Core/Utils/ExpandMethod.cs @@ -61,6 +61,22 @@ public static string ToSaveString(this List list) return sb.ToString(); } + public static string ToSaveString(this string[] list) + { + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < list.Length; i++) + { + sb.Append(list[i]); + + if (i != list.Length - 1) + { + sb.Append("|"); + } + } + + return sb.ToString(); + } //逆时针旋转 public static Vector3 Vector3RotateInXZ(this Vector3 dir,float angle) diff --git a/Assets/Script/Core/Utils/FileTool.cs b/Assets/Script/Core/Utils/FileTool.cs index 774045ea..de4a84f1 100644 --- a/Assets/Script/Core/Utils/FileTool.cs +++ b/Assets/Script/Core/Utils/FileTool.cs @@ -3,6 +3,7 @@ using System.IO; using System; using System.Text; +using System.Collections.Generic; public class FileTool { @@ -188,6 +189,11 @@ public static string RemoveExpandName(string name) } } + public static string GetExpandName(string name) + { + return name.Substring(name.LastIndexOf(".") + 1, (name.Length - name.LastIndexOf(".") - 1)); + } + //取出一个路径下的文件名 public static string GetFileNameByPath(string path) { @@ -353,6 +359,62 @@ public static void RecursionFileExecute(string path, string expandName, FileExec } #endregion + #region 获取一个路径下的所有文件 + + public static List GetAllFileNamesByPath(string path,string[] expandNames = null) + { + List list = new List(); + + RecursionFind(list,path,expandNames); + + return list; + } + + static void RecursionFind(List list,string path , string[] expandNames) + { + string[] allUIPrefabName = Directory.GetFiles(path); + foreach (var item in allUIPrefabName) + { + if (ExpandFilter(item, expandNames)) + { + list.Add(item); + } + } + + string[] dires = Directory.GetDirectories(path); + for (int i = 0; i < dires.Length; i++) + { + RecursionFind(list, dires[i], expandNames); + } + } + + static bool ExpandFilter(string name,string[] expandNames) + { + if(expandNames == null) + { + return true; + } + + else if (expandNames.Length == 0) + { + return !name.Contains("."); + } + + else + { + for (int i = 0; i < expandNames.Length; i++) + { + if(name.EndsWith("." + expandNames[i])) + { + return true; + } + } + + return false; + } + } + + #endregion } public delegate void FileExecuteHandle(string filePath); diff --git a/Assets/Script/Core/Utils/ResourceIOTool.cs b/Assets/Script/Core/Utils/ResourceIOTool.cs index edfd76b0..9ea8edb3 100644 --- a/Assets/Script/Core/Utils/ResourceIOTool.cs +++ b/Assets/Script/Core/Utils/ResourceIOTool.cs @@ -195,11 +195,44 @@ public IEnumerator MonoLoadByAssetsBundleAsync(string path, AssetBundleLoadCallB #endif } + /// + /// 异步加载WWW + /// + /// + /// + public static void WWWLoadAsync(string url, WWWLoadCallBack callback) + { + GetInstance().MonoLoadWWWethod(url, callback); + } + + public void MonoLoadWWWethod(string url, WWWLoadCallBack callback) + { + StartCoroutine(MonoLoadByWWWAsync(url, callback)); + } + + public IEnumerator MonoLoadByWWWAsync(string url, WWWLoadCallBack callback) + { + WWW www = new WWW(url); + LoadState loadState = new LoadState(); + + while (!www.isDone) + { + + loadState.UpdateProgress(www); + callback(loadState, www); + + yield return 0; + } + + loadState.UpdateProgress(www); + callback(loadState, www); + } + #endregion #region 写操作 #if !UNITY_WEBGL || UNITY_EDITOR - //web Player 不支持写操作 + //web Player 不支持写操作 public static void WriteStringByFile(string path, string content) { byte[] dataByte = Encoding.GetEncoding("UTF-8").GetBytes(content); @@ -241,6 +274,7 @@ public static void CreateFile(string path, byte[] byt) #region 回调声明 public delegate void AssetBundleLoadCallBack(LoadState state, AssetBundle bundlle); +public delegate void WWWLoadCallBack(LoadState loadState, WWW www); public delegate void LoadCallBack(LoadState loadState, object resObject); public class LoadState { diff --git a/Assets/Script/Core/Utils/UGUITool.cs b/Assets/Script/Core/Utils/UGUITool.cs index 773c14c0..2da795ff 100644 --- a/Assets/Script/Core/Utils/UGUITool.cs +++ b/Assets/Script/Core/Utils/UGUITool.cs @@ -26,8 +26,9 @@ static public void set_icon(Image img,string name,bool is_nativesize = true) { try { - Texture2D tex = ResourceManager.Load(name); - img.overrideSprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), Vector3.zero); + //Texture2D tex = ResourceManager.Load(name); + Sprite sp = ResourceManager.Load(name); + img.overrideSprite = sp;// Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), Vector3.zero); img.sprite = img.overrideSprite; if (is_nativesize) From 2cbadc4ad0c6985ccfc029ba1bf7fc199c56a92a Mon Sep 17 00:00:00 2001 From: GaoKai Date: Fri, 22 Sep 2017 15:55:47 +0800 Subject: [PATCH 004/108] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E5=B0=8F=E5=B7=A5=E5=85=B7=EF=BC=8C=E4=BF=AE=E5=A4=8D=E6=96=B0?= =?UTF-8?q?=E6=89=8B=E5=BC=95=E5=AF=BC=E7=9A=84=E4=B8=80=E7=82=B9=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Android.meta | 9 -- Assets/Plugins.meta | 9 -- .../Core/Develop/DevelopReplayManager.cs | 4 +- .../Editor/Network/Protocol/ProtocolHelper.cs | 5 +- .../Core/Editor/Utils/BatchReplaceNameTool.cs | 2 +- Assets/Script/Core/Record/RecordTable.cs | 2 +- .../Core/ResourceLoad/AssetsBundleManager.cs | 7 +- .../UI/Components/JoyStick/UGUIJoyStick.cs | 2 +- .../Script/Core/UI/Control/UILayerManager.cs | 22 ++++- Assets/Script/Core/UI/Control/UIManager.cs | 6 ++ Assets/Script/Core/UI/Model/UIBase.cs | 91 +++++++++++++++---- Assets/Script/Core/UI/Utils/ModelRotate.cs | 32 +++++++ .../Script/Core/UI/Utils/UIModelShowTool.cs | 87 ++++++++++++++++++ Assets/Script/Core/Utils/MD5Tool.cs | 25 ++++- Assets/XiaoMi.meta | 9 -- 15 files changed, 258 insertions(+), 54 deletions(-) delete mode 100644 Assets/Android.meta delete mode 100644 Assets/Plugins.meta create mode 100644 Assets/Script/Core/UI/Utils/ModelRotate.cs create mode 100644 Assets/Script/Core/UI/Utils/UIModelShowTool.cs delete mode 100644 Assets/XiaoMi.meta diff --git a/Assets/Android.meta b/Assets/Android.meta deleted file mode 100644 index cc055d1b..00000000 --- a/Assets/Android.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: ec72be2de5d599040a68cae39394cb37 -folderAsset: yes -timeCreated: 1499593847 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins.meta b/Assets/Plugins.meta deleted file mode 100644 index 48c20cbd..00000000 --- a/Assets/Plugins.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 409b5ecb02a33a4438dbae99e7827ed5 -folderAsset: yes -timeCreated: 1499593847 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Script/Core/Develop/DevelopReplayManager.cs b/Assets/Script/Core/Develop/DevelopReplayManager.cs index c399573b..12b9d80c 100644 --- a/Assets/Script/Core/Develop/DevelopReplayManager.cs +++ b/Assets/Script/Core/Develop/DevelopReplayManager.cs @@ -97,7 +97,7 @@ static void ChoseReplayMode(bool isReplay,string replayFileName = null) Log.Init(true); //日志记录启动 ApplicationManager.s_OnApplicationUpdate += OnRecordUpdate; - InputManager.OnEveryEventDispatch += OnEveryEventCallBack; + //InputManager.OnEveryEventDispatch += OnEveryEventCallBack; GUIConsole.onGUICallback += RecordModeGUI; GUIConsole.onGUICloseCallback += ProfileGUI; @@ -127,6 +127,7 @@ public static void OnEveryEventCallBack(string eventName, IInputEventBase inputE tmp.Add(c_eventNameKey, inputEvent.GetType().Name); tmp.Add(c_serializeInfoKey, inputEvent.Serialize()); + try { WriteInputEvent(Serializer.Serialize(tmp)); @@ -135,7 +136,6 @@ public static void OnEveryEventCallBack(string eventName, IInputEventBase inputE { Debug.LogError("Write Dev Log Error! : " + e.ToString()); } - } public static void OnGetRandomCallBack(int random) diff --git a/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs b/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs index cd15ef83..5dfa5c53 100644 --- a/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs +++ b/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs @@ -929,13 +929,14 @@ static string GenerateSendFunction() content += GetTab(1) + "public static void SendCommand (IProtocolMessageInterface cmd)\n"; content += GetTab(1) + "{\n"; - + int index = 0; for (int i = 0; i < msgList.Count; i++) { if (GetSendMode(msgList[i]) == SendMode.ToServer || GetSendMode(msgList[i]) == SendMode.Both) { - content += GenerateSendIfContent(msgList[i], i != 0); + content += GenerateSendIfContent(msgList[i], index != 0); + index++; } } diff --git a/Assets/Script/Core/Editor/Utils/BatchReplaceNameTool.cs b/Assets/Script/Core/Editor/Utils/BatchReplaceNameTool.cs index 1498dca0..85b34ec5 100644 --- a/Assets/Script/Core/Editor/Utils/BatchReplaceNameTool.cs +++ b/Assets/Script/Core/Editor/Utils/BatchReplaceNameTool.cs @@ -34,7 +34,7 @@ void OnGUI() for (int i = 0; i < selectList.Count; i++) { - EditorGUILayout.ObjectField(selectList[i], typeof(Object)); + EditorGUILayout.ObjectField(selectList[i], typeof(Object),true); } EditorGUI.indentLevel--; diff --git a/Assets/Script/Core/Record/RecordTable.cs b/Assets/Script/Core/Record/RecordTable.cs index 58c45bbd..f207b349 100644 --- a/Assets/Script/Core/Record/RecordTable.cs +++ b/Assets/Script/Core/Record/RecordTable.cs @@ -27,7 +27,7 @@ public static RecordTable Analysis(string data) public static string Serialize(RecordTable table) { - return JsonTool.Dictionary2Json(table); ; + return JsonTool.Dictionary2Json(table); } #endregion diff --git a/Assets/Script/Core/ResourceLoad/AssetsBundleManager.cs b/Assets/Script/Core/ResourceLoad/AssetsBundleManager.cs index 9aa9f29f..ecdcfc93 100644 --- a/Assets/Script/Core/ResourceLoad/AssetsBundleManager.cs +++ b/Assets/Script/Core/ResourceLoad/AssetsBundleManager.cs @@ -325,10 +325,15 @@ static void UnloadObject(UnityEngine.Object obj) Resources.UnloadAsset(obj); } else if ((obj is GameObject) - && !(obj is Component)) + || (obj is Component)) { UnityEngine.Object.DestroyImmediate(obj, true); } + else + { + AssetBundle ab = (AssetBundle)obj; + ab.Unload(true); + } } /// diff --git a/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick.cs b/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick.cs index c639d4a2..90b4bf93 100644 --- a/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick.cs +++ b/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick.cs @@ -41,7 +41,7 @@ public void OnDrag(PointerEventData eventData) public void OnEndDrag(PointerEventData eventData) { content.anchoredPosition3D = Vector3.zero; - onJoyStick(Vector3.zero); + //onJoyStick(Vector3.zero); } public Vector3 GetDir() diff --git a/Assets/Script/Core/UI/Control/UILayerManager.cs b/Assets/Script/Core/UI/Control/UILayerManager.cs index cd80dad4..8ad9f9ce 100644 --- a/Assets/Script/Core/UI/Control/UILayerManager.cs +++ b/Assets/Script/Core/UI/Control/UILayerManager.cs @@ -1,5 +1,6 @@ using UnityEngine; using System.Collections; +using System.Collections.Generic; public class UILayerManager : MonoBehaviour { @@ -9,6 +10,8 @@ public class UILayerManager : MonoBehaviour public Transform m_TopbarLayerParent; public Transform m_PopUpLayerParent; + public List normalUIList = new List(); + public void Awake() { if (m_GameUILayerParent == null) @@ -44,7 +47,10 @@ public void SetLayer(UIWindowBase ui) { case UIType.GameUI: ui.transform.SetParent(m_GameUILayerParent); break; case UIType.Fixed: ui.transform.SetParent(m_FixedLayerParent); break; - case UIType.Normal: ui.transform.SetParent(m_NormalLayerParent); break; + case UIType.Normal: + ui.transform.SetParent(m_NormalLayerParent); + normalUIList.Add(ui); + break; case UIType.TopBar: ui.transform.SetParent(m_TopbarLayerParent); break; case UIType.PopUp: ui.transform.SetParent(m_PopUpLayerParent); break; } @@ -62,4 +68,18 @@ public void SetLayer(UIWindowBase ui) rt.SetAsLastSibling(); } } + + public void RemoveUI(UIWindowBase ui) + { + switch (ui.m_UIType) + { + case UIType.GameUI: break; + case UIType.Fixed: break; + case UIType.Normal: + normalUIList.Remove(ui); + break; + case UIType.TopBar: break; + case UIType.PopUp: break; + } + } } diff --git a/Assets/Script/Core/UI/Control/UIManager.cs b/Assets/Script/Core/UI/Control/UIManager.cs index d2092b31..42a57cfe 100644 --- a/Assets/Script/Core/UI/Control/UIManager.cs +++ b/Assets/Script/Core/UI/Control/UIManager.cs @@ -145,6 +145,7 @@ public static void CloseUIWindow(UIWindowBase UI,bool isPlayAnim = true ,UICallB { RemoveUI(UI); //移除UI引用 UI.RemoveAllListener(); + s_UILayerManager.RemoveUI(UI); if (isPlayAnim) { @@ -520,6 +521,11 @@ static int GetUIID(string UIname) } } + public static int GetNormalUICount() + { + return s_UILayerManager.normalUIList.Count; + } + #endregion #region 隐藏UI列表的管理 diff --git a/Assets/Script/Core/UI/Model/UIBase.cs b/Assets/Script/Core/UI/Model/UIBase.cs index 7dc3fe52..636227e7 100644 --- a/Assets/Script/Core/UI/Model/UIBase.cs +++ b/Assets/Script/Core/UI/Model/UIBase.cs @@ -700,6 +700,25 @@ public UIBase GetItem(string itemName) throw new Exception(UIName + " GetItem Exception Dont find Item: " + itemName); } + public UIBase GetItemByIndex(string itemName,int index) + { + for (int i = 0; i < m_ChildList.Count; i++) + { + if (m_ChildList[i].name == itemName) + { + //Debug.Log("GetItemByIndex " + index, m_ChildList[i]); + + index--; + if(index == 0) + { + return m_ChildList[i]; + } + } + } + + throw new Exception(UIName + " GetItem Exception Dont find Item: " + itemName); + } + public UIBase GetItemByKey(string uiEvenyKey) { for (int i = 0; i < m_ChildList.Count; i++) @@ -734,7 +753,7 @@ public bool GetItemIsExist(string itemName) public void SetText(string TextID, string content) { - GetText(TextID).text = content; + GetText(TextID).text = content.Replace("//n", "/n"); } public void SetImageColor(string ImageID, Color color) @@ -795,6 +814,11 @@ public void SetRectWidth(string TextID, float value, float height) GetRectTransform(TextID).sizeDelta = Vector2.right * -value * 2 + Vector2.up * height; } + public void SetWidth(string TextID, float width, float height) + { + GetRectTransform(TextID).sizeDelta = Vector2.right * width + Vector2.up * height; + } + public void SetPosition(string TextID, float x, float y, float z, bool islocal) { if (islocal) @@ -811,7 +835,7 @@ public void SetScale(string TextID, float x, float y, float z) #endregion - #region 新手引导使用 + #region 新手引导使用 protected List m_GuideList = new List(); protected Dictionary m_CreateCanvasDict = new Dictionary(); //保存Canvas的创建状态 @@ -826,6 +850,11 @@ public void SetItemGuideMode(string itemName, int order = 1) SetGuideMode(GetItem(itemName).gameObject, order); } + public void SetItemGuideModeByIndex(string itemName, int index ,int order = 1) + { + SetGuideMode(GetItemByIndex(itemName, index).gameObject, order); + } + public void SetSelfGuideMode(int order = 1) { SetGuideMode(gameObject,order); @@ -858,7 +887,7 @@ public void SetGuideMode(GameObject go,int order = 1) //如果检测到目标对象 bool oldActive = go.activeSelf; - if(!oldActive) + if (!oldActive) { go.SetActive(true); } @@ -867,36 +896,59 @@ public void SetGuideMode(GameObject go,int order = 1) canvas.sortingOrder = order; canvas.sortingLayerName = "Guide"; - if(!oldActive) + if (!oldActive) { go.SetActive(false); } - m_GuideList.Add(go); - m_CreateCanvasDict.Add(go, status); + if(!m_CreateCanvasDict.ContainsKey(go)) + { + m_CreateCanvasDict.Add(go, status); + m_GuideList.Add(go); + } + else + { + Debug.LogError("m_CreateCanvasDict " + go); + } } public void CancelGuideModel(GameObject go) { + if (go == null) + { + Debug.LogError("go is null"); + return; + } + Canvas canvas = go.GetComponent(); GraphicRaycaster graphic = go.GetComponent(); - GuideChangeData status = m_CreateCanvasDict[go]; - - if (graphic != null && status.isCreateGraphic) + if (m_CreateCanvasDict.ContainsKey(go)) { - Destroy(graphic); - } + GuideChangeData status = m_CreateCanvasDict[go]; - if (canvas != null && status.isCreateCanvas) - { - Destroy(canvas); + if (graphic != null && status.isCreateGraphic) + { + DestroyImmediate(graphic); + } + + if (canvas != null && status.isCreateCanvas) + { + DestroyImmediate(canvas); + } + else + { + if (canvas != null) + { + canvas.overrideSorting = status.OldOverrideSorting; + canvas.sortingOrder = status.OldSortingOrder; + canvas.sortingLayerName = status.oldSortingLayerName; + } + } } else { - canvas.overrideSorting = status.OldOverrideSorting; - canvas.sortingOrder = status.OldSortingOrder; - canvas.sortingLayerName = status.oldSortingLayerName; + Debug.LogError("m_CreateCanvasDict.ContainsKey(go) is error"); } } @@ -917,6 +969,11 @@ public void ClearGuideModel() CancelGuideModel(m_GuideList[i]); } + for (int i = 0; i < m_ChildList.Count; i++) + { + m_ChildList[i].ClearGuideModel(); + } + m_GuideList.Clear(); m_CreateCanvasDict.Clear(); } diff --git a/Assets/Script/Core/UI/Utils/ModelRotate.cs b/Assets/Script/Core/UI/Utils/ModelRotate.cs new file mode 100644 index 00000000..097a28a2 --- /dev/null +++ b/Assets/Script/Core/UI/Utils/ModelRotate.cs @@ -0,0 +1,32 @@ +#if UNITY_5_5 +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.EventSystems; + +public class ModelRotate : MonoBehaviour { + + public float rotateSpeed = 1; + + private void Rotate(Vector2 delta) + { + transform.localRotation = Quaternion.Euler(transform.localRotation.eulerAngles + new Vector3(0,-delta.x * rotateSpeed, 0)); + } + + Vector2 mousePos = Vector2.zero; + + + public void OnDrag(BaseEventData arg0) + { + if (mousePos == Vector2.zero) + { + mousePos = arg0.currentInputModule.input.mousePosition; + return; + } + Vector2 delta = arg0.currentInputModule.input.mousePosition - mousePos; + if (delta != Vector2.zero) + mousePos = arg0.currentInputModule.input.mousePosition; + Rotate(delta); + } +} +#endif diff --git a/Assets/Script/Core/UI/Utils/UIModelShowTool.cs b/Assets/Script/Core/UI/Utils/UIModelShowTool.cs new file mode 100644 index 00000000..a72cc5a3 --- /dev/null +++ b/Assets/Script/Core/UI/Utils/UIModelShowTool.cs @@ -0,0 +1,87 @@ +#if UNITY_5_5 +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.EventSystems; + +public static class UIModelShowTool { + + + public static GameObject Create(string prefabName,out RenderTexture tex) + { + GameObject temp0 = new GameObject("UIModelShow"); + GameObject temp1 = new GameObject("Camera"); + temp1.transform.SetParent(temp0.transform); + temp1.transform.localPosition = new Vector3(0, 5000, 0); + Camera ca= temp1.AddComponent(); + ca.clearFlags = CameraClearFlags.SolidColor; + ca.backgroundColor = new Color(0, 0, 0, 5 / 255f); + ca.orthographic = true; + ca.orthographicSize = 0.68f; + ca.depth = 100; + ca.cullingMask =1<< LayerMask.NameToLayer("UI"); + + GameObject root = new GameObject("Root"); + root.transform.SetParent(temp1.transform); + root.transform.localPosition = new Vector3(0, 0, 100); + root.transform.eulerAngles = new Vector3(0, 180, 0); + + GameObject obj = GameObjectManager.CreateGameObjectByPool(prefabName); + obj.transform.SetParent(root.transform); + obj.transform.localPosition = new Vector3(0, 0, 0); + obj.transform.localEulerAngles = Vector3.zero; + + Transform[] trans = obj.GetComponentsInChildren(); + for (int i = 0; i < trans.Length; i++) + { + trans[i].gameObject.layer = LayerMask.NameToLayer("UI"); + } + + SkinnedMeshRenderer[] mes= obj.GetComponentsInChildren(); + for (int i = 0; i < mes.Length; i++) + { + mes[i].shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + mes[i].receiveShadows = false; + } + + tex = new RenderTexture(512, 512, 100); + tex.autoGenerateMips = false; + tex.anisoLevel = 1; + + // tex.antiAliasing = 2 + + ca.targetTexture = tex; + return obj; + } + + public static void AddDrag(GameObject UIObj,GameObject modelObj) + { + ModelRotate mro = modelObj.AddComponent(); + + EventTrigger trigger; + trigger = UIObj.GetComponent(); + if (trigger) + { + trigger.triggers.Clear(); + } + else + { + trigger = UIObj.AddComponent(); + } + + trigger.triggers.Add(GetEvent(EventTriggerType.Drag, mro.OnDrag)); + + } + + private static EventTrigger.Entry GetEvent(EventTriggerType type, UnityAction eventFun) + { + UnityAction eventDrag = new UnityAction(eventFun); + EventTrigger.Entry myclick = new EventTrigger.Entry(); + myclick.eventID = EventTriggerType.Drag; + myclick.callback.AddListener(eventDrag); + return myclick; + } +} +#endif \ No newline at end of file diff --git a/Assets/Script/Core/Utils/MD5Tool.cs b/Assets/Script/Core/Utils/MD5Tool.cs index 0d0418f5..9c7f7140 100644 --- a/Assets/Script/Core/Utils/MD5Tool.cs +++ b/Assets/Script/Core/Utils/MD5Tool.cs @@ -4,7 +4,7 @@ using System; using System.Security.Cryptography; -public class MD5Tool +public static class MD5Tool { public static string GetFileMD5(string filePath) { @@ -40,6 +40,12 @@ public static string GetObjectMD5(object obj) return GetMD5(ByteTool.Object2Bytes(obj)); } + public static int GetStringToHash(string content) + { + return GetHashMD5(System.Text.Encoding.Default.GetBytes(content)); + } + + public static string GetMD5(byte[] data) { MD5 md5 = new MD5CryptoServiceProvider(); @@ -56,4 +62,21 @@ public static string GetMD5(byte[] data) return ""; } + + public static int GetHashMD5(byte[] data) + { + MD5 md5 = new MD5CryptoServiceProvider(); + byte[] result = md5.ComputeHash(data); + int hashCode = 0; + for (int i = 0; i < 4; i++) + { + hashCode += (Convert.ToInt32(result[i]) + Convert.ToInt32(result[i + 1]) + Convert.ToInt32(result[i + 2]) + Convert.ToInt32(result[i])) << i * 8; + } + return hashCode; + } + + public static int ToHash(this string content) + { + return GetStringToHash(content); + } } diff --git a/Assets/XiaoMi.meta b/Assets/XiaoMi.meta deleted file mode 100644 index da6ec53b..00000000 --- a/Assets/XiaoMi.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 8fc4bcb73a3765444bb04c9c945d5ec8 -folderAsset: yes -timeCreated: 1499593861 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: From b65fe81f5c19b95a8e2ef8a7f7f05ed462adf864 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Wed, 27 Sep 2017 20:43:32 +0800 Subject: [PATCH 005/108] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AF=B9UDP=E7=9A=84?= =?UTF-8?q?=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/Develop/GUIUtil.cs | 7 +- .../InputEventProxy/InputUIEventProxy.cs | 127 ++++++++++-------- .../Core/Input/Interface/IInputProxyBase.cs | 30 +++-- .../Script/Core/Network/INetworkInterface.cs | 3 + .../{TCPService.cs => JsonNetworkService.cs} | 11 +- Assets/Script/Core/Network/NetworkManager.cs | 4 +- .../Core/Network/Protocol/ProtocolService.cs | 9 +- Assets/Script/Core/Network/TCPService.cs.meta | 12 -- .../ReusingScrollRect/ScrollRectInput.cs | 4 +- Assets/Script/Core/UI/Model/UIBase.cs | 88 ++++++++---- Assets/Script/Core/UI/Utils/ModelRotate.cs | 2 +- .../Script/Core/UI/Utils/UIModelShowTool.cs | 2 +- 12 files changed, 191 insertions(+), 108 deletions(-) rename Assets/Script/Core/Network/{TCPService.cs => JsonNetworkService.cs} (93%) delete mode 100644 Assets/Script/Core/Network/TCPService.cs.meta diff --git a/Assets/Script/Core/Develop/GUIUtil.cs b/Assets/Script/Core/Develop/GUIUtil.cs index 25492dd0..ff9663e1 100644 --- a/Assets/Script/Core/Develop/GUIUtil.cs +++ b/Assets/Script/Core/Develop/GUIUtil.cs @@ -21,7 +21,12 @@ public static void SetGUIStyle() s_fontSize = (int)(Screen.dpi * 0.13f); - //#if UNITY_ANDROID || UNITY_IOS + #if UNITY_EDITOR + s_fontSize *= 3; + + #endif + + GUI.skin.label.fontSize = s_fontSize; //GUI.skin.button.fixedHeight = 0; GUI.skin.button.fontSize = s_fontSize; diff --git a/Assets/Script/Core/Input/InputEventProxy/InputUIEventProxy.cs b/Assets/Script/Core/Input/InputEventProxy/InputUIEventProxy.cs index 87b0b064..a8ce83c4 100644 --- a/Assets/Script/Core/Input/InputEventProxy/InputUIEventProxy.cs +++ b/Assets/Script/Core/Input/InputEventProxy/InputUIEventProxy.cs @@ -7,7 +7,7 @@ public class InputUIEventProxy : IInputProxyBase { #region 添加监听 - public static InputEventRegisterInfo AddOnClickListener(Button button, string UIName, string ComponentName, string parm, InputEventHandle callback) + public static InputButtonClickRegisterInfo GetOnClickListener(Button button, string UIName, string ComponentName, string parm, InputEventHandle callback) { InputButtonClickRegisterInfo info = HeapObjectPool.GetObject(); @@ -19,14 +19,10 @@ public static InputEventRegisterInfo AddOnClickListener(But DispatchOnClickEvent(UIName, ComponentName, parm); }; - info.AddListener(); - - button.onClick.AddListener(info.m_OnClick); - return info; } - public static InputEventRegisterInfo AddLongPressListener(LongPressAcceptor acceptor, string UIName, string ComponentName, string parm, InputEventHandle callback) + public static InputEventRegisterInfo GetLongPressListener(LongPressAcceptor acceptor, string UIName, string ComponentName, string parm, InputEventHandle callback) { InputlongPressRegisterInfo info = HeapObjectPool.GetObject(); @@ -38,13 +34,10 @@ public static InputEventRegisterInfo AddLongPressListener DispatchLongPressEvent(UIName, ComponentName, parm, type); }; - info.AddListener(); - acceptor.OnLongPress += info.m_OnLongPress; - return info; } - public static InputEventRegisterInfo AddOnScrollListener(string UIName, string ComponentName, InputEventHandle callback) + public static InputEventRegisterInfo GetOnScrollListener(string UIName, string ComponentName, InputEventHandle callback) { InputEventRegisterInfo info = HeapObjectPool>.GetObject(); @@ -57,7 +50,7 @@ public static InputEventRegisterInfo AddOnScrollListener(s return info; } - public static InputEventRegisterInfo AddOnDragListener(DragAcceptor acceptor, string UIName, string ComponentName, string parm, InputEventHandle callback) + public static InputEventRegisterInfo GetOnDragListener(DragAcceptor acceptor, string UIName, string ComponentName, string parm, InputEventHandle callback) { InputDragRegisterInfo info = HeapObjectPool.GetObject(); @@ -69,15 +62,10 @@ public static InputEventRegisterInfo AddOnDragListener(DragA DispatchDragEvent(UIName, ComponentName, parm, data); }; - info.AddListener(); - - InputManager.AddListener( - InputUIOnDragEvent.GetEventKey(UIName, ComponentName, parm), callback); - return info; } - public static InputBeginDragRegisterInfo AddOnBeginDragListener(DragAcceptor acceptor, string UIName, string ComponentName, string parm, InputEventHandle callback) + public static InputBeginDragRegisterInfo GetOnBeginDragListener(DragAcceptor acceptor, string UIName, string ComponentName, string parm, InputEventHandle callback) { InputBeginDragRegisterInfo info = HeapObjectPool.GetObject(); @@ -89,15 +77,10 @@ public static InputBeginDragRegisterInfo AddOnBeginDragListener(DragAcceptor acc DispatchBeginDragEvent(UIName, ComponentName, parm, data); }; - info.AddListener(); - - InputManager.AddListener( - InputUIOnBeginDragEvent.GetEventKey(UIName, ComponentName, parm), callback); - return info; } - public static InputEndDragRegisterInfo AddOnEndDragListener(DragAcceptor acceptor, string UIName, string ComponentName, string parm, InputEventHandle callback) + public static InputEndDragRegisterInfo GetOnEndDragListener(DragAcceptor acceptor, string UIName, string ComponentName, string parm, InputEventHandle callback) { InputEndDragRegisterInfo info = HeapObjectPool.GetObject(); @@ -109,11 +92,6 @@ public static InputEndDragRegisterInfo AddOnEndDragListener(DragAcceptor accepto DispatchEndDragEvent(UIName, ComponentName, parm, data); }; - info.AddListener(); - - InputManager.AddListener( - InputUIOnDragEvent.GetEventKey(UIName, ComponentName, parm), callback); - return info; } @@ -234,10 +212,23 @@ public class InputButtonClickRegisterInfo : InputEventRegisterInfo public DragAcceptor m_acceptor; public InputUIEventDragCallBack m_OnDrag; - public override void AddListener() + public override void AddListener(bool isSole) { - base.AddListener(); - m_acceptor.m_OnDrag += m_OnDrag; + base.AddListener(isSole); + if (isSole) + { + m_acceptor.m_OnDrag += m_OnDrag; + } } - - public override void RemoveListener() + public override void RemoveListener(bool isSole) { - base.RemoveListener(); - m_acceptor.m_OnDrag -= m_OnDrag; + base.RemoveListener(isSole); + if (isSole) + { + m_acceptor.m_OnDrag -= m_OnDrag; + } } } @@ -277,16 +285,22 @@ public class InputBeginDragRegisterInfo : InputEventRegisterInfo : IHeapObjectInterface where T : IInputEventBase +public class InputEventRegisterInfo : IHeapObjectInterface { public string eventKey; + public void OnInit(){} + public void OnPop(){} + public void OnPush(){} + public virtual void AddListener(bool isSole) {} + public virtual void RemoveListener(bool isSole) {} +} + +public class InputEventRegisterInfo : InputEventRegisterInfo where T : IInputEventBase +{ public InputEventHandle callBack; public InputEventRegisterInfo() { } - public virtual void AddListener() + /// + /// 添加监听和派发 + /// + /// 这个eventKey是否已经注册过了,如果是则不在派发对象上重复派发 + public override void AddListener(bool isSole) { InputManager.AddListener(eventKey, callBack); } - public virtual void RemoveListener() + /// + /// 移除监听和派发 + /// + /// 这是不是这个eventKey最后一个监听事件,如果是则移除派发 + public override void RemoveListener(bool isSole) { InputManager.RemoveListener(eventKey, callBack); HeapObjectPool>.PutObject(this); } - public void OnInit() { } - - public void OnPop() { } - - public void OnPush() { } -} +} \ No newline at end of file diff --git a/Assets/Script/Core/Network/INetworkInterface.cs b/Assets/Script/Core/Network/INetworkInterface.cs index 35e29eb5..a9c157d2 100644 --- a/Assets/Script/Core/Network/INetworkInterface.cs +++ b/Assets/Script/Core/Network/INetworkInterface.cs @@ -2,6 +2,7 @@ using System.Collections; using System; using System.Collections.Generic; +using System.Net.Sockets; public class INetworkInterface { @@ -15,6 +16,8 @@ public class INetworkInterface public ConnectStatusCallBack m_ConnectStatusCallback; public MessageCallBack m_messageCallBack; + public ProtocolType m_protocolType; + public virtual void Init() { diff --git a/Assets/Script/Core/Network/TCPService.cs b/Assets/Script/Core/Network/JsonNetworkService.cs similarity index 93% rename from Assets/Script/Core/Network/TCPService.cs rename to Assets/Script/Core/Network/JsonNetworkService.cs index ce05bcfb..704bfc16 100644 --- a/Assets/Script/Core/Network/TCPService.cs +++ b/Assets/Script/Core/Network/JsonNetworkService.cs @@ -8,7 +8,7 @@ using System.Collections.Generic; using FrameWork; -public class TCPService : INetworkInterface +public class JsonNetworkService : INetworkInterface { /// /// 消息结尾符 @@ -76,7 +76,14 @@ void requestConnect() { m_ConnectStatusCallback(NetworkState.Connecting); - m_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + SocketType socketType = SocketType.Stream; + + if (m_protocolType == ProtocolType.Udp) + { + socketType = SocketType.Dgram; + } + + m_Socket = new Socket(AddressFamily.InterNetwork, socketType, m_protocolType); IPAddress ip = IPAddress.Parse(m_IPaddress); IPEndPoint ipe = new IPEndPoint(ip, m_port); //mSocket. diff --git a/Assets/Script/Core/Network/NetworkManager.cs b/Assets/Script/Core/Network/NetworkManager.cs index 75773f37..e3ce1898 100644 --- a/Assets/Script/Core/Network/NetworkManager.cs +++ b/Assets/Script/Core/Network/NetworkManager.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using FrameWork; +using System.Net.Sockets; public class NetworkManager { @@ -16,13 +17,14 @@ public static bool IsConnect set { NetworkManager.s_isConnect = value; } } - public static void Init() where T : INetworkInterface,new () + public static void Init(ProtocolType protocolType = ProtocolType.Tcp) where T : INetworkInterface,new () { //提前加载网络事件派发器,避免异步冲突 InputManager.LoadDispatcher(); InputManager.LoadDispatcher(); s_network = new T(); + s_network.m_protocolType = protocolType; s_network.Init(); s_network.m_messageCallBack = ReceviceMeaasge; s_network.m_ConnectStatusCallback = ConnectStatusChange; diff --git a/Assets/Script/Core/Network/Protocol/ProtocolService.cs b/Assets/Script/Core/Network/Protocol/ProtocolService.cs index 43586ef0..77cd0cd9 100644 --- a/Assets/Script/Core/Network/Protocol/ProtocolService.cs +++ b/Assets/Script/Core/Network/Protocol/ProtocolService.cs @@ -141,7 +141,14 @@ void requestConnect() { m_ConnectStatusCallback(NetworkState.Connecting); - m_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + SocketType socketType = SocketType.Stream; + + if (m_protocolType == ProtocolType.Udp) + { + socketType = SocketType.Dgram; + } + + m_Socket = new Socket(AddressFamily.InterNetwork, socketType, m_protocolType); IPAddress ip = IPAddress.Parse(m_IPaddress); IPEndPoint ipe = new IPEndPoint(ip, m_port); diff --git a/Assets/Script/Core/Network/TCPService.cs.meta b/Assets/Script/Core/Network/TCPService.cs.meta deleted file mode 100644 index 4931b58b..00000000 --- a/Assets/Script/Core/Network/TCPService.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 35a38178f393b0541b0dfd68c6136962 -timeCreated: 1472180557 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Script/Core/UI/Components/ReusingScrollRect/ScrollRectInput.cs b/Assets/Script/Core/UI/Components/ReusingScrollRect/ScrollRectInput.cs index e24b40b8..17779a62 100644 --- a/Assets/Script/Core/UI/Components/ReusingScrollRect/ScrollRectInput.cs +++ b/Assets/Script/Core/UI/Components/ReusingScrollRect/ScrollRectInput.cs @@ -10,12 +10,12 @@ public class ScrollRectInput : ScrollRect public virtual void Init(string UIEventKey) { m_UIEventKey = UIEventKey; - m_register = InputUIEventProxy.AddOnScrollListener(m_UIEventKey, name, OnSetContentAnchoredPosition); + m_register = InputUIEventProxy.GetOnScrollListener(m_UIEventKey, name, OnSetContentAnchoredPosition); } public virtual void Dispose() { - m_register.RemoveListener(); + m_register.RemoveListener(true); } protected override void SetContentAnchoredPosition(Vector2 position) diff --git a/Assets/Script/Core/UI/Model/UIBase.cs b/Assets/Script/Core/UI/Model/UIBase.cs index 636227e7..187c9aa8 100644 --- a/Assets/Script/Core/UI/Model/UIBase.cs +++ b/Assets/Script/Core/UI/Model/UIBase.cs @@ -67,7 +67,7 @@ public void Init(int id) { m_UIID = id; m_canvas = GetComponent(); - + m_UIName = null; CreateObjectTable(); OnInit(); } @@ -133,6 +133,7 @@ void CreateObjectTable() Dictionary m_inputFields = new Dictionary(); Dictionary m_Sliders = new Dictionary(); Dictionary m_Canvas = new Dictionary(); + Dictionary m_Toggle = new Dictionary(); Dictionary m_joySticks = new Dictionary(); Dictionary m_joySticks_ro = new Dictionary(); @@ -242,6 +243,23 @@ public Text GetText(string name) m_texts.Add(name, tmp); return tmp; } + public Toggle GetToggle(string name) + { + if (m_Toggle .ContainsKey(name)) + { + return m_Toggle[name]; + } + + Toggle tmp = GetGameObject(name).GetComponent(); + + if (tmp == null) + { + throw new Exception(m_EventNames + " GetText ->" + name + "<- is Null !"); + } + + m_Toggle.Add(name, tmp); + return tmp; + } public Button GetButton(string name) { @@ -486,11 +504,11 @@ public DragAcceptor GetDragComp(string name) protected List m_EventNames = new List(); protected List m_EventListeners = new List(); - protected List> m_OnClickEvents = new List>(); - protected List> m_LongPressEvents = new List>(); - protected List> m_DragEvents = new List>(); - protected List> m_BeginDragEvents = new List>(); - protected List> m_EndDragEvents = new List>(); + protected List m_OnClickEvents = new List(); + protected List m_LongPressEvents = new List(); + protected List m_DragEvents = new List(); + protected List m_BeginDragEvents = new List(); + protected List m_EndDragEvents = new List(); public virtual void RemoveAllListener() { @@ -502,32 +520,32 @@ public virtual void RemoveAllListener() for (int i = 0; i < m_OnClickEvents.Count; i++) { - m_OnClickEvents[i].RemoveListener(); + m_OnClickEvents[i].RemoveListener(true); } m_OnClickEvents.Clear(); for (int i = 0; i < m_LongPressEvents.Count; i++) { - m_LongPressEvents[i].RemoveListener(); + m_LongPressEvents[i].RemoveListener(true); } m_LongPressEvents.Clear(); #region 拖动事件 for (int i = 0; i < m_DragEvents.Count; i++) { - m_DragEvents[i].RemoveListener(); + m_DragEvents[i].RemoveListener(true); } m_DragEvents.Clear(); for (int i = 0; i < m_BeginDragEvents.Count; i++) { - m_BeginDragEvents[i].RemoveListener(); + m_BeginDragEvents[i].RemoveListener(true); } m_BeginDragEvents.Clear(); for (int i = 0; i < m_EndDragEvents.Count; i++) { - m_EndDragEvents[i].RemoveListener(); + m_EndDragEvents[i].RemoveListener(true); } m_EndDragEvents.Clear(); #endregion @@ -535,39 +553,60 @@ public virtual void RemoveAllListener() #region 添加监听 + bool GetRegister(List list, string eventKey) + { + int registerCount = 0; + for (int i = 0; i < list.Count; i++) + { + if (list[i].eventKey == eventKey) + { + registerCount++; + } + } + + return registerCount == 0; + } + public void AddOnClickListener(string buttonName, InputEventHandle callback, string parm = null) { - InputEventRegisterInfo info = InputUIEventProxy.AddOnClickListener(GetButton(buttonName), UIEventKey, buttonName, parm, callback); + InputButtonClickRegisterInfo info = InputUIEventProxy.GetOnClickListener(GetButton(buttonName), UIEventKey, buttonName, parm, callback); + info.AddListener(GetRegister(m_OnClickEvents, info.eventKey)); m_OnClickEvents.Add(info); } public void AddOnClickListenerByCreate(Button button, string compName, InputEventHandle callback, string parm = null) { - InputEventRegisterInfo info = InputUIEventProxy.AddOnClickListener(button, UIEventKey, compName, parm, callback); + InputButtonClickRegisterInfo info = InputUIEventProxy.GetOnClickListener(button, UIEventKey, compName, parm, callback); + info.AddListener(GetRegister(m_OnClickEvents, info.eventKey)); m_OnClickEvents.Add(info); } public void AddLongPressListener(string compName, InputEventHandle callback, string parm = null) { - InputEventRegisterInfo info = InputUIEventProxy.AddLongPressListener(GetLongPressComp(compName), UIEventKey, compName, parm, callback); + InputEventRegisterInfo info = InputUIEventProxy.GetLongPressListener(GetLongPressComp(compName), UIEventKey, compName, parm, callback); + info.AddListener(GetRegister(m_LongPressEvents, info.eventKey)); m_LongPressEvents.Add(info); + } public void AddDragListener(string compName, InputEventHandle callback, string parm = null) { - InputEventRegisterInfo info = InputUIEventProxy.AddOnDragListener(GetDragComp(compName), UIEventKey, compName, parm, callback); + InputEventRegisterInfo info = InputUIEventProxy.GetOnDragListener(GetDragComp(compName), UIEventKey, compName, parm, callback); + info.AddListener(GetRegister(m_DragEvents, info.eventKey)); m_DragEvents.Add(info); } public void AddBeginDragListener(string compName, InputEventHandle callback, string parm = null) { - InputEventRegisterInfo info = InputUIEventProxy.AddOnBeginDragListener(GetDragComp(compName), UIEventKey, compName, parm, callback); + InputEventRegisterInfo info = InputUIEventProxy.GetOnBeginDragListener(GetDragComp(compName), UIEventKey, compName, parm, callback); + info.AddListener(GetRegister(m_BeginDragEvents, info.eventKey)); m_BeginDragEvents.Add(info); } public void AddEndDragListener(string compName, InputEventHandle callback, string parm = null) { - InputEventRegisterInfo info = InputUIEventProxy.AddOnEndDragListener(GetDragComp(compName), UIEventKey, compName, parm, callback); + InputEventRegisterInfo info = InputUIEventProxy.GetOnEndDragListener(GetDragComp(compName), UIEventKey, compName, parm, callback); + info.AddListener(GetRegister(m_EndDragEvents, info.eventKey)); m_EndDragEvents.Add(info); } @@ -588,15 +627,16 @@ public void AddEventListener(Enum EventEnum, EventHandle handle) //TODO 逐步添加所有的移除监听方法 - public InputEventRegisterInfo GetClickRegisterInfo(string buttonName, InputEventHandle callback, string parm ) + public InputButtonClickRegisterInfo GetClickRegisterInfo(string buttonName, InputEventHandle callback, string parm ) { string eventKey = InputUIOnClickEvent.GetEventKey(UIEventKey, buttonName, parm); for (int i = 0; i < m_OnClickEvents.Count; i++) { - if(m_OnClickEvents[i].eventKey == eventKey - && m_OnClickEvents[i].callBack == callback) + InputButtonClickRegisterInfo info = (InputButtonClickRegisterInfo)m_OnClickEvents[i]; + if (info.eventKey == eventKey + && info.callBack == callback) { - return m_OnClickEvents[i]; + return info; } } @@ -605,10 +645,9 @@ public InputEventRegisterInfo GetClickRegisterInfo(string b public void RemoveOnClickListener(string buttonName, InputEventHandle callback, string parm = null) { - InputEventRegisterInfo info = GetClickRegisterInfo(buttonName, callback, parm); - - info.RemoveListener(); + InputButtonClickRegisterInfo info = GetClickRegisterInfo(buttonName, callback, parm); m_OnClickEvents.Remove(info); + info.RemoveListener(GetRegister(m_OnClickEvents, info.eventKey)); } #endregion @@ -679,6 +718,7 @@ public void CleanItem(bool isActive) { for (int i = 0; i < m_ChildList.Count; i++) { + m_ChildList[i].RemoveAllListener(); m_ChildList[i].OnUIDestroy(); GameObjectManager.DestroyGameObjectByPool(m_ChildList[i].gameObject, isActive); } diff --git a/Assets/Script/Core/UI/Utils/ModelRotate.cs b/Assets/Script/Core/UI/Utils/ModelRotate.cs index 097a28a2..2085c83d 100644 --- a/Assets/Script/Core/UI/Utils/ModelRotate.cs +++ b/Assets/Script/Core/UI/Utils/ModelRotate.cs @@ -1,4 +1,4 @@ -#if UNITY_5_5 +#if UNITY_5_5_OR_NEWER using System.Collections; using System.Collections.Generic; using UnityEngine; diff --git a/Assets/Script/Core/UI/Utils/UIModelShowTool.cs b/Assets/Script/Core/UI/Utils/UIModelShowTool.cs index a72cc5a3..52f049b8 100644 --- a/Assets/Script/Core/UI/Utils/UIModelShowTool.cs +++ b/Assets/Script/Core/UI/Utils/UIModelShowTool.cs @@ -1,4 +1,4 @@ -#if UNITY_5_5 +#if UNITY_5_5_OR_NEWER using System; using System.Collections; using System.Collections.Generic; From b3f4d10d7a5ecb3dbe9c97d781634b4722c838df Mon Sep 17 00:00:00 2001 From: GaoKai Date: Thu, 19 Oct 2017 17:51:56 +0800 Subject: [PATCH 006/108] =?UTF-8?q?=E5=A2=9E=E5=BC=BA=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=9F=A5=E7=9C=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/Audio/AudioManager.cs | 15 ++- .../Core/Develop/DevelopReplayManager.cs | 25 +++- Assets/Script/Core/Develop/GUIUtil.cs | 13 ++ Assets/Script/Core/Develop/LogOutPutThread.cs | 17 ++- Assets/Script/Core/Network/URLManager.cs | 37 +++--- Assets/Script/Core/SDKManager/SDKManager.cs | 9 ++ Assets/Script/Core/Utils/HTTPTool.cs | 122 ++++++++++++------ 7 files changed, 168 insertions(+), 70 deletions(-) diff --git a/Assets/Script/Core/Audio/AudioManager.cs b/Assets/Script/Core/Audio/AudioManager.cs index c01606c2..499a78e1 100644 --- a/Assets/Script/Core/Audio/AudioManager.cs +++ b/Assets/Script/Core/Audio/AudioManager.cs @@ -135,15 +135,28 @@ public static AudioSource PlayMusic2D(string l_musicName, bool l_isLoop) /// /// 音效名 public static AudioSource PlaySound2D(string l_soundName) + { + AudioSource audioTmp = PlaySound2D(l_soundName,1,false); + + return audioTmp; + } + + /// + /// 播放一个2D音效, 可变音调 + /// + /// 音效名 + public static AudioSource PlaySound2D(string l_soundName, float l_pitch, bool l_isLoop = false ) { AudioSource audioTmp = GetAudioSource2D(SoundType.Sound); audioTmp.clip = GetAudioClip(l_soundName); - audioTmp.loop = false; + audioTmp.loop = l_isLoop; audioTmp.volume = s_SoundVolume; audioTmp.PlayOneShot(audioTmp.clip); + audioTmp.pitch = l_pitch; return audioTmp; } + /// /// 延时播放一个2D音效 /// diff --git a/Assets/Script/Core/Develop/DevelopReplayManager.cs b/Assets/Script/Core/Develop/DevelopReplayManager.cs index 12b9d80c..d4c92c74 100644 --- a/Assets/Script/Core/Develop/DevelopReplayManager.cs +++ b/Assets/Script/Core/Develop/DevelopReplayManager.cs @@ -367,6 +367,7 @@ static void LogGUI() } static string LogContent = ""; + static string LogPath = ""; static void ShowLogList() { @@ -379,6 +380,7 @@ static void ShowLogList() isShowLog = true; scrollPos = Vector2.zero; LogContent = LogOutPutThread.LoadLogContent(FileNameList[i]); + LogPath = LogOutPutThread.GetPath(FileNameList[i]); } } @@ -404,10 +406,29 @@ static void ShowLog() { scrollPos = GUILayout.BeginScrollView(scrollPos); - GUILayout.TextArea(LogContent); - + try + { + GUIUtil.SafeTextArea(LogContent); + } + catch(Exception e) + { + GUILayout.TextArea(e.ToString()); + } + GUILayout.EndScrollView(); + if(URLManager.GetURL("LogUpLoadURL") != null) + { + if (GUILayout.Button("上传日志")) + { + HTTPTool.Upload_Request_Thread(URLManager.GetURL("LogUpLoadURL"), LogPath); + } + } + else + { + GUILayout.Label("上传日志需要在 URLConfig -> LogUpLoadURL 配置上传目录"); + } + if (GUILayout.Button("复制到剪贴板")) { TextEditor tx = new TextEditor(); diff --git a/Assets/Script/Core/Develop/GUIUtil.cs b/Assets/Script/Core/Develop/GUIUtil.cs index ff9663e1..5166ab3f 100644 --- a/Assets/Script/Core/Develop/GUIUtil.cs +++ b/Assets/Script/Core/Develop/GUIUtil.cs @@ -47,6 +47,19 @@ public static void SetGUIStyle() GUI.skin.textField.fontSize = s_fontSize; GUI.skin.textField.wordWrap = true; } + } + const int maxContent = 15000; + public static void SafeTextArea(string content) + { + if(content.Length > maxContent) + { + GUILayout.TextArea(content.Substring(0, maxContent)); + SafeTextArea(content.Substring(maxContent+ 1,content.Length - maxContent - 1)); + } + else + { + GUILayout.TextArea(content); + } } } diff --git a/Assets/Script/Core/Develop/LogOutPutThread.cs b/Assets/Script/Core/Develop/LogOutPutThread.cs index 7070ecb8..a5568a23 100644 --- a/Assets/Script/Core/Develop/LogOutPutThread.cs +++ b/Assets/Script/Core/Develop/LogOutPutThread.cs @@ -23,8 +23,19 @@ public void Init() { ApplicationManager.s_OnApplicationQuit += Close; + string prefix = Application.productName; + +#if UNITY_EDITOR + prefix += "_Editor_" + SystemInfo.deviceName; +#else + #if UNITY_ANDROID + prefix += "_Android_" + SystemInfo.deviceName; + #else + prefix += "_Ios_" + SystemInfo.deviceName; + #endif +#endif DateTime now = DateTime.Now; - string logName = string.Format("Log{0}{1}{2}#{3}_{4}_{5}", + string logName = string.Format(prefix + "_{0}{1}{2}#{3}_{4}_{5}", now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second); string logPath = PathTool.GetAbsolutePath(ResLoadLocation.Persistent, PathTool.GetRelativelyPath(LogPath, logName, expandName)); @@ -47,7 +58,7 @@ public void Init() Debug.LogError("LogOutPutThread Init Exception:" + e.ToString()); } #endif - } + } public void Log(LogInfo log) { @@ -146,7 +157,7 @@ public static string LoadLogContent(string logName) return ResourceIOTool.ReadStringByFile(GetPath(logName)); } - static string GetPath(string logName) + public static string GetPath(string logName) { return PathTool.GetAbsolutePath(ResLoadLocation.Persistent, PathTool.GetRelativelyPath(LogPath, logName, expandName)); } diff --git a/Assets/Script/Core/Network/URLManager.cs b/Assets/Script/Core/Network/URLManager.cs index 81e6e906..fae1cb16 100644 --- a/Assets/Script/Core/Network/URLManager.cs +++ b/Assets/Script/Core/Network/URLManager.cs @@ -1,45 +1,40 @@ using UnityEngine; using System.Collections; +using System.Collections.Generic; public class URLManager { const string s_configName = "URLConfig"; - static DataTable s_URLTable; + static Dictionary s_URLTable; public static string GetURL(string urlKey) { Init(); - if (s_URLTable.ContainsKey(urlKey)) + if (s_URLTable != null) { - return s_URLTable[urlKey].GetString("URL"); + if (s_URLTable.ContainsKey(urlKey)) + { + return s_URLTable[urlKey].GetString(); + } + else + { + return null; + } } - else - { - return null; - } - } - - public static string GetPort(string urlKey) - { - Init(); - if (s_URLTable.ContainsKey(urlKey)) - { - return s_URLTable[urlKey].GetString("Port"); - } - else - { - return null; - } + return null; } public static void Init() { if (s_URLTable == null) { - s_URLTable = DataManager.GetData(s_configName); + if(ConfigManager.GetIsExistConfig(s_configName)) + { + s_URLTable = ConfigManager.GetData(s_configName); + } } } } diff --git a/Assets/Script/Core/SDKManager/SDKManager.cs b/Assets/Script/Core/SDKManager/SDKManager.cs index 23545121..98a2505f 100644 --- a/Assets/Script/Core/SDKManager/SDKManager.cs +++ b/Assets/Script/Core/SDKManager/SDKManager.cs @@ -391,6 +391,15 @@ public static void Log(string eventID, Dictionary data) } } + + public static void LogString(string eventID, string eventInfo) + { + Dictionary send_info = new Dictionary(); + send_info["name"] = eventID; + send_info["info"] = eventInfo; + //Debug.Log("SendDataEvent ====" + name); + Log(eventID, send_info); + } #endregion #endregion diff --git a/Assets/Script/Core/Utils/HTTPTool.cs b/Assets/Script/Core/Utils/HTTPTool.cs index 5ac6bc16..d120af5a 100644 --- a/Assets/Script/Core/Utils/HTTPTool.cs +++ b/Assets/Script/Core/Utils/HTTPTool.cs @@ -5,73 +5,109 @@ using System; using System.Net; using System.IO; +using System.Threading; public class HTTPTool { private static readonly Encoding DEFAULTENCODE = Encoding.UTF8; - public static string Upload_Request(string url, string file) + public static void Upload_Request_Thread(string url, string file) { NameValueCollection data = new NameValueCollection(); - return Upload_Request(url, new string[] { file }, data, DEFAULTENCODE); + s_url = url; + s_files = new string[] { file }; + s_data = data; + s_encoding = DEFAULTENCODE; + + Thread th = new Thread(Upload_Request); + th.Start(); } - public static string Upload_Request(string url, string[] files, NameValueCollection data, Encoding encoding) - { - string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); - byte[] boundarybytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); - byte[] endbytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); + static string s_url; + static string[] s_files; + static NameValueCollection s_data; + static Encoding s_encoding; - //1.HttpWebRequest - HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); - request.ContentType = "multipart/form-data; boundary=" + boundary; - request.Method = "POST"; - request.KeepAlive = true; - request.Credentials = CredentialCache.DefaultCredentials; - request.Expect = null; + public static void Upload_Request() + { + Debug.Log("Upload_Request " + s_url); - using (Stream stream = request.GetRequestStream()) + try { - //1.1 key/value - string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}"; - if (data != null) + + + + string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); + byte[] boundarybytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); + byte[] endbytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); + + //1.HttpWebRequest + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(s_url); + request.ContentType = "multipart/form-data; boundary=" + boundary; + request.Method = "POST"; + request.KeepAlive = true; + request.Credentials = CredentialCache.DefaultCredentials; + request.Expect = null; + + using (Stream stream = request.GetRequestStream()) { - foreach (string key in data.Keys) + //1.1 key/value + string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}"; + if (s_data != null) { - stream.Write(boundarybytes, 0, boundarybytes.Length); - string formitem = string.Format(formdataTemplate, key, data[key]); - byte[] formitembytes = encoding.GetBytes(formitem); - stream.Write(formitembytes, 0, formitembytes.Length); + foreach (string key in s_data.Keys) + { + stream.Write(boundarybytes, 0, boundarybytes.Length); + string formitem = string.Format(formdataTemplate, key, s_data[key]); + byte[] formitembytes = s_encoding.GetBytes(formitem); + stream.Write(formitembytes, 0, formitembytes.Length); + } } - } - //1.2 file - string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: text/plain\r\n\r\n"; - byte[] buffer = new byte[4096]; - int bytesRead = 0; - for (int i = 0; i < files.Length; i++) - { - stream.Write(boundarybytes, 0, boundarybytes.Length); - string header = string.Format(headerTemplate, "file", Path.GetFileName(files[i])); - byte[] headerbytes = encoding.GetBytes(header); - stream.Write(headerbytes, 0, headerbytes.Length); - using (FileStream fileStream = new FileStream(files[i], FileMode.Open, FileAccess.Read)) + //1.2 file + string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: text/plain\r\n\r\n"; + byte[] buffer = new byte[4096]; + int bytesRead = 0; + for (int i = 0; i < s_files.Length; i++) { - while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) + stream.Write(boundarybytes, 0, boundarybytes.Length); + string header = string.Format(headerTemplate, "file", Path.GetFileName(s_files[i])); + byte[] headerbytes = s_encoding.GetBytes(header); + stream.Write(headerbytes, 0, headerbytes.Length); + using (FileStream fileStream = new FileStream(s_files[i], FileMode.Open, FileAccess.Read)) { - stream.Write(buffer, 0, bytesRead); + while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) + { + stream.Write(buffer, 0, bytesRead); + } } } + + //1.3 form end + stream.Write(endbytes, 0, endbytes.Length); } + //2.WebResponse + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); - //1.3 form end - stream.Write(endbytes, 0, endbytes.Length); + using (StreamReader stream = new StreamReader(response.GetResponseStream())) + { + string result = stream.ReadToEnd(); + if(result == "ok") + { + Debug.Log("上传完成 " + result); + } + else + { + Debug.Log("上传结束 " + result); + } + + return; + //return stream.ReadToEnd(); + } } - //2.WebResponse - HttpWebResponse response = (HttpWebResponse)request.GetResponse(); - using (StreamReader stream = new StreamReader(response.GetResponseStream())) + catch(Exception e) { - return stream.ReadToEnd(); + Debug.Log("上传失败 " + e.ToString()); } } } From 624a87ffeed35d98b298035d75afd84e3b97d8b2 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Tue, 14 Nov 2017 17:42:37 +0800 Subject: [PATCH 007/108] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AF=B9UDP=E6=94=AF?= =?UTF-8?q?=E6=8C=81=EF=BC=8CSDKManager=E5=A2=9E=E5=BC=BA,=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E5=A2=9E=E5=BC=BA=E3=80=82=E8=B0=83=E6=95=B4=E6=91=87?= =?UTF-8?q?=E6=9D=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/AnimSystem/AnimData.cs | 10 ++++- .../Script/Core/HotUpdate/HotUpdateManager.cs | 33 +++++++++------ Assets/Script/Core/Network/NetworkManager.cs | 25 +++++------ .../Core/Network/Protocol/ProtocolService.cs | 15 +++++-- .../Core/SDKManager/Interface/LogInterface.cs | 4 ++ Assets/Script/Core/SDKManager/SDKManager.cs | 42 ++++++++++++++++--- .../UI/Components/JoyStick/UGUIJoyStick.cs | 4 +- Assets/Script/Core/Utils/ExpandMethod.cs | 40 +++++++++++++++++- Assets/Script/Core/Utils/SystemInfoTool.cs | 31 ++++++++------ Assets/Script/Core/Utils/UGUITool.cs | 2 - 10 files changed, 154 insertions(+), 52 deletions(-) diff --git a/Assets/Script/Core/AnimSystem/AnimData.cs b/Assets/Script/Core/AnimSystem/AnimData.cs index dc69f36b..acaac16f 100644 --- a/Assets/Script/Core/AnimSystem/AnimData.cs +++ b/Assets/Script/Core/AnimSystem/AnimData.cs @@ -430,7 +430,10 @@ public void SetUGUIAlpha(float a) { newColor = m_oldColor[index]; newColor.a = a; - m_animObjectList_Image[i].color = newColor; + if (m_animObjectList_Image[i] != null) + { + m_animObjectList_Image[i].color = newColor; + } index++; } @@ -439,7 +442,10 @@ public void SetUGUIAlpha(float a) { newColor = m_oldColor[index]; newColor.a = a; - m_animObjectList_Text[i].color = newColor; + if (m_animObjectList_Text[i] != null) + { + m_animObjectList_Text[i].color = newColor; + } index++; } diff --git a/Assets/Script/Core/HotUpdate/HotUpdateManager.cs b/Assets/Script/Core/HotUpdate/HotUpdateManager.cs index 65c71a85..9607adb3 100644 --- a/Assets/Script/Core/HotUpdate/HotUpdateManager.cs +++ b/Assets/Script/Core/HotUpdate/HotUpdateManager.cs @@ -61,23 +61,32 @@ static IEnumerator HotUpdateProgress() static void CheckLocalVersion() { - AssetBundle ab = AssetBundle.LoadFromFile(PathTool.GetAbsolutePath(ResLoadLocation.Streaming, + if (ApplicationManager.Instance.m_useAssetsBundle) + { + AssetBundle ab = AssetBundle.LoadFromFile(PathTool.GetAbsolutePath(ResLoadLocation.Streaming, c_versionFileName + "." + AssetsBundleManager.c_AssetsBundlesExpandName)); - TextAsset text = (TextAsset)ab.mainAsset; - string StreamVersionContent = text.text; - ab.Unload(true); + TextAsset text = (TextAsset)ab.mainAsset; + string StreamVersionContent = text.text; + ab.Unload(true); - //stream版本 - Dictionary StreamVersion = (Dictionary)FrameWork.Json.Deserialize(StreamVersionContent); + //stream版本 + Dictionary StreamVersion = (Dictionary)FrameWork.Json.Deserialize(StreamVersionContent); - //Streaming版本如果比Persistent版本还要新,则更新Persistent版本 - if ((GetInt(StreamVersion[c_largeVersionKey]) > GetInt(m_versionConfig[c_largeVersionKey]))|| - (GetInt(StreamVersion[c_smallVersonKey]) > GetInt(m_versionConfig[c_smallVersonKey])) - ) + //Streaming版本如果比Persistent版本还要新,则更新Persistent版本 + if ((GetInt(StreamVersion[c_largeVersionKey]) > GetInt(m_versionConfig[c_largeVersionKey])) || + (GetInt(StreamVersion[c_smallVersonKey]) > GetInt(m_versionConfig[c_smallVersonKey])) + ) + { + RecordManager.CleanRecord(c_HotUpdateRecordName); + Init(); + } + } + else { - RecordManager.CleanRecord(c_HotUpdateRecordName); - Init(); + } + + } static IEnumerator CheckVersion() diff --git a/Assets/Script/Core/Network/NetworkManager.cs b/Assets/Script/Core/Network/NetworkManager.cs index e3ce1898..329b32c4 100644 --- a/Assets/Script/Core/Network/NetworkManager.cs +++ b/Assets/Script/Core/Network/NetworkManager.cs @@ -117,7 +117,15 @@ public static void SendMessage(Dictionary data) static void ReceviceMeaasge(NetWorkMessage message) { - s_messageList.Add(message); + if(message != null) + { + s_messageList.Add(message); + } + else + { + Debug.LogError("Message Error: Message is null"); + } + } static void Dispatch(NetWorkMessage msg) @@ -128,19 +136,12 @@ static void Dispatch(NetWorkMessage msg) } catch (Exception e) { - if (msg!= null ) - { - string messageContent = ""; - if(msg.m_data != null) - { - messageContent = Json.Serialize(msg.m_data); - } - Debug.LogError("Message Error: MessageType is ->" + msg.m_MessageType + "<- MessageContent is ->" + messageContent + "<-\n" + e.ToString()); - } - else + string messageContent = ""; + if (msg.m_data != null) { - Debug.LogError("Message Error: Message is null" ); + messageContent = Json.Serialize(msg.m_data); } + Debug.LogError("Message Error: MessageType is ->" + msg.m_MessageType + "<- MessageContent is ->" + messageContent + "<-\n" + e.ToString()); } } diff --git a/Assets/Script/Core/Network/Protocol/ProtocolService.cs b/Assets/Script/Core/Network/Protocol/ProtocolService.cs index 77cd0cd9..b8727287 100644 --- a/Assets/Script/Core/Network/Protocol/ProtocolService.cs +++ b/Assets/Script/Core/Network/Protocol/ProtocolService.cs @@ -530,14 +530,23 @@ int GetMethodIndex(string messageType) NetWorkMessage Analysis(ByteArray bytes) { NetWorkMessage msg = GetMessageByPool(); - //Debug.Log("ReceiveDataLoad : " + BitConverter.ToString(bytes.Buffer)); - //Debug.Log("bytes length " + bytes.bytes.Count); bytes.ReadUShort(); //消息长度 bytes.ReadByte(); //模块名 int methodIndex = bytes.ReadUShort(); //方法名 - msg.m_MessageType = m_methodNameInfo[methodIndex]; + //Debug.Log("methodIndex " + methodIndex); + //Debug.Log("ReceiveDataLoad : " + BitConverter.ToString(bytes.Buffer)); + try + { + msg.m_MessageType = m_methodNameInfo[methodIndex]; + } + catch + { + Debug.LogError("没有找到消息号! " + methodIndex); + return null; + } + int re_len = bytes.Length - 5; msg.m_data = AnalysisData(msg.m_MessageType, bytes.ReadBytes(re_len)); diff --git a/Assets/Script/Core/SDKManager/Interface/LogInterface.cs b/Assets/Script/Core/SDKManager/Interface/LogInterface.cs index b1667e78..c533faad 100644 --- a/Assets/Script/Core/SDKManager/Interface/LogInterface.cs +++ b/Assets/Script/Core/SDKManager/Interface/LogInterface.cs @@ -13,6 +13,10 @@ public override void Init() public virtual void Log(string eventID, Dictionary data) { + } + public virtual void Log(string eventID, Dictionary data) + { + } public virtual void LoginLog(string accountID, Dictionary data) diff --git a/Assets/Script/Core/SDKManager/SDKManager.cs b/Assets/Script/Core/SDKManager/SDKManager.cs index 98a2505f..fc178c66 100644 --- a/Assets/Script/Core/SDKManager/SDKManager.cs +++ b/Assets/Script/Core/SDKManager/SDKManager.cs @@ -1,4 +1,5 @@ -using System; +using FrameWork; +using System; using System.Collections; using System.Collections.Generic; using System.Reflection; @@ -392,11 +393,42 @@ public static void Log(string eventID, Dictionary data) } - public static void LogString(string eventID, string eventInfo) + public static void Log(string eventID, Dictionary data) { - Dictionary send_info = new Dictionary(); - send_info["name"] = eventID; - send_info["info"] = eventInfo; + if (s_logServiceList == null) + { + throw new Exception("logServiceList is null ,please check SDKManager Init"); + } + + for (int i = 0; i < s_logServiceList.Count; i++) + { + try + { + s_logServiceList[i].Log(eventID, data); + } + catch (Exception e) + { + Debug.LogError("SDKManager Log Exception: " + e.ToString()); + } + } + + } + + public static void LogString(string eventID, string ev_json) + { + //Dictionary send_info = new Dictionary(); + //send_info["name"] = eventID; + //send_info["info"] = eventInfo; + + Dictionary en_dic = (Dictionary)Json.Deserialize(ev_json); + + Dictionary send_info = new Dictionary(); + + foreach (string item in en_dic.Keys) + { + send_info[item] = en_dic[item].ToString(); + } + //Debug.Log("SendDataEvent ====" + name); Log(eventID, send_info); } diff --git a/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick.cs b/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick.cs index 90b4bf93..0eaafba0 100644 --- a/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick.cs +++ b/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick.cs @@ -12,7 +12,7 @@ public class UGUIJoyStick : UIBase, IDragHandler, IEndDragHandler,IBeginDragHand public UGUIJoyStickHandle onJoyStick; - protected bool canMove = true; + public bool canMove = true; void Start() { //计算摇杆块的半径 @@ -40,6 +40,7 @@ public void OnDrag(PointerEventData eventData) public void OnEndDrag(PointerEventData eventData) { + canMove = false; content.anchoredPosition3D = Vector3.zero; //onJoyStick(Vector3.zero); } @@ -75,6 +76,7 @@ void Update() public void ReHomePos() { canMove = false; + content.anchoredPosition3D = Vector3.zero; onJoyStick(Vector3.zero); } diff --git a/Assets/Script/Core/Utils/ExpandMethod.cs b/Assets/Script/Core/Utils/ExpandMethod.cs index c08ff0ac..df6e85b3 100644 --- a/Assets/Script/Core/Utils/ExpandMethod.cs +++ b/Assets/Script/Core/Utils/ExpandMethod.cs @@ -78,7 +78,7 @@ public static string ToSaveString(this string[] list) return sb.ToString(); } - //逆时针旋转 + //向量逆时针旋转 public static Vector3 Vector3RotateInXZ(this Vector3 dir,float angle) { @@ -91,7 +91,7 @@ public static Vector3 Vector3RotateInXZ(this Vector3 dir,float angle) return l_dir; } - //顺时针 + //向量顺时针 public static Vector3 Vector3RotateInXZ2(this Vector3 dir, float angle) { @@ -103,4 +103,40 @@ public static Vector3 Vector3RotateInXZ2(this Vector3 dir, float angle) return l_dir; } + + //位置绕点旋转顺时针,逆时针角度乘以-1即可 + public static Vector3 PostionRotateInXZ(this Vector3 pos,Vector3 center ,float angle) + { + angle *= -Mathf.Deg2Rad; + float x = (pos.x - center.x) * Mathf.Cos(angle) - (pos.z - center.z) * Mathf.Sin(angle) + center.x; + float z = (pos.x - center.x) * Mathf.Sin(angle) + (pos.z - center.z) * Mathf.Cos(angle) + center.z; + + Vector3 newPos = new Vector3(x, pos.y, z); + + return newPos; + } + + //获取一个顺时针夹角(需先标准化向量) + public static float GetRotationAngle(this Vector3 dir,Vector3 aimDir) + { + //dir = dir.normalized; + //aimDir = aimDir.normalized; + + float angle = (float)(Math.Acos(Vector3.Dot(dir, aimDir)) * 180 / Math.PI); + + if(angle != 180 && angle != 0) + { + float cross = dir.x * aimDir.z - aimDir.x * dir.z; + if(cross < 0) + { + return angle; + } + else + { + return 360 - angle; + } + } + + return angle; + } } diff --git a/Assets/Script/Core/Utils/SystemInfoTool.cs b/Assets/Script/Core/Utils/SystemInfoTool.cs index 5d27c55a..507486ab 100644 --- a/Assets/Script/Core/Utils/SystemInfoTool.cs +++ b/Assets/Script/Core/Utils/SystemInfoTool.cs @@ -9,20 +9,25 @@ public static string GetSysInfo(string name) name = name.ToLower(); if (name == "all") isall = true; string str = ""; - #if UNITY_5_6 +#if UNITY_5_6 if (isall || name == "bundleidentifier") str = isall ? str + Application.identifier+"\n" : Application.identifier; - #endif - if (isall || name == "version") str = isall ? str + Application.version+"\n" : Application.version; - if (isall || name == "devicemodel") str = isall ? str + SystemInfo.deviceModel+"\n" : SystemInfo.deviceModel; - if (isall || name == "devicename") str = isall ? str + SystemInfo.deviceName+"\n" : SystemInfo.deviceName; - if (isall || name == "deviceuniqueidentifier") str = isall ? str + SystemInfo.deviceUniqueIdentifier+"\n" : SystemInfo.deviceUniqueIdentifier; - if (isall || name == "graphicsdevicename") str = isall ? str + SystemInfo.graphicsDeviceName+"\n" : SystemInfo.graphicsDeviceName; - if (isall || name == "graphicsmemorysize") str = isall ? str + SystemInfo.graphicsMemorySize.ToString()+"\n" : SystemInfo.graphicsMemorySize.ToString(); - if (isall || name == "graphicsmultithreaded") str = isall ? str + SystemInfo.graphicsMultiThreaded.ToString()+"\n" : SystemInfo.graphicsMultiThreaded.ToString(); - if (isall || name == "operatingsystem") str = isall ? str + SystemInfo.operatingSystem+"\n" : SystemInfo.operatingSystem; - if (isall || name == "processorcount") str = isall ? str + SystemInfo.processorCount.ToString()+"\n" : SystemInfo.processorCount.ToString(); - if (isall || name == "processortype") str = isall ? str + SystemInfo.processorType+"\n" : SystemInfo.processorType; - if (isall || name == "systemmemorysize") str = isall ? str + SystemInfo.systemMemorySize.ToString()+"\n" : SystemInfo.systemMemorySize.ToString(); +#endif +#if UNITY_5_5 + if (isall || name == "bundleidentifier") str = isall ? str + Application.bundleIdentifier + "\n" : Application.bundleIdentifier; +#endif + if (isall || name == "version") str = isall ? str + Application.version + "\n" : Application.version; + if (isall || name == "devicemodel") str = isall ? str + SystemInfo.deviceModel + "\n" : SystemInfo.deviceModel; + if (isall || name == "devicename") str = isall ? str + SystemInfo.deviceName + "\n" : SystemInfo.deviceName; + if (isall || name == "deviceuniqueidentifier") str = isall ? str + SystemInfo.deviceUniqueIdentifier + "\n" : SystemInfo.deviceUniqueIdentifier; + if (isall || name == "graphicsdevicename") str = isall ? str + SystemInfo.graphicsDeviceName + "\n" : SystemInfo.graphicsDeviceName; + if (isall || name == "graphicsmemorysize") str = isall ? str + SystemInfo.graphicsMemorySize.ToString() + "\n" : SystemInfo.graphicsMemorySize.ToString(); + if (isall || name == "graphicsmultithreaded") str = isall ? str + SystemInfo.graphicsMultiThreaded.ToString() + "\n" : SystemInfo.graphicsMultiThreaded.ToString(); + if (isall || name == "operatingsystem") str = isall ? str + SystemInfo.operatingSystem + "\n" : SystemInfo.operatingSystem; + if (isall || name == "processorcount") str = isall ? str + SystemInfo.processorCount.ToString() + "\n" : SystemInfo.processorCount.ToString(); + if (isall || name == "processortype") str = isall ? str + SystemInfo.processorType + "\n" : SystemInfo.processorType; + if (isall || name == "systemmemorysize") str = isall ? str + SystemInfo.systemMemorySize.ToString() + "\n" : SystemInfo.systemMemorySize.ToString(); + if (isall || name == "developerbuild") str = isall ? str + Application.installMode.ToString() + "\n" : Application.installMode.ToString(); + if (isall || name == "rsmodel") str = isall ? str + ApplicationManager.AppMode.ToString() + "\n" : ApplicationManager.AppMode.ToString(); return str; } } diff --git a/Assets/Script/Core/Utils/UGUITool.cs b/Assets/Script/Core/Utils/UGUITool.cs index 2da795ff..4bf9430a 100644 --- a/Assets/Script/Core/Utils/UGUITool.cs +++ b/Assets/Script/Core/Utils/UGUITool.cs @@ -52,6 +52,4 @@ static public void set_SpriteRender(GameObject go , string name) } } - - } From bf40cb9bd89eff279f60e1ef1790f6799d735f6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E5=87=AF?= Date: Tue, 14 Nov 2017 18:23:16 +0800 Subject: [PATCH 008/108] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 调整 --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5515db16..ee027de9 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ # MyUnityFrameWork   Unity框架,组件可插拔,可视化编辑,代码自动生成。   包含资源加载,配置加载,数据加载,UI管理,音频管理,日志管理,动画系统,特效系统等,以及对应编辑器工具 -  支持Android、Ios、PC、WEBGL +  支持Android、Ios、PC、WEBGL   +  项目中的Script/Core目录就是完整框架 ## 应用   1.快速配置开发模式和发布模式(开发模式资源直接从Resources文件夹加载,不需要重新打包) @@ -10,7 +11,7 @@   4.提供Jenkins自动化打包接口ProjectBuildService ([打包教程](http://www.kisence.com/2017/06/01/shi-yong-jenkinsjin-xing-zi-dong-da-bao/) )    ## 游戏流程管理 -  1.游戏逻辑入口从某一个游戏流程开始(创建一个流程继承IGameStatus,然后再ApplicationManager中选择它作为第一个流程) +  1.游戏逻辑入口从某一个游戏流程开始(创建一个流程继承IGameStatus,然后在ApplicationManager中选择它作为第一个流程)     2.提供测试接口,可传入测试数据,直接测试某一个流程不需要把游戏从头运行一次   3.游戏启动时允许呼出开发者控制台,在真机上定位问题更快捷(查看以往日志数据、复盘Bug操作等) From 50ac30dcd22956cd4e9e8f52b678d73deb444074 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E5=87=AF?= Date: Tue, 14 Nov 2017 18:23:36 +0800 Subject: [PATCH 009/108] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 调整 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ee027de9..fa603709 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MyUnityFrameWork   Unity框架,组件可插拔,可视化编辑,代码自动生成。   包含资源加载,配置加载,数据加载,UI管理,音频管理,日志管理,动画系统,特效系统等,以及对应编辑器工具 -  支持Android、Ios、PC、WEBGL   +  支持Android、Ios、PC、WEBGL     项目中的Script/Core目录就是完整框架 ## 应用 From 2a957cb77f79048d69ac527e8b66dd253f1a1525 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E5=87=AF?= Date: Tue, 14 Nov 2017 18:24:23 +0800 Subject: [PATCH 010/108] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 调整readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fa603709..5cceea35 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MyUnityFrameWork   Unity框架,组件可插拔,可视化编辑,代码自动生成。   包含资源加载,配置加载,数据加载,UI管理,音频管理,日志管理,动画系统,特效系统等,以及对应编辑器工具 -  支持Android、Ios、PC、WEBGL   +  支持Android、Ios、PC、WEBGL   项目中的Script/Core目录就是完整框架 ## 应用 From d16d292d5b98c24ab802dcc8889294ccc2595b26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E5=87=AF?= Date: Tue, 14 Nov 2017 18:25:22 +0800 Subject: [PATCH 011/108] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 调整readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5cceea35..0f982b53 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@   4.提供Jenkins自动化打包接口ProjectBuildService ([打包教程](http://www.kisence.com/2017/06/01/shi-yong-jenkinsjin-xing-zi-dong-da-bao/) )    ## 游戏流程管理 -  1.游戏逻辑入口从某一个游戏流程开始(创建一个流程继承IGameStatus,然后在ApplicationManager中选择它作为第一个流程)   +  1.游戏逻辑入口从某一个游戏流程开始(创建一个流程继承IGameStatus,然后在ApplicationManager中选择它作为第一个流程)   2.提供测试接口,可传入测试数据,直接测试某一个流程不需要把游戏从头运行一次   3.游戏启动时允许呼出开发者控制台,在真机上定位问题更快捷(查看以往日志数据、复盘Bug操作等) From 8c00da53fed48b2cfa8b39aa14a78402e35d3788 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E5=87=AF?= Date: Tue, 14 Nov 2017 18:32:53 +0800 Subject: [PATCH 012/108] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 调整readme --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 0f982b53..694a9725 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,7 @@     ·重用Item的scrollRect,不会一下子加载太多item,节约性能。     ·内置摇杆。   10.对新手引导做了内置支持 +  11.3D模型投射到UI上的工具 ## 新手引导系统   1.内置了新手引导系统,并提供了接口支持拓展功能 @@ -134,9 +135,12 @@   1.提供各种预设特效,开发简单快捷     ·震屏特效。     ·屏幕淡入淡出特效。 +  2.内置特效LOD管理工具 ## 其他功能   1.Timer   2.EventDispatch   3.HeapObjectPool +  4.自动导入FBX到AnimatorControl +  5.自动生成Protocol文件工具   From 757693560a27d53ae259fb2ed614f3d36962f04d Mon Sep 17 00:00:00 2001 From: GaoKai Date: Fri, 17 Nov 2017 10:36:34 +0800 Subject: [PATCH 013/108] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Script/Core/Data/DataGenerateManager.cs | 2 +- .../Core/Develop/DevelopReplayManager.cs | 2 +- Assets/Script/Core/Develop/FPSCounter.cs | 4 +- Assets/Script/Core/Develop/GUIConsole.cs | 2 +- Assets/Script/Core/Develop/LogOutPutThread.cs | 2 +- Assets/Script/Core/Develop/MemoryDetector.cs | 2 +- .../Script/Core/Network/JsonNetworkService.cs | 2 +- Assets/Script/Core/Network/NetworkManager.cs | 42 +++++---- .../Script/Core/Network/Protocol/ByteArray.cs | 88 ++++++++++++------- .../Core/Network/Protocol/ProtocolService.cs | 22 +++-- .../Script/Core/ResourceLoad/MemoryManager.cs | 4 +- Assets/Script/Core/Utils/ExpandMethod.cs | 22 ++--- 12 files changed, 112 insertions(+), 82 deletions(-) diff --git a/Assets/Script/Core/Data/DataGenerateManager.cs b/Assets/Script/Core/Data/DataGenerateManager.cs index 1e43daf7..ed308b35 100644 --- a/Assets/Script/Core/Data/DataGenerateManager.cs +++ b/Assets/Script/Core/Data/DataGenerateManager.cs @@ -5,7 +5,7 @@ public class DataGenerateManager where T : DataGenerateBase, new() { - static T s_dataCatch; + //static T s_dataCatch; static Dictionary s_dict = new Dictionary(); static bool s_isInit = false; diff --git a/Assets/Script/Core/Develop/DevelopReplayManager.cs b/Assets/Script/Core/Develop/DevelopReplayManager.cs index d4c92c74..453429ce 100644 --- a/Assets/Script/Core/Develop/DevelopReplayManager.cs +++ b/Assets/Script/Core/Develop/DevelopReplayManager.cs @@ -33,7 +33,7 @@ public static bool IsReplay public static bool s_isProfile = true; - static List> s_eventStreamSerialize; + //static List> s_eventStreamSerialize; static List s_eventStream; static List s_randomList; diff --git a/Assets/Script/Core/Develop/FPSCounter.cs b/Assets/Script/Core/Develop/FPSCounter.cs index 0e51b2c8..0d69873e 100644 --- a/Assets/Script/Core/Develop/FPSCounter.cs +++ b/Assets/Script/Core/Develop/FPSCounter.cs @@ -34,7 +34,7 @@ void Start() void Update() { ++this.frameCount; - this.rateDuration += Time.deltaTime; + this.rateDuration += Time.unscaledDeltaTime; if (this.rateDuration > calcRate) { // 计算帧率 @@ -46,6 +46,6 @@ void Update() void OnGUI() { - GUILayout.TextField("FPS:" + fps.ToString()); + GUILayout.Label("FPS:" + fps.ToString()); } } diff --git a/Assets/Script/Core/Develop/GUIConsole.cs b/Assets/Script/Core/Develop/GUIConsole.cs index 74249014..9ac16b20 100644 --- a/Assets/Script/Core/Develop/GUIConsole.cs +++ b/Assets/Script/Core/Develop/GUIConsole.cs @@ -130,7 +130,7 @@ static void ConsoleWindow(int windowID) { if (scrollToBottom) { - GUILayout.BeginScrollView(Vector2.up * entries.Count * 100.0f); + GUILayout.BeginScrollView(Vector2.up * entries.Count * 1000.0f); } else { diff --git a/Assets/Script/Core/Develop/LogOutPutThread.cs b/Assets/Script/Core/Develop/LogOutPutThread.cs index a5568a23..fd736b43 100644 --- a/Assets/Script/Core/Develop/LogOutPutThread.cs +++ b/Assets/Script/Core/Develop/LogOutPutThread.cs @@ -89,7 +89,7 @@ public void Pause() ExitLogic(); } - Dictionary m_logData; + //Dictionary m_logData; //string ConfigName = "LogInfo"; //string isCrashKey = "isCrash"; diff --git a/Assets/Script/Core/Develop/MemoryDetector.cs b/Assets/Script/Core/Develop/MemoryDetector.cs index bcd96afb..4fa5c7fa 100644 --- a/Assets/Script/Core/Develop/MemoryDetector.cs +++ b/Assets/Script/Core/Develop/MemoryDetector.cs @@ -20,7 +20,7 @@ public class MemoryDetector private Rect allocMemoryRect; private Rect reservedMemoryRect; private Rect unusedReservedMemoryRect; - private Rect RuntimeMemorySizeRect; + //private Rect RuntimeMemorySizeRect; private Rect monoHeapRect; private Rect monoUsedRect; diff --git a/Assets/Script/Core/Network/JsonNetworkService.cs b/Assets/Script/Core/Network/JsonNetworkService.cs index 704bfc16..76439bec 100644 --- a/Assets/Script/Core/Network/JsonNetworkService.cs +++ b/Assets/Script/Core/Network/JsonNetworkService.cs @@ -184,7 +184,7 @@ public void CallBack(string s) { if(s != null && s != "") { - NetWorkMessage msg = GetMessageByPool(); + NetWorkMessage msg = new NetWorkMessage(); s = WWW.UnEscapeURL(s); s = s.Replace(c_endCharReplaceString, c_endChar.ToString()); diff --git a/Assets/Script/Core/Network/NetworkManager.cs b/Assets/Script/Core/Network/NetworkManager.cs index 329b32c4..b29897c3 100644 --- a/Assets/Script/Core/Network/NetworkManager.cs +++ b/Assets/Script/Core/Network/NetworkManager.cs @@ -9,12 +9,16 @@ public class NetworkManager { static INetworkInterface s_network; - private static bool s_isConnect; - public static bool IsConnect { - get { return NetworkManager.s_isConnect; } - set { NetworkManager.s_isConnect = value; } + get { + if(s_network == null) + { + return false; + } + + return s_network.isConnect; + } } public static void Init(ProtocolType protocolType = ProtocolType.Tcp) where T : INetworkInterface,new () @@ -117,15 +121,14 @@ public static void SendMessage(Dictionary data) static void ReceviceMeaasge(NetWorkMessage message) { - if(message != null) + if(message.m_MessageType != null) { s_messageList.Add(message); } else { - Debug.LogError("Message Error: Message is null"); + Debug.LogError("ReceviceMeaasge m_MessageType is null !"); } - } static void Dispatch(NetWorkMessage msg) @@ -152,15 +155,6 @@ static void ConnectStatusChange(NetworkState status) static void Dispatch(NetworkState status) { - if (status == NetworkState.Connected) - { - s_isConnect = true; - } - else - { - s_isConnect = false; - } - InputNetworkEventProxy.DispatchStatusEvent(status); } @@ -168,17 +162,27 @@ static void Dispatch(NetworkState status) static List s_statusList = new List(); static List s_messageList = new List(); + const int MaxDealCount = 10; //将消息的处理并入主线程 static void Update() { - if (s_messageList.Count >0) + if (s_messageList.Count > 0) { + int dealCount = 0; for (int i = 0; i < s_messageList.Count; i++) { + dealCount++; Dispatch(s_messageList[i]); + + s_messageList.RemoveAt(i); + i--; + + if (dealCount >= MaxDealCount) + { + break; + } } - s_messageList.Clear(); } if (s_statusList.Count > 0) @@ -205,7 +209,7 @@ public enum NetworkState FaildToConnect, } -public class NetWorkMessage +public struct NetWorkMessage { public string m_MessageType; diff --git a/Assets/Script/Core/Network/Protocol/ByteArray.cs b/Assets/Script/Core/Network/Protocol/ByteArray.cs index b92dcc87..783e4f3e 100644 --- a/Assets/Script/Core/Network/Protocol/ByteArray.cs +++ b/Assets/Script/Core/Network/Protocol/ByteArray.cs @@ -8,26 +8,45 @@ public class ByteArray { - public List bytes = new List(); + private List bytes; + + public List Bytes + { + get + { + if(bytes == null) + { + bytes = new List(); + } + + return bytes; + } + + set + { + bytes = value; + } + } public void Add(byte[] buffer) { for (int i = 0; i < buffer.Length; i++) { - bytes.Add(buffer[i]); + Bytes.Add(buffer[i]); } } public int Length { get { - return bytes.Count; + return Bytes.Count; } } public void clear() { + Postion = 0; - bytes.Clear(); + Bytes.Clear(); } public int Postion { @@ -38,18 +57,21 @@ public byte[] Buffer { get { - return bytes.ToArray(); + return Bytes.ToArray(); } } + + + public bool ReadBoolean() { - byte b = bytes[Postion]; + byte b = Bytes[Postion]; Postion += 1; return b == (byte)0 ? false : true; } public byte ReadByte() { - byte result = bytes[Postion]; + byte result = Bytes[Postion]; Postion += 1; return result; } @@ -58,7 +80,7 @@ public byte[] ReadBytes(int len) byte[] result = new byte[len]; for (int i = 0; i < len; i++) { - result[i] = bytes[i + Postion]; + result[i] = Bytes[i + Postion]; } Postion += len; return result; @@ -66,56 +88,56 @@ public byte[] ReadBytes(int len) public void WriteInt(int value) { - bytes.Add((byte)(value >> 24)); - bytes.Add((byte)(value >> 16)); - bytes.Add((byte)(value >> 8)); - bytes.Add((byte)(value)); + Bytes.Add((byte)(value >> 24)); + Bytes.Add((byte)(value >> 16)); + Bytes.Add((byte)(value >> 8)); + Bytes.Add((byte)(value)); } public void WriteShort(int value) { short tmp = (short)value; - bytes.Add((byte)(tmp >> 8)); - bytes.Add((byte)(tmp)); + Bytes.Add((byte)(tmp >> 8)); + Bytes.Add((byte)(tmp)); } public void WriteInt8(int value) { - bytes.Add((byte)(value)); + Bytes.Add((byte)(value)); } public int ReadUInt() { - int result = bytes[3 + Postion] | (bytes[2 + Postion] << 8) | (bytes[1 + Postion] << 16) | (bytes[0 + Postion] << 24); + int result = Bytes[3 + Postion] | (Bytes[2 + Postion] << 8) | (Bytes[1 + Postion] << 16) | (Bytes[0 + Postion] << 24); Postion += 4; return result; } public int ReadUShort() { - int result = bytes[1 + Postion] | bytes[Postion] << 8; + int result = Bytes[1 + Postion] | Bytes[Postion] << 8; Postion += 2; return result; } - byte[] int32Cache = new byte[4]; + static byte[] int32Cache = new byte[4]; public int ReadInt32() { - int32Cache[3] = bytes[Postion]; - int32Cache[2] = bytes[Postion + 1]; - int32Cache[1] = bytes[Postion + 2]; - int32Cache[0] = bytes[Postion + 3]; + int32Cache[3] = Bytes[Postion]; + int32Cache[2] = Bytes[Postion + 1]; + int32Cache[1] = Bytes[Postion + 2]; + int32Cache[0] = Bytes[Postion + 3]; int result = BitConverter.ToInt32(int32Cache, 0); Postion += 4; return result; } - byte[] int16Catch = new byte[2]; + static byte[] int16Catch = new byte[2]; public int ReadInt16() { - int16Catch[1] = bytes[Postion]; - int16Catch[0] = bytes[Postion + 1]; + int16Catch[1] = Bytes[Postion]; + int16Catch[0] = Bytes[Postion + 1]; int result = BitConverter.ToInt16(int16Catch, 0); Postion += 2; @@ -124,17 +146,17 @@ public int ReadInt16() public int ReadInt8() { - int result = bytes[Postion]; + int result = Bytes[Postion]; Postion += 1; return result; } - byte[] b = new byte[8]; + static byte[] b = new byte[8]; public double ReadDouble() { for (int i = 0; i < 8; i++) { - b[7 - i] = bytes[i + Postion]; + b[7 - i] = Bytes[i + Postion]; } Postion += 8; return BitConverter.ToDouble(b, 0); @@ -147,7 +169,7 @@ public string ReadUTFBytes(uint length) byte[] b = new byte[length]; for (int i = 0; i < length; i++) { - b[i] = bytes[i + Postion]; + b[i] = Bytes[i + Postion]; } Postion += (int)length; @@ -157,17 +179,17 @@ public string ReadUTFBytes(uint length) public void WriteALLBytes(byte[] bs) { - bytes.AddRange(bs); + Bytes.AddRange(bs); } public void WriteBoolean(bool value) { - bytes.Add(value ? ((byte)1) : ((byte)0)); + Bytes.Add(value ? ((byte)1) : ((byte)0)); } public void WriteByte(byte value) { - bytes.Add(value); + Bytes.Add(value); } public void WriteDouble(double v) @@ -179,7 +201,7 @@ public void WriteDouble(double v) b[7 - i] = temp[i]; } - bytes.AddRange(b); + Bytes.AddRange(b); } public void WriteString(string content) diff --git a/Assets/Script/Core/Network/Protocol/ProtocolService.cs b/Assets/Script/Core/Network/Protocol/ProtocolService.cs index b8727287..183d72c2 100644 --- a/Assets/Script/Core/Network/Protocol/ProtocolService.cs +++ b/Assets/Script/Core/Network/Protocol/ProtocolService.cs @@ -128,14 +128,14 @@ public override void Connect() #else m_connThread = null; - m_connThread = new Thread(new ThreadStart(requestConnect)); + m_connThread = new Thread(new ThreadStart(RequestConnect)); m_connThread.Start(); #endif } #if !(!UNITY_EDITOR && UNITY_WEBGL) //请求数据服务连接线程 - void requestConnect() + void RequestConnect() { try { @@ -217,6 +217,7 @@ public void Send(byte[] sendbytes) } catch (Exception e) { + isConnect = false; Debug.LogError("Send Message Error : " + e.Message); } #else @@ -240,7 +241,7 @@ public override void SendMessage(string MessageType,Dictionary d msg.WriteShort(method); if (message != null) - msg.bytes.AddRange(message); + msg.Bytes.AddRange(message); else msg.WriteInt(0); @@ -529,7 +530,7 @@ int GetMethodIndex(string messageType) NetWorkMessage Analysis(ByteArray bytes) { - NetWorkMessage msg = GetMessageByPool(); + NetWorkMessage msg = new NetWorkMessage(); bytes.ReadUShort(); //消息长度 bytes.ReadByte(); //模块名 @@ -543,13 +544,16 @@ NetWorkMessage Analysis(ByteArray bytes) } catch { - Debug.LogError("没有找到消息号! " + methodIndex); - return null; + throw new Exception("没有找到消息号! " + methodIndex); } int re_len = bytes.Length - 5; msg.m_data = AnalysisData(msg.m_MessageType, bytes.ReadBytes(re_len)); + if(msg.m_data == null) + { + throw new Exception("protocol msg.m_data is null !"); + } return msg; } @@ -1151,7 +1155,7 @@ private List GetCustomTypeByte(string customType, Dictionary byteTmp = GetCustomTypeByte(customType, (Dictionary)data[fieldName]); Bytes.WriteInt(byteTmp.Count); - Bytes.bytes.AddRange(byteTmp); + Bytes.Bytes.AddRange(byteTmp); } else { @@ -1165,13 +1169,13 @@ private List GetCustomTypeByte(string customType, Dictionary tempb = m_arrayCache[j]; Bytes.WriteInt(tempb.Count); - Bytes.bytes.AddRange(tempb); + Bytes.Bytes.AddRange(tempb); } } } } } - return Bytes.bytes; + return Bytes.Bytes; } catch(Exception e) { diff --git a/Assets/Script/Core/ResourceLoad/MemoryManager.cs b/Assets/Script/Core/ResourceLoad/MemoryManager.cs index 223e3fd8..b7b2f685 100644 --- a/Assets/Script/Core/ResourceLoad/MemoryManager.cs +++ b/Assets/Script/Core/ResourceLoad/MemoryManager.cs @@ -54,8 +54,8 @@ static void Update() static void GUI() { - GUILayout.TextField("总内存:" + ByteToM(Profiler.GetTotalAllocatedMemory()).ToString("F") + "M"); - GUILayout.TextField("堆内存:" + ByteToM(Profiler.GetMonoUsedSize()).ToString("F") + "M"); + GUILayout.Label("总内存:" + ByteToM(Profiler.GetTotalAllocatedMemory()).ToString("F") + "M"); + GUILayout.Label("堆内存:" + ByteToM(Profiler.GetMonoUsedSize()).ToString("F") + "M"); } /// diff --git a/Assets/Script/Core/Utils/ExpandMethod.cs b/Assets/Script/Core/Utils/ExpandMethod.cs index df6e85b3..2319a1d2 100644 --- a/Assets/Script/Core/Utils/ExpandMethod.cs +++ b/Assets/Script/Core/Utils/ExpandMethod.cs @@ -4,7 +4,7 @@ using System.Text; using System.Collections.Generic; -public static class ExpandMethod +public static class ExpandMethod { public static string ToSaveString(this Vector3 v3) { @@ -53,7 +53,7 @@ public static string ToSaveString(this List list) { sb.Append(list[i]); - if(i != list.Count -1) + if (i != list.Count - 1) { sb.Append("|"); } @@ -79,9 +79,9 @@ public static string ToSaveString(this string[] list) } //向量逆时针旋转 - public static Vector3 Vector3RotateInXZ(this Vector3 dir,float angle) + public static Vector3 Vector3RotateInXZ(this Vector3 dir, float angle) { - + angle *= Mathf.Deg2Rad; float l_n_dirX = dir.x * Mathf.Cos(angle) - dir.z * Mathf.Sin(angle); @@ -94,18 +94,18 @@ public static Vector3 Vector3RotateInXZ(this Vector3 dir,float angle) //向量顺时针 public static Vector3 Vector3RotateInXZ2(this Vector3 dir, float angle) { - + angle *= Mathf.Deg2Rad; float l_n_dirX = dir.x * Mathf.Cos(angle) + dir.z * Mathf.Sin(angle); - float l_n_dirZ = - dir.x * Mathf.Sin(angle) + dir.z * Mathf.Cos(angle); + float l_n_dirZ = -dir.x * Mathf.Sin(angle) + dir.z * Mathf.Cos(angle); Vector3 l_dir = new Vector3(l_n_dirX, dir.y, l_n_dirZ); - + return l_dir; } //位置绕点旋转顺时针,逆时针角度乘以-1即可 - public static Vector3 PostionRotateInXZ(this Vector3 pos,Vector3 center ,float angle) + public static Vector3 PostionRotateInXZ(this Vector3 pos, Vector3 center, float angle) { angle *= -Mathf.Deg2Rad; float x = (pos.x - center.x) * Mathf.Cos(angle) - (pos.z - center.z) * Mathf.Sin(angle) + center.x; @@ -117,17 +117,17 @@ public static Vector3 PostionRotateInXZ(this Vector3 pos,Vector3 center ,float a } //获取一个顺时针夹角(需先标准化向量) - public static float GetRotationAngle(this Vector3 dir,Vector3 aimDir) + public static float GetRotationAngle(this Vector3 dir, Vector3 aimDir) { //dir = dir.normalized; //aimDir = aimDir.normalized; float angle = (float)(Math.Acos(Vector3.Dot(dir, aimDir)) * 180 / Math.PI); - if(angle != 180 && angle != 0) + if (angle != 180 && angle != 0) { float cross = dir.x * aimDir.z - aimDir.x * dir.z; - if(cross < 0) + if (cross < 0) { return angle; } From c9c86a3b1bf4390542a13808fb97795558fd0b4b Mon Sep 17 00:00:00 2001 From: GaoKai Date: Fri, 17 Nov 2017 19:25:53 +0800 Subject: [PATCH 014/108] =?UTF-8?q?=E4=B8=80=E4=BA=9B=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/AnimSystem/AnimData.cs | 14 ++++---------- .../Editor/Test/ResourcesLoad/ResourcesTest.cs | 5 ++--- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/Assets/Script/Core/AnimSystem/AnimData.cs b/Assets/Script/Core/AnimSystem/AnimData.cs index acaac16f..4b4d94f9 100644 --- a/Assets/Script/Core/AnimSystem/AnimData.cs +++ b/Assets/Script/Core/AnimSystem/AnimData.cs @@ -378,7 +378,7 @@ public void UguiAlphaInit(bool isChild) if (isChild) { - Image[] images = m_animGameObejct.GetComponentsInChildren(); + Image[] images = m_animGameObejct.GetComponentsInChildren(true); for (int i = 0; i < images.Length; i++) { if (images[i].transform.GetComponent() == null) @@ -388,7 +388,7 @@ public void UguiAlphaInit(bool isChild) } } - Text[] texts = m_animGameObejct.GetComponentsInChildren(); + Text[] texts = m_animGameObejct.GetComponentsInChildren(true); for (int i = 0; i < texts.Length; i++) { @@ -430,10 +430,7 @@ public void SetUGUIAlpha(float a) { newColor = m_oldColor[index]; newColor.a = a; - if (m_animObjectList_Image[i] != null) - { - m_animObjectList_Image[i].color = newColor; - } + m_animObjectList_Image[i].color = newColor; index++; } @@ -442,10 +439,7 @@ public void SetUGUIAlpha(float a) { newColor = m_oldColor[index]; newColor.a = a; - if (m_animObjectList_Text[i] != null) - { - m_animObjectList_Text[i].color = newColor; - } + m_animObjectList_Text[i].color = newColor; index++; } diff --git a/Assets/Script/Core/Editor/Test/ResourcesLoad/ResourcesTest.cs b/Assets/Script/Core/Editor/Test/ResourcesLoad/ResourcesTest.cs index f50d0163..ebe1d314 100644 --- a/Assets/Script/Core/Editor/Test/ResourcesLoad/ResourcesTest.cs +++ b/Assets/Script/Core/Editor/Test/ResourcesLoad/ResourcesTest.cs @@ -11,11 +11,10 @@ public class ResourcesTest [Test(Description = "资源路径数据存在测试")] public void BundleConfigExistTest() { + //只要初始化成功则通过 ResourcesConfigManager.Initialize(); - bool isExist = ConfigManager.GetIsExistConfig(ResourcesConfigManager.c_ManifestFileName); - - Assert.AreEqual(isExist, true); + Assert.AreEqual(true, true); } [Test(Description = "资源字段验证")] From 2f2ad8bce2a3a2dc4f0d748cfa6da3e34cbbe532 Mon Sep 17 00:00:00 2001 From: Gaokai Date: Sat, 18 Nov 2017 01:25:15 +0800 Subject: [PATCH 015/108] Demo --- Assets/EditorConfig/BundleConfigEditor.json | 2 +- Assets/Resources/Data/item.txt | 15 ++-- Assets/Resources/ResourcesManifest.json | 2 +- .../Resources/UI/AAAWindow/AAAWindow.prefab | Bin 7812 -> 0 bytes .../UI/{AAAWindow.meta => GameWindow.meta} | 4 +- .../Resources/UI/GameWindow/GameWindow.prefab | Bin 0 -> 19984 bytes .../GameWindow.prefab.meta} | 4 +- .../UI/MainWindow.meta} | 4 +- .../Resources/UI/MainWindow/MainWindow.prefab | Bin 0 -> 24328 bytes .../UI/MainWindow/MainWindow.prefab.meta | 8 ++ .../UI/ShopWindow.meta} | 4 +- .../Resources/UI/ShopWindow/ShopWindow.prefab | Bin 0 -> 29656 bytes .../UI/ShopWindow/ShopWindow.prefab.meta | 8 ++ .../UI/ShopWindow/ShopWindow_Item.prefab | Bin 0 -> 12552 bytes .../UI/ShopWindow/ShopWindow_Item.prefab.meta | 8 ++ .../Editor/Utils/ImportTool.cs.meta} | 4 +- .../Network/JsonNetworkService.cs.meta} | 4 +- .../ReusingScrollRect/ReusingScrollRect.cs | 23 ++---- .../Script/Core/UI/Utils/ModelRotate.cs.meta | 12 +++ .../Core/UI/Utils/UIModelShowTool.cs.meta | 12 +++ Assets/Script/Core/Utils/DeJson.cs.meta | 12 +++ Assets/Script/DataClassGenerate.meta | 9 +++ .../Script/DataClassGenerate/itemGenerate.cs | 27 +++++++ .../DataClassGenerate/itemGenerate.cs.meta | 12 +++ Assets/Script/GameStatus/DemoStatus.cs | 11 +++ Assets/Script/GameStatus/DemoStatus.cs.meta | 12 +++ Assets/Script/GameStatus/GameStatus.cs | 5 +- Assets/Script/UI/GameWindow.meta | 9 +++ .../GameWindow.cs} | 21 ++++- .../Script/UI/GameWindow/GameWindow.cs.meta | 12 +++ Assets/Script/UI/MainWindow.meta | 9 +++ .../AAAWindow.cs => MainWindow/MainWindow.cs} | 25 +++++- .../Script/UI/MainWindow/MainWindow.cs.meta | 12 +++ Assets/Script/UI/ShopWindow.meta | 9 +++ Assets/Script/UI/ShopWindow/ShopWindow.cs | 76 ++++++++++++++++++ .../Script/UI/ShopWindow/ShopWindow.cs.meta | 12 +++ Assets/Script/UI/ShopWindow/ShopWindowItem.cs | 12 +++ .../UI/ShopWindow/ShopWindowItem.cs.meta | 12 +++ Assets/main.unity | Bin 29760 -> 22632 bytes 39 files changed, 364 insertions(+), 47 deletions(-) delete mode 100644 Assets/Resources/UI/AAAWindow/AAAWindow.prefab rename Assets/Resources/UI/{AAAWindow.meta => GameWindow.meta} (67%) create mode 100644 Assets/Resources/UI/GameWindow/GameWindow.prefab rename Assets/Resources/UI/{AAAWindow/AAAWindow.prefab.meta => GameWindow/GameWindow.prefab.meta} (64%) rename Assets/{Script/UI/heiheiheiWindow.meta => Resources/UI/MainWindow.meta} (67%) create mode 100644 Assets/Resources/UI/MainWindow/MainWindow.prefab create mode 100644 Assets/Resources/UI/MainWindow/MainWindow.prefab.meta rename Assets/{Script/UI/AAAWindow.meta => Resources/UI/ShopWindow.meta} (67%) create mode 100644 Assets/Resources/UI/ShopWindow/ShopWindow.prefab create mode 100644 Assets/Resources/UI/ShopWindow/ShopWindow.prefab.meta create mode 100644 Assets/Resources/UI/ShopWindow/ShopWindow_Item.prefab create mode 100644 Assets/Resources/UI/ShopWindow/ShopWindow_Item.prefab.meta rename Assets/Script/{UI/heiheiheiWindow/heiheiheiWindow.cs.meta => Core/Editor/Utils/ImportTool.cs.meta} (75%) rename Assets/Script/{UI/AAAWindow/AAAWindow.cs.meta => Core/Network/JsonNetworkService.cs.meta} (75%) create mode 100644 Assets/Script/Core/UI/Utils/ModelRotate.cs.meta create mode 100644 Assets/Script/Core/UI/Utils/UIModelShowTool.cs.meta create mode 100644 Assets/Script/Core/Utils/DeJson.cs.meta create mode 100644 Assets/Script/DataClassGenerate.meta create mode 100644 Assets/Script/DataClassGenerate/itemGenerate.cs create mode 100644 Assets/Script/DataClassGenerate/itemGenerate.cs.meta create mode 100644 Assets/Script/GameStatus/DemoStatus.cs create mode 100644 Assets/Script/GameStatus/DemoStatus.cs.meta create mode 100644 Assets/Script/UI/GameWindow.meta rename Assets/Script/UI/{heiheiheiWindow/heiheiheiWindow.cs => GameWindow/GameWindow.cs} (53%) create mode 100644 Assets/Script/UI/GameWindow/GameWindow.cs.meta create mode 100644 Assets/Script/UI/MainWindow.meta rename Assets/Script/UI/{AAAWindow/AAAWindow.cs => MainWindow/MainWindow.cs} (59%) create mode 100644 Assets/Script/UI/MainWindow/MainWindow.cs.meta create mode 100644 Assets/Script/UI/ShopWindow.meta create mode 100644 Assets/Script/UI/ShopWindow/ShopWindow.cs create mode 100644 Assets/Script/UI/ShopWindow/ShopWindow.cs.meta create mode 100644 Assets/Script/UI/ShopWindow/ShopWindowItem.cs create mode 100644 Assets/Script/UI/ShopWindow/ShopWindowItem.cs.meta diff --git a/Assets/EditorConfig/BundleConfigEditor.json b/Assets/EditorConfig/BundleConfigEditor.json index ddc55601..6b328fd3 100644 --- a/Assets/EditorConfig/BundleConfigEditor.json +++ b/Assets/EditorConfig/BundleConfigEditor.json @@ -1 +1 @@ -{"relyBundles":"[]","AssetsBundles":"[\"{\\\"isFold\\\":false,\\\"name\\\":\\\"111\\\",\\\"path\\\":\\\"Config/111\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/111.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"BundleConfig\\\",\\\"path\\\":\\\"Config/BundleConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/BundleConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"HotUpdateConfig\\\",\\\"path\\\":\\\"Config/HotUpdateConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/HotUpdateConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaConfig\\\",\\\"path\\\":\\\"Config/LuaConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/LuaConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"qeqweqwe\\\",\\\"path\\\":\\\"Config/qeqweqwe\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/qeqweqwe.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ResourcesConfig\\\",\\\"path\\\":\\\"Config/ResourcesConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/ResourcesConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"SDKConfig\\\",\\\"path\\\":\\\"Config/SDKConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/SDKConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"version\\\",\\\"path\\\":\\\"Config/version\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/version.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LangData_Afrikaans\\\",\\\"path\\\":\\\"Data/Language/LangData_Afrikaans\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/Language/LangData_Afrikaans.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LangData_Arabic\\\",\\\"path\\\":\\\"Data/Language/LangData_Arabic\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/Language/LangData_Arabic.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LangData_ChineseSimplified\\\",\\\"path\\\":\\\"Data/Language/LangData_ChineseSimplified\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/Language/LangData_ChineseSimplified.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"item\\\",\\\"path\\\":\\\"Data/item\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/item.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"testData\\\",\\\"path\\\":\\\"Data/testData\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/testData.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"luaMain\\\",\\\"path\\\":\\\"Lua/luaMain\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Lua/luaMain.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaDataHelper\\\",\\\"path\\\":\\\"LuaLib/FrameWork/Data/LuaDataHelper\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/LuaLib/FrameWork/Data/LuaDataHelper.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaStatusManager\\\",\\\"path\\\":\\\"LuaLib/FrameWork/Status/LuaStatusManager\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/LuaLib/FrameWork/Status/LuaStatusManager.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaStatusMetaTable\\\",\\\"path\\\":\\\"LuaLib/FrameWork/Status/LuaStatusMetaTable\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/LuaLib/FrameWork/Status/LuaStatusMetaTable.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaUIManager\\\",\\\"path\\\":\\\"LuaLib/FrameWork/UI/LuaUIManager\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/LuaLib/FrameWork/UI/LuaUIManager.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaUIWindowMetatable\\\",\\\"path\\\":\\\"LuaLib/FrameWork/UI/LuaUIWindowMetatable\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/LuaLib/FrameWork/UI/LuaUIWindowMetatable.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaUpdate\\\",\\\"path\\\":\\\"LuaLib/FrameWork/Update/LuaUpdate\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/LuaLib/FrameWork/Update/LuaUpdate.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaFrameWorkEventName\\\",\\\"path\\\":\\\"LuaLib/FrameWork/LuaFrameWorkEventName\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/LuaLib/FrameWork/LuaFrameWorkEventName.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaUnityDefine\\\",\\\"path\\\":\\\"LuaLib/Unity/LuaUnityDefine\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/LuaLib/Unity/LuaUnityDefine.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaEventDispatcher\\\",\\\"path\\\":\\\"LuaLib/LuaEventDispatcher\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/LuaLib/LuaEventDispatcher.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaFormatTools\\\",\\\"path\\\":\\\"LuaLib/LuaFormatTools\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/LuaLib/LuaFormatTools.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"luaJson\\\",\\\"path\\\":\\\"LuaLib/luaJson\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/LuaLib/luaJson.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaPrintTable\\\",\\\"path\\\":\\\"LuaLib/LuaPrintTable\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/LuaLib/LuaPrintTable.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaStringHelper\\\",\\\"path\\\":\\\"LuaLib/LuaStringHelper\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/LuaLib/LuaStringHelper.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject 1\\\",\\\"path\\\":\\\"Prefab/GameObject 1\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/GameObject 1.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject 2\\\",\\\"path\\\":\\\"Prefab/GameObject 2\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/GameObject 2.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject\\\",\\\"path\\\":\\\"Prefab/GameObject\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/GameObject.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"gogo\\\",\\\"path\\\":\\\"Prefab/gogo\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/gogo.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 1\\\",\\\"path\\\":\\\"Prefab/UItest 1\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 1.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 2\\\",\\\"path\\\":\\\"Prefab/UItest 2\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 2.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 3\\\",\\\"path\\\":\\\"Prefab/UItest 3\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 3.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 4\\\",\\\"path\\\":\\\"Prefab/UItest 4\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 4.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 5\\\",\\\"path\\\":\\\"Prefab/UItest 5\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 5.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 6\\\",\\\"path\\\":\\\"Prefab/UItest 6\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 6.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest\\\",\\\"path\\\":\\\"Prefab/UItest\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_01\\\",\\\"path\\\":\\\"sprite/dl_01\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_01.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_02\\\",\\\"path\\\":\\\"sprite/dl_02\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_02.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_03\\\",\\\"path\\\":\\\"sprite/dl_03\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_03.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_04\\\",\\\"path\\\":\\\"sprite/dl_04\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_04.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_05\\\",\\\"path\\\":\\\"sprite/dl_05\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_05.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_07\\\",\\\"path\\\":\\\"sprite/dl_07\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_07.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_08\\\",\\\"path\\\":\\\"sprite/dl_08\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_08.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_09\\\",\\\"path\\\":\\\"sprite/dl_09\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_09.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"AAAWindow\\\",\\\"path\\\":\\\"UI/AAAWindow/AAAWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/AAAWindow/AAAWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaTestWindow\\\",\\\"path\\\":\\\"UI/LuaTestWindow/LuaTestWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/LuaTestWindow/LuaTestWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"test01Window\\\",\\\"path\\\":\\\"UI/test01Window/test01Window\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/test01Window/test01Window.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"test02Window\\\",\\\"path\\\":\\\"UI/test02Window/test02Window\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/test02Window/test02Window.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"Image_item\\\",\\\"path\\\":\\\"UI/testWindow/Image_item\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/testWindow/Image_item.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"testWindow\\\",\\\"path\\\":\\\"UI/testWindow/testWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/testWindow/testWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UIManager\\\",\\\"path\\\":\\\"UI/UIManager\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/UIManager.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject_adasd\\\",\\\"path\\\":\\\"GameObject_adasd\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/GameObject_adasd.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 2\\\",\\\"path\\\":\\\"New Material 2\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 2.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 3\\\",\\\"path\\\":\\\"New Material 3\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 3.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 4\\\",\\\"path\\\":\\\"New Material 4\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 4.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 5\\\",\\\"path\\\":\\\"New Material 5\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 5.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 6\\\",\\\"path\\\":\\\"New Material 6\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 6.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material\\\",\\\"path\\\":\\\"New Material\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ResourcesManifest\\\",\\\"path\\\":\\\"ResourcesManifest\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/ResourcesManifest.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"Version\\\",\\\"path\\\":\\\"Version\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Version.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\"]"} \ No newline at end of file +{"relyBundles":"[]","AssetsBundles":"[\"{\\\"isFold\\\":false,\\\"name\\\":\\\"111\\\",\\\"path\\\":\\\"Config/111\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/111.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"BundleConfig\\\",\\\"path\\\":\\\"Config/BundleConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/BundleConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"HotUpdateConfig\\\",\\\"path\\\":\\\"Config/HotUpdateConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/HotUpdateConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaConfig\\\",\\\"path\\\":\\\"Config/LuaConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/LuaConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"qeqweqwe\\\",\\\"path\\\":\\\"Config/qeqweqwe\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/qeqweqwe.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ResourcesConfig\\\",\\\"path\\\":\\\"Config/ResourcesConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/ResourcesConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"SDKConfig\\\",\\\"path\\\":\\\"Config/SDKConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/SDKConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"version\\\",\\\"path\\\":\\\"Config/version\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/version.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LangData_Afrikaans\\\",\\\"path\\\":\\\"Data/Language/LangData_Afrikaans\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/Language/LangData_Afrikaans.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LangData_Arabic\\\",\\\"path\\\":\\\"Data/Language/LangData_Arabic\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/Language/LangData_Arabic.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LangData_ChineseSimplified\\\",\\\"path\\\":\\\"Data/Language/LangData_ChineseSimplified\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/Language/LangData_ChineseSimplified.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"item\\\",\\\"path\\\":\\\"Data/item\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/item.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"testData\\\",\\\"path\\\":\\\"Data/testData\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/testData.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject 1\\\",\\\"path\\\":\\\"Prefab/GameObject 1\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/GameObject 1.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject 2\\\",\\\"path\\\":\\\"Prefab/GameObject 2\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/GameObject 2.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject\\\",\\\"path\\\":\\\"Prefab/GameObject\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/GameObject.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"gogo\\\",\\\"path\\\":\\\"Prefab/gogo\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/gogo.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 1\\\",\\\"path\\\":\\\"Prefab/UItest 1\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 1.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 2\\\",\\\"path\\\":\\\"Prefab/UItest 2\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 2.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 3\\\",\\\"path\\\":\\\"Prefab/UItest 3\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 3.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 4\\\",\\\"path\\\":\\\"Prefab/UItest 4\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 4.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 5\\\",\\\"path\\\":\\\"Prefab/UItest 5\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 5.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 6\\\",\\\"path\\\":\\\"Prefab/UItest 6\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 6.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest\\\",\\\"path\\\":\\\"Prefab/UItest\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_01\\\",\\\"path\\\":\\\"sprite/dl_01\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_01.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_02\\\",\\\"path\\\":\\\"sprite/dl_02\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_02.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_03\\\",\\\"path\\\":\\\"sprite/dl_03\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_03.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_04\\\",\\\"path\\\":\\\"sprite/dl_04\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_04.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_05\\\",\\\"path\\\":\\\"sprite/dl_05\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_05.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_07\\\",\\\"path\\\":\\\"sprite/dl_07\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_07.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_08\\\",\\\"path\\\":\\\"sprite/dl_08\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_08.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_09\\\",\\\"path\\\":\\\"sprite/dl_09\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_09.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameWindow\\\",\\\"path\\\":\\\"UI/GameWindow/GameWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/GameWindow/GameWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaTestWindow\\\",\\\"path\\\":\\\"UI/LuaTestWindow/LuaTestWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/LuaTestWindow/LuaTestWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"MainWindow\\\",\\\"path\\\":\\\"UI/MainWindow/MainWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/MainWindow/MainWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ShopWindow\\\",\\\"path\\\":\\\"UI/ShopWindow/ShopWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/ShopWindow/ShopWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ShopWindow_Item\\\",\\\"path\\\":\\\"UI/ShopWindow/ShopWindow_Item\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/ShopWindow/ShopWindow_Item.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"test01Window\\\",\\\"path\\\":\\\"UI/test01Window/test01Window\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/test01Window/test01Window.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"test02Window\\\",\\\"path\\\":\\\"UI/test02Window/test02Window\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/test02Window/test02Window.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"Test2Window\\\",\\\"path\\\":\\\"UI/Test2Window/Test2Window\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/Test2Window/Test2Window.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"Image_item\\\",\\\"path\\\":\\\"UI/testWindow/Image_item\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/testWindow/Image_item.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"testWindow\\\",\\\"path\\\":\\\"UI/testWindow/testWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/testWindow/testWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UIManager\\\",\\\"path\\\":\\\"UI/UIManager\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/UIManager.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject_adasd\\\",\\\"path\\\":\\\"GameObject_adasd\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/GameObject_adasd.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 2\\\",\\\"path\\\":\\\"New Material 2\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 2.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 3\\\",\\\"path\\\":\\\"New Material 3\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 3.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 4\\\",\\\"path\\\":\\\"New Material 4\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 4.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 5\\\",\\\"path\\\":\\\"New Material 5\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 5.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 6\\\",\\\"path\\\":\\\"New Material 6\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 6.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material\\\",\\\"path\\\":\\\"New Material\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ResourcesManifest\\\",\\\"path\\\":\\\"ResourcesManifest\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/ResourcesManifest.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"Version\\\",\\\"path\\\":\\\"Version\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Version.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\"]"} \ No newline at end of file diff --git a/Assets/Resources/Data/item.txt b/Assets/Resources/Data/item.txt index 090885f0..552ecd71 100644 --- a/Assets/Resources/Data/item.txt +++ b/Assets/Resources/Data/item.txt @@ -1,6 +1,9 @@ -id asdasd tt -type Color Vector2|AnimParamType -note 颜色 枚举测试 -default 1|1|1|1 8.881112|0 -asdasdads -111 0.7279412|0.4496107|0.4496107|1 0.1111|0 +id ItemName Cost +type String Int +note +default NaNa 0 +2 Knife 50 +1 Sword 100 +3 Shield 200 +4 Armour 300 +5 Shoe 200 diff --git a/Assets/Resources/ResourcesManifest.json b/Assets/Resources/ResourcesManifest.json index ef1a325d..e0eecb2a 100644 --- a/Assets/Resources/ResourcesManifest.json +++ b/Assets/Resources/ResourcesManifest.json @@ -1 +1 @@ -{"relyBundles":{},"AssetsBundles":{"111":{"name":"111","path":"Config/111","relyPackages":"","md5":""},"BundleConfig":{"name":"BundleConfig","path":"Config/BundleConfig","relyPackages":"","md5":""},"HotUpdateConfig":{"name":"HotUpdateConfig","path":"Config/HotUpdateConfig","relyPackages":"","md5":""},"LuaConfig":{"name":"LuaConfig","path":"Config/LuaConfig","relyPackages":"","md5":""},"qeqweqwe":{"name":"qeqweqwe","path":"Config/qeqweqwe","relyPackages":"","md5":""},"ResourcesConfig":{"name":"ResourcesConfig","path":"Config/ResourcesConfig","relyPackages":"","md5":""},"SDKConfig":{"name":"SDKConfig","path":"Config/SDKConfig","relyPackages":"","md5":""},"version":{"name":"version","path":"Config/version","relyPackages":"","md5":""},"LangData_Afrikaans":{"name":"LangData_Afrikaans","path":"Data/Language/LangData_Afrikaans","relyPackages":"","md5":""},"LangData_Arabic":{"name":"LangData_Arabic","path":"Data/Language/LangData_Arabic","relyPackages":"","md5":""},"LangData_ChineseSimplified":{"name":"LangData_ChineseSimplified","path":"Data/Language/LangData_ChineseSimplified","relyPackages":"","md5":""},"item":{"name":"item","path":"Data/item","relyPackages":"","md5":""},"testData":{"name":"testData","path":"Data/testData","relyPackages":"","md5":""},"luaMain":{"name":"luaMain","path":"Lua/luaMain","relyPackages":"","md5":""},"LuaDataHelper":{"name":"LuaDataHelper","path":"LuaLib/FrameWork/Data/LuaDataHelper","relyPackages":"","md5":""},"LuaStatusManager":{"name":"LuaStatusManager","path":"LuaLib/FrameWork/Status/LuaStatusManager","relyPackages":"","md5":""},"LuaStatusMetaTable":{"name":"LuaStatusMetaTable","path":"LuaLib/FrameWork/Status/LuaStatusMetaTable","relyPackages":"","md5":""},"LuaUIManager":{"name":"LuaUIManager","path":"LuaLib/FrameWork/UI/LuaUIManager","relyPackages":"","md5":""},"LuaUIWindowMetatable":{"name":"LuaUIWindowMetatable","path":"LuaLib/FrameWork/UI/LuaUIWindowMetatable","relyPackages":"","md5":""},"LuaUpdate":{"name":"LuaUpdate","path":"LuaLib/FrameWork/Update/LuaUpdate","relyPackages":"","md5":""},"LuaFrameWorkEventName":{"name":"LuaFrameWorkEventName","path":"LuaLib/FrameWork/LuaFrameWorkEventName","relyPackages":"","md5":""},"LuaUnityDefine":{"name":"LuaUnityDefine","path":"LuaLib/Unity/LuaUnityDefine","relyPackages":"","md5":""},"LuaEventDispatcher":{"name":"LuaEventDispatcher","path":"LuaLib/LuaEventDispatcher","relyPackages":"","md5":""},"LuaFormatTools":{"name":"LuaFormatTools","path":"LuaLib/LuaFormatTools","relyPackages":"","md5":""},"luaJson":{"name":"luaJson","path":"LuaLib/luaJson","relyPackages":"","md5":""},"LuaPrintTable":{"name":"LuaPrintTable","path":"LuaLib/LuaPrintTable","relyPackages":"","md5":""},"LuaStringHelper":{"name":"LuaStringHelper","path":"LuaLib/LuaStringHelper","relyPackages":"","md5":""},"GameObject 1":{"name":"GameObject 1","path":"Prefab/GameObject 1","relyPackages":"","md5":""},"GameObject 2":{"name":"GameObject 2","path":"Prefab/GameObject 2","relyPackages":"","md5":""},"GameObject":{"name":"GameObject","path":"Prefab/GameObject","relyPackages":"","md5":""},"gogo":{"name":"gogo","path":"Prefab/gogo","relyPackages":"","md5":""},"UItest 1":{"name":"UItest 1","path":"Prefab/UItest 1","relyPackages":"","md5":""},"UItest 2":{"name":"UItest 2","path":"Prefab/UItest 2","relyPackages":"","md5":""},"UItest 3":{"name":"UItest 3","path":"Prefab/UItest 3","relyPackages":"","md5":""},"UItest 4":{"name":"UItest 4","path":"Prefab/UItest 4","relyPackages":"","md5":""},"UItest 5":{"name":"UItest 5","path":"Prefab/UItest 5","relyPackages":"","md5":""},"UItest 6":{"name":"UItest 6","path":"Prefab/UItest 6","relyPackages":"","md5":""},"UItest":{"name":"UItest","path":"Prefab/UItest","relyPackages":"","md5":""},"dl_01":{"name":"dl_01","path":"sprite/dl_01","relyPackages":"","md5":""},"dl_02":{"name":"dl_02","path":"sprite/dl_02","relyPackages":"","md5":""},"dl_03":{"name":"dl_03","path":"sprite/dl_03","relyPackages":"","md5":""},"dl_04":{"name":"dl_04","path":"sprite/dl_04","relyPackages":"","md5":""},"dl_05":{"name":"dl_05","path":"sprite/dl_05","relyPackages":"","md5":""},"dl_07":{"name":"dl_07","path":"sprite/dl_07","relyPackages":"","md5":""},"dl_08":{"name":"dl_08","path":"sprite/dl_08","relyPackages":"","md5":""},"dl_09":{"name":"dl_09","path":"sprite/dl_09","relyPackages":"","md5":""},"AAAWindow":{"name":"AAAWindow","path":"UI/AAAWindow/AAAWindow","relyPackages":"","md5":""},"LuaTestWindow":{"name":"LuaTestWindow","path":"UI/LuaTestWindow/LuaTestWindow","relyPackages":"","md5":""},"test01Window":{"name":"test01Window","path":"UI/test01Window/test01Window","relyPackages":"","md5":""},"test02Window":{"name":"test02Window","path":"UI/test02Window/test02Window","relyPackages":"","md5":""},"Image_item":{"name":"Image_item","path":"UI/testWindow/Image_item","relyPackages":"","md5":""},"testWindow":{"name":"testWindow","path":"UI/testWindow/testWindow","relyPackages":"","md5":""},"UIManager":{"name":"UIManager","path":"UI/UIManager","relyPackages":"","md5":""},"GameObject_adasd":{"name":"GameObject_adasd","path":"GameObject_adasd","relyPackages":"","md5":""},"New Material 2":{"name":"New Material 2","path":"New Material 2","relyPackages":"","md5":""},"New Material 3":{"name":"New Material 3","path":"New Material 3","relyPackages":"","md5":""},"New Material 4":{"name":"New Material 4","path":"New Material 4","relyPackages":"","md5":""},"New Material 5":{"name":"New Material 5","path":"New Material 5","relyPackages":"","md5":""},"New Material 6":{"name":"New Material 6","path":"New Material 6","relyPackages":"","md5":""},"New Material":{"name":"New Material","path":"New Material","relyPackages":"","md5":""},"ResourcesManifest":{"name":"ResourcesManifest","path":"ResourcesManifest","relyPackages":"","md5":""},"Version":{"name":"Version","path":"Version","relyPackages":"","md5":""}}} \ No newline at end of file +{"relyBundles":{},"AssetsBundles":{"111":{"name":"111","path":"Config/111","relyPackages":"","md5":""},"BundleConfig":{"name":"BundleConfig","path":"Config/BundleConfig","relyPackages":"","md5":""},"HotUpdateConfig":{"name":"HotUpdateConfig","path":"Config/HotUpdateConfig","relyPackages":"","md5":""},"LuaConfig":{"name":"LuaConfig","path":"Config/LuaConfig","relyPackages":"","md5":""},"qeqweqwe":{"name":"qeqweqwe","path":"Config/qeqweqwe","relyPackages":"","md5":""},"ResourcesConfig":{"name":"ResourcesConfig","path":"Config/ResourcesConfig","relyPackages":"","md5":""},"SDKConfig":{"name":"SDKConfig","path":"Config/SDKConfig","relyPackages":"","md5":""},"version":{"name":"version","path":"Config/version","relyPackages":"","md5":""},"LangData_Afrikaans":{"name":"LangData_Afrikaans","path":"Data/Language/LangData_Afrikaans","relyPackages":"","md5":""},"LangData_Arabic":{"name":"LangData_Arabic","path":"Data/Language/LangData_Arabic","relyPackages":"","md5":""},"LangData_ChineseSimplified":{"name":"LangData_ChineseSimplified","path":"Data/Language/LangData_ChineseSimplified","relyPackages":"","md5":""},"item":{"name":"item","path":"Data/item","relyPackages":"","md5":""},"testData":{"name":"testData","path":"Data/testData","relyPackages":"","md5":""},"GameObject 1":{"name":"GameObject 1","path":"Prefab/GameObject 1","relyPackages":"","md5":""},"GameObject 2":{"name":"GameObject 2","path":"Prefab/GameObject 2","relyPackages":"","md5":""},"GameObject":{"name":"GameObject","path":"Prefab/GameObject","relyPackages":"","md5":""},"gogo":{"name":"gogo","path":"Prefab/gogo","relyPackages":"","md5":""},"UItest 1":{"name":"UItest 1","path":"Prefab/UItest 1","relyPackages":"","md5":""},"UItest 2":{"name":"UItest 2","path":"Prefab/UItest 2","relyPackages":"","md5":""},"UItest 3":{"name":"UItest 3","path":"Prefab/UItest 3","relyPackages":"","md5":""},"UItest 4":{"name":"UItest 4","path":"Prefab/UItest 4","relyPackages":"","md5":""},"UItest 5":{"name":"UItest 5","path":"Prefab/UItest 5","relyPackages":"","md5":""},"UItest 6":{"name":"UItest 6","path":"Prefab/UItest 6","relyPackages":"","md5":""},"UItest":{"name":"UItest","path":"Prefab/UItest","relyPackages":"","md5":""},"dl_01":{"name":"dl_01","path":"sprite/dl_01","relyPackages":"","md5":""},"dl_02":{"name":"dl_02","path":"sprite/dl_02","relyPackages":"","md5":""},"dl_03":{"name":"dl_03","path":"sprite/dl_03","relyPackages":"","md5":""},"dl_04":{"name":"dl_04","path":"sprite/dl_04","relyPackages":"","md5":""},"dl_05":{"name":"dl_05","path":"sprite/dl_05","relyPackages":"","md5":""},"dl_07":{"name":"dl_07","path":"sprite/dl_07","relyPackages":"","md5":""},"dl_08":{"name":"dl_08","path":"sprite/dl_08","relyPackages":"","md5":""},"dl_09":{"name":"dl_09","path":"sprite/dl_09","relyPackages":"","md5":""},"GameWindow":{"name":"GameWindow","path":"UI/GameWindow/GameWindow","relyPackages":"","md5":""},"LuaTestWindow":{"name":"LuaTestWindow","path":"UI/LuaTestWindow/LuaTestWindow","relyPackages":"","md5":""},"MainWindow":{"name":"MainWindow","path":"UI/MainWindow/MainWindow","relyPackages":"","md5":""},"ShopWindow":{"name":"ShopWindow","path":"UI/ShopWindow/ShopWindow","relyPackages":"","md5":""},"ShopWindow_Item":{"name":"ShopWindow_Item","path":"UI/ShopWindow/ShopWindow_Item","relyPackages":"","md5":""},"test01Window":{"name":"test01Window","path":"UI/test01Window/test01Window","relyPackages":"","md5":""},"test02Window":{"name":"test02Window","path":"UI/test02Window/test02Window","relyPackages":"","md5":""},"Test2Window":{"name":"Test2Window","path":"UI/Test2Window/Test2Window","relyPackages":"","md5":""},"Image_item":{"name":"Image_item","path":"UI/testWindow/Image_item","relyPackages":"","md5":""},"testWindow":{"name":"testWindow","path":"UI/testWindow/testWindow","relyPackages":"","md5":""},"UIManager":{"name":"UIManager","path":"UI/UIManager","relyPackages":"","md5":""},"GameObject_adasd":{"name":"GameObject_adasd","path":"GameObject_adasd","relyPackages":"","md5":""},"New Material 2":{"name":"New Material 2","path":"New Material 2","relyPackages":"","md5":""},"New Material 3":{"name":"New Material 3","path":"New Material 3","relyPackages":"","md5":""},"New Material 4":{"name":"New Material 4","path":"New Material 4","relyPackages":"","md5":""},"New Material 5":{"name":"New Material 5","path":"New Material 5","relyPackages":"","md5":""},"New Material 6":{"name":"New Material 6","path":"New Material 6","relyPackages":"","md5":""},"New Material":{"name":"New Material","path":"New Material","relyPackages":"","md5":""},"ResourcesManifest":{"name":"ResourcesManifest","path":"ResourcesManifest","relyPackages":"","md5":""},"Version":{"name":"Version","path":"Version","relyPackages":"","md5":""}}} \ No newline at end of file diff --git a/Assets/Resources/UI/AAAWindow/AAAWindow.prefab b/Assets/Resources/UI/AAAWindow/AAAWindow.prefab deleted file mode 100644 index 8e65dd8613165c89141135c1dbbdb346e385ec91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7812 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 diff --git a/Assets/Resources/UI/AAAWindow.meta b/Assets/Resources/UI/GameWindow.meta similarity index 67% rename from Assets/Resources/UI/AAAWindow.meta rename to Assets/Resources/UI/GameWindow.meta index bf3ee657..aa145502 100644 --- a/Assets/Resources/UI/AAAWindow.meta +++ b/Assets/Resources/UI/GameWindow.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 -guid: 3a352074377216c4b9f96cdd50382035 +guid: bf7a987c6aa63324a82c942f5555ef84 folderAsset: yes -timeCreated: 1478661546 +timeCreated: 1510936375 licenseType: Pro DefaultImporter: userData: diff --git a/Assets/Resources/UI/GameWindow/GameWindow.prefab b/Assets/Resources/UI/GameWindow/GameWindow.prefab new file mode 100644 index 0000000000000000000000000000000000000000..c0dc132ff6bbea364f0f26ba5581da3eafd2c168 GIT binary patch literal 19984 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 literal 0 HcmV?d00001 diff --git a/Assets/Resources/UI/AAAWindow/AAAWindow.prefab.meta b/Assets/Resources/UI/GameWindow/GameWindow.prefab.meta similarity index 64% rename from Assets/Resources/UI/AAAWindow/AAAWindow.prefab.meta rename to Assets/Resources/UI/GameWindow/GameWindow.prefab.meta index e861944b..bae45a56 100644 --- a/Assets/Resources/UI/AAAWindow/AAAWindow.prefab.meta +++ b/Assets/Resources/UI/GameWindow/GameWindow.prefab.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 72afa572cdfd54c4da23b60efdeb2989 -timeCreated: 1478661547 +guid: d9416b1e8eaf1a4448e33d0e63653ec9 +timeCreated: 1510936375 licenseType: Pro NativeFormatImporter: userData: diff --git a/Assets/Script/UI/heiheiheiWindow.meta b/Assets/Resources/UI/MainWindow.meta similarity index 67% rename from Assets/Script/UI/heiheiheiWindow.meta rename to Assets/Resources/UI/MainWindow.meta index 38871c61..bf68832d 100644 --- a/Assets/Script/UI/heiheiheiWindow.meta +++ b/Assets/Resources/UI/MainWindow.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 -guid: 18b6f026701df4f46ad53ad343d3f38b +guid: 8c042b6ba1208a5419a48cd398691d01 folderAsset: yes -timeCreated: 1478245921 +timeCreated: 1510932259 licenseType: Pro DefaultImporter: userData: diff --git a/Assets/Resources/UI/MainWindow/MainWindow.prefab b/Assets/Resources/UI/MainWindow/MainWindow.prefab new file mode 100644 index 0000000000000000000000000000000000000000..ece668e0dba99709be67498554f8c575cbf6bf2a GIT binary patch literal 24328 zcmeHP3v^Z0ncg=yBv7YSt5&Lj0Z|c=0)mfeAvX!H2q9?_P(g&76A9LG zw6;2Zt!bCwt7C!D8E5JEs#<33w65A#tk7v)?f4kS+Lu+^nbMh6$8nZrzHk5MKWCqt z1Y&j8vNc5{6XsLk^LNOT&y*0ai19he!CgKzA)YYv z!DkQh%IS+r%bbP<>&`Fv?vy4P#A9|LGC z%DX^Hwg!g6h3h9i{NT3hFM9BWU(Ej3|CpC%M_h$SMZXIT@@5Urk6?({5!T?~NrOYf z!U0OfPg+cHb|^cT#vn2{GBCas@Sz;qaV{TgaO^wjP~~F{j>Qw!K+Qm!1D<8n34KiQ zX>bG=1E>ay21jukMIG=oID%K2=@@wR$g{qTf{P+(eQ9tMck4@oBe)pwmB_OVXmA*4 z*lD=#L_1J^8XV)>c8kex4Ni)9Tz+eC@Ck9(a76}3__u?G{AqB8<8KX4YAFB6;Kcby z1}9;@j`rCIwrm?39ES4o5E-0!KSl;e+NT@evV9_hBlv#>6CVwZF)8pDMIJydfv5(j zrKME($day1DPLH!rR3#`P~}C?ilM3+DwPRSE$K|bbgHu9tCi_NuYhNJy1T7Z$mF`I zU!B%CtV$0wdBq;3Xe`!smNEmL;S7ZE!ZEjHzVTJF;M@u8pSbPXk1pJE;DXzq*}UoG z74zooeA+zsY7=OZP#(%&jk^6Y>mLpCK%mEt{>AJ;q<``LkMu8Lc0v!#>D1vyp!624D4WBf(` zh{yF?^iObCzeWFuCk$=hxrlF7|JJ}VG=L9n5cSWP8gQ>LyMV7ij(RB*euQ%z6Bqr9 z@a6!Q2|vP72TLy#K5^;yHsI{n8blgQ;+;qiBC_4468DK$n9n1*8IIuD#e93g=jk$gB0kpHO!ed1N-2_&CEWILaR$e@lS`>7IO<+c+Usud_p39QJw;v0kv3Hc-uIo=NwwT~BZKeEN_%W!S-VOegV;RA^ z2>(WaFL!X3yAL?|G!jQ3pIyM83Gnj;4*983ZOOI{(9 z&e9XmG?ESZY`%aQyW4b_H1e(K!OnEC)Gi)+Lw`2gR>GGJJ?UJx*R^Coy#D4~`5V*X z6^fZ6+>KI0I-6Zq$oKbwT^z-7AV$UVK@6BK%XIPIDPT}MB=t%?`L0!P?tx+r;hDNZ zcYm)frL%{i=D98q28s*;>WW3Lw<9~)KG^34EE{trhkR)^pLX-&@HhnZ`Fz&NQh3`u zC@N$sb!qD>WJ(_EA}J)WCMkM_0k5vuhcylWIAqxdRK@yN%t&p6H+8-FeqCZ^8?yP% z&6j72tT8E@3z_arPCTuIx#tHTIidZD7nWtZ7vvxAx$C@vTQA7(uig0i>AUwmaqCs5 zJ+lTQ=AsH2wPT)Eq_Jb3)|jWI7Pb>QGUjQGd0LocF%yq@TG9@O_Oy0_h+eeyw0yQ( zg~2Y4`6?nkFnU@Hx}sB0I`Xt+%UyT0=xIs0;<0@l8G26E)3Wabe>}jgrxoBk;aOrw z&VFw_tvZp1p3{#5`pDA~J}(Ej^|T!R*lDrls;9+zk^e#9_}_5FCw4>dql3A1m4ma~ zNx&&TSAq=ciOvo17J)6k3-pTvoGU~IdW!UzTY=MKZYAhjJ~0p8t{hXu6vJaYR@ zdyd-uQ1*vk+J

c2dUZm|x0v7~26%qoLXOwN0*P5 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 literal 0 HcmV?d00001 diff --git a/Assets/Resources/UI/MainWindow/MainWindow.prefab.meta b/Assets/Resources/UI/MainWindow/MainWindow.prefab.meta new file mode 100644 index 00000000..920aedab --- /dev/null +++ b/Assets/Resources/UI/MainWindow/MainWindow.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3ad73fe4c7d05f846a082b0be9f2a0db +timeCreated: 1510932259 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/UI/AAAWindow.meta b/Assets/Resources/UI/ShopWindow.meta similarity index 67% rename from Assets/Script/UI/AAAWindow.meta rename to Assets/Resources/UI/ShopWindow.meta index 133cdbb8..be99d9b8 100644 --- a/Assets/Script/UI/AAAWindow.meta +++ b/Assets/Resources/UI/ShopWindow.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 -guid: 920c6584d473a284ab182803b7ed7106 +guid: 12737735bca2db6488fa1d2cf6a2fad4 folderAsset: yes -timeCreated: 1478661526 +timeCreated: 1510932831 licenseType: Pro DefaultImporter: userData: diff --git a/Assets/Resources/UI/ShopWindow/ShopWindow.prefab b/Assets/Resources/UI/ShopWindow/ShopWindow.prefab new file mode 100644 index 0000000000000000000000000000000000000000..c5042b365faefb6ace75a88da684037e8c49875f GIT binary patch literal 29656 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 T!Gq6$$If$>v7Zrw_3?iJ$Hhvn literal 0 HcmV?d00001 diff --git a/Assets/Resources/UI/ShopWindow/ShopWindow.prefab.meta b/Assets/Resources/UI/ShopWindow/ShopWindow.prefab.meta new file mode 100644 index 00000000..90187ef8 --- /dev/null +++ b/Assets/Resources/UI/ShopWindow/ShopWindow.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 53588d36aaec81240945f5e88609f229 +timeCreated: 1510932831 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/UI/ShopWindow/ShopWindow_Item.prefab b/Assets/Resources/UI/ShopWindow/ShopWindow_Item.prefab new file mode 100644 index 0000000000000000000000000000000000000000..5ae486fd043f179536ee26cd9ce22c53fa06d41f GIT binary patch literal 12552 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 M4MIGMEYre&1FE7f2mk;8 literal 0 HcmV?d00001 diff --git a/Assets/Resources/UI/ShopWindow/ShopWindow_Item.prefab.meta b/Assets/Resources/UI/ShopWindow/ShopWindow_Item.prefab.meta new file mode 100644 index 00000000..efbcc930 --- /dev/null +++ b/Assets/Resources/UI/ShopWindow/ShopWindow_Item.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a5cfae4005325514280a9c55f3759437 +timeCreated: 1510933597 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/UI/heiheiheiWindow/heiheiheiWindow.cs.meta b/Assets/Script/Core/Editor/Utils/ImportTool.cs.meta similarity index 75% rename from Assets/Script/UI/heiheiheiWindow/heiheiheiWindow.cs.meta rename to Assets/Script/Core/Editor/Utils/ImportTool.cs.meta index cb02ac00..ff67a05e 100644 --- a/Assets/Script/UI/heiheiheiWindow/heiheiheiWindow.cs.meta +++ b/Assets/Script/Core/Editor/Utils/ImportTool.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 9898abf12c4214246954dc64bae82126 -timeCreated: 1478245921 +guid: 1eea92d1b99e3ec499f09cad7f98a495 +timeCreated: 1510932222 licenseType: Pro MonoImporter: serializedVersion: 2 diff --git a/Assets/Script/UI/AAAWindow/AAAWindow.cs.meta b/Assets/Script/Core/Network/JsonNetworkService.cs.meta similarity index 75% rename from Assets/Script/UI/AAAWindow/AAAWindow.cs.meta rename to Assets/Script/Core/Network/JsonNetworkService.cs.meta index 9477e94f..ab501eb7 100644 --- a/Assets/Script/UI/AAAWindow/AAAWindow.cs.meta +++ b/Assets/Script/Core/Network/JsonNetworkService.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: ce5670c1e32f0fa41ba72daf4e56843d -timeCreated: 1478661526 +guid: 758a15ed8a4895245914f51f7b11b6d8 +timeCreated: 1510932222 licenseType: Pro MonoImporter: serializedVersion: 2 diff --git a/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs b/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs index d2338e71..ea5dfbae 100644 --- a/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs +++ b/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs @@ -111,16 +111,6 @@ public void SetPos(Vector3 pos) SetItemDisplay(); } - public void UpdateContent() - { - Debug.Log("m_items.Count " + m_items.Count); - - for (int j = m_startPos,i = 0; i < m_items.Count; i++,j++) - { - m_items[i].SetContent(j, m_datas[j]); - } - } - #endregion #region 继承方法 @@ -175,19 +165,21 @@ void UpdateConetntSize(int count) { Vector3 size = m_itemSize; - if(horizontal) + if (horizontal) { size.x *= count; - size.y = m_rectTransform.sizeDelta.y; + size.y = 0; } if(vertical) { size.y *= count; - size.x = m_rectTransform.sizeDelta.x; + size.x = 0; } content.sizeDelta = size; + + Debug.Log(m_itemSize + "" + size + " m_rectTransform.sizeDelta " + m_rectTransform.sizeDelta, m_rectTransform ); } void UpdateIndexList(int count) @@ -221,7 +213,6 @@ void SetItemDisplay(bool isRebuild = false) throw new Exception("SetItemDisplay Exception: content is null !"); } - m_clip = false; //计算已显示的哪些需要隐藏 for (int i = 0; i < m_items.Count; i++) @@ -491,12 +482,12 @@ Vector2 GetItemSize() if (horizontal) { - size.y = m_rectTransform.sizeDelta.y; + size.y = 0; } if (vertical) { - size.x = m_rectTransform.sizeDelta.x; + size.x = 0; } return size; } diff --git a/Assets/Script/Core/UI/Utils/ModelRotate.cs.meta b/Assets/Script/Core/UI/Utils/ModelRotate.cs.meta new file mode 100644 index 00000000..47291d1c --- /dev/null +++ b/Assets/Script/Core/UI/Utils/ModelRotate.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e50bf144013e1df4384cbb09a0da3ebe +timeCreated: 1510932223 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/UI/Utils/UIModelShowTool.cs.meta b/Assets/Script/Core/UI/Utils/UIModelShowTool.cs.meta new file mode 100644 index 00000000..96961813 --- /dev/null +++ b/Assets/Script/Core/UI/Utils/UIModelShowTool.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c2f24ee52030c3e488f0276cde0ce39a +timeCreated: 1510932222 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/DeJson.cs.meta b/Assets/Script/Core/Utils/DeJson.cs.meta new file mode 100644 index 00000000..cdf65cf1 --- /dev/null +++ b/Assets/Script/Core/Utils/DeJson.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c9a182ce31f22714e8d6c1ff56c5cc32 +timeCreated: 1510932222 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/DataClassGenerate.meta b/Assets/Script/DataClassGenerate.meta new file mode 100644 index 00000000..0d657850 --- /dev/null +++ b/Assets/Script/DataClassGenerate.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 00629f2a929953547b1defd6f72fe758 +folderAsset: yes +timeCreated: 1510934400 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/DataClassGenerate/itemGenerate.cs b/Assets/Script/DataClassGenerate/itemGenerate.cs new file mode 100644 index 00000000..2455a63c --- /dev/null +++ b/Assets/Script/DataClassGenerate/itemGenerate.cs @@ -0,0 +1,27 @@ +using System; +using UnityEngine; + +//itemGenerate类 +//该类自动生成请勿修改,以避免不必要的损失 +public class itemGenerate : DataGenerateBase +{ + public string m_key; + public string m_ItemName; + public int m_Cost; + + public override void LoadData(string key) + { + DataTable table = DataManager.GetData("item"); + + if (!table.ContainsKey(key)) + { + throw new Exception("itemGenerate LoadData Exception Not Fond key ->" + key + "<-"); + } + + SingleData data = table[key]; + + m_key = key; + m_ItemName = data.GetString("ItemName"); + m_Cost = data.GetInt("Cost"); + } +} diff --git a/Assets/Script/DataClassGenerate/itemGenerate.cs.meta b/Assets/Script/DataClassGenerate/itemGenerate.cs.meta new file mode 100644 index 00000000..26999400 --- /dev/null +++ b/Assets/Script/DataClassGenerate/itemGenerate.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 43268c4c0d7a75243af02ca654c4c1f3 +timeCreated: 1510934400 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/GameStatus/DemoStatus.cs b/Assets/Script/GameStatus/DemoStatus.cs new file mode 100644 index 00000000..40352053 --- /dev/null +++ b/Assets/Script/GameStatus/DemoStatus.cs @@ -0,0 +1,11 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class DemoStatus : IApplicationStatus +{ + public override void OnEnterStatus() + { + OpenUI(); + } +} diff --git a/Assets/Script/GameStatus/DemoStatus.cs.meta b/Assets/Script/GameStatus/DemoStatus.cs.meta new file mode 100644 index 00000000..1cab2bc5 --- /dev/null +++ b/Assets/Script/GameStatus/DemoStatus.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3a5a106d97d0b004794f431b7b8f6480 +timeCreated: 1510932000 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/GameStatus/GameStatus.cs b/Assets/Script/GameStatus/GameStatus.cs index 97fb9074..a1c67394 100644 --- a/Assets/Script/GameStatus/GameStatus.cs +++ b/Assets/Script/GameStatus/GameStatus.cs @@ -1,12 +1,11 @@ using UnityEngine; using System.Collections; -public abstract class GameStatus : IApplicationStatus +public class GameStatus : IApplicationStatus { public override void OnEnterStatus() { - ResourcesConfigManager.Initialize(); - UIManager.Init(); + OpenUI(); } } diff --git a/Assets/Script/UI/GameWindow.meta b/Assets/Script/UI/GameWindow.meta new file mode 100644 index 00000000..9afebf37 --- /dev/null +++ b/Assets/Script/UI/GameWindow.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 621bab7e7e520d74893203f507389f86 +folderAsset: yes +timeCreated: 1510936369 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/UI/heiheiheiWindow/heiheiheiWindow.cs b/Assets/Script/UI/GameWindow/GameWindow.cs similarity index 53% rename from Assets/Script/UI/heiheiheiWindow/heiheiheiWindow.cs rename to Assets/Script/UI/GameWindow/GameWindow.cs index eb741f14..8d56e997 100644 --- a/Assets/Script/UI/heiheiheiWindow/heiheiheiWindow.cs +++ b/Assets/Script/UI/GameWindow/GameWindow.cs @@ -1,13 +1,13 @@ using UnityEngine; using System.Collections; -public class heiheiheiWindow : UIWindowBase +public class GameWindow : UIWindowBase { //UI的初始化请放在这里 - public override void OnInit() + public override void OnOpen() { - + AddOnClickListener("Button_Return", OnClickReturnMainMenu); } //请在这里写UI的更新逻辑,当该UI监听的事件触发时,该函数会被调用 @@ -19,11 +19,16 @@ public override void OnRefresh() //UI的进入动画 public override IEnumerator EnterAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) { - AnimSystem.UguiAlpha(gameObject, null, 1, callBack:(object[] obj)=> + yield return new WaitForSeconds(0.2f); + + AnimSystem.UguiAlpha(gameObject, 0, 1, callBack:(object[] obj)=> { StartCoroutine(base.EnterAnim(l_animComplete, l_callBack, objs)); }); + AnimSystem.UguiMove(GetGameObject("Text_Title"), new Vector3(0, 50, 0), new Vector3(0, -50, 0)); + AnimSystem.UguiMove(GetGameObject("Button_Return"), new Vector3(0, -70, 0), new Vector3(0, 70, 0)); + yield return new WaitForEndOfFrame(); } @@ -35,6 +40,14 @@ public override IEnumerator ExitAnim(UIAnimCallBack l_animComplete, UICallBack l StartCoroutine(base.ExitAnim(l_animComplete, l_callBack, objs)); }); + AnimSystem.UguiMove(GetGameObject("Text_Title"), new Vector3(0, -50, 0), new Vector3(0, 50, 0)); + AnimSystem.UguiMove(GetGameObject("Button_Return"), new Vector3(0, 70, 0), new Vector3(0, -70, 0)); + yield return new WaitForEndOfFrame(); } + + void OnClickReturnMainMenu(InputUIOnClickEvent e) + { + ApplicationStatusManager.EnterStatus(); + } } \ No newline at end of file diff --git a/Assets/Script/UI/GameWindow/GameWindow.cs.meta b/Assets/Script/UI/GameWindow/GameWindow.cs.meta new file mode 100644 index 00000000..5bbfcc19 --- /dev/null +++ b/Assets/Script/UI/GameWindow/GameWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1275bb3eedbf91a4a91ade2269186ec0 +timeCreated: 1510936369 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/UI/MainWindow.meta b/Assets/Script/UI/MainWindow.meta new file mode 100644 index 00000000..d162185a --- /dev/null +++ b/Assets/Script/UI/MainWindow.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f8b10228286318b4db97f305366a87d5 +folderAsset: yes +timeCreated: 1510932252 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/UI/AAAWindow/AAAWindow.cs b/Assets/Script/UI/MainWindow/MainWindow.cs similarity index 59% rename from Assets/Script/UI/AAAWindow/AAAWindow.cs rename to Assets/Script/UI/MainWindow/MainWindow.cs index 911f9e18..b2f05ed0 100644 --- a/Assets/Script/UI/AAAWindow/AAAWindow.cs +++ b/Assets/Script/UI/MainWindow/MainWindow.cs @@ -1,13 +1,15 @@ using UnityEngine; using System.Collections; -public class AAAWindow : UIWindowBase +public class MainWindow : UIWindowBase { //UI的初始化请放在这里 - public override void OnInit() + public override void OnOpen() { - + AddOnClickListener("Button_Setting", OnClickSetting); + AddOnClickListener("Button_Shop", OnClickShop); + AddOnClickListener("Button_Start", OnGameStart); } //请在这里写UI的更新逻辑,当该UI监听的事件触发时,该函数会被调用 @@ -19,7 +21,7 @@ public override void OnRefresh() //UI的进入动画 public override IEnumerator EnterAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) { - AnimSystem.UguiAlpha(gameObject, null, 1, callBack:(object[] obj)=> + AnimSystem.UguiAlpha(gameObject, 0, 1, callBack:(object[] obj)=> { StartCoroutine(base.EnterAnim(l_animComplete, l_callBack, objs)); }); @@ -37,4 +39,19 @@ public override IEnumerator ExitAnim(UIAnimCallBack l_animComplete, UICallBack l yield return new WaitForEndOfFrame(); } + + public void OnGameStart(InputUIOnClickEvent e) + { + ApplicationStatusManager.EnterStatus(); + } + + public void OnClickShop(InputUIOnClickEvent e) + { + UIManager.OpenUIWindow(); + } + + public void OnClickSetting(InputUIOnClickEvent e) + { + + } } \ No newline at end of file diff --git a/Assets/Script/UI/MainWindow/MainWindow.cs.meta b/Assets/Script/UI/MainWindow/MainWindow.cs.meta new file mode 100644 index 00000000..fdcd96e8 --- /dev/null +++ b/Assets/Script/UI/MainWindow/MainWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b57e65b099b7430429d116670823342b +timeCreated: 1510932252 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/UI/ShopWindow.meta b/Assets/Script/UI/ShopWindow.meta new file mode 100644 index 00000000..910c2e12 --- /dev/null +++ b/Assets/Script/UI/ShopWindow.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 30cebd7c2cd7b724d94ad99862f75c50 +folderAsset: yes +timeCreated: 1510932825 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/UI/ShopWindow/ShopWindow.cs b/Assets/Script/UI/ShopWindow/ShopWindow.cs new file mode 100644 index 00000000..eac35430 --- /dev/null +++ b/Assets/Script/UI/ShopWindow/ShopWindow.cs @@ -0,0 +1,76 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +public class ShopWindow : UIWindowBase +{ + ReusingScrollRect m_ShopItem; + + //UI的初始化请放在这里 + public override void OnOpen() + { + m_ShopItem = GetReusingScrollRect("Items"); + + m_ShopItem.Init(UIEventKey, "ShopWindow_Item"); + + m_ShopItem.SetData(GetShopData()); + + AddOnClickListener("Button_Close", OnClickCLose); + } + + //请在这里写UI的更新逻辑,当该UI监听的事件触发时,该函数会被调用 + public override void OnRefresh() + { + + } + + //UI的进入动画 + public override IEnumerator EnterAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) + { + AnimSystem.UguiAlpha(gameObject, 0, 1, callBack:(object[] obj)=> + { + StartCoroutine(base.EnterAnim(l_animComplete, l_callBack, objs)); + }); + + AnimSystem.UguiMove(m_uiRoot, new Vector3(1000, 0, 0), Vector3.zero, time: 1, interp: InterpType.InOutBack); + + yield return new WaitForEndOfFrame(); + } + + //UI的退出动画 + public override IEnumerator ExitAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) + { + AnimSystem.UguiAlpha(gameObject , null, 0, callBack:(object[] obj) => + { + StartCoroutine(base.ExitAnim(l_animComplete, l_callBack, objs)); + }); + + AnimSystem.UguiMove(m_uiRoot,Vector3.zero, new Vector3(1000, 0, 0),time:1,interp:InterpType.InOutBack); + + yield return new WaitForEndOfFrame(); + } + + List> GetShopData() + { + List> data = new List>(); + + DataTable itemData = DataManager.GetData("item"); + + for (int i = 0; i < itemData.TableIDs.Count; i++) + { + Dictionary tmp = new Dictionary(); + + tmp.Add("Name",DataGenerateManager.GetData(itemData.TableIDs[i]).m_ItemName); + tmp.Add("Cost", DataGenerateManager.GetData(itemData.TableIDs[i]).m_key); + + data.Add(tmp); + } + + return data; + } + + void OnClickCLose(InputUIOnClickEvent e) + { + UIManager.CloseUIWindow(this); + } +} \ No newline at end of file diff --git a/Assets/Script/UI/ShopWindow/ShopWindow.cs.meta b/Assets/Script/UI/ShopWindow/ShopWindow.cs.meta new file mode 100644 index 00000000..07d9f2cf --- /dev/null +++ b/Assets/Script/UI/ShopWindow/ShopWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c786c49adf9be5545bdee2345bc595a7 +timeCreated: 1510932825 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/UI/ShopWindow/ShopWindowItem.cs b/Assets/Script/UI/ShopWindow/ShopWindowItem.cs new file mode 100644 index 00000000..54e6c0d5 --- /dev/null +++ b/Assets/Script/UI/ShopWindow/ShopWindowItem.cs @@ -0,0 +1,12 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ShopWindowItem : ReusingScrollItemBase +{ + public override void SetContent(int index, Dictionary data) + { + SetText("Text_Name", (string)data["Name"]); + SetText("Text_Cost", "$ "+ (string)data["Cost"]); + } +} diff --git a/Assets/Script/UI/ShopWindow/ShopWindowItem.cs.meta b/Assets/Script/UI/ShopWindow/ShopWindowItem.cs.meta new file mode 100644 index 00000000..9aec6e11 --- /dev/null +++ b/Assets/Script/UI/ShopWindow/ShopWindowItem.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8263bfd953b190b499ab7a8aeb83a5d3 +timeCreated: 1510933923 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/main.unity b/Assets/main.unity index 1d3dba0bf8c769ec42a42e7b0ee4fd34031b3a6e..8f16e5e2c726d184757af85cbeac2dc659256b7a 100644 GIT binary patch delta 5794 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 OOPwEbjh!AGkpBgpPW!(A literal 29760 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 Date: Tue, 21 Nov 2017 18:30:59 +0800 Subject: [PATCH 016/108] RecordEntity --- .../Resources/UI/AAAWindow/AAAWindow.prefab | Bin 0 -> 7812 bytes Assets/Script/UI/AAAWindow/AAAWindow.cs | 40 ++++++++++++++++++ .../UI/heiheiheiWindow/heiheiheiWindow.cs | 40 ++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 Assets/Resources/UI/AAAWindow/AAAWindow.prefab create mode 100644 Assets/Script/UI/AAAWindow/AAAWindow.cs create mode 100644 Assets/Script/UI/heiheiheiWindow/heiheiheiWindow.cs diff --git a/Assets/Resources/UI/AAAWindow/AAAWindow.prefab b/Assets/Resources/UI/AAAWindow/AAAWindow.prefab new file mode 100644 index 0000000000000000000000000000000000000000..8e65dd8613165c89141135c1dbbdb346e385ec91 GIT binary patch literal 7812 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 literal 0 HcmV?d00001 diff --git a/Assets/Script/UI/AAAWindow/AAAWindow.cs b/Assets/Script/UI/AAAWindow/AAAWindow.cs new file mode 100644 index 00000000..911f9e18 --- /dev/null +++ b/Assets/Script/UI/AAAWindow/AAAWindow.cs @@ -0,0 +1,40 @@ +using UnityEngine; +using System.Collections; + +public class AAAWindow : UIWindowBase +{ + + //UI的初始化请放在这里 + public override void OnInit() + { + + } + + //请在这里写UI的更新逻辑,当该UI监听的事件触发时,该函数会被调用 + public override void OnRefresh() + { + + } + + //UI的进入动画 + public override IEnumerator EnterAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) + { + AnimSystem.UguiAlpha(gameObject, null, 1, callBack:(object[] obj)=> + { + StartCoroutine(base.EnterAnim(l_animComplete, l_callBack, objs)); + }); + + yield return new WaitForEndOfFrame(); + } + + //UI的退出动画 + public override IEnumerator ExitAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) + { + AnimSystem.UguiAlpha(gameObject , null, 0, callBack:(object[] obj) => + { + StartCoroutine(base.ExitAnim(l_animComplete, l_callBack, objs)); + }); + + yield return new WaitForEndOfFrame(); + } +} \ No newline at end of file diff --git a/Assets/Script/UI/heiheiheiWindow/heiheiheiWindow.cs b/Assets/Script/UI/heiheiheiWindow/heiheiheiWindow.cs new file mode 100644 index 00000000..eb741f14 --- /dev/null +++ b/Assets/Script/UI/heiheiheiWindow/heiheiheiWindow.cs @@ -0,0 +1,40 @@ +using UnityEngine; +using System.Collections; + +public class heiheiheiWindow : UIWindowBase +{ + + //UI的初始化请放在这里 + public override void OnInit() + { + + } + + //请在这里写UI的更新逻辑,当该UI监听的事件触发时,该函数会被调用 + public override void OnRefresh() + { + + } + + //UI的进入动画 + public override IEnumerator EnterAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) + { + AnimSystem.UguiAlpha(gameObject, null, 1, callBack:(object[] obj)=> + { + StartCoroutine(base.EnterAnim(l_animComplete, l_callBack, objs)); + }); + + yield return new WaitForEndOfFrame(); + } + + //UI的退出动画 + public override IEnumerator ExitAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) + { + AnimSystem.UguiAlpha(gameObject , null, 0, callBack:(object[] obj) => + { + StartCoroutine(base.ExitAnim(l_animComplete, l_callBack, objs)); + }); + + yield return new WaitForEndOfFrame(); + } +} \ No newline at end of file From b1ad7accc7fdf5a601bdf208c30c61c1bf0d9b1b Mon Sep 17 00:00:00 2001 From: GaoKai Date: Mon, 27 Nov 2017 16:00:03 +0800 Subject: [PATCH 017/108] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/AnimSystem/AnimSystem.cs | 2 +- .../Editor/Network/Protocol/ProtocolHelper.cs | 2 +- .../Script/Core/Editor/Utils/AppyPrefabs.cs | 34 +++++++++++++++++++ Assets/Script/Core/Utils/ExpandMethod.cs | 3 +- 4 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 Assets/Script/Core/Editor/Utils/AppyPrefabs.cs diff --git a/Assets/Script/Core/AnimSystem/AnimSystem.cs b/Assets/Script/Core/AnimSystem/AnimSystem.cs index 5a146056..7bfb12f0 100644 --- a/Assets/Script/Core/AnimSystem/AnimSystem.cs +++ b/Assets/Script/Core/AnimSystem/AnimSystem.cs @@ -552,7 +552,7 @@ public static AnimData CustomMethodToVector3(AnimCustomMethodVector3 method, Vec l_tmp.m_animType = AnimType.Custom_Vector3; l_tmp.m_fromV3 = from; - l_tmp.m_toV2 = to; + l_tmp.m_toV3 = to; l_tmp.m_customMethodV3 = method; l_tmp.m_delayTime = delayTime; diff --git a/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs b/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs index 5dfa5c53..814d2e71 100644 --- a/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs +++ b/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs @@ -1121,7 +1121,7 @@ static string GenerateAnalysisContent(int tab, FieldInfo field, string aimName,s } else if (field.FieldType.IsSubclassOf(typeof(Enum))) { - content += GetTab(tab) + aimName + "." + field.Name + " = " + "(" + field.FieldType.Name + ")" + sourceName + "[\"" + GenerateProtocolFieldName(field) + "\"];\n"; + content += GetTab(tab) + aimName + "." + field.Name + " = " + "(" + field.FieldType.FullName.Replace('+','.') + ")" + sourceName + "[\"" + GenerateProtocolFieldName(field) + "\"];\n"; } else if (field.FieldType == typeof(string)) diff --git a/Assets/Script/Core/Editor/Utils/AppyPrefabs.cs b/Assets/Script/Core/Editor/Utils/AppyPrefabs.cs new file mode 100644 index 00000000..15defc40 --- /dev/null +++ b/Assets/Script/Core/Editor/Utils/AppyPrefabs.cs @@ -0,0 +1,34 @@ +using UnityEditor; +using UnityEngine; + +public class AppyPrefabs : Editor +{ + [@MenuItem("Tools/BatchExportPrefab")] + static void BatchExportPrefab() + { + GameObject[] objs = Selection.gameObjects; + int len = objs.Length; + foreach (GameObject item in objs) + { + //if (PrefabUtility.GetPrefabType(item) == PrefabType.PrefabInstance){} + Object parentObject = PrefabUtility.GetPrefabParent(item); + PrefabUtility.ReplacePrefab(item, parentObject); + PrefabUtility.RevertPrefabInstance(item); + } + AssetDatabase.Refresh(); + } + + [@MenuItem("Tools/BatchRestPrefab")] + static void BatchRestPrefab() + { + GameObject[] objs = Selection.gameObjects; + int len = objs.Length; + foreach (GameObject item in objs) + { + //if (PrefabUtility.GetPrefabType(item) == PrefabType.PrefabInstance){} + //Object parentObject = PrefabUtility.GetPrefabParent(item); + PrefabUtility.RevertPrefabInstance(item); + } + AssetDatabase.Refresh(); + } +} \ No newline at end of file diff --git a/Assets/Script/Core/Utils/ExpandMethod.cs b/Assets/Script/Core/Utils/ExpandMethod.cs index 2319a1d2..d723a5e6 100644 --- a/Assets/Script/Core/Utils/ExpandMethod.cs +++ b/Assets/Script/Core/Utils/ExpandMethod.cs @@ -61,6 +61,7 @@ public static string ToSaveString(this List list) return sb.ToString(); } + public static string ToSaveString(this string[] list) { StringBuilder sb = new StringBuilder(); @@ -81,8 +82,6 @@ public static string ToSaveString(this string[] list) //向量逆时针旋转 public static Vector3 Vector3RotateInXZ(this Vector3 dir, float angle) { - - angle *= Mathf.Deg2Rad; float l_n_dirX = dir.x * Mathf.Cos(angle) - dir.z * Mathf.Sin(angle); float l_n_dirZ = dir.x * Mathf.Sin(angle) + dir.z * Mathf.Cos(angle); From 47212f86e768a42d37e7a0bf83466423cb9f026c Mon Sep 17 00:00:00 2001 From: GaoKai Date: Tue, 28 Nov 2017 18:35:05 +0800 Subject: [PATCH 018/108] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90Protocol=E7=9A=84BUG,?= =?UTF-8?q?=E5=B9=B6=E5=A2=9E=E5=8A=A0=E4=B8=80=E4=B8=AA=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Editor/Network/Protocol/ProtocolHelper.cs | 17 ++- .../Editor/Test/Protocol/ProtocolMsgTest.cs | 143 ++++++++++++++++++ 2 files changed, 156 insertions(+), 4 deletions(-) create mode 100644 Assets/Script/Core/Editor/Test/Protocol/ProtocolMsgTest.cs diff --git a/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs b/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs index 814d2e71..0f2e740f 100644 --- a/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs +++ b/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs @@ -105,7 +105,10 @@ static string GenerateProtocolMessageNoHead(Type type) for (int i = 0; i < fields.Length; i++) { - content += GetTab(1) + GenerateProtocolMessageField(fields[i], ref index); + if(!fields[i].IsStatic) + { + content += GetTab(1) + GenerateProtocolMessageField(fields[i], ref index); + } } content += "}\n"; @@ -743,7 +746,7 @@ static string GenerateCSharpContent() for (int i = 0; i < msgList.Count; i++) { - if(GetSendMode(msgList[i]) == SendMode.ToClient + if (GetSendMode(msgList[i]) == SendMode.ToClient || GetSendMode(msgList[i]) == SendMode.Both) { csharpContent += GenerateReceviceCommandContent(msgList[i]); @@ -999,7 +1002,10 @@ static string GenerateSerializeClassContent(int tab, Type type, string aimName, for (int i = 0; i < fields.Length; i++) { - content += GenerateSerializeFieldContent(tab, fields[i],aimName,sourceName); + if(!fields[i].IsStatic) + { + content += GenerateSerializeFieldContent(tab, fields[i], aimName, sourceName); + } } return content; @@ -1189,7 +1195,10 @@ static string GenerateAnalysisClassContent(int tab,Type type,string aimName, str for (int i = 0; i < fields.Length; i++) { - content += GenerateAnalysisContent(tab, fields[i], aimName, sourceName); + if(!fields[i].IsStatic) + { + content += GenerateAnalysisContent(tab, fields[i], aimName, sourceName); + } } return content; diff --git a/Assets/Script/Core/Editor/Test/Protocol/ProtocolMsgTest.cs b/Assets/Script/Core/Editor/Test/Protocol/ProtocolMsgTest.cs new file mode 100644 index 00000000..4ac18dec --- /dev/null +++ b/Assets/Script/Core/Editor/Test/Protocol/ProtocolMsgTest.cs @@ -0,0 +1,143 @@ +using NUnit.Framework; +using Protocol; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using UnityEngine; + +public class ProtocolMsgTest +{ + [Test(Description = "Protocol 正确性测试")] + public void LegitimateTest() + { + List ModuleList = new List(); + List msgList = new List(); + List StructList = new List(); + + + msgList.Clear(); + + Type[] types = Assembly.Load("Assembly-CSharp").GetTypes(); + + for (int i = 0; i < types.Length; i++) + { + if (typeof(IProtocolMessageInterface).IsAssignableFrom(types[i]) + && types[i] != typeof(IProtocolMessageInterface) + && types[i] != typeof(CsharpProtocolInterface) + && !types[i].IsAbstract + ) + { + msgList.Add(types[i]); + } + + if (typeof(IProtocolMessageInterface).IsAssignableFrom(types[i]) + && types[i].IsAbstract + + ) + { + ModuleList.Add(types[i]); + } + } + + StructList.Clear(); + + for (int i = 0; i < types.Length; i++) + { + if (typeof(IProtocolStructInterface).IsAssignableFrom(types[i]) + && types[i] != typeof(IProtocolStructInterface)) + { + StructList.Add(types[i]); + } + } + + + for (int i = 0; i < msgList.Count; i++) + { + if(!Verify(msgList[i], new List())) + { + Assert.Fail(" >" + msgList[i].FullName + "< is not legitimate Protocol Type !"); + } + + //Debug.Log("--------------------------"); + } + + for (int i = 0; i < StructList.Count; i++) + { + if (!Verify(StructList[i], new List())) + { + Assert.Fail(" >" + StructList[i].FullName + "< is not legitimate Protocol Struct Type !"); + } + + //Debug.Log("--------------------------"); + } + } + + public bool Verify(Type type ,List list) + { + if(isBaseType(type)) + { + return true; + } + + if (type.Name == typeof(List<>).Name) + { + type = type.GetGenericArguments()[0]; + } + + if (list.Contains(type)) + { + Debug.Log("repetition Type is " + type.FullName); + return false; + } + + List listTmp = new List(); + for (int i = 0; i < list.Count; i++) + { + listTmp.Add(list[i]); + } + + listTmp.Add(type); + + FieldInfo[] fields = type.GetFields(); + + for (int i = 0; i < fields.Length; i++) + { + if (!fields[i].IsStatic &&!Verify(fields[i].FieldType, listTmp)) + { + return false; + } + } + + return true; + } + + bool isBaseType(Type type) + { + if (type == typeof(int)) + { + return true; + } + else if (type == typeof(bool)) + { + return true; + } + + else if (type == typeof(float)) + { + return true; + } + + else if (type.IsSubclassOf(typeof(Enum))) + { + return true; + } + + else if (type == typeof(string)) + { + return true; + } + + return false; + } +} From aeb7069da8735d8e1f73ea8c5fd8c1e405308da6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E5=87=AF?= Date: Thu, 30 Nov 2017 23:41:33 +0800 Subject: [PATCH 019/108] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 694a9725..6718b803 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,9 @@   Unity框架,组件可插拔,可视化编辑,代码自动生成。   包含资源加载,配置加载,数据加载,UI管理,音频管理,日志管理,动画系统,特效系统等,以及对应编辑器工具   支持Android、Ios、PC、WEBGL -  项目中的Script/Core目录就是完整框架 +  项目中的Script/Core目录就是完整框架 +  [中文维基](https://github.com/GaoKaiHaHa/MyUnityFrameWork/wiki/%E9%A6%96%E9%A1%B5) +  [English Wiki](https://github.com/GaoKaiHaHa/MyUnityFrameWork/wiki) ## 应用   1.快速配置开发模式和发布模式(开发模式资源直接从Resources文件夹加载,不需要重新打包) From 8d6a471fdf5ed409ec77f6b6730dbc4e474eff27 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Fri, 1 Dec 2017 14:34:26 +0800 Subject: [PATCH 020/108] =?UTF-8?q?=E5=A2=9E=E5=BC=BAUIBase?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/UI/Model/UIBase.cs | 50 +++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/Assets/Script/Core/UI/Model/UIBase.cs b/Assets/Script/Core/UI/Model/UIBase.cs index 187c9aa8..bc94299c 100644 --- a/Assets/Script/Core/UI/Model/UIBase.cs +++ b/Assets/Script/Core/UI/Model/UIBase.cs @@ -9,7 +9,6 @@ public class UIBase : MonoBehaviour public Canvas m_canvas; #region 重载方法 - //当UI第一次打开时调用OnInit方法,调用时机在OnOpen之前 public virtual void OnInit() { @@ -87,7 +86,9 @@ void CreateObjectTable() m_objects.Clear(); m_images.Clear(); + m_Sprites.Clear(); m_texts.Clear(); + m_textmeshs.Clear(); m_buttons.Clear(); m_scrollRects.Clear(); m_reusingScrollRects.Clear(); @@ -104,6 +105,7 @@ void CreateObjectTable() { if (m_objectList[i] != null) { + //Debug.Log("===>"+m_objectList[i].name); if (m_objects.ContainsKey(m_objectList[i].name)) { Debug.LogError("CreateObjectTable ContainsKey ->" + m_objectList[i].name + "<-"); @@ -124,7 +126,9 @@ void CreateObjectTable() Dictionary m_objects = new Dictionary(); Dictionary m_images = new Dictionary(); + Dictionary m_Sprites = new Dictionary(); Dictionary m_texts = new Dictionary(); + Dictionary m_textmeshs = new Dictionary(); Dictionary m_buttons = new Dictionary(); Dictionary m_scrollRects = new Dictionary(); Dictionary m_reusingScrollRects = new Dictionary(); @@ -207,7 +211,23 @@ public UIBase GetUIBase(string name) m_uiBases.Add(name, tmp); return tmp; } + public Sprite GetSprite(string name) + { + if (m_Sprites.ContainsKey(name)) + { + return m_Sprites[name]; + } + Sprite tmp = GetGameObject(name).GetComponent(); + + if (tmp == null) + { + throw new Exception(m_EventNames + " GetImage ->" + name + "<- is Null !"); + } + + m_Sprites.Add(name, tmp); + return tmp; + } public Image GetImage(string name) { if (m_images.ContainsKey(name)) @@ -225,7 +245,25 @@ public Image GetImage(string name) m_images.Add(name, tmp); return tmp; } + public TextMesh GetTextMesh(string name) + { + if (m_textmeshs.ContainsKey(name)) + { + return m_textmeshs[name]; + } + TextMesh tmp = GetGameObject(name).GetComponent(); + + + + if (tmp == null) + { + throw new Exception(m_EventNames + " GetText ->" + name + "<- is Null !"); + } + + m_textmeshs.Add(name, tmp); + return tmp; + } public Text GetText(string name) { if (m_texts.ContainsKey(name)) @@ -873,9 +911,14 @@ public void SetScale(string TextID, float x, float y, float z) GetGameObject(TextID).transform.localScale = Vector3.right * x + Vector3.up * y + Vector3.forward * z; } + public void SetMeshText(string TextID, string txt) + { + GetTextMesh(TextID).text = txt; + } + #endregion - #region 新手引导使用 + #region 新手引导使用 protected List m_GuideList = new List(); protected Dictionary m_CreateCanvasDict = new Dictionary(); //保存Canvas的创建状态 @@ -1020,6 +1063,8 @@ public void ClearGuideModel() #endregion + #region 工具方法 + [ContextMenu("ObjectList 去重")] public void ClearObject() { @@ -1041,4 +1086,5 @@ public void ClearObject() m_objectList = ls; } + #endregion } From 4d083e2c4782363cbb418b1840945d0b9b5239d0 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Tue, 5 Dec 2017 16:01:13 +0800 Subject: [PATCH 021/108] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/Data/DataTable.cs | 18 +++++++++++++++++- .../Core/Editor/Data/DataEditorWindow.cs | 3 ++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Assets/Script/Core/Data/DataTable.cs b/Assets/Script/Core/Data/DataTable.cs index 640ba5f0..cea611a9 100644 --- a/Assets/Script/Core/Data/DataTable.cs +++ b/Assets/Script/Core/Data/DataTable.cs @@ -662,7 +662,6 @@ public string GetString(string key) { return data.m_defaultValue[key]; } - } catch (Exception e) { @@ -672,6 +671,23 @@ public string GetString(string key) throw new Exception("Don't Exist Value or DefaultValue by ->" + key + "<- TableName is : ->" + data.m_tableName + "<- singleDataName : ->" + m_SingleDataKey + "<-");// throw } + string StringFilter(string content) + { + if(content == "Null" + || content == "null" + || content == "NULL" + || content == "nu11" + || content == "none" + || content == "nil" ) + { + return null; + } + else + { + return content; + } + } + public Vector2 GetVector2(string key) { try diff --git a/Assets/Script/Core/Editor/Data/DataEditorWindow.cs b/Assets/Script/Core/Editor/Data/DataEditorWindow.cs index edbeaa9a..54c56a4a 100644 --- a/Assets/Script/Core/Editor/Data/DataEditorWindow.cs +++ b/Assets/Script/Core/Editor/Data/DataEditorWindow.cs @@ -851,7 +851,8 @@ void CreatDataCSharpFile(string dataName,DataTable data) //默认字符类型 else { - content += "m_" + key + " = data." + OutPutFieldFunction(data.m_tableTypes[key], enumType) + "(\"" + key + "\")"; + content += "m_" + key + " = data." + OutPutFieldFunction(FieldType.String, enumType) + "(\"" + key + "\")"; + Debug.LogWarning("字段 " + key + "没有配置类型!"); } content += ";\n"; From 84b00c34d58e47ca93e5af8835c4e0946884fe9d Mon Sep 17 00:00:00 2001 From: Gaokai Date: Sat, 16 Dec 2017 10:29:59 +0800 Subject: [PATCH 022/108] UI_open_stack --- Assets/EditorConfig/BundleConfigEditor.json | 2 +- Assets/Resources/Config/111.json | 1 - Assets/Resources/Config/111.json.meta | 8 -- Assets/Resources/Config/BundleConfig.json | 1 - .../Resources/Config/BundleConfig.json.meta | 8 -- .../BundleConfig.json.meta~Stashed changes | 8 -- Assets/Resources/Config/ResourcesConfig.json | 1 - .../Config/ResourcesConfig.json.meta | 8 -- Assets/Resources/Config/SDKConfig.json | 1 - Assets/Resources/Config/SDKConfig.json.meta | 8 -- Assets/Resources/Config/qeqweqwe.json | 1 - Assets/Resources/Config/qeqweqwe.json.meta | 8 -- Assets/Resources/Config/version.json | 1 - Assets/Resources/Config/version.json.meta | 8 -- .../AAAWindow.meta} | 5 +- .../UI/AAAWindow/AAAWindow.prefab.meta | 9 +++ Assets/Script/Core/Editor/Test/Protocol.meta | 9 +++ .../Test/Protocol/ProtocolMsgTest.cs.meta | 12 +++ .../Core/Editor/Utils/AppyPrefabs.cs.meta | 12 +++ Assets/Script/Core/UI/Control/UIManager.cs | 22 ++++-- .../Script/Core/UI/Control/UIStackManager.cs | 72 ++++++++++++++++++ .../Core/UI/Control/UIStackManager.cs.meta | 12 +++ Assets/Script/GameStatus/FirstStatus.cs | 2 + Assets/Script/GameStatus/GameStatus.cs | 2 + Assets/Script/UI/AAAWindow.meta | 9 +++ Assets/Script/UI/AAAWindow/AAAWindow.cs.meta | 12 +++ Assets/Script/UI/MainWindow/MainWindow.cs | 2 +- Assets/Script/UI/heiheiheiWindow.meta | 9 +++ .../heiheiheiWindow/heiheiheiWindow.cs.meta | 12 +++ Assets/main.unity | Bin 22632 -> 24840 bytes 30 files changed, 193 insertions(+), 72 deletions(-) delete mode 100644 Assets/Resources/Config/111.json delete mode 100644 Assets/Resources/Config/111.json.meta delete mode 100644 Assets/Resources/Config/BundleConfig.json delete mode 100644 Assets/Resources/Config/BundleConfig.json.meta delete mode 100644 Assets/Resources/Config/BundleConfig.json.meta~Stashed changes delete mode 100644 Assets/Resources/Config/ResourcesConfig.json delete mode 100644 Assets/Resources/Config/ResourcesConfig.json.meta delete mode 100644 Assets/Resources/Config/SDKConfig.json delete mode 100644 Assets/Resources/Config/SDKConfig.json.meta delete mode 100644 Assets/Resources/Config/qeqweqwe.json delete mode 100644 Assets/Resources/Config/qeqweqwe.json.meta delete mode 100644 Assets/Resources/Config/version.json delete mode 100644 Assets/Resources/Config/version.json.meta rename Assets/Resources/{Config/BundleConfig.json.meta~Stashed changes.meta => UI/AAAWindow.meta} (58%) create mode 100644 Assets/Resources/UI/AAAWindow/AAAWindow.prefab.meta create mode 100644 Assets/Script/Core/Editor/Test/Protocol.meta create mode 100644 Assets/Script/Core/Editor/Test/Protocol/ProtocolMsgTest.cs.meta create mode 100644 Assets/Script/Core/Editor/Utils/AppyPrefabs.cs.meta create mode 100644 Assets/Script/Core/UI/Control/UIStackManager.cs create mode 100644 Assets/Script/Core/UI/Control/UIStackManager.cs.meta create mode 100644 Assets/Script/UI/AAAWindow.meta create mode 100644 Assets/Script/UI/AAAWindow/AAAWindow.cs.meta create mode 100644 Assets/Script/UI/heiheiheiWindow.meta create mode 100644 Assets/Script/UI/heiheiheiWindow/heiheiheiWindow.cs.meta diff --git a/Assets/EditorConfig/BundleConfigEditor.json b/Assets/EditorConfig/BundleConfigEditor.json index 6b328fd3..ba464fae 100644 --- a/Assets/EditorConfig/BundleConfigEditor.json +++ b/Assets/EditorConfig/BundleConfigEditor.json @@ -1 +1 @@ -{"relyBundles":"[]","AssetsBundles":"[\"{\\\"isFold\\\":false,\\\"name\\\":\\\"111\\\",\\\"path\\\":\\\"Config/111\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/111.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"BundleConfig\\\",\\\"path\\\":\\\"Config/BundleConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/BundleConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"HotUpdateConfig\\\",\\\"path\\\":\\\"Config/HotUpdateConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/HotUpdateConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaConfig\\\",\\\"path\\\":\\\"Config/LuaConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/LuaConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"qeqweqwe\\\",\\\"path\\\":\\\"Config/qeqweqwe\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/qeqweqwe.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ResourcesConfig\\\",\\\"path\\\":\\\"Config/ResourcesConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/ResourcesConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"SDKConfig\\\",\\\"path\\\":\\\"Config/SDKConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/SDKConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"version\\\",\\\"path\\\":\\\"Config/version\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/version.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LangData_Afrikaans\\\",\\\"path\\\":\\\"Data/Language/LangData_Afrikaans\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/Language/LangData_Afrikaans.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LangData_Arabic\\\",\\\"path\\\":\\\"Data/Language/LangData_Arabic\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/Language/LangData_Arabic.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LangData_ChineseSimplified\\\",\\\"path\\\":\\\"Data/Language/LangData_ChineseSimplified\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/Language/LangData_ChineseSimplified.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"item\\\",\\\"path\\\":\\\"Data/item\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/item.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"testData\\\",\\\"path\\\":\\\"Data/testData\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/testData.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject 1\\\",\\\"path\\\":\\\"Prefab/GameObject 1\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/GameObject 1.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject 2\\\",\\\"path\\\":\\\"Prefab/GameObject 2\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/GameObject 2.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject\\\",\\\"path\\\":\\\"Prefab/GameObject\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/GameObject.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"gogo\\\",\\\"path\\\":\\\"Prefab/gogo\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/gogo.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 1\\\",\\\"path\\\":\\\"Prefab/UItest 1\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 1.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 2\\\",\\\"path\\\":\\\"Prefab/UItest 2\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 2.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 3\\\",\\\"path\\\":\\\"Prefab/UItest 3\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 3.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 4\\\",\\\"path\\\":\\\"Prefab/UItest 4\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 4.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 5\\\",\\\"path\\\":\\\"Prefab/UItest 5\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 5.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 6\\\",\\\"path\\\":\\\"Prefab/UItest 6\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 6.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest\\\",\\\"path\\\":\\\"Prefab/UItest\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_01\\\",\\\"path\\\":\\\"sprite/dl_01\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_01.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_02\\\",\\\"path\\\":\\\"sprite/dl_02\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_02.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_03\\\",\\\"path\\\":\\\"sprite/dl_03\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_03.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_04\\\",\\\"path\\\":\\\"sprite/dl_04\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_04.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_05\\\",\\\"path\\\":\\\"sprite/dl_05\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_05.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_07\\\",\\\"path\\\":\\\"sprite/dl_07\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_07.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_08\\\",\\\"path\\\":\\\"sprite/dl_08\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_08.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_09\\\",\\\"path\\\":\\\"sprite/dl_09\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_09.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameWindow\\\",\\\"path\\\":\\\"UI/GameWindow/GameWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/GameWindow/GameWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaTestWindow\\\",\\\"path\\\":\\\"UI/LuaTestWindow/LuaTestWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/LuaTestWindow/LuaTestWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"MainWindow\\\",\\\"path\\\":\\\"UI/MainWindow/MainWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/MainWindow/MainWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ShopWindow\\\",\\\"path\\\":\\\"UI/ShopWindow/ShopWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/ShopWindow/ShopWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ShopWindow_Item\\\",\\\"path\\\":\\\"UI/ShopWindow/ShopWindow_Item\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/ShopWindow/ShopWindow_Item.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"test01Window\\\",\\\"path\\\":\\\"UI/test01Window/test01Window\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/test01Window/test01Window.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"test02Window\\\",\\\"path\\\":\\\"UI/test02Window/test02Window\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/test02Window/test02Window.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"Test2Window\\\",\\\"path\\\":\\\"UI/Test2Window/Test2Window\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/Test2Window/Test2Window.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"Image_item\\\",\\\"path\\\":\\\"UI/testWindow/Image_item\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/testWindow/Image_item.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"testWindow\\\",\\\"path\\\":\\\"UI/testWindow/testWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/testWindow/testWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UIManager\\\",\\\"path\\\":\\\"UI/UIManager\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/UIManager.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject_adasd\\\",\\\"path\\\":\\\"GameObject_adasd\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/GameObject_adasd.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 2\\\",\\\"path\\\":\\\"New Material 2\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 2.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 3\\\",\\\"path\\\":\\\"New Material 3\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 3.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 4\\\",\\\"path\\\":\\\"New Material 4\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 4.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 5\\\",\\\"path\\\":\\\"New Material 5\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 5.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 6\\\",\\\"path\\\":\\\"New Material 6\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 6.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material\\\",\\\"path\\\":\\\"New Material\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ResourcesManifest\\\",\\\"path\\\":\\\"ResourcesManifest\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/ResourcesManifest.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"Version\\\",\\\"path\\\":\\\"Version\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Version.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\"]"} \ No newline at end of file +{"relyBundles":"[]","AssetsBundles":"[\"{\\\"isFold\\\":false,\\\"name\\\":\\\"111\\\",\\\"path\\\":\\\"Config/111\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/111.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"BundleConfig\\\",\\\"path\\\":\\\"Config/BundleConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/BundleConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"HotUpdateConfig\\\",\\\"path\\\":\\\"Config/HotUpdateConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/HotUpdateConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaConfig\\\",\\\"path\\\":\\\"Config/LuaConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/LuaConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"qeqweqwe\\\",\\\"path\\\":\\\"Config/qeqweqwe\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/qeqweqwe.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ResourcesConfig\\\",\\\"path\\\":\\\"Config/ResourcesConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/ResourcesConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"SDKConfig\\\",\\\"path\\\":\\\"Config/SDKConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/SDKConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"version\\\",\\\"path\\\":\\\"Config/version\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/version.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LangData_Afrikaans\\\",\\\"path\\\":\\\"Data/Language/LangData_Afrikaans\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/Language/LangData_Afrikaans.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LangData_Arabic\\\",\\\"path\\\":\\\"Data/Language/LangData_Arabic\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/Language/LangData_Arabic.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LangData_ChineseSimplified\\\",\\\"path\\\":\\\"Data/Language/LangData_ChineseSimplified\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/Language/LangData_ChineseSimplified.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"item\\\",\\\"path\\\":\\\"Data/item\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/item.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"testData\\\",\\\"path\\\":\\\"Data/testData\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/testData.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject 1\\\",\\\"path\\\":\\\"Prefab/GameObject 1\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/GameObject 1.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject 2\\\",\\\"path\\\":\\\"Prefab/GameObject 2\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/GameObject 2.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject\\\",\\\"path\\\":\\\"Prefab/GameObject\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/GameObject.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"Assets/Resources/Prefab/GameObject.prefab \\u6709\\u4e22\\u5931\\u7684\\u811a\\u672c\\uff01\\\",\\\"Assets/Resources/Prefab/GameObject.prefab \\u6709\\u4e22\\u5931\\u7684\\u811a\\u672c\\uff01\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"gogo\\\",\\\"path\\\":\\\"Prefab/gogo\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/gogo.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 1\\\",\\\"path\\\":\\\"Prefab/UItest 1\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 1.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 2\\\",\\\"path\\\":\\\"Prefab/UItest 2\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 2.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 3\\\",\\\"path\\\":\\\"Prefab/UItest 3\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 3.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 4\\\",\\\"path\\\":\\\"Prefab/UItest 4\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 4.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 5\\\",\\\"path\\\":\\\"Prefab/UItest 5\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 5.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 6\\\",\\\"path\\\":\\\"Prefab/UItest 6\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 6.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest\\\",\\\"path\\\":\\\"Prefab/UItest\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_01\\\",\\\"path\\\":\\\"sprite/dl_01\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_01.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"MainObject \\u91cd\\u590d! dl_01 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_02\\\",\\\"path\\\":\\\"sprite/dl_02\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_02.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"MainObject \\u91cd\\u590d! dl_02 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_03\\\",\\\"path\\\":\\\"sprite/dl_03\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_03.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"MainObject \\u91cd\\u590d! dl_03 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_04\\\",\\\"path\\\":\\\"sprite/dl_04\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_04.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"MainObject \\u91cd\\u590d! dl_04 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_05\\\",\\\"path\\\":\\\"sprite/dl_05\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_05.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"MainObject \\u91cd\\u590d! dl_05 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_07\\\",\\\"path\\\":\\\"sprite/dl_07\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_07.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"MainObject \\u91cd\\u590d! dl_07 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_08\\\",\\\"path\\\":\\\"sprite/dl_08\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_08.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"MainObject \\u91cd\\u590d! dl_08 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_09\\\",\\\"path\\\":\\\"sprite/dl_09\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_09.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"MainObject \\u91cd\\u590d! dl_09 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameWindow\\\",\\\"path\\\":\\\"UI/GameWindow/GameWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/GameWindow/GameWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaTestWindow\\\",\\\"path\\\":\\\"UI/LuaTestWindow/LuaTestWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/LuaTestWindow/LuaTestWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"MainWindow\\\",\\\"path\\\":\\\"UI/MainWindow/MainWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/MainWindow/MainWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ShopWindow\\\",\\\"path\\\":\\\"UI/ShopWindow/ShopWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/ShopWindow/ShopWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ShopWindow_Item\\\",\\\"path\\\":\\\"UI/ShopWindow/ShopWindow_Item\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/ShopWindow/ShopWindow_Item.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"test01Window\\\",\\\"path\\\":\\\"UI/test01Window/test01Window\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/test01Window/test01Window.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"UI/test01Window/test01Window \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! New Material 2 (UnityEngine.Material)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"test02Window\\\",\\\"path\\\":\\\"UI/test02Window/test02Window\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/test02Window/test02Window.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"Test2Window\\\",\\\"path\\\":\\\"UI/Test2Window/Test2Window\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/Test2Window/Test2Window.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"Image_item\\\",\\\"path\\\":\\\"UI/testWindow/Image_item\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/testWindow/Image_item.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"testWindow\\\",\\\"path\\\":\\\"UI/testWindow/testWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/testWindow/testWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UIManager\\\",\\\"path\\\":\\\"UI/UIManager\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/UIManager.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject_adasd\\\",\\\"path\\\":\\\"GameObject_adasd\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/GameObject_adasd.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"Assets/Resources/GameObject_adasd.prefab \\u6709\\u4e22\\u5931\\u7684\\u811a\\u672c\\uff01\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 2\\\",\\\"path\\\":\\\"New Material 2\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 2.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"MainObject \\u91cd\\u590d! New Material 2 (UnityEngine.Material)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 3\\\",\\\"path\\\":\\\"New Material 3\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 3.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 4\\\",\\\"path\\\":\\\"New Material 4\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 4.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 5\\\",\\\"path\\\":\\\"New Material 5\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 5.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 6\\\",\\\"path\\\":\\\"New Material 6\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 6.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material\\\",\\\"path\\\":\\\"New Material\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ResourcesManifest\\\",\\\"path\\\":\\\"ResourcesManifest\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/ResourcesManifest.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"Version\\\",\\\"path\\\":\\\"Version\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Version.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\"]"} \ No newline at end of file diff --git a/Assets/Resources/Config/111.json b/Assets/Resources/Config/111.json deleted file mode 100644 index 9e26dfee..00000000 --- a/Assets/Resources/Config/111.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/Assets/Resources/Config/111.json.meta b/Assets/Resources/Config/111.json.meta deleted file mode 100644 index 1cfa202f..00000000 --- a/Assets/Resources/Config/111.json.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 91080e49451293e41a815c671c7b821b -timeCreated: 1477887374 -licenseType: Pro -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/Config/BundleConfig.json b/Assets/Resources/Config/BundleConfig.json deleted file mode 100644 index 4fc478b0..00000000 --- a/Assets/Resources/Config/BundleConfig.json +++ /dev/null @@ -1 +0,0 @@ -{"relyBundles":"{\"m_type\":0,\"m_content\":\"{}\",\"m_enumType\":\"\"}","AssetsBundles":"{\"m_type\":0,\"m_content\":\"{\\\"111\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"111\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Config/111\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"qeqweqwe\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"qeqweqwe\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Config/qeqweqwe\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"version\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"version\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Config/version\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"item\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"item\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Data/item\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"testData\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"testData\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Data/testData\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"b452c951a5d5df0482bec8dcd1a1d9\\\\\\\"}\\\",\\\"GameObject 1\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"GameObject 1\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/GameObject 1\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"291f65ccbde4abf7d413ee6cd8cd9af7\\\\\\\"}\\\",\\\"GameObject 2\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"GameObject 2\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/GameObject 2\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"a76f44406d7361b55212912366a3d617\\\\\\\"}\\\",\\\"GameObject\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"GameObject\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/GameObject\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"b2f826071b7a6eb6b57e1156c06b4e\\\\\\\"}\\\",\\\"gogo\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"gogo\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/gogo\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"UItest 1\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 1\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 1\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"47f0e1791b44a9835bc55854209769b2\\\\\\\"}\\\",\\\"UItest 2\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 2\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 2\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"4635dc36ba5baf23305dcf4a70f52f2a\\\\\\\"}\\\",\\\"UItest 3\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 3\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 3\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"3867635fa8761470f0196bdd5bd1697\\\\\\\"}\\\",\\\"UItest 4\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 4\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 4\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"8f29d84fefc1995247d9a967d7e1dbf\\\\\\\"}\\\",\\\"UItest 5\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 5\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 5\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"259e1a22a44ed965c075491f458295a5\\\\\\\"}\\\",\\\"UItest 6\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 6\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 6\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"7c2c831c15edd24b6483694930acfd\\\\\\\"}\\\",\\\"UItest\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"2339aac352d15b164ce384e73c5d6b\\\\\\\"}\\\",\\\"dl_01\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_01\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_01\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"5495a66934b1ae3e39247eb88c08e61\\\\\\\"}\\\",\\\"dl_02\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_02\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_02\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"8137aa657eadb78d6e91ff29a9ba3b\\\\\\\"}\\\",\\\"dl_03\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_03\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_03\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"ee4f53087bd81accb8388aea3371d3\\\\\\\"}\\\",\\\"dl_04\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_04\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_04\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"175b6d3035eaaf10bcc78b54ab21ecf\\\\\\\"}\\\",\\\"dl_05\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_05\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_05\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"998923b9c4b3028a6a881f8c37efba4\\\\\\\"}\\\",\\\"dl_07\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_07\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_07\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"f8ae51ef5443062ae681b83ccdf7783\\\\\\\"}\\\",\\\"dl_08\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_08\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_08\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"f7725cbee23dcbcd3fe5fa9d706792ed\\\\\\\"}\\\",\\\"dl_09\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_09\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_09\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"426a9cc8e4fac41d274a0ad7069fbb9\\\\\\\"}\\\",\\\"test01Window\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"test01Window\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/test01Window/test01Window\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"test02Window\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"test02Window\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/test02Window/test02Window\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"testWindow\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"testWindow\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/testWindow/testWindow\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"UIManager\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UIManager\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/UIManager\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"GameObject_adasd\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"GameObject_adasd\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"GameObject_adasd\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"b17ffa952e3f8fe73c8f3b339526\\\\\\\"}\\\"}\",\"m_enumType\":\"\"}","testEnum":"{\"m_type\":7,\"m_content\":\"Bezier2\",\"m_enumType\":\"PathType\"}"} \ No newline at end of file diff --git a/Assets/Resources/Config/BundleConfig.json.meta b/Assets/Resources/Config/BundleConfig.json.meta deleted file mode 100644 index 5f75401e..00000000 --- a/Assets/Resources/Config/BundleConfig.json.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 499e626902425854ab9562d6dc177a6f -timeCreated: 1478251715 -licenseType: Pro -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/Config/BundleConfig.json.meta~Stashed changes b/Assets/Resources/Config/BundleConfig.json.meta~Stashed changes deleted file mode 100644 index d72c6583..00000000 --- a/Assets/Resources/Config/BundleConfig.json.meta~Stashed changes +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 499e626902425854ab9562d6dc177a6f -timeCreated: 1470109023 -licenseType: Pro -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/Config/ResourcesConfig.json b/Assets/Resources/Config/ResourcesConfig.json deleted file mode 100644 index 7e2ffb15..00000000 --- a/Assets/Resources/Config/ResourcesConfig.json +++ /dev/null @@ -1 +0,0 @@ -{"relyBundles":"{\"m_type\":0,\"m_content\":\"{}\",\"m_enumType\":\"\"}","AssetsBundles":"{\"m_type\":0,\"m_content\":\"{\\\"111\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"111\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Config/111\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"7228da7250d357ec26e8755abdbd652\\\\\\\"}\\\",\\\"BundleConfig\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"BundleConfig\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Config/BundleConfig\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"badc9c9de1319dc2b858eb54d4f843b\\\\\\\"}\\\",\\\"LuaConfig\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"LuaConfig\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Config/LuaConfig\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"qeqweqwe\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"qeqweqwe\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Config/qeqweqwe\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"1ae17d409cce51ba79fbfebd9b8a513\\\\\\\"}\\\",\\\"ResourcesConfig\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"ResourcesConfig\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Config/ResourcesConfig\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"5f3c20c13de3ac54a574e3dfec50a560\\\\\\\"}\\\",\\\"version\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"version\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Config/version\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"608d462d9f197b52d6d380827088c8a6\\\\\\\"}\\\",\\\"item\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"item\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Data/item\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"83ac9b224602e5bdb24b7d05a43607\\\\\\\"}\\\",\\\"testData\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"testData\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Data/testData\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"6f318f1dd178e738f675bb88a5adb84\\\\\\\"}\\\",\\\"LuaLuaTestWindow\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"LuaLuaTestWindow\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Lua/UI/LuaLuaTestWindow\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"luaMain\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"luaMain\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Lua/luaMain\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"LuaUIManager\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"LuaUIManager\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"LuaLib/LuaUIManager\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"LuaUIWindowMetatable\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"LuaUIWindowMetatable\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"LuaLib/LuaUIWindowMetatable\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"GameObject 1\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"GameObject 1\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/GameObject 1\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"e872398f742beb762e90fda16ffc58cd\\\\\\\"}\\\",\\\"GameObject 2\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"GameObject 2\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/GameObject 2\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"3c4f3a52458d17d928474cc753dc0ba\\\\\\\"}\\\",\\\"GameObject\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"GameObject\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/GameObject\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"52d792d15aeb41eb2c1fde7931c1b0\\\\\\\"}\\\",\\\"gogo\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"gogo\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/gogo\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"738c392070bf2f6aed82bbf8e5bf7b7\\\\\\\"}\\\",\\\"UItest 1\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 1\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 1\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"c183f247a38118a49358c9cbaf97178\\\\\\\"}\\\",\\\"UItest 2\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 2\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 2\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"e9e931e9cc1253486425e5560b496d1\\\\\\\"}\\\",\\\"UItest 3\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 3\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 3\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"49eb2c1bbe25818475f70f8b365481c\\\\\\\"}\\\",\\\"UItest 4\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 4\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 4\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"d0c715351f687423a7c6a6bd2a034c4\\\\\\\"}\\\",\\\"UItest 5\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 5\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 5\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"cc399d507394679cbea58566262288\\\\\\\"}\\\",\\\"UItest 6\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 6\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 6\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"107da4d67f0caab11eef8b9f1387acb\\\\\\\"}\\\",\\\"UItest\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"5514fefccd7f2105ee3474a2cd1091\\\\\\\"}\\\",\\\"dl_01\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_01\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_01\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"846d23c565813beae593d882b43f796\\\\\\\"}\\\",\\\"dl_02\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_02\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_02\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"8587fb35a8968419479eadaa4893a7f\\\\\\\"}\\\",\\\"dl_03\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_03\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_03\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"ec5074405cc736abff3b38f774e03140\\\\\\\"}\\\",\\\"dl_04\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_04\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_04\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"2fb613c32d9a6192e445c4b54d9acb\\\\\\\"}\\\",\\\"dl_05\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_05\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_05\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"9d12f76c3aee5ef64bca564ce2ab4099\\\\\\\"}\\\",\\\"dl_07\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_07\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_07\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"869215666fc17f7296fdbe474467f45a\\\\\\\"}\\\",\\\"dl_08\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_08\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_08\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"2348b24634867fe03e2cb3f523aa639b\\\\\\\"}\\\",\\\"dl_09\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_09\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_09\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"4d8f6414cc63a24ca88bf17153189bea\\\\\\\"}\\\",\\\"AAAWindow\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"AAAWindow\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/AAAWindow/AAAWindow\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"LuaTestWindow\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"LuaTestWindow\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/LuaTestWindow/LuaTestWindow\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"test01Window\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"test01Window\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/test01Window/test01Window\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"8248ee1f3d5ff9acd9ed8d6c6b2c8ad\\\\\\\"}\\\",\\\"test02Window\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"test02Window\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/test02Window/test02Window\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"175b6d3035eaaf10bcc78b54ab21ecf\\\\\\\"}\\\",\\\"Image_item\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"Image_item\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/testWindow/Image_item\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"testWindow\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"testWindow\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/testWindow/testWindow\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"e7ed1dfd7ee4c3554c342aa77ecd9e7b\\\\\\\"}\\\",\\\"UIManager\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UIManager\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/UIManager\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"6f517ca0d5487869e7e5c8c5e486e2\\\\\\\"}\\\",\\\"GameObject_adasd\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"GameObject_adasd\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"GameObject_adasd\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"f66634725c635ad230be3f453d217b3e\\\\\\\"}\\\"}\",\"m_enumType\":\"\"}"} \ No newline at end of file diff --git a/Assets/Resources/Config/ResourcesConfig.json.meta b/Assets/Resources/Config/ResourcesConfig.json.meta deleted file mode 100644 index bf9f625e..00000000 --- a/Assets/Resources/Config/ResourcesConfig.json.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3846b189b7381d0479c059b9eb425942 -timeCreated: 1478505802 -licenseType: Pro -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/Config/SDKConfig.json b/Assets/Resources/Config/SDKConfig.json deleted file mode 100644 index 6f7afcbe..00000000 --- a/Assets/Resources/Config/SDKConfig.json +++ /dev/null @@ -1 +0,0 @@ -{"SDKInfo":"{\"m_type\":0,\"m_content\":\"{\\\"SchemeName\\\":\\\"Android\\\",\\\"LogScheme\\\":[],\\\"LoginScheme\\\":[{\\\"SDKName\\\":\\\"GoogleLogin\\\",\\\"SDKContent\\\":\\\"{\\\\\\\"m_SDKName\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"appid\\\\\\\":\\\\\\\"11\\\\\\\",\\\\\\\"apppkey\\\\\\\":\\\\\\\"22\\\\\\\"}\\\"}],\\\"ADScheme\\\":[],\\\"PayScheme\\\":[],\\\"OtherScheme\\\":[],\\\"AndroidkeystoreName\\\":\\\"\\\",\\\"AndroidkeystorePass\\\":\\\"\\\",\\\"AndroidkeyaliasName\\\":\\\"\\\",\\\"AndroidkeyaliasPass\\\":\\\"\\\"}\",\"m_enumType\":\"\"}"} \ No newline at end of file diff --git a/Assets/Resources/Config/SDKConfig.json.meta b/Assets/Resources/Config/SDKConfig.json.meta deleted file mode 100644 index 8be2f486..00000000 --- a/Assets/Resources/Config/SDKConfig.json.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 467a41fb66afbbd47bf2a18ebab4ce95 -timeCreated: 1499083987 -licenseType: Pro -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/Config/qeqweqwe.json b/Assets/Resources/Config/qeqweqwe.json deleted file mode 100644 index 9e26dfee..00000000 --- a/Assets/Resources/Config/qeqweqwe.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/Assets/Resources/Config/qeqweqwe.json.meta b/Assets/Resources/Config/qeqweqwe.json.meta deleted file mode 100644 index 22de36fa..00000000 --- a/Assets/Resources/Config/qeqweqwe.json.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5d6cbb3e0f88a9f4b8b1a710743127e9 -timeCreated: 1477887406 -licenseType: Pro -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/Config/version.json b/Assets/Resources/Config/version.json deleted file mode 100644 index 2b9cb58c..00000000 --- a/Assets/Resources/Config/version.json +++ /dev/null @@ -1 +0,0 @@ -{"largeVersion":"{\"m_type\":2,\"m_content\":\"1\",\"m_enumType\":\"\"}","smallVerson":"{\"m_type\":2,\"m_content\":\"1\",\"m_enumType\":\"\"}","121":"{\"m_type\":7,\"m_content\":\"IsIgnoreTimeScale\",\"m_enumType\":\"AnimParamType\"}","11":"{\"m_type\":7,\"m_content\":\"OutQuad\",\"m_enumType\":\"InterpType\"}"} \ No newline at end of file diff --git a/Assets/Resources/Config/version.json.meta b/Assets/Resources/Config/version.json.meta deleted file mode 100644 index 19759dca..00000000 --- a/Assets/Resources/Config/version.json.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: fa6881fc070222f47866f519630fb7e5 -timeCreated: 1477476200 -licenseType: Pro -TextScriptImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Resources/Config/BundleConfig.json.meta~Stashed changes.meta b/Assets/Resources/UI/AAAWindow.meta similarity index 58% rename from Assets/Resources/Config/BundleConfig.json.meta~Stashed changes.meta rename to Assets/Resources/UI/AAAWindow.meta index 48756589..535101a8 100644 --- a/Assets/Resources/Config/BundleConfig.json.meta~Stashed changes.meta +++ b/Assets/Resources/UI/AAAWindow.meta @@ -1,6 +1,7 @@ fileFormatVersion: 2 -guid: 819bac4b32fa43448ba6ebb72d76474e -timeCreated: 1491838043 +guid: 744f127278d80214ea14b13b521eb255 +folderAsset: yes +timeCreated: 1513389725 licenseType: Pro DefaultImporter: userData: diff --git a/Assets/Resources/UI/AAAWindow/AAAWindow.prefab.meta b/Assets/Resources/UI/AAAWindow/AAAWindow.prefab.meta new file mode 100644 index 00000000..42b5a3d5 --- /dev/null +++ b/Assets/Resources/UI/AAAWindow/AAAWindow.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 85ba45c910d4f0945abca59fec064373 +timeCreated: 1513389732 +licenseType: Pro +NativeFormatImporter: + mainObjectFileID: -1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/Test/Protocol.meta b/Assets/Script/Core/Editor/Test/Protocol.meta new file mode 100644 index 00000000..53c7eb1e --- /dev/null +++ b/Assets/Script/Core/Editor/Test/Protocol.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 468ecb147d4d2914c9d46d9d5bcd6423 +folderAsset: yes +timeCreated: 1513389725 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/Test/Protocol/ProtocolMsgTest.cs.meta b/Assets/Script/Core/Editor/Test/Protocol/ProtocolMsgTest.cs.meta new file mode 100644 index 00000000..f423255d --- /dev/null +++ b/Assets/Script/Core/Editor/Test/Protocol/ProtocolMsgTest.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6777786d032d1aa4a8e29e1d38f92002 +timeCreated: 1513389725 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/Utils/AppyPrefabs.cs.meta b/Assets/Script/Core/Editor/Utils/AppyPrefabs.cs.meta new file mode 100644 index 00000000..fc488d06 --- /dev/null +++ b/Assets/Script/Core/Editor/Utils/AppyPrefabs.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 939de4f7e2937d24f8c6a7c5117998cf +timeCreated: 1513389725 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/UI/Control/UIManager.cs b/Assets/Script/Core/UI/Control/UIManager.cs index 42a57cfe..7af918f0 100644 --- a/Assets/Script/Core/UI/Control/UIManager.cs +++ b/Assets/Script/Core/UI/Control/UIManager.cs @@ -4,6 +4,7 @@ using System; using System.Text.RegularExpressions; +[RequireComponent(typeof(UIStackManager))] [RequireComponent(typeof(UILayerManager))] [RequireComponent(typeof(UIAnimManager))] public class UIManager : MonoBehaviour @@ -11,6 +12,7 @@ public class UIManager : MonoBehaviour public static GameObject s_UIManagerGo; public static UILayerManager s_UILayerManager; //UI层级管理器 public static UIAnimManager s_UIAnimManager; //UI动画管理器 + public static UIStackManager s_UIStackManager; //UI栈管理器 public static Camera s_UIcamera; //UICamera static public Dictionary> s_UIs = new Dictionary>(); //打开的UI @@ -31,6 +33,7 @@ public static void Init() s_UILayerManager = instance.GetComponent(); s_UIAnimManager = instance.GetComponent(); + s_UIStackManager = instance.GetComponent(); s_UIcamera = instance.GetComponentInChildren(); DontDestroyOnLoad(instance); @@ -66,7 +69,7 @@ static void SetUIManager(GameObject instance) #endregion -#region UI的打开与关闭方法 + #region UI的打开与关闭方法 ///

/// 创建UI,如果不打开则存放在Hide列表中 @@ -125,6 +128,7 @@ public static UIWindowBase OpenUIWindow(string UIName, UICallBack callback = nul Debug.LogError(UIName + " OnOpen Exception: " + e.ToString()); } + s_UIStackManager.OnUIOpen(UIbase); s_UILayerManager.SetLayer(UIbase); //设置层级 s_UIAnimManager.StartEnterAnim(UIbase, callback, objs); //播放动画 return UIbase; @@ -178,6 +182,7 @@ static void CloseUIWindowCallBack(UIWindowBase UI, params object[] objs) Debug.LogError(UI.UIName + " OnClose Exception: " + e.ToString()); } + s_UIStackManager.OnUIClose(UI); AddHideUI(UI); } public static void CloseUIWindow(string UIname, bool isPlayAnim = true, UICallBack callback = null, params object[] objs) @@ -292,9 +297,14 @@ public static void CloseAllUI(bool isPlayerAnim = false) } } + public static void CloseLastUI(UIType uiType = UIType.Normal) + { + s_UIStackManager.CloseLastUIWindow(uiType); + } + #endregion -#region UI的打开与关闭 异步方法 + #region UI的打开与关闭 异步方法 public static void OpenUIAsync( UICallBack callback, params object[] objs) where T : UIWindowBase { @@ -315,7 +325,7 @@ public static void OpenUIAsync(string UIName , UICallBack callback, params objec #endregion -#region UI内存管理 + #region UI内存管理 public static void DestroyUI(UIWindowBase UI) { @@ -350,7 +360,7 @@ public static void DestroyAllUI() #endregion -#region 打开UI列表的管理 + #region 打开UI列表的管理 /// /// 删除所有打开的UI @@ -528,7 +538,7 @@ public static int GetNormalUICount() #endregion -#region 隐藏UI列表的管理 + #region 隐藏UI列表的管理 /// /// 删除所有隐藏的UI @@ -630,7 +640,7 @@ static void RemoveHideUI(UIWindowBase UI) #endregion } -#region UI事件 代理 枚举 + #region UI事件 代理 枚举 /// /// UI回调 diff --git a/Assets/Script/Core/UI/Control/UIStackManager.cs b/Assets/Script/Core/UI/Control/UIStackManager.cs new file mode 100644 index 00000000..1c14881e --- /dev/null +++ b/Assets/Script/Core/UI/Control/UIStackManager.cs @@ -0,0 +1,72 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class UIStackManager : MonoBehaviour +{ + List m_normalStack = new List(); + List m_fixedStack = new List(); + List m_popupStack = new List(); + List m_topBarStack = new List(); + + public void OnUIOpen(UIWindowBase ui) + { + switch (ui.m_UIType) + { + case UIType.Fixed: m_fixedStack.Add(ui); break; + case UIType.Normal: m_normalStack.Add(ui); break; + case UIType.PopUp: m_popupStack.Add(ui); break; + case UIType.TopBar: m_topBarStack.Add(ui); break; + } + } + + public void OnUIClose(UIWindowBase ui) + { + switch (ui.m_UIType) + { + case UIType.Fixed: m_fixedStack.Remove(ui); break; + case UIType.Normal: m_normalStack.Remove(ui); break; + case UIType.PopUp: m_popupStack.Remove(ui); break; + case UIType.TopBar: m_topBarStack.Remove(ui); break; + } + } + + public void CloseLastUIWindow(UIType uiType = UIType.Normal) + { + UIWindowBase ui = GetLastUI(uiType); + + if(ui != null) + { + UIManager.CloseUIWindow(ui); + } + } + + public UIWindowBase GetLastUI(UIType uiType) + { + switch (uiType) + { + case UIType.Fixed: + if (m_fixedStack.Count > 0) + return m_fixedStack[m_fixedStack.Count - 1]; + else + return null; + case UIType.Normal: + if (m_normalStack.Count > 0) + return m_normalStack[m_normalStack.Count - 1]; + else + return null; + case UIType.PopUp: + if (m_popupStack.Count > 0) + return m_popupStack[m_popupStack.Count - 1]; + else + return null; + case UIType.TopBar: + if (m_topBarStack.Count > 0) + return m_topBarStack[m_topBarStack.Count - 1]; + else + return null; + } + + throw new System.Exception("CloseLastUIWindow does not support GameUI"); + } +} diff --git a/Assets/Script/Core/UI/Control/UIStackManager.cs.meta b/Assets/Script/Core/UI/Control/UIStackManager.cs.meta new file mode 100644 index 00000000..14509a74 --- /dev/null +++ b/Assets/Script/Core/UI/Control/UIStackManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bdc6a77c73cca994989d899f088d9389 +timeCreated: 1513390113 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/GameStatus/FirstStatus.cs b/Assets/Script/GameStatus/FirstStatus.cs index b1507e07..c3a445a8 100644 --- a/Assets/Script/GameStatus/FirstStatus.cs +++ b/Assets/Script/GameStatus/FirstStatus.cs @@ -24,6 +24,8 @@ public override void OnEnterStatus() AnimSystem.Move(go, null, Vector3.one, callBack: (object[] obj) => { } , parameter: new object[] { }); + + } //public void CallBackTest(InputNetworkEvent e) diff --git a/Assets/Script/GameStatus/GameStatus.cs b/Assets/Script/GameStatus/GameStatus.cs index a1c67394..7b133aba 100644 --- a/Assets/Script/GameStatus/GameStatus.cs +++ b/Assets/Script/GameStatus/GameStatus.cs @@ -7,5 +7,7 @@ public class GameStatus : IApplicationStatus public override void OnEnterStatus() { OpenUI(); + + //UIManager.OpenUIWindow(); } } diff --git a/Assets/Script/UI/AAAWindow.meta b/Assets/Script/UI/AAAWindow.meta new file mode 100644 index 00000000..3acff535 --- /dev/null +++ b/Assets/Script/UI/AAAWindow.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5e357df75b42dab4aa39ea14d653b4f9 +folderAsset: yes +timeCreated: 1513389725 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/UI/AAAWindow/AAAWindow.cs.meta b/Assets/Script/UI/AAAWindow/AAAWindow.cs.meta new file mode 100644 index 00000000..7c644f2d --- /dev/null +++ b/Assets/Script/UI/AAAWindow/AAAWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d1aa26a9015a9b5488ec64f07b3fe29d +timeCreated: 1513389725 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/UI/MainWindow/MainWindow.cs b/Assets/Script/UI/MainWindow/MainWindow.cs index b2f05ed0..548318ee 100644 --- a/Assets/Script/UI/MainWindow/MainWindow.cs +++ b/Assets/Script/UI/MainWindow/MainWindow.cs @@ -52,6 +52,6 @@ public void OnClickShop(InputUIOnClickEvent e) public void OnClickSetting(InputUIOnClickEvent e) { - + UIManager.CloseLastUI(); } } \ No newline at end of file diff --git a/Assets/Script/UI/heiheiheiWindow.meta b/Assets/Script/UI/heiheiheiWindow.meta new file mode 100644 index 00000000..1ed05945 --- /dev/null +++ b/Assets/Script/UI/heiheiheiWindow.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9fd055a14517cd74e8a4ffd199805e4a +folderAsset: yes +timeCreated: 1513389725 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/UI/heiheiheiWindow/heiheiheiWindow.cs.meta b/Assets/Script/UI/heiheiheiWindow/heiheiheiWindow.cs.meta new file mode 100644 index 00000000..58646962 --- /dev/null +++ b/Assets/Script/UI/heiheiheiWindow/heiheiheiWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 78b59c2de9f74e54e9ed5f650e476a7b +timeCreated: 1513389725 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/main.unity b/Assets/main.unity index 8f16e5e2c726d184757af85cbeac2dc659256b7a..e53aaf546686e4c7b785b4eb5b9c6f2b9d192364 100644 GIT binary patch delta 3577 zcmZ{me{fXQ702(}ERcl6Bm_wK6*j*R+86?X#54pGk`NNIA;~5TsG~fRS6JB1hTXRs zs5846?U2@?%3Q^aGfo@v#~*-TR~^Pm8ECCct4>rD1xnKn6&7}Jv(V_E2r;?7obLrY4r6PewV@jHtqPV;8xSG_n7Vn4A*wO*Y{w(&*Sq)4kYJm#dB-S`PyH;x%t|; z(KnZ$O8tOVax{st6x^xN);VZx9iEhWHa!`6o`vNLNHB6a^(Wf0C?NZ`Yghge~P;d%7{ zt#SOouP81zo}5N29Nq$_X^V{)H|?{^|MrA96N<}i7@Ay<*;sHpoM|6g1COAyTyffm z@w`KExesL=^53O6?L+CWF%EVJLfe71p%v#6K=?JJPXm|ov9z2ywCglR;pA>Sslt^- zGSmO9@#2h*koSJ4d%);jqwh4FzFvcQ@2Bn>y=N!t4O;ugPM7ZO_qhAENv*-{H+oFL zjCx*m$c9&tAc)tO@C+l#wSMLkzo-Vh? zaJlyw%tR-WKjXfc2(K$+HYP1r$vMa7szm(sH zC}zr4<|A{Wsat0yEtIs$!<*`#az)t-&W{&lHqjzjPVo;*1-2H}<+spTBXy zH2MN~+x*n3B{_cB@OmmwItpKHTJ1Rh`R_*44}KYmJX{gBm3YXA-!xbLHS+q3q(9wJ z{hxg;Lx*0c1Nku|K#5VK$-ZbE$dUKU=GyBiL5;P-K;KVFR(w}$B_9Fz1JXn&NvOh~ z_@Lrtk?4v}ZIP(#F2mbz_;oYrr|sPxz%IqtB98L5ib5?Z;;%Sh)9jIys!($A7soc= zJiYtgv}fJ>3iEvTZ79JgFCcb&tv*UgM@H*{N%T#&GF}fa{4;r0PV&u)i?gy;@)2b0 z0jHVBqjHjm6_-clWE`&ISU*|nb*~Y5qOnHHsq=Vz4?10Sb(rN^pTEaw?lXOzUA)7V z&HuW#+CB%P@C8kUp^wo)6j2tqG5WoA7&tb(F>iH4qR5?c!8v@$|9k;vLOA3xb>j$J#II37Xl$jWuM%+8|o@U(G zb||zTQXxZ%g~2F6It8wOIogFAJHxLvWru3vb_`k?esacFtKDj^dw_DM8I(ce+5_qBON=}6dP46 z6YML+C_4GkadTa8P1d>-=HSjToB#TBc|^PA^pUhwRBtMcuq zn}7Dn@Qv`tRl|H`^GW_q^Ut$tQqQg4@y5jJ84o+|Lh0Q#g%7qAYE$|1EyH(GMIe-Q zgitgP=73C~V--FzOK9P2T<@C4$2;xZ;j;6wj_JH-{UZKEdl9|US&(V`$ofi+t_!)n zH5a`Ft)%a3UC2$L?~Cb|g?>xuE1gT>^^CKC?{&@+J$fpo4TCu;N=jQfuDhUbY9oD@ z(sTKVws}I&<<~?neFH_R5m&FcJ|nL0Y(RvF)*iLZL>;ouN^6d?;jRr< delta 2184 zcmZ{ke@vBC7{||fxzGgxFCg(t;Bo=MzzYO;b3$Dv29zlm?*$5ffQdkbp+d@PyVsIN z12)}BS6ggiYhz2B`dX`{4wZiVBcnyyRw^xLv?3uzSzF$|&w1Z_L&^isJ?HtH@B5tR zob$YI_jx{XoLd;H_=d6CX2w_q##887p|#Ljuq}_>^Lo8J;)JDMNguUY%0hpSe7rY2 z?%QkEP5d#)E^)>lB0ZXoG0zubpfp1rQMwiPYK3{u0Efa7X&#L;glf5dNMOgx1knvZ)KbIS?rO*Wc1i-b&EODNUP?@uTV z91@tq<|dTx=USX3JOQLFZX>_yFQ` z=serU-B`W{@Ld>P!7|^(yeqJRL-L;;=lD5iMz9m(vvzFPz8es)#S2$LUJI6=oAp8^2Psf)jcA{?U6m zJx`_8{9Iqxf2xyP==%GW`%CvlDqZn*$XJ*G>yJV48?0FESnw*(3xybYvjiAp9+~tS z4B~aZn6O>rbgg+JB`jt|8D=R(Ds$~A&NhSXhS8l+nQL6D!cVXS>CNI?cuZUhMqI9? zl|+vo&7w|+|HWfVTXr@+-@c}$skyykyX-1=zPzPzmzXd)MNg!)sH$UodrNEMs!Eq@ zS3^@H8>Yp)Ue^;RZ{)O&99l9xR9g1Sk=uCX8QvEhnAYeuUXHU!eOSTrbW>FPbgEL} z5zC^!bkpA72ck1s0Q2pA0Q@9e+6CpbpRx#7xd!!wtik)aK5Sg44%Va>Up zs3Y5D*(I2}_bIR4pE)$mL? z7f!__URk@6$B2*Drn*~7yLljQJoEf?Sqew9n)DZPOla|x)An}4!cFex~S+`utf+>Yux%{)QOIn#EErL z?rxw#cp^)|m+oF{-*hb!OKYRopF|wSgUgPcOo4of+|v zZ()NtR+-O(#AIc>NOXKA#vHxeAa+!x@<4I0>YZ4+R-C%8P7p=5IMKDfK-_R7i}Cda zJf7%G76xam9NBcgUHW}a^7}Ac@3M%yu4s%(suM(JHO-e) zQ+g3Kv7)a!K_8vdM+st9Y9eY#v$}>Nb;#cj29F-$&sdRtsPUu zMMtohazqK!b4GExZbtlCpA6rqj&Cq>;i)TtV-V&|CNZ&bu`q8msFj;+3KfdEq;|!r PA_U45`!^fKP<{D7V Date: Thu, 21 Dec 2017 18:35:21 +0800 Subject: [PATCH 023/108] =?UTF-8?q?=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Editor/Network/Protocol/ProtocolHelper.cs | 55 ++++++++++++++++++- .../Script/Core/Editor/XUPorter/XCProject.cs | 18 +++--- .../FrameWork/Status/LuaStatusManager.txt | 8 +-- .../FrameWork/Status/LuaStatusMetaTable.txt | 10 ++-- .../res/LuaLib/FrameWork/UI/LuaUIManager.txt | 22 ++++---- .../FrameWork/UI/LuaUIWindowMetatable.txt | 22 ++++---- .../res/LuaLib/FrameWork/Update/LuaUpdate.txt | 8 +-- .../Editor/res/LuaLib/LuaEventDispatcher.txt | 12 ++-- .../Core/Editor/res/LuaLib/LuaFormatTools.txt | 22 ++++---- .../Core/Editor/res/LuaLib/LuaPrintTable.txt | 12 ++-- .../Script/Core/Editor/res/LuaLib/luaJson.txt | 42 +++++++------- .../Core/Network/Protocol/ProtocolService.cs | 6 ++ Assets/Script/Core/Utils/DeJson.cs | 8 +-- Assets/Script/Core/Utils/FileTool.cs | 2 +- 14 files changed, 153 insertions(+), 94 deletions(-) diff --git a/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs b/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs index 0f2e740f..da4dc13e 100644 --- a/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs +++ b/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs @@ -27,7 +27,6 @@ public class ProtocolHelper #region c# -> protocol [MenuItem("Tools/Protocol/c# -> protocol")] - static void StartGenerate() { GenerateList(); @@ -133,6 +132,27 @@ static string GenerateProtocolMessageField(FieldInfo field, ref int count) return "required int32 " + GenerateProtocolFieldName(field) + " = " + count++ + ";\n"; } } + + else if (field.FieldType == typeof(long)) + { + if (field.GetCustomAttributes(typeof(Int8Attribute), true).Length > 0) + { + return "required int8 " + GenerateProtocolFieldName(field) + " = " + count++ + ";\n"; + } + else if (field.GetCustomAttributes(typeof(Int16Attribute), true).Length > 0) + { + return "required int16 " + GenerateProtocolFieldName(field) + " = " + count++ + ";\n"; + } + else if (field.GetCustomAttributes(typeof(Int32Attribute), true).Length > 0) + { + return "required int32 " + GenerateProtocolFieldName(field) + " = " + count++ + ";\n"; + } + else + { + return "required int64 " + GenerateProtocolFieldName(field) + " = " + count++ + ";\n"; + } + } + else if (field.FieldType == typeof(bool)) { return "required bool " + GenerateProtocolFieldName(field) + " = " + count++ + ";\n"; @@ -191,6 +211,26 @@ static string GetTypeName(Type type) return "int32"; } } + + else if (type == typeof(long)) + { + if (type.GetCustomAttributes(typeof(Int8Attribute), true).Length > 0) + { + return "int8"; + } + else if (type.GetCustomAttributes(typeof(Int16Attribute), true).Length > 0) + { + return "int16"; + } + else if (type.GetCustomAttributes(typeof(Int32Attribute), true).Length > 0) + { + return "int32"; + } + else + { + return "int64"; + } + } else if (type == typeof(bool)) { return "bool"; @@ -1117,10 +1157,17 @@ static string GenerateAnalysisContent(int tab, FieldInfo field, string aimName,s { content += GetTab(tab) + aimName +"." + field.Name + " = " + "(int)"+ sourceName + "[\"" + GenerateProtocolFieldName(field) + "\"];\n"; } + //目前不支持Long类型 + else if (field.FieldType == typeof(long)) + { + content += GetTab(tab) + aimName + "." + field.Name + " = " + "(int)" + sourceName + "[\"" + GenerateProtocolFieldName(field) + "\"];\n"; + } + else if (field.FieldType == typeof(bool)) { content += GetTab(tab) + aimName + "." + field.Name + " = " + "(bool)" + sourceName + "[\"" + GenerateProtocolFieldName(field) + "\"];\n"; } + else if (field.FieldType == typeof(float)) { content += GetTab(tab) + aimName + "." + field.Name + " = " + "(float)(double)" + sourceName + "[\"" + GenerateProtocolFieldName(field) + "\"];\n"; @@ -1210,6 +1257,12 @@ static bool isBaseType(Type type) { return true; } + + else if (type == typeof(long)) + { + return true; + } + else if (type == typeof(bool)) { return true; diff --git a/Assets/Script/Core/Editor/XUPorter/XCProject.cs b/Assets/Script/Core/Editor/XUPorter/XCProject.cs index bef7a16b..fb666a34 100644 --- a/Assets/Script/Core/Editor/XUPorter/XCProject.cs +++ b/Assets/Script/Core/Editor/XUPorter/XCProject.cs @@ -706,7 +706,7 @@ public void ApplyMod( XCMod mod ) { PBXGroup modGroup = this.GetGroup( mod.group ); - Debug.Log( "Adding libraries..." ); + Debug.Log( "Adding libraries.." ); foreach( XCModFile libRef in mod.libs ) { string completeLibPath = System.IO.Path.Combine( "usr/lib", libRef.filePath ); @@ -714,7 +714,7 @@ public void ApplyMod( XCMod mod ) this.AddFile( completeLibPath, modGroup, "SDKROOT", true, libRef.isWeak ); } - Debug.Log( "Adding frameworks..." ); + Debug.Log( "Adding frameworks.." ); PBXGroup frameworkGroup = this.GetGroup( "Frameworks" ); foreach( string framework in mod.frameworks ) { string[] filename = framework.Split( ':' ); @@ -723,13 +723,13 @@ public void ApplyMod( XCMod mod ) this.AddFile( completePath, frameworkGroup, "SDKROOT", true, isWeak ); } - Debug.Log( "Adding files..." ); + Debug.Log( "Adding files.." ); foreach( string filePath in mod.files ) { string absoluteFilePath = System.IO.Path.Combine( mod.path, filePath ); this.AddFile( absoluteFilePath, modGroup ); } - Debug.Log( "Adding embed binaries..." ); + Debug.Log( "Adding embed binaries.." ); if (mod.embed_binaries != null) { //1. Add LD_RUNPATH_SEARCH_PATHS for embed framework @@ -742,14 +742,14 @@ public void ApplyMod( XCMod mod ) } } - Debug.Log( "Adding folders..." ); + Debug.Log( "Adding folders.." ); foreach( string folderPath in mod.folders ) { string absoluteFolderPath = System.IO.Path.Combine( Application.dataPath, folderPath ); Debug.Log ("Adding folder " + absoluteFolderPath); this.AddFolder( absoluteFolderPath, modGroup, (string[])mod.excludes.ToArray( typeof(string) ) ); } - Debug.Log( "Adding headerpaths..." ); + Debug.Log( "Adding headerpaths.." ); foreach( string headerpath in mod.headerpaths ) { if (headerpath.Contains("$(inherited)")) { Debug.Log ("not prepending a path to " + headerpath); @@ -760,17 +760,17 @@ public void ApplyMod( XCMod mod ) } } - Debug.Log( "Adding compiler flags..." ); + Debug.Log( "Adding compiler flags.." ); foreach( string flag in mod.compiler_flags ) { this.AddOtherCFlags( flag ); } - Debug.Log( "Adding linker flags..." ); + Debug.Log( "Adding linker flags.." ); foreach( string flag in mod.linker_flags ) { this.AddOtherLinkerFlags( flag ); } - Debug.Log ("Adding plist items..."); + Debug.Log ("Adding plist items.."); string plistPath = this.projectRootPath + "/Info.plist"; XCPlist plist = new XCPlist (plistPath); plist.Process(mod.plist); diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusManager.txt b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusManager.txt index 4666ada3..032d4107 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusManager.txt +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusManager.txt @@ -20,7 +20,7 @@ function LuaStatusManager:EnterStatus(s_StatusName) --调用Init方法 t_status:OnStatusInit(); else - error("EnterStatus 没有找到 ->"..tostring(s_StatusName).."<- Status"); + error("EnterStatus 没有找到 ->".tostring(s_StatusName)."<- Status"); end end @@ -39,7 +39,7 @@ function LuaStatusManager:ExitStatus(s_StatusName) t_status:CloseALLUIWindow(); t_status:OnExitStatus(); else - error("ExitStatus 没有找到 ->"..tostring(s_StatusName).."<- Status"); + error("ExitStatus 没有找到 ->".tostring(s_StatusName)."<- Status"); end end @@ -58,7 +58,7 @@ function LuaStatusManager:DestroyStatus(s_StatusName) t_status:OnStatusDestroy(); self.t_statusDict[s_StatusName] = nil; else - error("DestroyStatus 没有找到 ->"..tostring(s_StatusName).."<- Status"); + error("DestroyStatus 没有找到 ->".tostring(s_StatusName)."<- Status"); end end @@ -71,7 +71,7 @@ function LuaStatusManager:GetStatus(s_StatusName) return t_status; else - error("GetStatus 没有找到 ->"..tostring(s_StatusName).."<- Status"); + error("GetStatus 没有找到 ->".tostring(s_StatusName)."<- Status"); end end diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusMetaTable.txt b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusMetaTable.txt index 27b4c543..8fc95555 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusMetaTable.txt +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusMetaTable.txt @@ -27,12 +27,12 @@ end function LuaStatusMetaTable:OpenUIWindow(s_WindowName,func_callBack,parms) - print("LuaStatusMetaTable:OpenUIWindow: "..tostring(s_WindowName)); + print("LuaStatusMetaTable:OpenUIWindow: ".tostring(s_WindowName)); if LuaStatusMetaTable.t_windowList[s_WindowName] == nil then LuaStatusMetaTable.t_windowList[s_WindowName] = {}; else - error("LuaStatusMetaTable:OpenUIWindow 覆盖了 "..tostring(s_WindowName).."! 请检查界面是否重复打开"); + error("LuaStatusMetaTable:OpenUIWindow 覆盖了 ".tostring(s_WindowName)."! 请检查界面是否重复打开"); end LuaStatusMetaTable.t_windowList[s_WindowName].s_WindowName = s_WindowName; @@ -41,7 +41,7 @@ end function LuaStatusMetaTable:CloseUIWindow(s_WindowName,isPlayAnim,func_callBack,parms) - print("LuaStatusMetaTable:CloseUIWindow: "..tostring(s_WindowName)); + print("LuaStatusMetaTable:CloseUIWindow: ".tostring(s_WindowName)); if s_WindowName == nil then error("CloseUIWindow error : s_WindowName is nil"); @@ -49,7 +49,7 @@ function LuaStatusMetaTable:CloseUIWindow(s_WindowName,isPlayAnim,func_callBack, end if LuaStatusMetaTable.t_windowList[s_WindowName] == nil then - error("Not Exits ->"..tostring(s_WindowName).."<- Window !"); + error("Not Exits ->".tostring(s_WindowName)."<- Window !"); return; end @@ -65,7 +65,7 @@ end function LuaStatusMetaTable:CloseALLUIWindow() for k,v in pairs(LuaStatusMetaTable.t_windowList) do - -- print("Close: "..v.s_WindowName); + -- print("Close: ".v.s_WindowName); self:CloseUIWindow(v.s_WindowName); end diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIManager.txt b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIManager.txt index 7a780a71..719f35c1 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIManager.txt +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIManager.txt @@ -15,7 +15,7 @@ function LuaUIManager.UIOnInit(UIWindow_window) t_UIWindow:OnInit(); else - error("没有找到 ->"..UIWindow_window.UIName.."<- 对应的Lua脚本!"); + error("没有找到 ->".UIWindow_window.UIName."<- 对应的Lua脚本!"); end end @@ -26,7 +26,7 @@ function LuaUIManager.UIOnOpen(UIWindow_window) if t_UI ~= nil then t_UI:OnOpen(); else - error("UIOnOpen Error Not Find ->"..UIWindow_window.UIEventKey.."<- "); + error("UIOnOpen Error Not Find ->".UIWindow_window.UIEventKey."<- "); end end @@ -37,7 +37,7 @@ function LuaUIManager.UIOnShow(UIWindow_window) if t_UI ~= nil then t_UI:OnShow(); else - error("UIOnShow Error Not Find ->"..UIWindow_window.UIEventKey.."<- "); + error("UIOnShow Error Not Find ->".UIWindow_window.UIEventKey."<- "); end end @@ -48,7 +48,7 @@ function LuaUIManager.UIOnHide(UIWindow_window) if t_UI ~= nil then t_UI:OnHide(); else - error("UIOnHide Error Not Find ->"..UIWindow_window.UIEventKey.."<- "); + error("UIOnHide Error Not Find ->".UIWindow_window.UIEventKey."<- "); end end @@ -59,7 +59,7 @@ function LuaUIManager.UIOnEnterAnim(UIWindow_window) if t_UI ~= nil then return t_UI:EnterAnim(); else - error("UIOnOpen Error Not Find ->"..UIWindow_window.UIEventKey.."<- "); + error("UIOnOpen Error Not Find ->".UIWindow_window.UIEventKey."<- "); end end @@ -69,7 +69,7 @@ function LuaUIManager.UIOnCompleteEnterAnim(UIWindow_window) if t_UI ~= nil then t_UI:OnCompleteEnterAnim(); else - error("UIOnOpen Error Not Find ->"..UIWindow_window.UIEventKey.."<- "); + error("UIOnOpen Error Not Find ->".UIWindow_window.UIEventKey."<- "); end end @@ -79,7 +79,7 @@ function LuaUIManager.UIOnRefresh(UIWindow_window) if t_UI ~= nil then t_UI:OnRefresh(); else - error("UIOnOpen Error Not Find ->"..UIWindow_window.UIEventKey.."<- "); + error("UIOnOpen Error Not Find ->".UIWindow_window.UIEventKey."<- "); end end @@ -89,7 +89,7 @@ function LuaUIManager.UIOnClose(UIWindow_window) if t_UI ~= nil then t_UI:OnClose(); else - error("UIOnOpen Error Not Find ->"..UIWindow_window.UIEventKey.."<- "); + error("UIOnOpen Error Not Find ->".UIWindow_window.UIEventKey."<- "); end end @@ -99,7 +99,7 @@ function LuaUIManager.UIOnExitAnim(UIWindow_window) if t_UI ~= nil then return t_UI:ExitAnim(); else - error("UIOnOpen Error Not Find ->"..UIWindow_window.UIEventKey.."<- "); + error("UIOnOpen Error Not Find ->".UIWindow_window.UIEventKey."<- "); end end @@ -109,7 +109,7 @@ function LuaUIManager.UIOnCompleteExitAnim(UIWindow_window) if t_UI ~= nil then t_UI:OnCompleteExitAnim(); else - error("UIOnOpen Error Not Find ->"..UIWindow_window.UIEventKey.."<- "); + error("UIOnOpen Error Not Find ->".UIWindow_window.UIEventKey."<- "); end end @@ -121,7 +121,7 @@ function LuaUIManager.UIOnDestroy(UIWindow_window) t_UI:OnDestroy(); LuaUIManager.t_UIs[UIWindow_window.UIEventKey] = nil; else - error("UIOnDestroy Error Not Find ->"..UIWindow_window.UIEventKey.."<- "); + error("UIOnDestroy Error Not Find ->".UIWindow_window.UIEventKey."<- "); end end diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIWindowMetatable.txt b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIWindowMetatable.txt index 4cb059c0..b3beb847 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIWindowMetatable.txt +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIWindowMetatable.txt @@ -12,47 +12,47 @@ function UIWindowMetaTable:New(UIWindow_window) end function UIWindowMetaTable:OnInit() - -- print(self.UIWindow_ui.UIEventKey.." OnInit"); + -- print(self.UIWindow_ui.UIEventKey." OnInit"); end function UIWindowMetaTable:OnOpen() - -- print(self.UIWindow_ui.UIEventKey.." OnOpen"); + -- print(self.UIWindow_ui.UIEventKey." OnOpen"); end function UIWindowMetaTable:OnShow() - -- print(self.UIWindow_ui.UIEventKey.." OnShow"); + -- print(self.UIWindow_ui.UIEventKey." OnShow"); end function UIWindowMetaTable:OnHide() - -- print(self.UIWindow_ui.UIEventKey.." OnHide"); + -- print(self.UIWindow_ui.UIEventKey." OnHide"); end function UIWindowMetaTable:EnterAnim() - -- print(self.UIWindow_ui.UIEventKey.." EnterAnim"); + -- print(self.UIWindow_ui.UIEventKey." EnterAnim"); return 0; end function UIWindowMetaTable:OnCompleteEnterAnim() - -- print(self.UIWindow_ui.UIEventKey.." OnCompleteEnterAnim"); + -- print(self.UIWindow_ui.UIEventKey." OnCompleteEnterAnim"); end function UIWindowMetaTable:OnRefresh() - -- print(self.UIWindow_ui.UIEventKey.." OnRefresh"); + -- print(self.UIWindow_ui.UIEventKey." OnRefresh"); end function UIWindowMetaTable:OnClose() - -- print(self.UIWindow_ui.UIEventKey.." OnClose"); + -- print(self.UIWindow_ui.UIEventKey." OnClose"); end function UIWindowMetaTable:ExitAnim() - -- print(self.UIWindow_ui.UIEventKey.." ExitAnim"); + -- print(self.UIWindow_ui.UIEventKey." ExitAnim"); return 0; end function UIWindowMetaTable:OnCompleteExitAnim() - -- print(self.UIWindow_ui.UIEventKey.." OnCompleteExitAnim"); + -- print(self.UIWindow_ui.UIEventKey." OnCompleteExitAnim"); end function UIWindowMetaTable:OnDestroy() - -- print(self.UIWindow_ui.UIEventKey.." OnDestroy"); + -- print(self.UIWindow_ui.UIEventKey." OnDestroy"); end \ No newline at end of file diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update/LuaUpdate.txt b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update/LuaUpdate.txt index f3f7543d..df754bc5 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update/LuaUpdate.txt +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update/LuaUpdate.txt @@ -105,7 +105,7 @@ end function judge_yieldCallBack(n_timeDelta) for k,v in pairs(t_yieldCallBackList) do -- if (os.clock() - n_timeTmp) > c_timerMaxTime then - -- print(os.clock() .. " " ..n_timeTmp.." "..c_timerMaxTime) + -- print(os.clock() . " " .n_timeTmp." ".c_timerMaxTime) -- break; -- end v.time = v.time - n_timeDelta; @@ -113,7 +113,7 @@ function judge_yieldCallBack(n_timeDelta) t_yieldCallBackList[k] = nil; local r, msg = pcall(v.func,v.data) if not r then - error("judge_yieldCallBack error !:"..tostring(msg)); + error("judge_yieldCallBack error !:".tostring(msg)); end end end @@ -128,7 +128,7 @@ function judge_yieldCallBack(n_timeDelta) local r, msg = pcall(v.func,v.data) if not r then - error("judge_nextFrame error !:"..tostring(msg)); + error("judge_nextFrame error !:".tostring(msg)); end end end @@ -142,5 +142,5 @@ end function TimerSwitch() b_isStop = not b_isStop; - warn("b_isStop: "..tostring(b_isStop)); + warn("b_isStop: ".tostring(b_isStop)); end \ No newline at end of file diff --git a/Assets/Script/Core/Editor/res/LuaLib/LuaEventDispatcher.txt b/Assets/Script/Core/Editor/res/LuaLib/LuaEventDispatcher.txt index 194d0e37..7dec5c76 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/LuaEventDispatcher.txt +++ b/Assets/Script/Core/Editor/res/LuaLib/LuaEventDispatcher.txt @@ -9,11 +9,11 @@ local ipairs = _G.ipairs module ("EventDispatcher", package.seeall) -- 默认调用函数 -local function PreInvoke( EventName, Func, Object, UserData, ... ) +local function PreInvoke( EventName, Func, Object, UserData, .. ) if Object then - Func( Object, EventName, ... ) + Func( Object, EventName, .. ) else - Func( EventName, ... ) + Func( EventName, .. ) end end @@ -62,7 +62,7 @@ end -- 派发 local te_time = 0; -function Dispatch( Self, EventName, ... ) +function Dispatch( Self, EventName, .. ) assert( EventName ) --print("Dispatch") local Event = Self.mEventTable[ EventName ] @@ -76,13 +76,13 @@ function Dispatch( Self, EventName, ... ) if Object == "_StaticFunc" then for Func, UserData in pairs( ObjectFunc ) do - Self.mPreInvokeFunc( EventName, Func, nil, UserData, ... ); + Self.mPreInvokeFunc( EventName, Func, nil, UserData, .. ); end else for Func, UserData in pairs( ObjectFunc ) do - Self.mPreInvokeFunc( EventName, Func, Object, UserData, ... ); + Self.mPreInvokeFunc( EventName, Func, Object, UserData, .. ); end end end diff --git a/Assets/Script/Core/Editor/res/LuaLib/LuaFormatTools.txt b/Assets/Script/Core/Editor/res/LuaLib/LuaFormatTools.txt index e9fc12b4..a022f24c 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/LuaFormatTools.txt +++ b/Assets/Script/Core/Editor/res/LuaLib/LuaFormatTools.txt @@ -9,19 +9,19 @@ end function sec2string(sec) local d,h,m,s = sec2time(sec) local str = "" - if d>0 then str = d..":" end + if d>0 then str = d.":" end if h>0 then - h = h<=9 and "0"..h or h - str = str=="" and h or str..":"..h + h = h<=9 and "0".h or h + str = str=="" and h or str.":".h end if tonumber(d)>0 or tonumber(h)>0 or tonumber(m)>0 then - m = m<=9 and "0"..m or m - str = str=="" and m or str..":"..m + m = m<=9 and "0".m or m + str = str=="" and m or str.":".m end - s = s<=9 and "0"..s or s - str = str=="" and s or str..":"..s + s = s<=9 and "0".s or s + str = str=="" and s or str.":".s return str end @@ -54,17 +54,17 @@ end function string.replace (allstr,str,nstr) return (string.gsub(allstr,str,nstr))--没有括号会返回替换次数 end ---替换所有$[num]... 为 {...}中的个数值 -function string.replace_tbl (...) +--替换所有$[num].. 为 {..}中的个数值 +function string.replace_tbl (..) local allstr = "replace tbl no succ!" - local tmp = {...} + local tmp = {..} if tmp == nil then return allstr end for i,v in ipairs(tmp) do if i == 1 then allstr = v end if allstr~=nil and i>1 then - allstr = (string.replace(allstr,tostring("$"..(i-1)),v)) + allstr = (string.replace(allstr,tostring("$".(i-1)),v)) end end return allstr diff --git a/Assets/Script/Core/Editor/res/LuaLib/LuaPrintTable.txt b/Assets/Script/Core/Editor/res/LuaLib/LuaPrintTable.txt index 8023301c..60107d78 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/LuaPrintTable.txt +++ b/Assets/Script/Core/Editor/res/LuaLib/LuaPrintTable.txt @@ -21,17 +21,17 @@ function print_r(root) for k,v in pairs(t) do local key = tostring(k) if cache[v] then - tinsert(temp,"+" .. key .. " {" .. cache[v].."}") + tinsert(temp,"+" . key . " {" . cache[v]."}") elseif type(v) == "table" then - local new_key = name .. "." .. key + local new_key = name . "." . key cache[v] = new_key - tinsert(temp,"+" .. key .. _dump(v,space .. (next(t,k) and "|" or " " ).. srep(" ",#key),new_key)) + tinsert(temp,"+" . key . _dump(v,space . (next(t,k) and "|" or " " ). srep(" ",#key),new_key)) else - tinsert(temp,"+" .. key .. " [" .. tostring(v).."]") + tinsert(temp,"+" . key . " [" . tostring(v)."]") end end - return tconcat(temp,"\n"..space) + return tconcat(temp,"\n".space) end - print("\n".._dump(root, "","")) + print("\n"._dump(root, "","")) end end diff --git a/Assets/Script/Core/Editor/res/LuaLib/luaJson.txt b/Assets/Script/Core/Editor/res/LuaLib/luaJson.txt index 7f53d0bb..503abafd 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/luaJson.txt +++ b/Assets/Script/Core/Editor/res/LuaLib/luaJson.txt @@ -34,7 +34,7 @@ -- Handle strings if vtype=='string' then - return '"' .. json_private.encodeString(v) .. '"' -- Need to handle encoding in string + return '"' . json_private.encodeString(v) . '"' -- Need to handle encoding in string end -- Handle booleans @@ -54,14 +54,14 @@ else -- An object, not an array for i,j in pairs(v) do if isEncodable(i) and isEncodable(j) then - table.insert(rval, '"' .. json_private.encodeString(i) .. '":' .. json.encode(j)) + table.insert(rval, '"' . json_private.encodeString(i) . '":' . json.encode(j)) end end end if bArray then - return '[' .. table.concat(rval,',') ..']' + return '[' . table.concat(rval,',') .']' else - return '{' .. table.concat(rval,',') .. '}' + return '{' . table.concat(rval,',') . '}' end end @@ -70,13 +70,13 @@ return 'null' end - assert(false,'encode attempt to encode unsupported type ' .. vtype .. ':' .. tostring(v)) + assert(false,'encode attempt to encode unsupported type ' . vtype . ':' . tostring(v)) end function json.decode(s, startPos) startPos = startPos and startPos or 1 startPos = decode_scanWhitespace(s,startPos) - assert(startPos<=string.len(s), 'Unterminated JSON encoded object found at position in [' .. s .. ']') + assert(startPos<=string.len(s), 'Unterminated JSON encoded object found at position in [' . s . ']') local curChar = string.sub(s,startPos,startPos) -- Object if curChar=='{' then @@ -108,7 +108,7 @@ function decode_scanArray(s,startPos) local array = {} -- The return value local stringLen = string.len(s) - assert(string.sub(s,startPos,startPos)=='[','decode_scanArray called but array does not start at position ' .. startPos .. ' in string:\n'..s ) + assert(string.sub(s,startPos,startPos)=='[','decode_scanArray called but array does not start at position ' . startPos . ' in string:\n'.s ) startPos = startPos + 1 -- Infinite loop for array elements repeat @@ -129,9 +129,9 @@ function decode_scanComment(s, startPos) - assert( string.sub(s,startPos,startPos+1)=='/*', "decode_scanComment called but comment does not start at position " .. startPos) + assert( string.sub(s,startPos,startPos+1)=='/*', "decode_scanComment called but comment does not start at position " . startPos) local endPos = string.find(s,'*/',startPos+2) - assert(endPos~=nil, "Unterminated comment in string at " .. startPos) + assert(endPos~=nil, "Unterminated comment in string at " . startPos) return endPos+2 end @@ -144,7 +144,7 @@ return consts[k], startPos + string.len(k) end end - assert(nil, 'Failed to scan constant from string ' .. s .. ' at starting position ' .. startPos) + assert(nil, 'Failed to scan constant from string ' . s . ' at starting position ' . startPos) end function decode_scanNumber(s,startPos) @@ -156,9 +156,9 @@ ) do endPos = endPos + 1 end - local stringValue = 'return ' .. string.sub(s,startPos, endPos-1) + local stringValue = 'return ' . string.sub(s,startPos, endPos-1) local stringEval = loadstring(stringValue) - assert(stringEval, 'Failed to scan number [ ' .. stringValue .. '] in JSON string at position ' .. startPos .. ' : ' .. endPos) + assert(stringEval, 'Failed to scan number [ ' . stringValue . '] in JSON string at position ' . startPos . ' : ' . endPos) return stringEval(), endPos end @@ -166,7 +166,7 @@ local object = {} local stringLen = string.len(s) local key, value - assert(string.sub(s,startPos,startPos)=='{','decode_scanObject called but object does not start at position ' .. startPos .. ' in string:\n' .. s) + assert(string.sub(s,startPos,startPos)=='{','decode_scanObject called but object does not start at position ' . startPos . ' in string:\n' . s) startPos = startPos + 1 repeat startPos = decode_scanWhitespace(s,startPos) @@ -181,12 +181,12 @@ assert(startPos<=stringLen, 'JSON string ended unexpectedly scanning object.') -- Scan the key key, startPos = json.decode(s,startPos) - assert(startPos<=stringLen, 'JSON string ended unexpectedly searching for value of key ' .. key) + assert(startPos<=stringLen, 'JSON string ended unexpectedly searching for value of key ' . key) startPos = decode_scanWhitespace(s,startPos) - assert(startPos<=stringLen, 'JSON string ended unexpectedly searching for value of key ' .. key) - assert(string.sub(s,startPos,startPos)==':','JSON object key-value assignment mal-formed at ' .. startPos) + assert(startPos<=stringLen, 'JSON string ended unexpectedly searching for value of key ' . key) + assert(string.sub(s,startPos,startPos)==':','JSON object key-value assignment mal-formed at ' . startPos) startPos = decode_scanWhitespace(s,startPos+1) - assert(startPos<=stringLen, 'JSON string ended unexpectedly searching for value of key ' .. key) + assert(startPos<=stringLen, 'JSON string ended unexpectedly searching for value of key ' . key) value, startPos = json.decode(s,startPos) object[key]=value until false -- infinite loop while key-value pairs are found @@ -205,12 +205,12 @@ end}) function decode_scanString(s,startPos) - assert(startPos, 'decode_scanString(..) called without start position') + assert(startPos, 'decode_scanString(.) called without start position') local startChar = string.sub(s,startPos,startPos) -- START SoniEx2 -- PS: I don't think single quotes are valid JSON assert(startChar == [["]] or startChar == [[']],'decode_scanString called for a non-string') - --assert(startPos, "String decoding failed: missing closing " .. startChar .. " for string at position " .. oldStart) + --assert(startPos, "String decoding failed: missing closing " . startChar . " for string at position " . oldStart) local t = {} local i,j = startPos,startPos while string.find(s, startChar, j+1) ~= j+1 do @@ -225,7 +225,7 @@ local a = string.sub(s,j+1,j+4) j = j + 4 local n = tonumber(a, 16) - assert(n, "String decoding failed: bad Unicode escape " .. a .. " at position " .. i .. " : " .. j) + assert(n, "String decoding failed: bad Unicode escape " . a . " at position " . i . " : " . j) -- math.floor(x/2^y) == lazy right shift -- a % 2^b == bitwise_and(a, (2^b)-1) -- 64 = 2^6 @@ -246,7 +246,7 @@ end end table.insert(t,string.sub(j, j+1)) - assert(string.find(s, startChar, j+1), "String decoding failed: missing closing " .. startChar .. " at position " .. j .. "(for string at position " .. startPos .. ")") + assert(string.find(s, startChar, j+1), "String decoding failed: missing closing " . startChar . " at position " . j . "(for string at position " . startPos . ")") return table.concat(t,""), j+2 -- END SoniEx2 end diff --git a/Assets/Script/Core/Network/Protocol/ProtocolService.cs b/Assets/Script/Core/Network/Protocol/ProtocolService.cs index 183d72c2..aee3ed8a 100644 --- a/Assets/Script/Core/Network/Protocol/ProtocolService.cs +++ b/Assets/Script/Core/Network/Protocol/ProtocolService.cs @@ -1232,6 +1232,12 @@ public class Int16Attribute : System.Attribute { } [AttributeUsage(AttributeTargets.Field)] public class Int8Attribute : System.Attribute { } + /// + /// 在Protocol以Int32传输的字段 + /// + [AttributeUsage(AttributeTargets.Field)] + public class Int32Attribute : System.Attribute { } + /// /// 模块名与模块消息编码 /// diff --git a/Assets/Script/Core/Utils/DeJson.cs b/Assets/Script/Core/Utils/DeJson.cs index ed2f2980..0c97eaa6 100644 --- a/Assets/Script/Core/Utils/DeJson.cs +++ b/Assets/Script/Core/Utils/DeJson.cs @@ -62,7 +62,7 @@ public abstract class CustomCreator { /// int type = src["type"]; /// if (type == 0) { return new Apple; } /// if (type == 1) { return new Raspberry; } - /// .. + /// . /// /// If the parent has info on the type you can do this /// @@ -77,7 +77,7 @@ public abstract class CustomCreator { /// int typeInBasket = parentSrc['typeInBasket']; /// if (type == 0) { return new Apple; } /// if (type == 1) { return new Raspberry; } - /// .. + /// . /// /// /// The created object @@ -122,7 +122,7 @@ public Deserializer(bool includePrivateFields = false) { /// public int hp; /// public Foo someFoo; /// }; - /// ... + /// .. /// Deserializer deserializer = new Deserializer(); /// /// string json = "{\"hp\":123,\"someFoo\":{\"num\":456,\"name\":\"gman\",\"weight\":156.4}}"; @@ -158,7 +158,7 @@ public T Deserialize(string json) { /// public int hp; /// public Foo someFoo; /// }; - /// ... + /// .. /// Deserializer deserializer = new Deserializer(); /// /// Dictionary d = new Dictionary diff --git a/Assets/Script/Core/Utils/FileTool.cs b/Assets/Script/Core/Utils/FileTool.cs index de4a84f1..2407ffa6 100644 --- a/Assets/Script/Core/Utils/FileTool.cs +++ b/Assets/Script/Core/Utils/FileTool.cs @@ -294,7 +294,7 @@ private static bool IsUTF8Bytes(byte[] data) { charByteCounter++; } - //标记位首位若为非0 则至少以2个1开始 如:110XXXXX...........1111110X  + //标记位首位若为非0 则至少以2个1开始 如:110XXXXX......1111110X  if (charByteCounter == 1 || charByteCounter > 6) { return false; From ba1b3f90102f7d3f4d76fcf7be6de4d8dbb83b88 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Fri, 22 Dec 2017 18:04:39 +0800 Subject: [PATCH 024/108] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Resources/Config/111.json | 1 + Assets/Resources/Config/BundleConfig.json | 1 + .../Config/BundleConfig.json.meta~Stashed changes | 8 ++++++++ Assets/Resources/Config/ResourcesConfig.json | 1 + Assets/Resources/Config/SDKConfig.json | 1 + Assets/Resources/Config/qeqweqwe.json | 1 + Assets/Resources/Config/version.json | 1 + Assets/Script/Core/Editor/Utils/AppyPrefabs.cs | 4 ++-- 8 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 Assets/Resources/Config/111.json create mode 100644 Assets/Resources/Config/BundleConfig.json create mode 100644 Assets/Resources/Config/BundleConfig.json.meta~Stashed changes create mode 100644 Assets/Resources/Config/ResourcesConfig.json create mode 100644 Assets/Resources/Config/SDKConfig.json create mode 100644 Assets/Resources/Config/qeqweqwe.json create mode 100644 Assets/Resources/Config/version.json diff --git a/Assets/Resources/Config/111.json b/Assets/Resources/Config/111.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/Assets/Resources/Config/111.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/Assets/Resources/Config/BundleConfig.json b/Assets/Resources/Config/BundleConfig.json new file mode 100644 index 00000000..4fc478b0 --- /dev/null +++ b/Assets/Resources/Config/BundleConfig.json @@ -0,0 +1 @@ +{"relyBundles":"{\"m_type\":0,\"m_content\":\"{}\",\"m_enumType\":\"\"}","AssetsBundles":"{\"m_type\":0,\"m_content\":\"{\\\"111\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"111\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Config/111\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"qeqweqwe\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"qeqweqwe\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Config/qeqweqwe\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"version\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"version\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Config/version\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"item\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"item\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Data/item\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"testData\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"testData\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Data/testData\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"b452c951a5d5df0482bec8dcd1a1d9\\\\\\\"}\\\",\\\"GameObject 1\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"GameObject 1\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/GameObject 1\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"291f65ccbde4abf7d413ee6cd8cd9af7\\\\\\\"}\\\",\\\"GameObject 2\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"GameObject 2\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/GameObject 2\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"a76f44406d7361b55212912366a3d617\\\\\\\"}\\\",\\\"GameObject\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"GameObject\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/GameObject\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"b2f826071b7a6eb6b57e1156c06b4e\\\\\\\"}\\\",\\\"gogo\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"gogo\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/gogo\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"UItest 1\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 1\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 1\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"47f0e1791b44a9835bc55854209769b2\\\\\\\"}\\\",\\\"UItest 2\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 2\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 2\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"4635dc36ba5baf23305dcf4a70f52f2a\\\\\\\"}\\\",\\\"UItest 3\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 3\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 3\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"3867635fa8761470f0196bdd5bd1697\\\\\\\"}\\\",\\\"UItest 4\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 4\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 4\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"8f29d84fefc1995247d9a967d7e1dbf\\\\\\\"}\\\",\\\"UItest 5\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 5\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 5\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"259e1a22a44ed965c075491f458295a5\\\\\\\"}\\\",\\\"UItest 6\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 6\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 6\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"7c2c831c15edd24b6483694930acfd\\\\\\\"}\\\",\\\"UItest\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"2339aac352d15b164ce384e73c5d6b\\\\\\\"}\\\",\\\"dl_01\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_01\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_01\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"5495a66934b1ae3e39247eb88c08e61\\\\\\\"}\\\",\\\"dl_02\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_02\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_02\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"8137aa657eadb78d6e91ff29a9ba3b\\\\\\\"}\\\",\\\"dl_03\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_03\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_03\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"ee4f53087bd81accb8388aea3371d3\\\\\\\"}\\\",\\\"dl_04\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_04\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_04\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"175b6d3035eaaf10bcc78b54ab21ecf\\\\\\\"}\\\",\\\"dl_05\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_05\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_05\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"998923b9c4b3028a6a881f8c37efba4\\\\\\\"}\\\",\\\"dl_07\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_07\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_07\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"f8ae51ef5443062ae681b83ccdf7783\\\\\\\"}\\\",\\\"dl_08\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_08\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_08\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"f7725cbee23dcbcd3fe5fa9d706792ed\\\\\\\"}\\\",\\\"dl_09\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_09\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_09\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"426a9cc8e4fac41d274a0ad7069fbb9\\\\\\\"}\\\",\\\"test01Window\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"test01Window\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/test01Window/test01Window\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"test02Window\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"test02Window\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/test02Window/test02Window\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"testWindow\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"testWindow\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/testWindow/testWindow\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"UIManager\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UIManager\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/UIManager\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"GameObject_adasd\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"GameObject_adasd\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"GameObject_adasd\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"b17ffa952e3f8fe73c8f3b339526\\\\\\\"}\\\"}\",\"m_enumType\":\"\"}","testEnum":"{\"m_type\":7,\"m_content\":\"Bezier2\",\"m_enumType\":\"PathType\"}"} \ No newline at end of file diff --git a/Assets/Resources/Config/BundleConfig.json.meta~Stashed changes b/Assets/Resources/Config/BundleConfig.json.meta~Stashed changes new file mode 100644 index 00000000..d72c6583 --- /dev/null +++ b/Assets/Resources/Config/BundleConfig.json.meta~Stashed changes @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 499e626902425854ab9562d6dc177a6f +timeCreated: 1470109023 +licenseType: Pro +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Config/ResourcesConfig.json b/Assets/Resources/Config/ResourcesConfig.json new file mode 100644 index 00000000..7e2ffb15 --- /dev/null +++ b/Assets/Resources/Config/ResourcesConfig.json @@ -0,0 +1 @@ +{"relyBundles":"{\"m_type\":0,\"m_content\":\"{}\",\"m_enumType\":\"\"}","AssetsBundles":"{\"m_type\":0,\"m_content\":\"{\\\"111\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"111\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Config/111\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"7228da7250d357ec26e8755abdbd652\\\\\\\"}\\\",\\\"BundleConfig\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"BundleConfig\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Config/BundleConfig\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"badc9c9de1319dc2b858eb54d4f843b\\\\\\\"}\\\",\\\"LuaConfig\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"LuaConfig\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Config/LuaConfig\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"qeqweqwe\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"qeqweqwe\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Config/qeqweqwe\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"1ae17d409cce51ba79fbfebd9b8a513\\\\\\\"}\\\",\\\"ResourcesConfig\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"ResourcesConfig\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Config/ResourcesConfig\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"5f3c20c13de3ac54a574e3dfec50a560\\\\\\\"}\\\",\\\"version\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"version\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Config/version\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"608d462d9f197b52d6d380827088c8a6\\\\\\\"}\\\",\\\"item\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"item\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Data/item\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"83ac9b224602e5bdb24b7d05a43607\\\\\\\"}\\\",\\\"testData\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"testData\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Data/testData\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"6f318f1dd178e738f675bb88a5adb84\\\\\\\"}\\\",\\\"LuaLuaTestWindow\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"LuaLuaTestWindow\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Lua/UI/LuaLuaTestWindow\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"luaMain\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"luaMain\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Lua/luaMain\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"LuaUIManager\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"LuaUIManager\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"LuaLib/LuaUIManager\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"LuaUIWindowMetatable\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"LuaUIWindowMetatable\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"LuaLib/LuaUIWindowMetatable\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"GameObject 1\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"GameObject 1\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/GameObject 1\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"e872398f742beb762e90fda16ffc58cd\\\\\\\"}\\\",\\\"GameObject 2\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"GameObject 2\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/GameObject 2\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"3c4f3a52458d17d928474cc753dc0ba\\\\\\\"}\\\",\\\"GameObject\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"GameObject\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/GameObject\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"52d792d15aeb41eb2c1fde7931c1b0\\\\\\\"}\\\",\\\"gogo\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"gogo\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/gogo\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"738c392070bf2f6aed82bbf8e5bf7b7\\\\\\\"}\\\",\\\"UItest 1\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 1\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 1\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"c183f247a38118a49358c9cbaf97178\\\\\\\"}\\\",\\\"UItest 2\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 2\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 2\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"e9e931e9cc1253486425e5560b496d1\\\\\\\"}\\\",\\\"UItest 3\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 3\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 3\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"49eb2c1bbe25818475f70f8b365481c\\\\\\\"}\\\",\\\"UItest 4\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 4\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 4\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"d0c715351f687423a7c6a6bd2a034c4\\\\\\\"}\\\",\\\"UItest 5\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 5\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 5\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"cc399d507394679cbea58566262288\\\\\\\"}\\\",\\\"UItest 6\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest 6\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest 6\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"107da4d67f0caab11eef8b9f1387acb\\\\\\\"}\\\",\\\"UItest\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UItest\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"Prefab/UItest\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"5514fefccd7f2105ee3474a2cd1091\\\\\\\"}\\\",\\\"dl_01\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_01\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_01\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"846d23c565813beae593d882b43f796\\\\\\\"}\\\",\\\"dl_02\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_02\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_02\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"8587fb35a8968419479eadaa4893a7f\\\\\\\"}\\\",\\\"dl_03\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_03\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_03\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"ec5074405cc736abff3b38f774e03140\\\\\\\"}\\\",\\\"dl_04\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_04\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_04\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"2fb613c32d9a6192e445c4b54d9acb\\\\\\\"}\\\",\\\"dl_05\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_05\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_05\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"9d12f76c3aee5ef64bca564ce2ab4099\\\\\\\"}\\\",\\\"dl_07\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_07\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_07\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"869215666fc17f7296fdbe474467f45a\\\\\\\"}\\\",\\\"dl_08\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_08\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_08\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"2348b24634867fe03e2cb3f523aa639b\\\\\\\"}\\\",\\\"dl_09\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"dl_09\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"sprite/dl_09\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"4d8f6414cc63a24ca88bf17153189bea\\\\\\\"}\\\",\\\"AAAWindow\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"AAAWindow\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/AAAWindow/AAAWindow\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"LuaTestWindow\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"LuaTestWindow\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/LuaTestWindow/LuaTestWindow\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"test01Window\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"test01Window\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/test01Window/test01Window\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"8248ee1f3d5ff9acd9ed8d6c6b2c8ad\\\\\\\"}\\\",\\\"test02Window\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"test02Window\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/test02Window/test02Window\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"175b6d3035eaaf10bcc78b54ab21ecf\\\\\\\"}\\\",\\\"Image_item\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"Image_item\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/testWindow/Image_item\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"\\\\\\\"}\\\",\\\"testWindow\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"testWindow\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/testWindow/testWindow\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"e7ed1dfd7ee4c3554c342aa77ecd9e7b\\\\\\\"}\\\",\\\"UIManager\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"UIManager\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"UI/UIManager\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"6f517ca0d5487869e7e5c8c5e486e2\\\\\\\"}\\\",\\\"GameObject_adasd\\\":\\\"{\\\\\\\"name\\\\\\\":\\\\\\\"GameObject_adasd\\\\\\\",\\\\\\\"path\\\\\\\":\\\\\\\"GameObject_adasd\\\\\\\",\\\\\\\"relyPackages\\\\\\\":[],\\\\\\\"md5\\\\\\\":\\\\\\\"f66634725c635ad230be3f453d217b3e\\\\\\\"}\\\"}\",\"m_enumType\":\"\"}"} \ No newline at end of file diff --git a/Assets/Resources/Config/SDKConfig.json b/Assets/Resources/Config/SDKConfig.json new file mode 100644 index 00000000..6f7afcbe --- /dev/null +++ b/Assets/Resources/Config/SDKConfig.json @@ -0,0 +1 @@ +{"SDKInfo":"{\"m_type\":0,\"m_content\":\"{\\\"SchemeName\\\":\\\"Android\\\",\\\"LogScheme\\\":[],\\\"LoginScheme\\\":[{\\\"SDKName\\\":\\\"GoogleLogin\\\",\\\"SDKContent\\\":\\\"{\\\\\\\"m_SDKName\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"appid\\\\\\\":\\\\\\\"11\\\\\\\",\\\\\\\"apppkey\\\\\\\":\\\\\\\"22\\\\\\\"}\\\"}],\\\"ADScheme\\\":[],\\\"PayScheme\\\":[],\\\"OtherScheme\\\":[],\\\"AndroidkeystoreName\\\":\\\"\\\",\\\"AndroidkeystorePass\\\":\\\"\\\",\\\"AndroidkeyaliasName\\\":\\\"\\\",\\\"AndroidkeyaliasPass\\\":\\\"\\\"}\",\"m_enumType\":\"\"}"} \ No newline at end of file diff --git a/Assets/Resources/Config/qeqweqwe.json b/Assets/Resources/Config/qeqweqwe.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/Assets/Resources/Config/qeqweqwe.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/Assets/Resources/Config/version.json b/Assets/Resources/Config/version.json new file mode 100644 index 00000000..2b9cb58c --- /dev/null +++ b/Assets/Resources/Config/version.json @@ -0,0 +1 @@ +{"largeVersion":"{\"m_type\":2,\"m_content\":\"1\",\"m_enumType\":\"\"}","smallVerson":"{\"m_type\":2,\"m_content\":\"1\",\"m_enumType\":\"\"}","121":"{\"m_type\":7,\"m_content\":\"IsIgnoreTimeScale\",\"m_enumType\":\"AnimParamType\"}","11":"{\"m_type\":7,\"m_content\":\"OutQuad\",\"m_enumType\":\"InterpType\"}"} \ No newline at end of file diff --git a/Assets/Script/Core/Editor/Utils/AppyPrefabs.cs b/Assets/Script/Core/Editor/Utils/AppyPrefabs.cs index 15defc40..5b1da084 100644 --- a/Assets/Script/Core/Editor/Utils/AppyPrefabs.cs +++ b/Assets/Script/Core/Editor/Utils/AppyPrefabs.cs @@ -7,7 +7,7 @@ public class AppyPrefabs : Editor static void BatchExportPrefab() { GameObject[] objs = Selection.gameObjects; - int len = objs.Length; + //int len = objs.Length; foreach (GameObject item in objs) { //if (PrefabUtility.GetPrefabType(item) == PrefabType.PrefabInstance){} @@ -22,7 +22,7 @@ static void BatchExportPrefab() static void BatchRestPrefab() { GameObject[] objs = Selection.gameObjects; - int len = objs.Length; + //int len = objs.Length; foreach (GameObject item in objs) { //if (PrefabUtility.GetPrefabType(item) == PrefabType.PrefabInstance){} From 8be39a69bee8892349e63c63d08b633217545749 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Mon, 25 Dec 2017 18:53:24 +0800 Subject: [PATCH 025/108] =?UTF-8?q?=E8=B0=83=E6=95=B4networkManager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Editor/Network/Protocol/ProtocolHelper.cs | 30 +- .../Script/Core/Network/INetworkInterface.cs | 69 - .../Core/Network/INetworkInterface.cs.meta | 12 - .../Network/Interface/INetworkInterface.cs | 45 + .../Core/Network/Interface/SocketBase.cs | 62 + .../Network/{ => Json}/JsonNetworkService.cs | 103 +- .../Core/Network/JsonNetworkService.cs.meta | 12 - Assets/Script/Core/Network/NetworkManager.cs | 50 +- .../Network/Protocol/ProtocolAttribute.cs | 76 + .../Protocol/ProtocolNetworkService.cs | 1115 ++++++++++++++ .../Core/Network/Protocol/ProtocolService.cs | 1299 +---------------- .../Script/Core/Network/Socket/KCPService.cs | 25 + .../Core/Network/Socket/SocketService.cs | 118 ++ .../Core/Network/Socket/WsSocketService.cs | 28 + .../ReusingScrollRect/ReusingScrollRect.cs | 31 +- 15 files changed, 1542 insertions(+), 1533 deletions(-) delete mode 100644 Assets/Script/Core/Network/INetworkInterface.cs delete mode 100644 Assets/Script/Core/Network/INetworkInterface.cs.meta create mode 100644 Assets/Script/Core/Network/Interface/INetworkInterface.cs create mode 100644 Assets/Script/Core/Network/Interface/SocketBase.cs rename Assets/Script/Core/Network/{ => Json}/JsonNetworkService.cs (50%) delete mode 100644 Assets/Script/Core/Network/JsonNetworkService.cs.meta create mode 100644 Assets/Script/Core/Network/Protocol/ProtocolAttribute.cs create mode 100644 Assets/Script/Core/Network/Protocol/ProtocolNetworkService.cs create mode 100644 Assets/Script/Core/Network/Socket/KCPService.cs create mode 100644 Assets/Script/Core/Network/Socket/SocketService.cs create mode 100644 Assets/Script/Core/Network/Socket/WsSocketService.cs diff --git a/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs b/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs index da4dc13e..dce36db1 100644 --- a/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs +++ b/Assets/Script/Core/Editor/Network/Protocol/ProtocolHelper.cs @@ -37,10 +37,10 @@ static void StartGenerate() Debug.Log(protocolContent); Debug.Log(protocolList); - string ProtocolSavePath = Application.dataPath + "/Resources/Network/" + ProtocolService.c_ProtocolFileName + ".txt"; + string ProtocolSavePath = Application.dataPath + "/Resources/Network/" + ProtocolNetworkService.c_ProtocolFileName + ".txt"; ResourceIOTool.WriteStringByFile(ProtocolSavePath, protocolContent); - string MethodSavePath = Application.dataPath + "/Resources/Network/" + ProtocolService.c_methodNameInfoFileName + ".txt"; + string MethodSavePath = Application.dataPath + "/Resources/Network/" + ProtocolNetworkService.c_methodNameInfoFileName + ".txt"; ResourceIOTool.WriteStringByFile(MethodSavePath, protocolList); AssetDatabase.Refresh(); @@ -302,18 +302,18 @@ static void GenerateProtocolToCsharp() string log = "自动生成 c# 类:->\n"; s_SubStruct = new List(); - string path = Application.dataPath + "/Resources/Network/"+ ProtocolService .c_ProtocolFileName+ ".txt"; + string path = Application.dataPath + "/Resources/Network/"+ ProtocolNetworkService .c_ProtocolFileName+ ".txt"; string content = ResourceIOTool.ReadStringByFile(path); - Dictionary>> protocolInfo = ProtocolService.ReadProtocolInfo(content); + Dictionary>> protocolInfo = ProtocolNetworkService.ReadProtocolInfo(content); - path = Application.dataPath + "/Resources/Network/" + ProtocolService.c_methodNameInfoFileName + ".txt"; + path = Application.dataPath + "/Resources/Network/" + ProtocolNetworkService.c_methodNameInfoFileName + ".txt"; content = ResourceIOTool.ReadStringByFile(path); Dictionary methodNameInfo; Dictionary methodIndexInfo; - ProtocolService.ReadMethodNameInfo(out methodNameInfo,out methodIndexInfo, content); + ProtocolNetworkService.ReadMethodNameInfo(out methodNameInfo,out methodIndexInfo, content); string output = "using System.Collections.Generic;\n"; output += "namespace Protocol\n{\n"; @@ -502,22 +502,22 @@ static string GetTypeName(Dictionary currentFeidInfo) int repeat = (int)currentFeidInfo["spl"]; string content = ""; - if (type == ProtocolService.TYPE_int32 - || type == ProtocolService.TYPE_int16 - || type == ProtocolService.TYPE_int8 + if (type == ProtocolNetworkService.TYPE_int32 + || type == ProtocolNetworkService.TYPE_int16 + || type == ProtocolNetworkService.TYPE_int8 ) { content = "int"; } - else if (type == ProtocolService.TYPE_string) + else if (type == ProtocolNetworkService.TYPE_string) { content = "string"; } - else if (type == ProtocolService.TYPE_double) + else if (type == ProtocolNetworkService.TYPE_double) { content = "float"; } - else if (type == ProtocolService.TYPE_bool) + else if (type == ProtocolNetworkService.TYPE_bool) { content = "bool"; } @@ -531,7 +531,7 @@ static string GetTypeName(Dictionary currentFeidInfo) } } - if(repeat == ProtocolService.RT_repeated) + if(repeat == ProtocolNetworkService.RT_repeated) { content = "List<" + content + ">"; } @@ -545,11 +545,11 @@ static string GetAttributeContent(int tab,Dictionary currentFeid int type = (int)currentFeidInfo["type"]; - if (type == ProtocolService.TYPE_int16) + if (type == ProtocolNetworkService.TYPE_int16) { content = GetTab(tab) + "[Int16]\n"; } - else if(type == ProtocolService.TYPE_int8) + else if(type == ProtocolNetworkService.TYPE_int8) { content = GetTab(tab) + "[Int8]\n"; } diff --git a/Assets/Script/Core/Network/INetworkInterface.cs b/Assets/Script/Core/Network/INetworkInterface.cs deleted file mode 100644 index a9c157d2..00000000 --- a/Assets/Script/Core/Network/INetworkInterface.cs +++ /dev/null @@ -1,69 +0,0 @@ -using UnityEngine; -using System.Collections; -using System; -using System.Collections.Generic; -using System.Net.Sockets; - -public class INetworkInterface -{ - //消息集合 - // public List mesStr = new List(); - public bool isConnect = false; - - public string m_IPaddress = ""; - public int m_port = 0; - - public ConnectStatusCallBack m_ConnectStatusCallback; - public MessageCallBack m_messageCallBack; - - public ProtocolType m_protocolType; - - public virtual void Init() - { - - } - - public virtual void GetIPAddress() - { - - } - - public virtual void SetIPAddress(string IP, int port) - { - - } - - public virtual void Connect() - { - } - - public virtual void Close() - { - - } - - public virtual void SendMessage(string MessageType, Dictionary data) - { - - } - - /// - ///回收资源 - /// - /// - public virtual void RecycleData(Dictionary data) - { - - } - - - protected NetWorkMessage GetMessageByPool() - { - NetWorkMessage result = HeapObjectPool.GetObject(); - - return result; - } - -} - - diff --git a/Assets/Script/Core/Network/INetworkInterface.cs.meta b/Assets/Script/Core/Network/INetworkInterface.cs.meta deleted file mode 100644 index 843249aa..00000000 --- a/Assets/Script/Core/Network/INetworkInterface.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 9cfc91f6dd1529343b0a2340e0dfe1b0 -timeCreated: 1472180727 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Script/Core/Network/Interface/INetworkInterface.cs b/Assets/Script/Core/Network/Interface/INetworkInterface.cs new file mode 100644 index 00000000..6ef9091e --- /dev/null +++ b/Assets/Script/Core/Network/Interface/INetworkInterface.cs @@ -0,0 +1,45 @@ +using UnityEngine; +using System.Collections; +using System; +using System.Collections.Generic; +using System.Net.Sockets; + +public abstract class INetworkInterface +{ + public MessageCallBack m_messageCallBack; + public SocketBase m_socketService; + + public virtual void Init() + { + } + + public virtual void GetIPAddress() + { + + } + + public virtual void SetIPAddress(string IP, int port) + { + m_socketService.SetIPAddress(IP, port); + } + + public virtual void Connect() + { + m_socketService.Connect(); + } + + public virtual void Close() + { + m_socketService.Close(); + } + + public virtual void SendMessage(string MessageType, Dictionary data) + { + + } + + public abstract void SpiltMessage(byte[] data, ref int offset, int length); + +} + + diff --git a/Assets/Script/Core/Network/Interface/SocketBase.cs b/Assets/Script/Core/Network/Interface/SocketBase.cs new file mode 100644 index 00000000..e8d3aa53 --- /dev/null +++ b/Assets/Script/Core/Network/Interface/SocketBase.cs @@ -0,0 +1,62 @@ +using System.Collections; +using System.Collections.Generic; +using System.Net.Sockets; +using UnityEngine; + +public abstract class SocketBase +{ + public string m_IPaddress = ""; + public int m_port = 0; + + public bool isConnect = false; + + public ConnectStatusCallBack m_connectStatusCallback; + public ByteCallBack m_byteCallBack; + + public ProtocolType m_protocolType; + + public byte[] m_readData = new byte[1024 * 1024]; + + /// + /// 初始化 + /// + public virtual void Init() + { + + } + + /// + /// 传入时间 + /// + public virtual void Update() + { + + } + + /// + /// 设置IP和端口 + /// + /// + /// + public virtual void SetIPAddress(string IP, int port) + { + m_IPaddress = IP; + m_port = port; + } + + /// + /// 发送数据 + /// + /// + public abstract void Send(byte[] sendbytes); + + /// + /// 建立连接 + /// + public abstract void Connect(); + + /// + ///关闭连接 + /// + public abstract void Close(); +} diff --git a/Assets/Script/Core/Network/JsonNetworkService.cs b/Assets/Script/Core/Network/Json/JsonNetworkService.cs similarity index 50% rename from Assets/Script/Core/Network/JsonNetworkService.cs rename to Assets/Script/Core/Network/Json/JsonNetworkService.cs index 76439bec..b829c42e 100644 --- a/Assets/Script/Core/Network/JsonNetworkService.cs +++ b/Assets/Script/Core/Network/Json/JsonNetworkService.cs @@ -20,101 +20,10 @@ public class JsonNetworkService : INetworkInterface /// public const string c_endCharReplaceString = ""; - private Socket m_Socket; - private byte[] m_readData = new byte[1024]; - - private Thread m_connThread; - - public override void Init() - { - - } - - public override void GetIPAddress() - { - //m_IPaddress = DataManager.GetData("ServerData")["1"].GetString("Address"); - //m_port = DataManager.GetData("ServerData")["1"].GetInt("port"); - } - - public override void SetIPAddress(string IP,int port) - { - m_IPaddress = IP; - m_port = port; - } - - //连接服务器 - public override void Connect() + public override void SpiltMessage(byte[] data, ref int offset, int length) { - Close(); - - m_connThread = null; - m_connThread = new Thread(new ThreadStart(requestConnect)); - m_connThread.Start(); - } - - //关闭连接 - public override void Close() - { - isConnect = false; - if (m_Socket != null) - { - m_Socket.Close(0); - m_Socket = null; - } - if (m_connThread != null) - { - m_connThread.Join(); - m_connThread.Abort(); - } - m_connThread = null; - } - - //请求数据服务连接线程 - void requestConnect() - { - try - { - m_ConnectStatusCallback(NetworkState.Connecting); - - SocketType socketType = SocketType.Stream; - - if (m_protocolType == ProtocolType.Udp) - { - socketType = SocketType.Dgram; - } - - m_Socket = new Socket(AddressFamily.InterNetwork, socketType, m_protocolType); - IPAddress ip = IPAddress.Parse(m_IPaddress); - IPEndPoint ipe = new IPEndPoint(ip, m_port); - //mSocket. - m_Socket.Connect(ipe); - isConnect = true; - StartReceive(); - - m_ConnectStatusCallback(NetworkState.Connected); - } - catch (Exception e) - { - Debug.LogError(e.ToString()); - isConnect = false; - m_ConnectStatusCallback(NetworkState.FaildToConnect); - } - - } - void StartReceive() - { - m_Socket.BeginReceive(m_readData, 0, m_readData.Length, SocketFlags.None, new AsyncCallback(EndReceive), m_Socket); - } - void EndReceive(IAsyncResult iar) //接收数据 - { - Socket remote = (Socket)iar.AsyncState; - int recv = remote.EndReceive(iar); - if (recv > 0) - { - DealMessage(Encoding.UTF8.GetString(m_readData, 0, recv)); - } - - StartReceive(); + DealMessage(Encoding.UTF8.GetString(data, offset, length)); + offset = 0; } //发送消息 @@ -131,12 +40,11 @@ public override void SendMessage(string MessageType, Dictionary mes = mes.Replace(c_endChar.ToString(), c_endCharReplaceString); byte[] bytes = Encoding.UTF8.GetBytes(mes + "&"); - m_Socket.Send(bytes); + m_socketService.Send(bytes); } catch (Exception e) { Debug.LogError(e.ToString()); - //m_netWorkCallBack(e.ToString()); } } @@ -195,13 +103,10 @@ public void CallBack(string s) m_messageCallBack(msg); } - } catch(Exception e) { Debug.LogError("Message error ->" + s +"<-\n" + e.ToString()); } } - - } diff --git a/Assets/Script/Core/Network/JsonNetworkService.cs.meta b/Assets/Script/Core/Network/JsonNetworkService.cs.meta deleted file mode 100644 index ab501eb7..00000000 --- a/Assets/Script/Core/Network/JsonNetworkService.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 758a15ed8a4895245914f51f7b11b6d8 -timeCreated: 1510932222 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Script/Core/Network/NetworkManager.cs b/Assets/Script/Core/Network/NetworkManager.cs index b29897c3..f510330e 100644 --- a/Assets/Script/Core/Network/NetworkManager.cs +++ b/Assets/Script/Core/Network/NetworkManager.cs @@ -17,27 +17,54 @@ public static bool IsConnect return false; } - return s_network.isConnect; + return s_network.m_socketService.isConnect; } } - public static void Init(ProtocolType protocolType = ProtocolType.Tcp) where T : INetworkInterface,new () + /// + /// 对旧代码的兼容 + /// + /// 协议处理类 + /// + [Obsolete("New method is Init")] + public static void Init(ProtocolType protocolType = ProtocolType.Tcp) where T : INetworkInterface, new() + { + Init(); + } + + [Obsolete("New method is Init(string networkInterfaceName,string socketName)")] + public static void Init(string networkInterfaceName) + { + Init(networkInterfaceName, "SocketService"); + } + + /// + /// 网络初始化 + /// + /// 协议处理类 + /// Socket类 + /// 通讯协议 + public static void Init(ProtocolType protocolType = ProtocolType.Tcp) where TProtocol : INetworkInterface,new () where TSocket : SocketBase,new() { //提前加载网络事件派发器,避免异步冲突 InputManager.LoadDispatcher(); InputManager.LoadDispatcher(); - s_network = new T(); - s_network.m_protocolType = protocolType; + s_network = new TProtocol(); + s_network.m_socketService = new TSocket(); + s_network.m_socketService.m_byteCallBack = s_network.SpiltMessage; + s_network.m_socketService.m_connectStatusCallback = ConnectStatusChange; + s_network.m_socketService.m_protocolType = protocolType; + s_network.m_socketService.Init(); + s_network.Init(); s_network.m_messageCallBack = ReceviceMeaasge; - s_network.m_ConnectStatusCallback = ConnectStatusChange; ApplicationManager.s_OnApplicationUpdate += Update; ApplicationManager.s_OnApplicationQuit += DisConnect; } - public static void Init(string networkInterfaceName) + public static void Init(string networkInterfaceName,string socketName) { //提前加载网络事件派发器,避免异步冲突 InputManager.LoadDispatcher(); @@ -46,9 +73,16 @@ public static void Init(string networkInterfaceName) Type type = Type.GetType(networkInterfaceName); s_network = Activator.CreateInstance(type) as INetworkInterface; + + Type socketType = Type.GetType(networkInterfaceName); + + s_network.m_socketService = Activator.CreateInstance(socketType) as SocketBase; + s_network.m_socketService.m_byteCallBack = s_network.SpiltMessage; + s_network.m_socketService.m_connectStatusCallback = ConnectStatusChange; + s_network.m_socketService.Init(); + s_network.Init(); s_network.m_messageCallBack = ReceviceMeaasge; - s_network.m_ConnectStatusCallback = ConnectStatusChange; ApplicationManager.s_OnApplicationUpdate += Update; ApplicationManager.s_OnApplicationQuit += DisConnect; @@ -60,7 +94,6 @@ public static void Dispose() InputManager.UnLoadDispatcher(); s_network.m_messageCallBack = null; - s_network.m_ConnectStatusCallback = null; s_network = null; ApplicationManager.s_OnApplicationUpdate -= Update; @@ -198,6 +231,7 @@ static void Update() #endregion } +public delegate void ByteCallBack(byte[] data, ref int offset, int length); public delegate void MessageCallBack(NetWorkMessage receStr); public delegate void ConnectStatusCallBack(NetworkState connectStstus); diff --git a/Assets/Script/Core/Network/Protocol/ProtocolAttribute.cs b/Assets/Script/Core/Network/Protocol/ProtocolAttribute.cs new file mode 100644 index 00000000..2ee1a371 --- /dev/null +++ b/Assets/Script/Core/Network/Protocol/ProtocolAttribute.cs @@ -0,0 +1,76 @@ +using System; + +namespace Protocol +{ + /// + /// 在Protocol以Int16传输的字段 + /// + [AttributeUsage(AttributeTargets.Field)] + public class Int16Attribute : System.Attribute { } + + /// + /// 在Protocol以Int8传输的字段 + /// + [AttributeUsage(AttributeTargets.Field)] + public class Int8Attribute : System.Attribute { } + + /// + /// 在Protocol以Int32传输的字段 + /// + [AttributeUsage(AttributeTargets.Field)] + public class Int32Attribute : System.Attribute { } + + /// + /// 模块名与模块消息编码 + /// + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface)] + public class ModuleAttribute : System.Attribute + { + public int MessageCode; + public string ModuleName; + + public ModuleAttribute(int messageCode, string moduleName) + { + MessageCode = messageCode; + ModuleName = moduleName; + } + } + + /// + /// 消息发送模式,如果不加默认为Both + /// 生成 protocol 时 ToClient 和 ToServer 类型不会自动加后缀,要保证类名后面有_s 或者 _c后缀 + /// Both自动添加 _s 和 _c 后缀 + /// + [AttributeUsage(AttributeTargets.Class)] + public class MessageModeAttribute : System.Attribute + { + public SendMode Mode; + + public MessageModeAttribute(SendMode mode) + { + Mode = mode; + } + } + + public enum SendMode + { + ToClient, + ToServer, + Both, + } + + /// + /// 自动被Protocol解析的基类 + /// + public interface IProtocolMessageInterface { } + + /// + /// 自动被Protocol解析的结构 + /// + public interface IProtocolStructInterface { } + + /// + /// + /// + public interface CsharpProtocolInterface : IProtocolMessageInterface { } +} \ No newline at end of file diff --git a/Assets/Script/Core/Network/Protocol/ProtocolNetworkService.cs b/Assets/Script/Core/Network/Protocol/ProtocolNetworkService.cs new file mode 100644 index 00000000..85e17397 --- /dev/null +++ b/Assets/Script/Core/Network/Protocol/ProtocolNetworkService.cs @@ -0,0 +1,1115 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; +using UnityEngine; + +public class ProtocolNetworkService : INetworkInterface +{ + public const int TYPE_string = 1; + public const int TYPE_int32 = 2; + public const int TYPE_double = 3; + public const int TYPE_bool = 4; + public const int TYPE_custom = 5; + + public const int TYPE_int8 = 6; + public const int TYPE_int16 = 7; + public const int RT_repeated = 1; + public const int RT_equired = 0; + + public const string c_ProtocolFileName = "ProtocolInfo"; + public const string c_methodNameInfoFileName = "MethodInfo"; + + Dictionary>> m_protocolInfo; + + Dictionary m_methodNameInfo; + Dictionary m_methodIndexInfo; + + public override void Init() + { + m_protocolInfo = ReadProtocolInfo(ResourceManager.ReadTextFile(c_ProtocolFileName)); + ReadMethodNameInfo( + out m_methodNameInfo, + out m_methodIndexInfo, + ResourceManager.ReadTextFile(c_methodNameInfoFileName)); + + m_messageBuffer = new byte[204800]; + + m_head = 0; + m_total = 0; + + base.Init(); + } + + public override void SendMessage(string MessageType, Dictionary data) + { + ByteArray msg = new ByteArray(); + //ByteArray msg = new ByteArray() + msg.clear(); + + List message = GetSendByte(MessageType, data); + + int len = 3 + message.Count; + int method = GetMethodIndex(MessageType); + + msg.WriteShort(len); + msg.WriteByte((byte)(method / 100)); + msg.WriteShort(method); + + if (message != null) + msg.Bytes.AddRange(message); + else + msg.WriteInt(0); + + m_socketService.Send(msg.Buffer); + } + + #region 缓冲区 + + byte[] m_messageBuffer; + int m_head = 0; + int m_total = 0; + + public override void SpiltMessage(byte[] data, ref int offset, int length) + { + WriteBytes(data, length); + int i = 0; + + while (GetBufferLength() != 0 && ReadLength() <= GetBufferLength()) + { + ReceiveDataLoad(ReadByte(ReadLength())); + + if (i > 100) + { + break; + } + } + + offset = 0; + } + + void WriteBytes(byte[] bytes, int length) + { + for (int i = 0; i < length; i++) + { + int pos = m_total + i; + + if (pos >= m_messageBuffer.Length) + { + pos -= m_messageBuffer.Length; + } + + m_messageBuffer[pos] = bytes[i]; + } + + m_total += length; + + if (m_total >= m_messageBuffer.Length) + { + m_total -= m_messageBuffer.Length; + } + } + + int ReadLength() + { + int result = (int)m_messageBuffer[m_head] << 8; + + int nextPos = m_head + 1; + + if (nextPos >= m_messageBuffer.Length) + { + nextPos = 0; + } + + result += (int)m_messageBuffer[nextPos]; + return result + 2; + } + + int GetBufferLength() + { + if (m_total >= m_head) + { + return m_total - m_head; + } + else + { + return m_total + (m_messageBuffer.Length - m_head); + } + } + + byte[] ReadByte(int length) + { + byte[] bytes = new byte[length]; + + if (m_head + length < m_messageBuffer.Length) + { + Array.Copy(m_messageBuffer, m_head, bytes, 0, length); + m_head += length; + } + else + { + int cutLength = m_messageBuffer.Length - m_head; + + Array.Copy(m_messageBuffer, m_head, bytes, 0, cutLength); + Array.Copy(m_messageBuffer, 0, bytes, cutLength, length - cutLength); + + m_head = length - cutLength; + } + return bytes; + } + + #endregion + + //解包 + private void ReceiveDataLoad(byte[] bytes) + { + try + { + ByteArray ba = new ByteArray(); + + //用于做数据处理,加解密,或者压缩于解压缩 + ba.clear(); + ba.Add(bytes); + + NetWorkMessage msg = Analysis(ba); + m_messageCallBack(msg); + } + catch (Exception e) + { + Debug.LogError(e.ToString()); + } + } + + #region 读取protocol信息 + + public static Dictionary>> ReadProtocolInfo(string content) + { + Dictionary>> protocolInfo = new Dictionary>>(); + + AnalysisProtocolStatus currentStatus = AnalysisProtocolStatus.None; + List> msgInfo = new List>(); + Regex rgx = new Regex(@"^message\s(\w+)"); + + string[] lines = content.Split('\n'); + + for (int i = 0; i < lines.Length; i++) + { + string currentLine = lines[i]; + + if (currentStatus == AnalysisProtocolStatus.None) + { + if (currentLine.Contains("message")) + { + string msgName = rgx.Match(currentLine).Groups[1].Value; + + msgInfo = new List>(); + + if (protocolInfo.ContainsKey(msgName)) + { + Debug.LogError("protocol 有重复的Key! :" + msgName); + } + else + { + protocolInfo.Add(msgName, msgInfo); + } + + currentStatus = AnalysisProtocolStatus.Message; + } + } + else + { + if (currentLine.Contains("}")) + { + currentStatus = AnalysisProtocolStatus.None; + msgInfo = null; + } + else + { + if (currentLine.Contains("required")) + { + Dictionary currentFeidInfo = new Dictionary(); + + currentFeidInfo.Add("spl", RT_equired); + + AddName(currentLine, currentFeidInfo); + AddType(currentLine, currentFeidInfo); + + msgInfo.Add(currentFeidInfo); + } + else if (currentLine.Contains("repeated")) + { + Dictionary currentFeidInfo = new Dictionary(); + + currentFeidInfo.Add("spl", RT_repeated); + + AddName(currentLine, currentFeidInfo); + AddType(currentLine, currentFeidInfo); + + msgInfo.Add(currentFeidInfo); + } + } + } + } + + return protocolInfo; + } + + static Regex m_TypeRgx = new Regex(@"^\s+\w+\s+(\w+)\s+\w+"); + + static void AddType(string currentLine, Dictionary currentFeidInfo) + { + if (currentLine.Contains("int32")) + { + currentFeidInfo.Add("type", TYPE_int32); + } + else if (currentLine.Contains("int16")) + { + currentFeidInfo.Add("type", TYPE_int16); + } + else if (currentLine.Contains("int8")) + { + currentFeidInfo.Add("type", TYPE_int8); + } + else if (currentLine.Contains("string")) + { + currentFeidInfo.Add("type", TYPE_string); + } + else if (currentLine.Contains("double")) + { + currentFeidInfo.Add("type", TYPE_double); + } + else if (currentLine.Contains("bool")) + { + currentFeidInfo.Add("type", TYPE_bool); + } + else + { + currentFeidInfo.Add("type", TYPE_custom); + currentFeidInfo.Add("vp", m_TypeRgx.Match(currentLine).Groups[1].Value); + } + } + + static Regex m_NameRgx = new Regex(@"^\s+\w+\s+\w+\s+(\w+)"); + + static void AddName(string currentLine, Dictionary currentFeidInfo) + { + currentFeidInfo.Add("name", m_NameRgx.Match(currentLine).Groups[1].Value); + } + + enum AnalysisProtocolStatus + { + None, + Message + } + + #endregion + + #region 读取消息号映射 + + public static void ReadMethodNameInfo(out Dictionary methodNameInfo, out Dictionary methodIndexInfo, string content) + { + methodNameInfo = new Dictionary(); + methodIndexInfo = new Dictionary(); + + Regex rgx = new Regex(@"^(\d+),(\w+)"); + + string[] lines = content.Split('\n'); + + for (int i = 0; i < lines.Length; i++) + { + if (lines[i].Contains(",")) + { + var res = rgx.Match(lines[i]); + + string index = res.Groups[1].Value; + string indexName = res.Groups[2].Value; + + methodNameInfo.Add(int.Parse(index), indexName); + methodIndexInfo.Add(indexName, int.Parse(index)); + } + } + } + + int GetMethodIndex(string messageType) + { + try + { + return m_methodIndexInfo[messageType]; + } + catch + { + throw new Exception("GetMethodIndex ERROR! NOT Find " + messageType); + } + } + + #endregion + + #region 解包 + + NetWorkMessage Analysis(ByteArray bytes) + { + NetWorkMessage msg = new NetWorkMessage(); + bytes.ReadUShort(); //消息长度 + bytes.ReadByte(); //模块名 + + int methodIndex = bytes.ReadUShort(); //方法名 + + //Debug.Log("methodIndex " + methodIndex); + //Debug.Log("ReceiveDataLoad : " + BitConverter.ToString(bytes.Buffer)); + try + { + msg.m_MessageType = m_methodNameInfo[methodIndex]; + } + catch + { + throw new Exception("没有找到消息号! " + methodIndex); + } + + int re_len = bytes.Length - 5; + msg.m_data = AnalysisData(msg.m_MessageType, bytes.ReadBytes(re_len)); + + if (msg.m_data == null) + { + throw new Exception("protocol msg.m_data is null !"); + } + + return msg; + } + + #region 解析数据 + + Dictionary AnalysisData(string MessageType, byte[] bytes) + { + //Debug.Log("MessageType:" + MessageType + "AnalysisData: " + BitConverter.ToString(bytes)); + + string fieldName = ""; + string customType = ""; + int fieldType = 0; + int repeatType = 0; + try + { + Dictionary data = new Dictionary(); + ByteArray ba = new ByteArray(); + + ba.clear(); + ba.Add(bytes); + + string messageTypeTemp = "m_" + MessageType + "_c"; + if (!m_protocolInfo.ContainsKey(messageTypeTemp)) + { + throw new Exception("ProtocolInfo NOT Exist ->" + messageTypeTemp + "<-"); + } + + List> tableInfo = m_protocolInfo["m_" + MessageType + "_c"]; + + for (int i = 0; i < tableInfo.Count; i++) + { + fieldType = (int)tableInfo[i]["type"]; + repeatType = (int)tableInfo[i]["spl"]; + fieldName = (string)tableInfo[i]["name"]; + + if (fieldType == TYPE_string) + { + if (repeatType == RT_repeated) + { + data[fieldName] = ReadStringList(ba); + } + else + { + data[fieldName] = ReadString(ba); + } + } + else if (fieldType == TYPE_bool) + { + if (repeatType == RT_repeated) + { + data[fieldName] = ReadBoolList(ba); + } + else + { + data[fieldName] = ReadBool(ba); + } + } + else if (fieldType == TYPE_double) + { + if (repeatType == RT_repeated) + { + data[fieldName] = ReadDoubleList(ba); + } + else + { + data[fieldName] = ReadDouble(ba); + } + } + else if (fieldType == TYPE_int32) + { + if (repeatType == RT_repeated) + { + data[fieldName] = ReadIntList(ba); + } + else + { + data[fieldName] = ReadInt32(ba); + } + } + else if (fieldType == TYPE_int16) + { + if (repeatType == RT_repeated) + { + data[fieldName] = ReadShortList(ba); + } + else + { + data[fieldName] = ReadInt16(ba); + } + } + else if (fieldType == TYPE_int8) + { + if (repeatType == RT_repeated) + { + data[fieldName] = ReadInt8List(ba); + } + else + { + data[fieldName] = ReadInt8(ba); + } + } + else + { + customType = (string)tableInfo[i]["vp"]; + + if (repeatType == RT_repeated) + { + data[fieldName] = ReadDictionaryList(customType, ba); + } + else + { + data[fieldName] = ReadDictionary(customType, ba); + } + } + } + + return data; + } + catch (Exception e) + { + throw new Exception(@"AnalysisData Excepiton Data is ->" + MessageType + + "<-\nFieldName:->" + fieldName + + "<-\nFieldType:->" + GetFieldType(fieldType) + + "<-\nRepeatType:->" + GetRepeatType(repeatType) + + "<-\nCustomType:->" + customType + + "<-\n" + e.ToString()); + } + } + + private string ReadString(ByteArray ba) + { + uint len = (uint)ba.ReadUShort(); + return ba.ReadUTFBytes(len); + } + private List ReadStringList(ByteArray ba) + { + List tbl = new List(); + tbl.Clear(); + + int len1 = ba.ReadUShort(); + ba.ReadUInt(); + + for (int i = 0; i < len1; i++) + { + tbl.Add(ReadString(ba)); + } + return tbl; + } + private bool ReadBool(ByteArray ba) + { + return ba.ReadBoolean(); + } + private List ReadBoolList(ByteArray ba) + { + List tbl = new List(); + tbl.Clear(); + + int len1 = ba.ReadUShort(); + ba.ReadUInt(); + + for (int i = 0; i < len1; i++) + { + tbl.Add(ReadBool(ba)); + } + return tbl; + } + private int ReadInt(ByteArray ba) + { + return ba.ReadUInt(); + } + + private int ReadInt32(ByteArray ba) + { + return ba.ReadInt32(); + } + + private int ReadInt16(ByteArray ba) + { + return ba.ReadInt16(); + } + private int ReadInt8(ByteArray ba) + { + return ba.ReadInt8(); + } + private List ReadIntList(ByteArray ba) + { + List tbl = new List(); + + int len1 = ba.ReadUShort(); + ba.ReadUInt(); + + for (int i = 0; i < len1; i++) + { + int tem_o_read_int = ReadInt32(ba); + tbl.Add(tem_o_read_int); + } + + return tbl; + } + + private List ReadShortList(ByteArray ba) + { + List tbl = new List(); + + int len1 = ba.ReadUShort(); + ba.ReadUInt(); + + for (int i = 0; i < len1; i++) + { + int tem_o_read_int = ReadInt16(ba); + tbl.Add(tem_o_read_int); + } + + return tbl; + } + + private List ReadInt8List(ByteArray ba) + { + List tbl = new List(); + + int len1 = ba.ReadUShort(); + ba.ReadUInt(); + + for (int i = 0; i < len1; i++) + { + int tem_o_read_int = ReadInt8(ba); + tbl.Add(tem_o_read_int); + } + + return tbl; + } + + private double ReadDouble(ByteArray ba) + { + double tem_double = ba.ReadDouble(); + return Math.Floor(tem_double * 1000) / 1000; + } + private List ReadDoubleList(ByteArray ba) + { + List tbl = new List(); + + int len1 = ba.ReadUShort(); + ba.ReadUInt(); + + for (int i = 0; i < len1; i++) + { + tbl.Add(ReadDouble(ba)); + } + return tbl; + } + + private Dictionary ReadDictionary(string dictName, ByteArray ba) + { + int fieldType = 0; + int repeatType = 0; + string fieldName = null; + string customType = null; + + try + { + int st_len = ba.ReadUInt(); + + Dictionary tbl = new Dictionary(); + + if (st_len == 0) + { + Debug.Log("return"); + return tbl; + } + + List> tableInfo = m_protocolInfo[dictName]; + + for (int i = 0; i < tableInfo.Count; i++) + { + fieldType = (int)tableInfo[i]["type"]; + repeatType = (int)tableInfo[i]["spl"]; + fieldName = (string)tableInfo[i]["name"]; + + if (fieldType == TYPE_string) + { + if (repeatType == RT_repeated) + { + tbl[fieldName] = ReadStringList(ba); + } + else + { + tbl[fieldName] = ReadString(ba); + } + } + else if (fieldType == TYPE_bool) + { + if (repeatType == RT_repeated) + { + tbl[fieldName] = ReadBoolList(ba); + } + else + { + tbl[fieldName] = ReadBool(ba); + } + } + else if (fieldType == TYPE_double) + { + if (repeatType == RT_repeated) + { + tbl[fieldName] = ReadDoubleList(ba); + } + else + { + tbl[fieldName] = ReadDouble(ba); + } + } + else if (fieldType == TYPE_int32) + { + if (repeatType == RT_repeated) + { + tbl[fieldName] = ReadIntList(ba); + } + else + { + tbl[fieldName] = ReadInt32(ba); + } + } + else if (fieldType == TYPE_int16) + { + if (repeatType == RT_repeated) + { + tbl[fieldName] = ReadShortList(ba); + } + else + { + tbl[fieldName] = ReadInt16(ba); + } + } + else if (fieldType == TYPE_int8) + { + if (repeatType == RT_repeated) + { + tbl[fieldName] = ReadInt8List(ba); + } + else + { + tbl[fieldName] = ReadInt8(ba); + } + } + else + { + customType = (string)tableInfo[i]["vp"]; + + if (repeatType == RT_repeated) + { + tbl[fieldName] = ReadDictionaryList(customType, ba); + } + else + { + tbl[fieldName] = ReadDictionary(customType, ba); + } + } + } + return tbl; + + } + catch (Exception e) + { + throw new Exception(@"ReadDictionary Excepiton DictName is ->" + dictName + + "<-\nFieldName:->" + fieldName + + "<-\nFieldType:->" + GetFieldType(fieldType) + + "<-\nRepeatType:->" + GetRepeatType(repeatType) + + "<-\nCustomType:->" + customType + + "<-\n" + e.ToString()); + } + } + + private List> ReadDictionaryList(string str, ByteArray ba) + { + List> stbl = new List>(); + + int len1 = ba.ReadUShort(); + ba.ReadUInt(); + + //Debug.Log("len1 " + len1 + " " + ba.ReadUInt()); + + for (int i = 0; i < len1; i++) + { + stbl.Add(ReadDictionary(str, ba)); + } + return stbl; + } + + #endregion + + #endregion + + #region 发包 + + List GetSendByte(string messageType, Dictionary data) + { + try + { + string messageTypeTemp = "m_" + messageType + "_s"; + if (!m_protocolInfo.ContainsKey(messageTypeTemp)) + { + throw new Exception("ProtocolInfo NOT Exist ->" + messageTypeTemp + "<-"); + } + + return GetCustomTypeByte(messageTypeTemp, data); + } + catch (Exception e) + { + throw new Exception(@"ProtocolService GetSendByte Excepiton messageType is ->" + messageType + + "<-\n" + e.ToString()); + } + } + + int GetStringListLength(List list) + { + int len = 0; + for (int i = 0; i < list.Count; i++) + { + byte[] bs = Encoding.UTF8.GetBytes((string)list[i]); + len = len + bs.Length; + + } + return len; + } + + List> m_arrayCache = new List>(); + int GetCustomListLength(string customType, List list) + { + m_arrayCache.Clear(); + int len = 0; + for (int i = 0; i < list.Count; i++) + { + List bs = GetCustomTypeByte(customType, (Dictionary)list[i]); + m_arrayCache.Add(bs); + len = len + bs.Count + 4; + } + return len; + } + + private List GetCustomTypeByte(string customType, Dictionary data) + { + string fieldName = null; + int fieldType = 0; + int repeatType = 0; + + try + { + ByteArray Bytes = new ByteArray(); + //ByteArray Bytes = new ByteArray(); + Bytes.clear(); + + if (!m_protocolInfo.ContainsKey(customType)) + { + throw new Exception("ProtocolInfo NOT Exist ->" + customType + "<-"); + } + + List> tableInfo = m_protocolInfo[customType]; + + for (int i = 0; i < tableInfo.Count; i++) + { + Dictionary currentField = tableInfo[i]; + fieldType = (int)currentField["type"]; + fieldName = (string)currentField["name"]; + repeatType = (int)currentField["spl"]; + + if (fieldType == TYPE_string) + { + if (data.ContainsKey(fieldName)) + { + if (repeatType == RT_equired) + { + Bytes.WriteString((string)data[fieldName]); + } + else + { + List list = (List)data[fieldName]; + + Bytes.WriteShort(list.Count); + Bytes.WriteInt(GetStringListLength(list)); + for (int i2 = 0; i2 < list.Count; i2++) + { + Bytes.WriteString((string)list[i2]); + } + } + } + else + { + Bytes.WriteShort(0); + } + } + else if (fieldType == TYPE_bool) + { + if (data.ContainsKey(fieldName)) + { + if (repeatType == RT_equired) + { + Bytes.WriteBoolean((bool)data[fieldName]); + } + else + { + List tb = (List)data[fieldName]; + Bytes.WriteShort(tb.Count); + Bytes.WriteInt(tb.Count); + for (int i2 = 0; i2 < tb.Count; i2++) + { + Bytes.WriteBoolean((bool)tb[i2]); + } + } + } + } + else if (fieldType == TYPE_double) + { + if (data.ContainsKey(fieldName)) + { + if (repeatType == RT_equired) + { + Bytes.WriteDouble((float)data[fieldName]); + } + else + { + List tb = (List)data[fieldName]; + Bytes.WriteShort(tb.Count); + Bytes.WriteInt(tb.Count * 8); + for (int j = 0; j < tb.Count; j++) + { + Bytes.WriteDouble((float)tb[j]); + } + } + } + } + else if (fieldType == TYPE_int32) + { + if (data.ContainsKey(fieldName)) + { + if (repeatType == RT_equired) + { + Bytes.WriteInt(int.Parse(data[fieldName].ToString())); + } + else + { + List tb = (List)data[fieldName]; + Bytes.WriteShort(tb.Count); + Bytes.WriteInt(tb.Count * 4); + for (int i2 = 0; i2 < tb.Count; i2++) + { + Bytes.WriteInt(int.Parse(tb[i2].ToString())); + } + } + } + } + else if (fieldType == TYPE_int16) + { + if (data.ContainsKey(fieldName)) + { + if (repeatType == RT_equired) + { + Bytes.WriteShort(int.Parse(data[fieldName].ToString())); + } + else + { + List tb = (List)data[fieldName]; + Bytes.WriteShort(tb.Count); + Bytes.WriteInt(tb.Count * 2); + for (int i2 = 0; i2 < tb.Count; i2++) + { + Bytes.WriteShort(int.Parse(tb[i2].ToString())); + } + } + } + } + else if (fieldType == TYPE_int8) + { + if (data.ContainsKey(fieldName)) + { + if (repeatType == RT_equired) + { + Bytes.WriteInt8(int.Parse(data[fieldName].ToString())); + } + else + { + List tb = (List)data[fieldName]; + Bytes.WriteShort(tb.Count); + Bytes.WriteInt(tb.Count); + for (int i2 = 0; i2 < tb.Count; i2++) + { + Bytes.WriteInt8(int.Parse(tb[i2].ToString())); + } + } + } + } + else + { + if (data.ContainsKey(fieldName)) + { + customType = (string)currentField["vp"]; + if (repeatType == RT_equired) + { + List byteTmp = GetCustomTypeByte(customType, (Dictionary)data[fieldName]); + + Bytes.WriteInt(byteTmp.Count); + Bytes.Bytes.AddRange(byteTmp); + } + else + { + List tb = (List)data[fieldName]; + + Bytes.WriteShort(tb.Count); + //这里会修改m_arrayCatch的值,下面就可以直接使用 + Bytes.WriteInt(GetCustomListLength(customType, tb)); + + for (int j = 0; j < m_arrayCache.Count; j++) + { + List tempb = m_arrayCache[j]; + Bytes.WriteInt(tempb.Count); + Bytes.Bytes.AddRange(tempb); + } + } + } + } + } + return Bytes.Bytes; + } + catch (Exception e) + { + throw new Exception(@"GetCustomTypeByte Excepiton CustomType is ->" + customType + + "<-\nFieldName:->" + fieldName + + "<-\nFieldType:->" + GetFieldType(fieldType) + + "<-\nRepeatType:->" + GetRepeatType(repeatType) + + "<-\nCustomType:->" + customType + + "<-\n" + e.ToString()); + } + } + + string GetFieldType(int fieldType) + { + switch (fieldType) + { + case TYPE_string: return "TYPE_string"; + case TYPE_int32: return "TYPE_int32"; + case TYPE_int16: return "TYPE_int16"; + case TYPE_int8: return "TYPE_int8"; + case TYPE_double: return "TYPE_double"; + case TYPE_bool: return "TYPE_bool"; + case TYPE_custom: return "TYPE_custom"; + default: return "Error"; + } + } + + string GetRepeatType(int repeatType) + { + switch (repeatType) + { + case RT_repeated: return "RT_repeated"; + case RT_equired: return "RT_equired"; + default: return "Error"; + } + } + + #endregion +} + +//#region 特性与基类 + +//namespace Protocol +//{ +// /// +// /// 在Protocol以Int16传输的字段 +// /// +// [AttributeUsage(AttributeTargets.Field)] +// public class Int16Attribute : System.Attribute { } + +// /// +// /// 在Protocol以Int8传输的字段 +// /// +// [AttributeUsage(AttributeTargets.Field)] +// public class Int8Attribute : System.Attribute { } + +// /// +// /// 在Protocol以Int32传输的字段 +// /// +// [AttributeUsage(AttributeTargets.Field)] +// public class Int32Attribute : System.Attribute { } + +// /// +// /// 模块名与模块消息编码 +// /// +// [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface)] +// public class ModuleAttribute : System.Attribute +// { +// public int MessageCode; +// public string ModuleName; + +// public ModuleAttribute(int messageCode, string moduleName) +// { +// MessageCode = messageCode; +// ModuleName = moduleName; +// } +// } + +// /// +// /// 消息发送模式,如果不加默认为Both +// /// 生成 protocol 时 ToClient 和 ToServer 类型不会自动加后缀,要保证类名后面有_s 或者 _c后缀 +// /// Both自动添加 _s 和 _c 后缀 +// /// +// [AttributeUsage(AttributeTargets.Class)] +// public class MessageModeAttribute : System.Attribute +// { +// public SendMode Mode; + +// public MessageModeAttribute(SendMode mode) +// { +// Mode = mode; +// } +// } + +// public enum SendMode +// { +// ToClient, +// ToServer, +// Both, +// } + +// /// +// /// 自动被Protocol解析的基类 +// /// +// public interface IProtocolMessageInterface { } + +// /// +// /// 自动被Protocol解析的结构 +// /// +// public interface IProtocolStructInterface { } + +// /// +// /// +// /// +// public interface CsharpProtocolInterface : IProtocolMessageInterface { } +//} + +//#endregion \ No newline at end of file diff --git a/Assets/Script/Core/Network/Protocol/ProtocolService.cs b/Assets/Script/Core/Network/Protocol/ProtocolService.cs index aee3ed8a..cfa07d1a 100644 --- a/Assets/Script/Core/Network/Protocol/ProtocolService.cs +++ b/Assets/Script/Core/Network/Protocol/ProtocolService.cs @@ -1,1295 +1,10 @@ -using UnityEngine; -using System.Collections; -using System.Net.Sockets; -using System.Collections.Generic; -using System; -using System.Net; -using System.Threading; -using System.Text; -using System.Text.RegularExpressions; -using UnityEngine.Networking; -#if !UNITY_EDITOR && UNITY_WEBGL -using YLWebSocket; -#endif +using System; -public class ProtocolService : INetworkInterface +/// +/// 旧名字的兼容 +/// +[Obsolete("ProtocolService is no longer used and the new name is ProtocolNetworkService")] +public class ProtocolService : ProtocolNetworkService { - public const int TYPE_string = 1; - public const int TYPE_int32 = 2; - public const int TYPE_double = 3; - public const int TYPE_bool = 4; - public const int TYPE_custom = 5; - public const int TYPE_int8 = 6; - public const int TYPE_int16 = 7; - public const int RT_repeated = 1; - public const int RT_equired = 0; - - public const string c_ProtocolFileName = "ProtocolInfo"; - public const string c_methodNameInfoFileName = "MethodInfo"; - - Dictionary>> m_protocolInfo; - - Dictionary m_methodNameInfo; - Dictionary m_methodIndexInfo; - -#if !UNITY_EDITOR && UNITY_WEBGL - private WebSocket m_scoket; - -#else - - private Socket m_Socket; - private byte[] m_readData; - AsyncCallback m_acb = null; - private Thread m_connThread; -#endif - - public override void Init() - { - m_protocolInfo = ReadProtocolInfo(ResourceManager.ReadTextFile(c_ProtocolFileName)); - ReadMethodNameInfo( - out m_methodNameInfo, - out m_methodIndexInfo, - ResourceManager.ReadTextFile(c_methodNameInfoFileName)); - -#if !UNITY_EDITOR && UNITY_WEBGL - GameObject web = new GameObject("WebSocket"); - WebSocketManager manager = web.AddComponent(); - m_scoket = WebSocketManager.instance.GetSocket(m_IPaddress); -#else - m_acb = new AsyncCallback(EndReceive); - m_readData = new byte[102400]; - m_messageBuffer = new byte[204800]; - - m_head = 0; - m_total = 0; -#endif - } - - public override void GetIPAddress() - { - m_IPaddress = "127.0.0.1"; - m_port = 7001; - } - public override void SetIPAddress(string IP, int port) - { - m_IPaddress = IP; - m_port = port; - -#if !UNITY_EDITOR && UNITY_WEBGL - m_IPaddress = "ws://" + m_IPaddress + ":" + port; -#endif - } - public override void Close() - { -#if !UNITY_EDITOR && UNITY_WEBGL - if (m_scoket.state == WebSocket.State.Connecting - || m_scoket.state == WebSocket.State.Connected) - { - m_scoket.Close(); - } -#else - isConnect = false; - if (m_Socket != null) - { - m_Socket.Close(0); - m_Socket = null; - } - if (m_connThread != null) - { - m_connThread.Join(); - m_connThread.Abort(); - } - m_connThread = null; -#endif - } - - public override void Connect() - { - Close(); - -#if !UNITY_EDITOR && UNITY_WEBGL - try - { - m_scoket = WebSocketManager.instance.GetSocket(m_IPaddress); - if (m_scoket.state == WebSocket.State.Closed) - { - m_scoket.onConnected += OnConnected; - m_scoket.onClosed += OnClosed; - m_scoket.onReceived += OnReceived; - m_scoket.Connect(); - m_ConnectStatusCallback(NetworkState.Connecting); - } - } - catch (Exception e) - { - Debug.LogError("WebSocket connect Excption :" + e.ToString()); - } -#else - - m_connThread = null; - m_connThread = new Thread(new ThreadStart(RequestConnect)); - m_connThread.Start(); - -#endif - } -#if !(!UNITY_EDITOR && UNITY_WEBGL) - //请求数据服务连接线程 - void RequestConnect() - { - try - { - m_ConnectStatusCallback(NetworkState.Connecting); - - SocketType socketType = SocketType.Stream; - - if (m_protocolType == ProtocolType.Udp) - { - socketType = SocketType.Dgram; - } - - m_Socket = new Socket(AddressFamily.InterNetwork, socketType, m_protocolType); - IPAddress ip = IPAddress.Parse(m_IPaddress); - - IPEndPoint ipe = new IPEndPoint(ip, m_port); - //mSocket. - m_Socket.Connect(ipe); - isConnect = true; - StartReceive(); - - m_ConnectStatusCallback(NetworkState.Connected); - } - catch (Exception e) - { - Debug.LogError("IP :" + m_IPaddress + " Port: " + m_port+" :"+e.ToString()); - isConnect = false; - m_ConnectStatusCallback(NetworkState.FaildToConnect); - } - } - - void StartReceive() - { - m_Socket.BeginReceive(m_readData, 0, m_readData.Length, SocketFlags.None, m_acb, m_Socket); - } - - void EndReceive(IAsyncResult iar) //接收数据 - { - Socket remote = (Socket)iar.AsyncState; - int recv = remote.EndReceive(iar); - if (recv > 0) - { - SpiltMessage(m_readData, recv); - } - - StartReceive(); - } - -#else - - public void OnClosed() - { - m_scoket.onConnected -= OnConnected; - m_scoket.onClosed -= OnClosed; - m_scoket.onReceived -= OnReceived; - - m_ConnectStatusCallback(NetworkState.ConnectBreak); - } - - public void OnConnected() - { - Debug.Log("connected on " + m_scoket.address); - m_ConnectStatusCallback(NetworkState.Connected); - } - - public void OnReceived(byte[] data) - { - ReceiveDataLoad(data); - } -#endif - - //发包 - public void Send(byte[] sendbytes) - { -#if !(!UNITY_EDITOR && UNITY_WEBGL) - try - { - m_Socket.Send(sendbytes); - } - catch (Exception e) - { - isConnect = false; - Debug.LogError("Send Message Error : " + e.Message); - } -#else - m_scoket.Send(sendbytes); -#endif - } - - public override void SendMessage(string MessageType,Dictionary data) - { - ByteArray msg = new ByteArray(); - //ByteArray msg = new ByteArray() - msg.clear(); - - List message = GetSendByte(MessageType, data); - - int len = 3 + message.Count; - int method = GetMethodIndex(MessageType); - - msg.WriteShort(len); - msg.WriteByte((byte)(method/100)); - msg.WriteShort(method); - - if (message != null) - msg.Bytes.AddRange(message); - else - msg.WriteInt(0); - - Send(msg.Buffer); - } - - #region 缓冲区 - - byte[] m_messageBuffer; - int m_head = 0; - int m_total = 0; - - void SpiltMessage(byte[] bytes,int length) - { - WriteBytes(bytes, length); - int i = 0; - - while (GetBufferLength() != 0 && ReadLength() <= GetBufferLength()) - { - ReceiveDataLoad(ReadByte(ReadLength())); - - if (i>100) - { - break; - } - } - } - - void WriteBytes(byte[] bytes,int length) - { - for (int i = 0; i < length; i++) - { - int pos = m_total + i; - - if (pos >= m_messageBuffer.Length) - { - pos -= m_messageBuffer.Length; - } - - m_messageBuffer[pos] = bytes[i]; - } - - m_total += length; - - if (m_total >= m_messageBuffer.Length) - { - m_total -= m_messageBuffer.Length; - } - } - - int ReadLength() - { - int result = (int)m_messageBuffer[m_head] << 8; - - int nextPos = m_head + 1; - - if (nextPos >= m_messageBuffer.Length) - { - nextPos = 0; - } - - result += (int)m_messageBuffer[nextPos]; - return result + 2; - } - - int GetBufferLength() - { - if(m_total >= m_head) - { - return m_total - m_head; - } - else - { - return m_total + (m_messageBuffer.Length - m_head); - } - } - - byte[] ReadByte(int length) - { - byte[] bytes = new byte[length]; - - if (m_head + length < m_messageBuffer.Length) - { - Array.Copy(m_messageBuffer, m_head, bytes, 0, length); - m_head += length; - } - else - { - int cutLength = m_messageBuffer.Length - m_head; - - Array.Copy(m_messageBuffer, m_head, bytes, 0, cutLength); - Array.Copy(m_messageBuffer, 0, bytes, cutLength, length - cutLength); - - m_head = length - cutLength; - } - return bytes; - } - -#endregion - - //解包 - private void ReceiveDataLoad(byte[] bytes) - { - try - { - ByteArray ba = new ByteArray(); - - //用于做数据处理,加解密,或者压缩于解压缩 - ba.clear(); - ba.Add(bytes); - - NetWorkMessage msg = Analysis(ba); - m_messageCallBack(msg); - } - catch(Exception e) - { - Debug.LogError(e.ToString()); - } - } - - #region 读取protocol信息 - - public static Dictionary>> ReadProtocolInfo(string content) - { - Dictionary>> protocolInfo = new Dictionary>>(); - - AnalysisProtocolStatus currentStatus = AnalysisProtocolStatus.None; - List> msgInfo = new List>(); - Regex rgx = new Regex(@"^message\s(\w+)"); - - string[] lines = content.Split('\n'); - - for (int i = 0; i < lines.Length; i++) - { - string currentLine = lines[i]; - - if (currentStatus == AnalysisProtocolStatus.None) - { - if (currentLine.Contains("message")) - { - string msgName = rgx.Match(currentLine).Groups[1].Value; - - msgInfo = new List>(); - - if (protocolInfo.ContainsKey(msgName)) - { - Debug.LogError("protocol 有重复的Key! :" + msgName); - } - else - { - protocolInfo.Add(msgName, msgInfo); - } - - currentStatus = AnalysisProtocolStatus.Message; - } - } - else - { - if (currentLine.Contains("}")) - { - currentStatus = AnalysisProtocolStatus.None; - msgInfo = null; - } - else - { - if (currentLine.Contains("required")) - { - Dictionary currentFeidInfo = new Dictionary(); - - currentFeidInfo.Add("spl", RT_equired); - - AddName(currentLine, currentFeidInfo); - AddType(currentLine, currentFeidInfo); - - msgInfo.Add(currentFeidInfo); - } - else if (currentLine.Contains("repeated")) - { - Dictionary currentFeidInfo = new Dictionary(); - - currentFeidInfo.Add("spl", RT_repeated); - - AddName(currentLine, currentFeidInfo); - AddType(currentLine, currentFeidInfo); - - msgInfo.Add(currentFeidInfo); - } - } - } - } - - return protocolInfo; - } - - static Regex m_TypeRgx = new Regex(@"^\s+\w+\s+(\w+)\s+\w+"); - - static void AddType(string currentLine, Dictionary currentFeidInfo) - { - if (currentLine.Contains("int32")) - { - currentFeidInfo.Add("type", TYPE_int32); - } - else if (currentLine.Contains("int16")) - { - currentFeidInfo.Add("type", TYPE_int16); - } - else if (currentLine.Contains("int8")) - { - currentFeidInfo.Add("type", TYPE_int8); - } - else if (currentLine.Contains("string")) - { - currentFeidInfo.Add("type", TYPE_string); - } - else if (currentLine.Contains("double")) - { - currentFeidInfo.Add("type", TYPE_double); - } - else if (currentLine.Contains("bool")) - { - currentFeidInfo.Add("type", TYPE_bool); - } - else - { - currentFeidInfo.Add("type", TYPE_custom); - currentFeidInfo.Add("vp", m_TypeRgx.Match(currentLine).Groups[1].Value); - } - } - - static Regex m_NameRgx = new Regex(@"^\s+\w+\s+\w+\s+(\w+)"); - - static void AddName(string currentLine, Dictionary currentFeidInfo) - { - currentFeidInfo.Add("name", m_NameRgx.Match(currentLine).Groups[1].Value); - } - - enum AnalysisProtocolStatus - { - None, - Message - } - -#endregion - - #region 读取消息号映射 - - public static void ReadMethodNameInfo(out Dictionary methodNameInfo,out Dictionary methodIndexInfo,string content) - { - methodNameInfo = new Dictionary(); - methodIndexInfo = new Dictionary(); - - Regex rgx = new Regex(@"^(\d+),(\w+)"); - - string[] lines = content.Split('\n'); - - for (int i = 0; i < lines.Length; i++) - { - if (lines[i].Contains(",")) - { - var res = rgx.Match(lines[i]); - - string index = res.Groups[1].Value; - string indexName = res.Groups[2].Value; - - methodNameInfo.Add(int.Parse(index), indexName); - methodIndexInfo.Add(indexName, int.Parse(index)); - } - } - } - - int GetMethodIndex(string messageType) - { - try - { - return m_methodIndexInfo[messageType]; - } - catch - { - throw new Exception("GetMethodIndex ERROR! NOT Find " + messageType); - } - } - -#endregion - - #region 解包 - - NetWorkMessage Analysis(ByteArray bytes) - { - NetWorkMessage msg = new NetWorkMessage(); - bytes.ReadUShort(); //消息长度 - bytes.ReadByte(); //模块名 - - int methodIndex = bytes.ReadUShort(); //方法名 - - //Debug.Log("methodIndex " + methodIndex); - //Debug.Log("ReceiveDataLoad : " + BitConverter.ToString(bytes.Buffer)); - try - { - msg.m_MessageType = m_methodNameInfo[methodIndex]; - } - catch - { - throw new Exception("没有找到消息号! " + methodIndex); - } - - int re_len = bytes.Length - 5; - msg.m_data = AnalysisData(msg.m_MessageType, bytes.ReadBytes(re_len)); - - if(msg.m_data == null) - { - throw new Exception("protocol msg.m_data is null !"); - } - - return msg; - } - - #region 解析数据 - - Dictionary AnalysisData(string MessageType, byte[] bytes) - { - //Debug.Log("MessageType:" + MessageType + "AnalysisData: " + BitConverter.ToString(bytes)); - - string fieldName = ""; - string customType = ""; - int fieldType = 0; - int repeatType = 0; - try - { - Dictionary data = new Dictionary(); - ByteArray ba = new ByteArray(); - - ba.clear(); - ba.Add(bytes); - - string messageTypeTemp = "m_" + MessageType + "_c"; - if (!m_protocolInfo.ContainsKey(messageTypeTemp)) - { - throw new Exception("ProtocolInfo NOT Exist ->" + messageTypeTemp + "<-"); - } - - List> tableInfo = m_protocolInfo["m_" + MessageType + "_c"]; - - for (int i = 0; i < tableInfo.Count; i++) - { - fieldType = (int)tableInfo[i]["type"]; - repeatType = (int)tableInfo[i]["spl"]; - fieldName = (string)tableInfo[i]["name"]; - - if (fieldType == TYPE_string) - { - if (repeatType == RT_repeated) - { - data[fieldName] = ReadStringList(ba); - } - else - { - data[fieldName] = ReadString(ba); - } - } - else if (fieldType == TYPE_bool) - { - if (repeatType == RT_repeated) - { - data[fieldName] = ReadBoolList(ba); - } - else - { - data[fieldName] = ReadBool(ba); - } - } - else if (fieldType == TYPE_double) - { - if (repeatType == RT_repeated) - { - data[fieldName] = ReadDoubleList(ba); - } - else - { - data[fieldName] = ReadDouble(ba); - } - } - else if (fieldType == TYPE_int32) - { - if (repeatType == RT_repeated) - { - data[fieldName] = ReadIntList(ba); - } - else - { - data[fieldName] = ReadInt32(ba); - } - } - else if (fieldType == TYPE_int16) - { - if (repeatType == RT_repeated) - { - data[fieldName] = ReadShortList(ba); - } - else - { - data[fieldName] = ReadInt16(ba); - } - } - else if (fieldType == TYPE_int8) - { - if (repeatType == RT_repeated) - { - data[fieldName] = ReadInt8List(ba); - } - else - { - data[fieldName] = ReadInt8(ba); - } - } - else - { - customType = (string)tableInfo[i]["vp"]; - - if (repeatType == RT_repeated) - { - data[fieldName] = ReadDictionaryList(customType, ba); - } - else - { - data[fieldName] = ReadDictionary(customType, ba); - } - } - } - - return data; - } - catch(Exception e) - { - throw new Exception(@"AnalysisData Excepiton Data is ->" + MessageType - + "<-\nFieldName:->" + fieldName - + "<-\nFieldType:->" + GetFieldType(fieldType) - + "<-\nRepeatType:->" + GetRepeatType(repeatType) - + "<-\nCustomType:->" + customType - + "<-\n" + e.ToString()); - } - } - - private string ReadString(ByteArray ba) - { - uint len = (uint)ba.ReadUShort(); - return ba.ReadUTFBytes(len); - } - private List ReadStringList(ByteArray ba) - { - List tbl = new List(); - tbl.Clear(); - - int len1 = ba.ReadUShort(); - ba.ReadUInt(); - - for (int i = 0; i < len1; i++) - { - tbl.Add(ReadString(ba)); - } - return tbl; - } - private bool ReadBool(ByteArray ba) - { - return ba.ReadBoolean(); - } - private List ReadBoolList(ByteArray ba) - { - List tbl = new List(); - tbl.Clear(); - - int len1 = ba.ReadUShort(); - ba.ReadUInt(); - - for (int i = 0; i < len1; i++) - { - tbl.Add(ReadBool(ba)); - } - return tbl; - } - private int ReadInt(ByteArray ba) - { - return ba.ReadUInt(); - } - - private int ReadInt32(ByteArray ba) - { - return ba.ReadInt32(); - } - - private int ReadInt16(ByteArray ba) - { - return ba.ReadInt16(); - } - private int ReadInt8(ByteArray ba) - { - return ba.ReadInt8(); - } - private List ReadIntList(ByteArray ba) - { - List tbl = new List(); - - int len1 = ba.ReadUShort(); - ba.ReadUInt(); - - for (int i = 0; i < len1; i++) - { - int tem_o_read_int = ReadInt32(ba); - tbl.Add(tem_o_read_int); - } - - return tbl; - } - - private List ReadShortList(ByteArray ba) - { - List tbl = new List(); - - int len1 = ba.ReadUShort(); - ba.ReadUInt(); - - for (int i = 0; i < len1; i++) - { - int tem_o_read_int = ReadInt16(ba); - tbl.Add(tem_o_read_int); - } - - return tbl; - } - - private List ReadInt8List(ByteArray ba) - { - List tbl = new List(); - - int len1 = ba.ReadUShort(); - ba.ReadUInt(); - - for (int i = 0; i < len1; i++) - { - int tem_o_read_int = ReadInt8(ba); - tbl.Add(tem_o_read_int); - } - - return tbl; - } - - private double ReadDouble(ByteArray ba) - { - double tem_double = ba.ReadDouble(); - return Math.Floor(tem_double * 1000) / 1000; - } - private List ReadDoubleList(ByteArray ba) - { - List tbl = new List(); - - int len1 = ba.ReadUShort(); - ba.ReadUInt(); - - for (int i = 0; i < len1; i++) - { - tbl.Add(ReadDouble(ba)); - } - return tbl; - } - - private Dictionary ReadDictionary(string dictName, ByteArray ba) - { - int fieldType = 0; - int repeatType = 0; - string fieldName = null; - string customType = null; - - try - { - int st_len = ba.ReadUInt(); - - Dictionary tbl = new Dictionary(); - - if (st_len == 0) - { - Debug.Log("return"); - return tbl; - } - - List> tableInfo = m_protocolInfo[dictName]; - - for (int i = 0; i < tableInfo.Count; i++) - { - fieldType = (int)tableInfo[i]["type"]; - repeatType = (int)tableInfo[i]["spl"]; - fieldName = (string)tableInfo[i]["name"]; - - if (fieldType == TYPE_string) - { - if (repeatType == RT_repeated) - { - tbl[fieldName] = ReadStringList(ba); - } - else - { - tbl[fieldName] = ReadString(ba); - } - } - else if (fieldType == TYPE_bool) - { - if (repeatType == RT_repeated) - { - tbl[fieldName] = ReadBoolList(ba); - } - else - { - tbl[fieldName] = ReadBool(ba); - } - } - else if (fieldType == TYPE_double) - { - if (repeatType == RT_repeated) - { - tbl[fieldName] = ReadDoubleList(ba); - } - else - { - tbl[fieldName] = ReadDouble(ba); - } - } - else if (fieldType == TYPE_int32) - { - if (repeatType == RT_repeated) - { - tbl[fieldName] = ReadIntList(ba); - } - else - { - tbl[fieldName] = ReadInt32(ba); - } - } - else if (fieldType == TYPE_int16) - { - if (repeatType == RT_repeated) - { - tbl[fieldName] = ReadShortList(ba); - } - else - { - tbl[fieldName] = ReadInt16(ba); - } - } - else if (fieldType == TYPE_int8) - { - if (repeatType == RT_repeated) - { - tbl[fieldName] = ReadInt8List(ba); - } - else - { - tbl[fieldName] = ReadInt8(ba); - } - } - else - { - customType = (string)tableInfo[i]["vp"]; - - if (repeatType == RT_repeated) - { - tbl[fieldName] = ReadDictionaryList(customType, ba); - } - else - { - tbl[fieldName] = ReadDictionary(customType, ba); - } - } - } - return tbl; - - } - catch(Exception e) - { - throw new Exception(@"ReadDictionary Excepiton DictName is ->" + dictName - + "<-\nFieldName:->" + fieldName - + "<-\nFieldType:->" + GetFieldType(fieldType) - + "<-\nRepeatType:->" + GetRepeatType(repeatType) - + "<-\nCustomType:->" + customType - + "<-\n" + e.ToString()); - } - } - - private List> ReadDictionaryList(string str, ByteArray ba) - { - List> stbl = new List>(); - - int len1 = ba.ReadUShort(); - ba.ReadUInt(); - - //Debug.Log("len1 " + len1 + " " + ba.ReadUInt()); - - for (int i = 0; i < len1; i++) - { - stbl.Add(ReadDictionary(str, ba)); - } - return stbl; - } - -#endregion - -#endregion - - #region 发包 - - List GetSendByte(string messageType, Dictionary data) - { - try - { - string messageTypeTemp = "m_" + messageType + "_s"; - if (!m_protocolInfo.ContainsKey(messageTypeTemp)) - { - throw new Exception("ProtocolInfo NOT Exist ->" + messageTypeTemp + "<-"); - } - - return GetCustomTypeByte(messageTypeTemp, data); - } - catch (Exception e) - { - throw new Exception(@"ProtocolService GetSendByte Excepiton messageType is ->" + messageType - + "<-\n" + e.ToString()); - } - } - - int GetStringListLength(List list) - { - int len = 0; - for (int i = 0; i < list.Count; i++) - { - byte[] bs = Encoding.UTF8.GetBytes((string)list[i]); - len = len + bs.Length; - - } - return len; - } - - List> m_arrayCache = new List>(); - int GetCustomListLength(string customType,List list) - { - m_arrayCache.Clear(); - int len = 0; - for (int i = 0; i < list.Count; i++) - { - List bs = GetCustomTypeByte(customType, (Dictionary)list[i]); - m_arrayCache.Add(bs); - len = len + bs.Count + 4; - } - return len; - } - - private List GetCustomTypeByte(string customType, Dictionary data) - { - string fieldName = null; - int fieldType = 0; - int repeatType = 0; - - try - { - ByteArray Bytes = new ByteArray(); - //ByteArray Bytes = new ByteArray(); - Bytes.clear(); - - if (!m_protocolInfo.ContainsKey(customType)) - { - throw new Exception("ProtocolInfo NOT Exist ->" + customType + "<-"); - } - - List> tableInfo = m_protocolInfo[customType]; - - for (int i = 0; i < tableInfo.Count; i++) - { - Dictionary currentField = tableInfo[i]; - fieldType = (int)currentField["type"]; - fieldName = (string)currentField["name"]; - repeatType = (int)currentField["spl"]; - - if (fieldType == TYPE_string) - { - if (data.ContainsKey(fieldName)) - { - if (repeatType == RT_equired) - { - Bytes.WriteString((string)data[fieldName]); - } - else - { - List list = (List)data[fieldName]; - - Bytes.WriteShort(list.Count); - Bytes.WriteInt(GetStringListLength(list)); - for (int i2 = 0; i2 < list.Count; i2++) - { - Bytes.WriteString((string)list[i2]); - } - } - } - else - { - Bytes.WriteShort(0); - } - } - else if (fieldType == TYPE_bool) - { - if (data.ContainsKey(fieldName)) - { - if (repeatType == RT_equired) - { - Bytes.WriteBoolean((bool)data[fieldName]); - } - else - { - List tb = (List)data[fieldName]; - Bytes.WriteShort(tb.Count); - Bytes.WriteInt(tb.Count); - for (int i2 = 0; i2 < tb.Count; i2++) - { - Bytes.WriteBoolean((bool)tb[i2]); - } - } - } - } - else if (fieldType == TYPE_double) - { - if (data.ContainsKey(fieldName)) - { - if (repeatType == RT_equired) - { - Bytes.WriteDouble((float)data[fieldName]); - } - else - { - List tb = (List)data[fieldName]; - Bytes.WriteShort(tb.Count); - Bytes.WriteInt(tb.Count * 8); - for (int j = 0; j < tb.Count; j++) - { - Bytes.WriteDouble((float)tb[j]); - } - } - } - } - else if (fieldType == TYPE_int32) - { - if (data.ContainsKey(fieldName)) - { - if (repeatType == RT_equired) - { - Bytes.WriteInt(int.Parse(data[fieldName].ToString())); - } - else - { - List tb = (List)data[fieldName]; - Bytes.WriteShort(tb.Count); - Bytes.WriteInt(tb.Count * 4); - for (int i2 = 0; i2 < tb.Count; i2++) - { - Bytes.WriteInt(int.Parse(tb[i2].ToString())); - } - } - } - } - else if (fieldType == TYPE_int16) - { - if (data.ContainsKey(fieldName)) - { - if (repeatType == RT_equired) - { - Bytes.WriteShort(int.Parse(data[fieldName].ToString())); - } - else - { - List tb = (List)data[fieldName]; - Bytes.WriteShort(tb.Count); - Bytes.WriteInt(tb.Count * 2); - for (int i2 = 0; i2 < tb.Count; i2++) - { - Bytes.WriteShort(int.Parse(tb[i2].ToString())); - } - } - } - } - else if (fieldType == TYPE_int8) - { - if (data.ContainsKey(fieldName)) - { - if (repeatType == RT_equired) - { - Bytes.WriteInt8(int.Parse(data[fieldName].ToString())); - } - else - { - List tb = (List)data[fieldName]; - Bytes.WriteShort(tb.Count); - Bytes.WriteInt(tb.Count); - for (int i2 = 0; i2 < tb.Count; i2++) - { - Bytes.WriteInt8(int.Parse(tb[i2].ToString())); - } - } - } - } - else - { - if (data.ContainsKey(fieldName)) - { - customType = (string)currentField["vp"]; - if (repeatType == RT_equired) - { - List byteTmp = GetCustomTypeByte(customType, (Dictionary)data[fieldName]); - - Bytes.WriteInt(byteTmp.Count); - Bytes.Bytes.AddRange(byteTmp); - } - else - { - List tb = (List)data[fieldName]; - - Bytes.WriteShort(tb.Count); - //这里会修改m_arrayCatch的值,下面就可以直接使用 - Bytes.WriteInt(GetCustomListLength(customType, tb)); - - for (int j = 0; j < m_arrayCache.Count; j++) - { - List tempb = m_arrayCache[j]; - Bytes.WriteInt(tempb.Count); - Bytes.Bytes.AddRange(tempb); - } - } - } - } - } - return Bytes.Bytes; - } - catch(Exception e) - { - throw new Exception(@"GetCustomTypeByte Excepiton CustomType is ->" + customType - + "<-\nFieldName:->" + fieldName - + "<-\nFieldType:->" + GetFieldType(fieldType) - + "<-\nRepeatType:->" + GetRepeatType(repeatType) - + "<-\nCustomType:->" + customType - + "<-\n" + e.ToString()); - } - } - - string GetFieldType(int fieldType) - { - switch(fieldType) - { - case TYPE_string:return"TYPE_string"; - case TYPE_int32:return"TYPE_int32"; - case TYPE_int16: return "TYPE_int16"; - case TYPE_int8: return "TYPE_int8"; - case TYPE_double:return"TYPE_double"; - case TYPE_bool:return"TYPE_bool"; - case TYPE_custom:return"TYPE_custom"; - default: return "Error"; - } - } - - string GetRepeatType(int repeatType) - { - switch (repeatType) - { - case RT_repeated: return "RT_repeated"; - case RT_equired: return "RT_equired"; - default: return "Error"; - } - } - -#endregion -} - -#region 特性与基类 - -namespace Protocol -{ - /// - /// 在Protocol以Int16传输的字段 - /// - [AttributeUsage(AttributeTargets.Field)] - public class Int16Attribute : System.Attribute { } - - /// - /// 在Protocol以Int8传输的字段 - /// - [AttributeUsage(AttributeTargets.Field)] - public class Int8Attribute : System.Attribute { } - - /// - /// 在Protocol以Int32传输的字段 - /// - [AttributeUsage(AttributeTargets.Field)] - public class Int32Attribute : System.Attribute { } - - /// - /// 模块名与模块消息编码 - /// - [AttributeUsage(AttributeTargets.Class| AttributeTargets.Interface)] - public class ModuleAttribute : System.Attribute { - public int MessageCode; - public string ModuleName; - - public ModuleAttribute(int messageCode, string moduleName) - { - MessageCode = messageCode; - ModuleName = moduleName; - } - } - - /// - /// 消息发送模式,如果不加默认为Both - /// 生成 protocol 时 ToClient 和 ToServer 类型不会自动加后缀,要保证类名后面有_s 或者 _c后缀 - /// Both自动添加 _s 和 _c 后缀 - /// - [AttributeUsage(AttributeTargets.Class)] - public class MessageModeAttribute : System.Attribute - { - public SendMode Mode; - - public MessageModeAttribute(SendMode mode) - { - Mode = mode; - } - } - - public enum SendMode - { - ToClient, - ToServer, - Both, - } - - /// - /// 自动被Protocol解析的基类 - /// - public interface IProtocolMessageInterface { } - - /// - /// 自动被Protocol解析的结构 - /// - public interface IProtocolStructInterface { } - - /// - /// - /// - public interface CsharpProtocolInterface : IProtocolMessageInterface { } -} - -#endregion \ No newline at end of file +} \ No newline at end of file diff --git a/Assets/Script/Core/Network/Socket/KCPService.cs b/Assets/Script/Core/Network/Socket/KCPService.cs new file mode 100644 index 00000000..79abf062 --- /dev/null +++ b/Assets/Script/Core/Network/Socket/KCPService.cs @@ -0,0 +1,25 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class KCPService : SocketService +{ + + public override void Update() + { + base.Update(); + } + + public override void Send(byte[] sendbytes) + { + base.Send(sendbytes); + } + + protected override void DealByte(byte[] data, ref int offset, int length) + { + + + + base.DealByte(data, ref offset, length); + } +} diff --git a/Assets/Script/Core/Network/Socket/SocketService.cs b/Assets/Script/Core/Network/Socket/SocketService.cs new file mode 100644 index 00000000..22623923 --- /dev/null +++ b/Assets/Script/Core/Network/Socket/SocketService.cs @@ -0,0 +1,118 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Net; +using System.Net.Sockets; +using System.Threading; +using UnityEngine; + +public class SocketService : SocketBase +{ + private Socket m_Socket; + private Thread m_connThread; + + protected int m_offset = 0; + + AsyncCallback m_acb = null; + + public override void Init() + { + m_acb = new AsyncCallback(EndReceive); + } + + public override void Close() + { + isConnect = false; + if (m_Socket != null) + { + m_Socket.Close(0); + m_Socket = null; + } + if (m_connThread != null) + { + m_connThread.Join(); + m_connThread.Abort(); + } + m_connThread = null; + } + + public override void Connect() + { + Close(); + + m_connThread = null; + m_connThread = new Thread(new ThreadStart(RequestConnect)); + m_connThread.Start(); + } + + public override void Send(byte[] sendbytes) + { + try + { + m_Socket.Send(sendbytes); + } + catch (Exception e) + { + Debug.LogError("Send Error: " + e.ToString()); + isConnect = false; + m_connectStatusCallback(NetworkState.ConnectBreak); + } + } + + void RequestConnect() + { + try + { + m_connectStatusCallback(NetworkState.Connecting); + + SocketType socketType = SocketType.Stream; + + if (m_protocolType == ProtocolType.Udp) + { + socketType = SocketType.Dgram; + } + + m_Socket = new Socket(AddressFamily.InterNetwork, socketType, m_protocolType); + IPAddress ip = IPAddress.Parse(m_IPaddress); + + IPEndPoint ipe = new IPEndPoint(ip, m_port); + //mSocket. + m_Socket.Connect(ipe); + isConnect = true; + StartReceive(); + + m_connectStatusCallback(NetworkState.Connected); + } + catch (Exception e) + { + Debug.LogError("IP :" + m_IPaddress + " Port: " + m_port + " :" + e.ToString()); + isConnect = false; + m_connectStatusCallback(NetworkState.FaildToConnect); + } + } + + void StartReceive() + { + m_Socket.BeginReceive(m_readData, m_offset, m_readData.Length, SocketFlags.None, m_acb, m_Socket); + } + + void EndReceive(IAsyncResult iar) //接收数据 + { + Socket remote = (Socket)iar.AsyncState; + int recv = remote.EndReceive(iar); + if (recv > 0) + { + DealByte(m_readData, ref m_offset, recv); + } + + StartReceive(); + } + + protected virtual void DealByte(byte[] data, ref int offset, int length) + { + if (m_byteCallBack != null) + { + m_byteCallBack(m_readData, ref m_offset, length); + } + } +} diff --git a/Assets/Script/Core/Network/Socket/WsSocketService.cs b/Assets/Script/Core/Network/Socket/WsSocketService.cs new file mode 100644 index 00000000..fe8377d9 --- /dev/null +++ b/Assets/Script/Core/Network/Socket/WsSocketService.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +#if !UNITY_EDITOR && UNITY_WEBGL +using YLWebSocket; +public class WsSocketService : SocketBase +{ + private WebSocket m_scoket; + + public override void Close() + { + throw new NotImplementedException(); + } + + public override void Connect() + { + throw new NotImplementedException(); + } + + public override void Send(byte[] sendbytes) + { + throw new NotImplementedException(); + } +} + +#endif diff --git a/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs b/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs index ea5dfbae..eda53459 100644 --- a/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs +++ b/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs @@ -204,8 +204,7 @@ void UpdateIndexList(int count) } List m_indexList = new List(); - bool m_clip = false; //剪枝标志位,性能优化使用 - int m_startPos = 0; + void SetItemDisplay(bool isRebuild = false) { if(content == null) @@ -213,25 +212,11 @@ void SetItemDisplay(bool isRebuild = false) throw new Exception("SetItemDisplay Exception: content is null !"); } - m_clip = false; //计算已显示的哪些需要隐藏 for (int i = 0; i < m_items.Count; i++) { m_items[i].OnDrag(); - if (!m_clip) - { - m_startPos = m_items[i].m_index; - m_clip = true; - } - else - { - if (m_startPos > m_items[i].m_index) - { - m_startPos = m_items[i].m_index; - } - } - //已经完全离开了显示区域 if (!m_viewBounds.Intersects(GetItemBounds(m_items[i].m_index))) { @@ -250,25 +235,19 @@ void SetItemDisplay(bool isRebuild = false) } } - if (m_startPos > 0) - { - m_startPos--; - } - - //Debug.Log(m_startPos); - - m_clip = false; - //计算出哪些需要显示 //如果有未显示的则显示出来,从对象池取出对象 - for (int i = m_startPos; i < m_indexList.Count; i++) + bool m_clip = false; + for (int i = 0; i < m_indexList.Count; i++) { if (m_indexList[i].status == ReusingStatus.Hide) { + if (m_viewBounds.Intersects(GetItemBounds(m_indexList[i].index))) { ShowItem(i, isRebuild, m_datas[i]); + m_indexList[i].status = ReusingStatus.Show; m_clip = true; } From 5fc3fe17c81c5eccf0ab93e4d683f1f27799a869 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Tue, 2 Jan 2018 14:47:28 +0800 Subject: [PATCH 026/108] =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/Network/Interface/SocketBase.cs | 5 +- Assets/Script/Core/Network/Socket/KCP/KCP.cs | 989 ++++++++++++++++++ .../Core/Network/Socket/KCP/KCPService.cs | 219 ++++ .../Core/Network/Socket/KCP/switch_queue.cs | 61 ++ .../Script/Core/Network/Socket/KCPService.cs | 25 - .../Core/Network/Socket/SocketService.cs | 3 +- Assets/doc/Xmind/Export/LuaManager.png | Bin 0 -> 45190 bytes ...4\346\255\245\346\241\206\346\236\266.png" | Bin 0 -> 26681 bytes ...4\346\226\260\351\200\273\350\276\221.png" | Bin 0 -> 36332 bytes ...5\347\274\226\350\276\221\345\231\250.png" | Bin 0 -> 34657 bytes ...4\346\255\245\346\265\201\347\250\213.png" | Bin 0 -> 28892 bytes Assets/doc/Xmind/LuaManager.xmind | Bin 0 -> 76890 bytes ...346\234\215\345\212\241\345\231\250.xmind" | Bin 0 -> 20602 bytes ...347\274\226\350\276\221\345\231\250.xmind" | Bin 0 -> 40156 bytes ...346\226\260\351\200\273\350\276\221.xmind" | Bin 0 -> 48443 bytes ...347\274\226\350\276\221\345\231\250.xmind" | Bin 0 -> 54036 bytes ...346\255\245\346\241\206\346\236\266.xmind" | Bin 0 -> 48892 bytes 17 files changed, 1272 insertions(+), 30 deletions(-) create mode 100644 Assets/Script/Core/Network/Socket/KCP/KCP.cs create mode 100644 Assets/Script/Core/Network/Socket/KCP/KCPService.cs create mode 100644 Assets/Script/Core/Network/Socket/KCP/switch_queue.cs delete mode 100644 Assets/Script/Core/Network/Socket/KCPService.cs create mode 100644 Assets/doc/Xmind/Export/LuaManager.png create mode 100644 "Assets/doc/Xmind/Export/\345\220\214\346\255\245\346\241\206\346\236\266.png" create mode 100644 "Assets/doc/Xmind/Export/\347\203\255\346\233\264\346\226\260\351\200\273\350\276\221.png" create mode 100644 "Assets/doc/Xmind/Export/\347\216\251\346\263\225\347\274\226\350\276\221\345\231\250.png" create mode 100644 "Assets/doc/Xmind/Export/\347\275\221\347\273\234\345\220\214\346\255\245\346\265\201\347\250\213.png" create mode 100644 Assets/doc/Xmind/LuaManager.xmind create mode 100644 "Assets/doc/Xmind/\346\234\215\345\212\241\345\231\250.xmind" create mode 100644 "Assets/doc/Xmind/\346\270\270\346\210\217\347\216\251\346\263\225\347\274\226\350\276\221\345\231\250.xmind" create mode 100644 "Assets/doc/Xmind/\347\203\255\346\233\264\346\226\260\351\200\273\350\276\221.xmind" create mode 100644 "Assets/doc/Xmind/\347\216\251\346\263\225\347\274\226\350\276\221\345\231\250.xmind" create mode 100644 "Assets/doc/Xmind/\347\275\221\347\273\234\346\270\270\346\210\217\345\220\214\346\255\245\346\241\206\346\236\266.xmind" diff --git a/Assets/Script/Core/Network/Interface/SocketBase.cs b/Assets/Script/Core/Network/Interface/SocketBase.cs index e8d3aa53..c34668c5 100644 --- a/Assets/Script/Core/Network/Interface/SocketBase.cs +++ b/Assets/Script/Core/Network/Interface/SocketBase.cs @@ -25,10 +25,7 @@ public virtual void Init() } - /// - /// 传入时间 - /// - public virtual void Update() + public virtual void Dispose() { } diff --git a/Assets/Script/Core/Network/Socket/KCP/KCP.cs b/Assets/Script/Core/Network/Socket/KCP/KCP.cs new file mode 100644 index 00000000..5c6676bd --- /dev/null +++ b/Assets/Script/Core/Network/Socket/KCP/KCP.cs @@ -0,0 +1,989 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +#pragma warning disable + +public class KCP +{ + public const int IKCP_RTO_NDL = 30; // no delay min rto + public const int IKCP_RTO_MIN = 100; // normal min rto + public const int IKCP_RTO_DEF = 200; + public const int IKCP_RTO_MAX = 60000; + public const int IKCP_CMD_PUSH = 81; // cmd: push data + public const int IKCP_CMD_ACK = 82; // cmd: ack + public const int IKCP_CMD_WASK = 83; // cmd: window probe (ask) + public const int IKCP_CMD_WINS = 84; // cmd: window size (tell) + public const int IKCP_ASK_SEND = 1; // need to send IKCP_CMD_WASK + public const int IKCP_ASK_TELL = 2; // need to send IKCP_CMD_WINS + public const int IKCP_WND_SND = 32; + public const int IKCP_WND_RCV = 32; + public const int IKCP_MTU_DEF = 1400; + public const int IKCP_ACK_FAST = 3; + public const int IKCP_INTERVAL = 100; + public const int IKCP_OVERHEAD = 24; + public const int IKCP_DEADLINK = 10; + public const int IKCP_THRESH_INIT = 2; + public const int IKCP_THRESH_MIN = 2; + public const int IKCP_PROBE_INIT = 7000; // 7 secs to probe window size + public const int IKCP_PROBE_LIMIT = 120000; // up to 120 secs to probe window + + + // encode 8 bits unsigned int + public static int ikcp_encode8u(byte[] p, int offset, byte c) + { + p[0 + offset] = c; + return 1; + } + + // decode 8 bits unsigned int + public static int ikcp_decode8u(byte[] p, int offset, ref byte c) + { + c = p[0 + offset]; + return 1; + } + + /* encode 16 bits unsigned int (lsb) */ + public static int ikcp_encode16u(byte[] p, int offset, UInt16 w) + { + p[0 + offset] = (byte)(w >> 0); + p[1 + offset] = (byte)(w >> 8); + return 2; + } + + /* decode 16 bits unsigned int (lsb) */ + public static int ikcp_decode16u(byte[] p, int offset, ref UInt16 c) + { + UInt16 result = 0; + result |= (UInt16)p[0 + offset]; + result |= (UInt16)(p[1 + offset] << 8); + c = result; + return 2; + } + + /* encode 32 bits unsigned int (lsb) */ + public static int ikcp_encode32u(byte[] p, int offset, UInt32 l) + { + p[0 + offset] = (byte)(l >> 0); + p[1 + offset] = (byte)(l >> 8); + p[2 + offset] = (byte)(l >> 16); + p[3 + offset] = (byte)(l >> 24); + return 4; + } + + /* decode 32 bits unsigned int (lsb) */ + public static int ikcp_decode32u(byte[] p, int offset, ref UInt32 c) + { + UInt32 result = 0; + result |= (UInt32)p[0 + offset]; + result |= (UInt32)(p[1 + offset] << 8); + result |= (UInt32)(p[2 + offset] << 16); + result |= (UInt32)(p[3 + offset] << 24); + c = result; + return 4; + } + + public static byte[] slice(byte[] p, int start, int stop) + { + var bytes = new byte[stop - start]; + Array.Copy(p, start, bytes, 0, bytes.Length); + return bytes; + } + + public static T[] slice(T[] p, int start, int stop) + { + var arr = new T[stop - start]; + var index = 0; + for (var i = start; i < stop; i++) + { + arr[index] = p[i]; + index++; + } + + return arr; + } + + public static byte[] append(byte[] p, byte c) + { + var bytes = new byte[p.Length + 1]; + Array.Copy(p, bytes, p.Length); + bytes[p.Length] = c; + return bytes; + } + + public static T[] append(T[] p, T c) + { + var arr = new T[p.Length + 1]; + for (var i = 0; i < p.Length; i++) + arr[i] = p[i]; + arr[p.Length] = c; + return arr; + } + + public static T[] append(T[] p, T[] cs) + { + var arr = new T[p.Length + cs.Length]; + for (var i = 0; i < p.Length; i++) + arr[i] = p[i]; + for (var i = 0; i < cs.Length; i++) + arr[p.Length + i] = cs[i]; + return arr; + } + + static UInt32 _imin_(UInt32 a, UInt32 b) + { + return a <= b ? a : b; + } + + static UInt32 _imax_(UInt32 a, UInt32 b) + { + return a >= b ? a : b; + } + + static UInt32 _ibound_(UInt32 lower, UInt32 middle, UInt32 upper) + { + return _imin_(_imax_(lower, middle), upper); + } + + static Int32 _itimediff(UInt32 later, UInt32 earlier) + { + return ((Int32)(later - earlier)); + } + + // KCP Segment Definition + internal class Segment + { + internal UInt32 conv = 0; + internal UInt32 cmd = 0; + internal UInt32 frg = 0; + internal UInt32 wnd = 0; + internal UInt32 ts = 0; + internal UInt32 sn = 0; + internal UInt32 una = 0; + internal UInt32 resendts = 0; + internal UInt32 rto = 0; + internal UInt32 fastack = 0; + internal UInt32 xmit = 0; + internal byte[] data; + + internal Segment(int size) + { + this.data = new byte[size]; + } + + // encode a segment into buffer + internal int encode(byte[] ptr, int offset) + { + + var offset_ = offset; + + offset += ikcp_encode32u(ptr, offset, conv); + offset += ikcp_encode8u(ptr, offset, (byte)cmd); + offset += ikcp_encode8u(ptr, offset, (byte)frg); + offset += ikcp_encode16u(ptr, offset, (UInt16)wnd); + offset += ikcp_encode32u(ptr, offset, ts); + offset += ikcp_encode32u(ptr, offset, sn); + offset += ikcp_encode32u(ptr, offset, una); + offset += ikcp_encode32u(ptr, offset, (UInt32)data.Length); + + return offset - offset_; + } + } + + // kcp members. + UInt32 conv; UInt32 mtu; UInt32 mss; UInt32 state; + UInt32 snd_una; UInt32 snd_nxt; UInt32 rcv_nxt; + UInt32 ts_recent; UInt32 ts_lastack; UInt32 ssthresh; + UInt32 rx_rttval; UInt32 rx_srtt; UInt32 rx_rto; UInt32 rx_minrto; + UInt32 snd_wnd; UInt32 rcv_wnd; UInt32 rmt_wnd; UInt32 cwnd; UInt32 probe; + UInt32 current; UInt32 interval; UInt32 ts_flush; UInt32 xmit; + UInt32 nodelay; UInt32 updated; + UInt32 ts_probe; UInt32 probe_wait; + UInt32 dead_link; UInt32 incr; + + Segment[] snd_queue = new Segment[0]; + Segment[] rcv_queue = new Segment[0]; + Segment[] snd_buf = new Segment[0]; + Segment[] rcv_buf = new Segment[0]; + + UInt32[] acklist = new UInt32[0]; + + byte[] buffer; + Int32 fastresend; + Int32 nocwnd; + Int32 logmask; + // buffer, size + Action output; + + // create a new kcp control object, 'conv' must equal in two endpoint + // from the same connection. + public KCP(UInt32 conv_, Action output_) + { + conv = conv_; + snd_wnd = IKCP_WND_SND; + rcv_wnd = IKCP_WND_RCV; + rmt_wnd = IKCP_WND_RCV; + mtu = IKCP_MTU_DEF; + mss = mtu - IKCP_OVERHEAD; + + rx_rto = IKCP_RTO_DEF; + rx_minrto = IKCP_RTO_MIN; + interval = IKCP_INTERVAL; + ts_flush = IKCP_INTERVAL; + ssthresh = IKCP_THRESH_INIT; + dead_link = IKCP_DEADLINK; + buffer = new byte[(mtu + IKCP_OVERHEAD) * 3]; + output = output_; + } + + // check the size of next message in the recv queue + public int PeekSize() + { + if (0 == rcv_queue.Length) return -1; + + var seq = rcv_queue[0]; + + if (0 == seq.frg) return seq.data.Length; + + if (rcv_queue.Length < seq.frg + 1) return -1; + + int length = 0; + + foreach (var item in rcv_queue) + { + length += item.data.Length; + if (0 == item.frg) + break; + } + + return length; + } + + // user/upper level recv: returns size, returns below zero for EAGAIN + public int Recv(byte[] buffer) + { + + if (0 == rcv_queue.Length) return -1; + + var peekSize = PeekSize(); + if (0 > peekSize) return -2; + + if (peekSize > buffer.Length) return -3; + + var fast_recover = false; + if (rcv_queue.Length >= rcv_wnd) fast_recover = true; + + // merge fragment. + var count = 0; + var n = 0; + foreach (var seg in rcv_queue) + { + Array.Copy(seg.data, 0, buffer, n, seg.data.Length); + n += seg.data.Length; + count++; + if (0 == seg.frg) break; + } + + if (0 < count) + { + rcv_queue = slice(rcv_queue, count, rcv_queue.Length); + } + + // move available data from rcv_buf -> rcv_queue + count = 0; + foreach (var seg in rcv_buf) + { + if (seg.sn == rcv_nxt && rcv_queue.Length < rcv_wnd) + { + rcv_queue = append(rcv_queue, seg); + rcv_nxt++; + count++; + } + else + { + break; + } + } + + if (0 < count) rcv_buf = slice(rcv_buf, count, rcv_buf.Length); + + // fast recover + if (rcv_queue.Length < rcv_wnd && fast_recover) + { + // ready to send back IKCP_CMD_WINS in ikcp_flush + // tell remote my window size + probe |= IKCP_ASK_TELL; + } + + return n; + } + + // user/upper level send, returns below zero for error + public int Send(byte[] buffer) + { + + if (0 == buffer.Length) return -1; + + var count = 0; + + if (buffer.Length < mss) + count = 1; + else + count = (int)(buffer.Length + mss - 1) / (int)mss; + + if (255 < count) return -2; + + if (0 == count) count = 1; + + var offset = 0; + + for (var i = 0; i < count; i++) + { + var size = 0; + if (buffer.Length - offset > mss) + size = (int)mss; + else + size = buffer.Length - offset; + + var seg = new Segment(size); + Array.Copy(buffer, offset, seg.data, 0, size); + offset += size; + seg.frg = (UInt32)(count - i - 1); + snd_queue = append(snd_queue, seg); + } + + return 0; + } + + // update ack. + void update_ack(Int32 rtt) + { + if (0 == rx_srtt) + { + rx_srtt = (UInt32)rtt; + rx_rttval = (UInt32)rtt / 2; + } + else + { + Int32 delta = (Int32)((UInt32)rtt - rx_srtt); + if (0 > delta) delta = -delta; + + rx_rttval = (3 * rx_rttval + (uint)delta) / 4; + rx_srtt = (UInt32)((7 * rx_srtt + rtt) / 8); + if (rx_srtt < 1) rx_srtt = 1; + } + + var rto = (int)(rx_srtt + _imax_(1, 4 * rx_rttval)); + rx_rto = _ibound_(rx_minrto, (UInt32)rto, IKCP_RTO_MAX); + } + + void shrink_buf() + { + if (snd_buf.Length > 0) + snd_una = snd_buf[0].sn; + else + snd_una = snd_nxt; + } + + void parse_ack(UInt32 sn) + { + + if (_itimediff(sn, snd_una) < 0 || _itimediff(sn, snd_nxt) >= 0) return; + + var index = 0; + foreach (var seg in snd_buf) + { + if (sn == seg.sn) + { + snd_buf = append(slice(snd_buf, 0, index), slice(snd_buf, index + 1, snd_buf.Length)); + break; + } + else + { + seg.fastack++; + } + + index++; + } + } + + void parse_una(UInt32 una) + { + var count = 0; + foreach (var seg in snd_buf) + { + if (_itimediff(una, seg.sn) > 0) + count++; + else + break; + } + + if (0 < count) snd_buf = slice(snd_buf, count, snd_buf.Length); + } + + void ack_push(UInt32 sn, UInt32 ts) + { + acklist = append(acklist, new UInt32[2] { sn, ts }); + } + + void ack_get(int p, ref UInt32 sn, ref UInt32 ts) + { + sn = acklist[p * 2 + 0]; + ts = acklist[p * 2 + 1]; + } + + void parse_data(Segment newseg) + { + var sn = newseg.sn; + if (_itimediff(sn, rcv_nxt + rcv_wnd) >= 0 || _itimediff(sn, rcv_nxt) < 0) return; + + var n = rcv_buf.Length - 1; + var after_idx = -1; + var repeat = false; + for (var i = n; i >= 0; i--) + { + var seg = rcv_buf[i]; + if (seg.sn == sn) + { + repeat = true; + break; + } + + if (_itimediff(sn, seg.sn) > 0) + { + after_idx = i; + break; + } + } + + if (!repeat) + { + if (after_idx == -1) + rcv_buf = append(new Segment[1] { newseg }, rcv_buf); + else + rcv_buf = append(slice(rcv_buf, 0, after_idx + 1), append(new Segment[1] { newseg }, slice(rcv_buf, after_idx + 1, rcv_buf.Length))); + } + + // move available data from rcv_buf -> rcv_queue + var count = 0; + foreach (var seg in rcv_buf) + { + if (seg.sn == rcv_nxt && rcv_queue.Length < rcv_wnd) + { + rcv_queue = append(rcv_queue, seg); + rcv_nxt++; + count++; + } + else + { + break; + } + } + + if (0 < count) + { + rcv_buf = slice(rcv_buf, count, rcv_buf.Length); + } + } + + // when you received a low level packet (eg. UDP packet), call it + public int Input(byte[] data) + { + + var s_una = snd_una; + if (data.Length < IKCP_OVERHEAD) return 0; + + var offset = 0; + + while (true) + { + UInt32 ts = 0; + UInt32 sn = 0; + UInt32 length = 0; + UInt32 una = 0; + UInt32 conv_ = 0; + + UInt16 wnd = 0; + + byte cmd = 0; + byte frg = 0; + + if (data.Length - offset < IKCP_OVERHEAD) break; + + offset += ikcp_decode32u(data, offset, ref conv_); + + if (conv != conv_) return -1; + + offset += ikcp_decode8u(data, offset, ref cmd); + offset += ikcp_decode8u(data, offset, ref frg); + offset += ikcp_decode16u(data, offset, ref wnd); + offset += ikcp_decode32u(data, offset, ref ts); + offset += ikcp_decode32u(data, offset, ref sn); + offset += ikcp_decode32u(data, offset, ref una); + offset += ikcp_decode32u(data, offset, ref length); + + if (data.Length - offset < length) return -2; + + switch (cmd) + { + case IKCP_CMD_PUSH: + case IKCP_CMD_ACK: + case IKCP_CMD_WASK: + case IKCP_CMD_WINS: + break; + default: + return -3; + } + + rmt_wnd = (UInt32)wnd; + parse_una(una); + shrink_buf(); + + if (IKCP_CMD_ACK == cmd) + { + if (_itimediff(current, ts) >= 0) + { + update_ack(_itimediff(current, ts)); + } + parse_ack(sn); + shrink_buf(); + } + else if (IKCP_CMD_PUSH == cmd) + { + if (_itimediff(sn, rcv_nxt + rcv_wnd) < 0) + { + ack_push(sn, ts); + if (_itimediff(sn, rcv_nxt) >= 0) + { + var seg = new Segment((int)length); + seg.conv = conv_; + seg.cmd = (UInt32)cmd; + seg.frg = (UInt32)frg; + seg.wnd = (UInt32)wnd; + seg.ts = ts; + seg.sn = sn; + seg.una = una; + + if (length > 0) Array.Copy(data, offset, seg.data, 0, length); + + parse_data(seg); + } + } + } + else if (IKCP_CMD_WASK == cmd) + { + // ready to send back IKCP_CMD_WINS in Ikcp_flush + // tell remote my window size + probe |= IKCP_ASK_TELL; + } + else if (IKCP_CMD_WINS == cmd) + { + // do nothing + } + else + { + return -3; + } + + offset += (int)length; + } + + if (_itimediff(snd_una, s_una) > 0) + { + if (cwnd < rmt_wnd) + { + var mss_ = mss; + if (cwnd < ssthresh) + { + cwnd++; + incr += mss_; + } + else + { + if (incr < mss_) + { + incr = mss_; + } + incr += (mss_ * mss_) / incr + (mss_ / 16); + if ((cwnd + 1) * mss_ <= incr) cwnd++; + } + if (cwnd > rmt_wnd) + { + cwnd = rmt_wnd; + incr = rmt_wnd * mss_; + } + } + } + + return 0; + } + + Int32 wnd_unused() + { + if (rcv_queue.Length < rcv_wnd) + return (Int32)(int)rcv_wnd - rcv_queue.Length; + return 0; + } + + // flush pending data + void flush() + { + var current_ = current; + var buffer_ = buffer; + var change = 0; + var lost = 0; + + if (0 == updated) return; + + var seg = new Segment(0); + seg.conv = conv; + seg.cmd = IKCP_CMD_ACK; + seg.wnd = (UInt32)wnd_unused(); + seg.una = rcv_nxt; + + // flush acknowledges + var count = acklist.Length / 2; + var offset = 0; + for (var i = 0; i < count; i++) + { + if (offset + IKCP_OVERHEAD > mtu) + { + output(buffer, offset); + //Array.Clear(buffer, 0, offset); + offset = 0; + } + ack_get(i, ref seg.sn, ref seg.ts); + offset += seg.encode(buffer, offset); + } + acklist = new UInt32[0]; + + // probe window size (if remote window size equals zero) + if (0 == rmt_wnd) + { + if (0 == probe_wait) + { + probe_wait = IKCP_PROBE_INIT; + ts_probe = current + probe_wait; + } + else + { + if (_itimediff(current, ts_probe) >= 0) + { + if (probe_wait < IKCP_PROBE_INIT) + probe_wait = IKCP_PROBE_INIT; + probe_wait += probe_wait / 2; + if (probe_wait > IKCP_PROBE_LIMIT) + probe_wait = IKCP_PROBE_LIMIT; + ts_probe = current + probe_wait; + probe |= IKCP_ASK_SEND; + } + } + } + else + { + ts_probe = 0; + probe_wait = 0; + } + + // flush window probing commands + if ((probe & IKCP_ASK_SEND) != 0) + { + seg.cmd = IKCP_CMD_WASK; + if (offset + IKCP_OVERHEAD > (int)mtu) + { + output(buffer, offset); + //Array.Clear(buffer, 0, offset); + offset = 0; + } + offset += seg.encode(buffer, offset); + } + + probe = 0; + + // calculate window size + var cwnd_ = _imin_(snd_wnd, rmt_wnd); + if (0 == nocwnd) + cwnd_ = _imin_(cwnd, cwnd_); + + count = 0; + for (var k = 0; k < snd_queue.Length; k++) + { + if (_itimediff(snd_nxt, snd_una + cwnd_) >= 0) break; + + var newseg = snd_queue[k]; + newseg.conv = conv; + newseg.cmd = IKCP_CMD_PUSH; + newseg.wnd = seg.wnd; + newseg.ts = current_; + newseg.sn = snd_nxt; + newseg.una = rcv_nxt; + newseg.resendts = current_; + newseg.rto = rx_rto; + newseg.fastack = 0; + newseg.xmit = 0; + snd_buf = append(snd_buf, newseg); + snd_nxt++; + count++; + } + + if (0 < count) + { + snd_queue = slice(snd_queue, count, snd_queue.Length); + } + + // calculate resent + var resent = (UInt32)fastresend; + if (fastresend <= 0) resent = 0xffffffff; + var rtomin = rx_rto >> 3; + if (nodelay != 0) rtomin = 0; + + // flush data segments + foreach (var segment in snd_buf) + { + var needsend = false; + var debug = _itimediff(current_, segment.resendts); + if (0 == segment.xmit) + { + needsend = true; + segment.xmit++; + segment.rto = rx_rto; + segment.resendts = current_ + segment.rto + rtomin; + } + else if (_itimediff(current_, segment.resendts) >= 0) + { + needsend = true; + segment.xmit++; + xmit++; + if (0 == nodelay) + segment.rto += rx_rto; + else + segment.rto += rx_rto / 2; + segment.resendts = current_ + segment.rto; + lost = 1; + } + else if (segment.fastack >= resent) + { + needsend = true; + segment.xmit++; + segment.fastack = 0; + segment.resendts = current_ + segment.rto; + change++; + } + + if (needsend) + { + segment.ts = current_; + segment.wnd = seg.wnd; + segment.una = rcv_nxt; + + var need = IKCP_OVERHEAD + segment.data.Length; + if (offset + need > mtu) + { + output(buffer, offset); + //Array.Clear(buffer, 0, offset); + offset = 0; + } + + offset += segment.encode(buffer, offset); + if (segment.data.Length > 0) + { + Array.Copy(segment.data, 0, buffer, offset, segment.data.Length); + offset += segment.data.Length; + } + + if (segment.xmit >= dead_link) + { + state = 0; + } + } + } + + // flash remain segments + if (offset > 0) + { + output(buffer, offset); + //Array.Clear(buffer, 0, offset); + offset = 0; + } + + // update ssthresh + if (change != 0) + { + var inflight = snd_nxt - snd_una; + ssthresh = inflight / 2; + if (ssthresh < IKCP_THRESH_MIN) + ssthresh = IKCP_THRESH_MIN; + cwnd = ssthresh + resent; + incr = cwnd * mss; + } + + if (lost != 0) + { + ssthresh = cwnd / 2; + if (ssthresh < IKCP_THRESH_MIN) + ssthresh = IKCP_THRESH_MIN; + cwnd = 1; + incr = mss; + } + + if (cwnd < 1) + { + cwnd = 1; + incr = mss; + } + } + + // update state (call it repeatedly, every 10ms-100ms), or you can ask + // ikcp_check when to call it again (without ikcp_input/_send calling). + // 'current' - current timestamp in millisec. + public void Update(UInt32 current_) + { + + current = current_; + + if (0 == updated) + { + updated = 1; + ts_flush = current; + } + + var slap = _itimediff(current, ts_flush); + + if (slap >= 10000 || slap < -10000) + { + ts_flush = current; + slap = 0; + } + + if (slap >= 0) + { + ts_flush += interval; + if (_itimediff(current, ts_flush) >= 0) + ts_flush = current + interval; + flush(); + } + } + + // Determine when should you invoke ikcp_update: + // returns when you should invoke ikcp_update in millisec, if there + // is no ikcp_input/_send calling. you can call ikcp_update in that + // time, instead of call update repeatly. + // Important to reduce unnacessary ikcp_update invoking. use it to + // schedule ikcp_update (eg. implementing an epoll-like mechanism, + // or optimize ikcp_update when handling massive kcp connections) + public UInt32 Check(UInt32 current_) + { + + if (0 == updated) return current_; + + var ts_flush_ = ts_flush; + var tm_flush_ = 0x7fffffff; + var tm_packet = 0x7fffffff; + var minimal = 0; + + if (_itimediff(current_, ts_flush_) >= 10000 || _itimediff(current_, ts_flush_) < -10000) + { + ts_flush_ = current_; + } + + if (_itimediff(current_, ts_flush_) >= 0) return current_; + + tm_flush_ = (int)_itimediff(ts_flush_, current_); + + foreach (var seg in snd_buf) + { + var diff = _itimediff(seg.resendts, current_); + if (diff <= 0) return current_; + if (diff < tm_packet) tm_packet = (int)diff; + } + + minimal = (int)tm_packet; + if (tm_packet >= tm_flush_) minimal = (int)tm_flush_; + if (minimal >= interval) minimal = (int)interval; + + return current_ + (UInt32)minimal; + } + + // change MTU size, default is 1400 + public int SetMtu(Int32 mtu_) + { + if (mtu_ < 50 || mtu_ < (Int32)IKCP_OVERHEAD) return -1; + + var buffer_ = new byte[(mtu_ + IKCP_OVERHEAD) * 3]; + if (null == buffer_) return -2; + + mtu = (UInt32)mtu_; + mss = mtu - IKCP_OVERHEAD; + buffer = buffer_; + return 0; + } + + public int Interval(Int32 interval_) + { + if (interval_ > 5000) + { + interval_ = 5000; + } + else if (interval_ < 10) + { + interval_ = 10; + } + interval = (UInt32)interval_; + return 0; + } + + // fastest: ikcp_nodelay(kcp, 1, 20, 2, 1) + // nodelay: 0:disable(default), 1:enable + // interval: internal update timer interval in millisec, default is 100ms + // resend: 0:disable fast resend(default), 1:enable fast resend + // nc: 0:normal congestion control(default), 1:disable congestion control + public int NoDelay(int nodelay_, int interval_, int resend_, int nc_) + { + + if (nodelay_ > 0) + { + nodelay = (UInt32)nodelay_; + if (nodelay_ != 0) + rx_minrto = IKCP_RTO_NDL; + else + rx_minrto = IKCP_RTO_MIN; + } + + if (interval_ >= 0) + { + if (interval_ > 5000) + { + interval_ = 5000; + } + else if (interval_ < 10) + { + interval_ = 10; + } + interval = (UInt32)interval_; + } + + if (resend_ >= 0) fastresend = resend_; + + if (nc_ >= 0) nocwnd = nc_; + + return 0; + } + + // set maximum window size: sndwnd=32, rcvwnd=32 by default + public int WndSize(int sndwnd, int rcvwnd) + { + if (sndwnd > 0) + snd_wnd = (UInt32)sndwnd; + + if (rcvwnd > 0) + rcv_wnd = (UInt32)rcvwnd; + return 0; + } + + // get how many packet is waiting to be sent + public int WaitSnd() + { + return snd_buf.Length + snd_queue.Length; + } +} diff --git a/Assets/Script/Core/Network/Socket/KCP/KCPService.cs b/Assets/Script/Core/Network/Socket/KCP/KCPService.cs new file mode 100644 index 00000000..fe7431f3 --- /dev/null +++ b/Assets/Script/Core/Network/Socket/KCP/KCPService.cs @@ -0,0 +1,219 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Net; +using System.Net.Sockets; +using System.Text; +using UnityEngine; + +public class KCPService : SocketBase +{ + private static readonly DateTime utc_time = new DateTime(1970, 1, 1); + + public static UInt32 iclock() + { + return (UInt32)(Convert.ToInt64(DateTime.UtcNow.Subtract(utc_time).TotalMilliseconds) & 0xffffffff); + } + + private const UInt32 CONNECT_TIMEOUT = 5000; + private const UInt32 RESEND_CONNECT = 500; + + private UdpClient mUdpClient; + private IPEndPoint mIPEndPoint; + private IPEndPoint mSvrEndPoint; + + private KCP mKcp; + private bool mNeedUpdateFlag; + private UInt32 mNextUpdateTime; + + private bool mInConnectStage; + private bool mConnectSucceed; + private UInt32 mConnectStartTime; + private UInt32 mLastSendConnectTime; + + private SwitchQueue mRecvQueue = new SwitchQueue(128); + + public override void Connect() + { + mSvrEndPoint = new IPEndPoint(IPAddress.Parse(m_IPaddress), m_port); + mUdpClient = new UdpClient(m_IPaddress, m_port); + mUdpClient.Connect(mSvrEndPoint); + + reset_state(); + + mInConnectStage = true; + mConnectStartTime = iclock(); + + mUdpClient.BeginReceive(ReceiveCallback, this); + m_connectStatusCallback(NetworkState.Connecting); + } + + void ReceiveCallback(IAsyncResult ar) + { + Byte[] data = (mIPEndPoint == null) ? + mUdpClient.Receive(ref mIPEndPoint) : + mUdpClient.EndReceive(ar, ref mIPEndPoint); + + if (null != data) + OnData(data); + + if (mUdpClient != null) + { + // try to receive again. + mUdpClient.BeginReceive(ReceiveCallback, this); + } + } + + void OnData(byte[] buf) + { + mRecvQueue.Push(buf); + } + + void reset_state() + { + mNeedUpdateFlag = false; + mNextUpdateTime = 0; + + mInConnectStage = false; + mConnectSucceed = false; + mConnectStartTime = 0; + mLastSendConnectTime = 0; + mRecvQueue.Clear(); + mKcp = null; + } + + string dump_bytes(byte[] buf, int size) + { + var sb = new StringBuilder(size * 2); + for (var i = 0; i < size; i++) + { + sb.Append(buf[i]); + sb.Append(" "); + } + return sb.ToString(); + } + + void init_kcp(UInt32 conv) + { + mKcp = new KCP(conv, (byte[] buf, int size) => + { + mUdpClient.Send(buf, size); + }); + + mKcp.NoDelay(1, 10, 2, 1); + } + + public override void Send(byte[] buf) + { + mKcp.Send(buf); + mNeedUpdateFlag = true; + } + + public void Update() + { + update(iclock()); + } + + public override void Close() + { + mUdpClient.Close(); + //evHandler(cliEvent.Disconnect, null, "Closed"); + m_connectStatusCallback(NetworkState.ConnectBreak); + } + + void process_connect_packet() + { + mRecvQueue.Switch(); + + if (!mRecvQueue.Empty()) + { + var buf = mRecvQueue.Pop(); + + UInt32 conv = 0; + KCP.ikcp_decode32u(buf, 0, ref conv); + + if (conv <= 0) + throw new Exception("inlvaid connect back packet"); + + init_kcp(conv); + + mInConnectStage = false; + mConnectSucceed = true; + + m_connectStatusCallback(NetworkState.Connected); + //evHandler(cliEvent.Connected, null, null); + } + } + + void process_recv_queue() + { + mRecvQueue.Switch(); + + while (!mRecvQueue.Empty()) + { + var buf = mRecvQueue.Pop(); + + mKcp.Input(buf); + mNeedUpdateFlag = true; + + for (var size = mKcp.PeekSize(); size > 0; size = mKcp.PeekSize()) + { + var buffer = new byte[size]; + if (mKcp.Recv(buffer) > 0) + { + int offset = 0; + m_byteCallBack(buffer, ref offset, buffer.Length); + } + } + } + } + + bool connect_timeout(UInt32 current) + { + return current - mConnectStartTime > CONNECT_TIMEOUT; + } + + bool need_send_connect_packet(UInt32 current) + { + return current - mLastSendConnectTime > RESEND_CONNECT; + } + + void update(UInt32 current) + { + if (mInConnectStage) + { + if (connect_timeout(current)) + { + m_connectStatusCallback(NetworkState.ConnectBreak); + mInConnectStage = false; + return; + } + + if (need_send_connect_packet(current)) + { + mLastSendConnectTime = current; + mUdpClient.Send(new byte[4] { 0, 0, 0, 0 }, 4); + } + + process_connect_packet(); + + return; + } + + if (mConnectSucceed) + { + process_recv_queue(); + + if (mNeedUpdateFlag || current >= mNextUpdateTime) + { + mKcp.Update(current); + mNextUpdateTime = mKcp.Check(current); + mNeedUpdateFlag = false; + } + } + } + + + + +} diff --git a/Assets/Script/Core/Network/Socket/KCP/switch_queue.cs b/Assets/Script/Core/Network/Socket/KCP/switch_queue.cs new file mode 100644 index 00000000..8c77aa6e --- /dev/null +++ b/Assets/Script/Core/Network/Socket/KCP/switch_queue.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections; + +public class Utility { + + public static void Swap< QT >( ref QT t1, ref QT t2 ) { + + QT temp = t1; + t1 = t2; + t2 = temp; + } +} + +public class SwitchQueue where T : class { + + private Queue mConsumeQueue; + private Queue mProduceQueue; + + public SwitchQueue() { + mConsumeQueue = new Queue(16); + mProduceQueue = new Queue(16); + } + + public SwitchQueue(int capcity) { + mConsumeQueue = new Queue(capcity); + mProduceQueue = new Queue(capcity); + } + + // producer + public void Push( T obj ) { + lock (mProduceQueue) + { + mProduceQueue.Enqueue( obj ); + } + } + + // consumer. + public T Pop() { + + return (T)mConsumeQueue.Dequeue(); + } + + public bool Empty() { + return 0 == mConsumeQueue.Count; + } + + public void Switch() { + lock (mProduceQueue) + { + Utility.Swap ( ref mConsumeQueue, ref mProduceQueue ); + } + } + + public void Clear() { + lock (mProduceQueue) + { + mConsumeQueue.Clear(); + mProduceQueue.Clear(); + } + } +} diff --git a/Assets/Script/Core/Network/Socket/KCPService.cs b/Assets/Script/Core/Network/Socket/KCPService.cs deleted file mode 100644 index 79abf062..00000000 --- a/Assets/Script/Core/Network/Socket/KCPService.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class KCPService : SocketService -{ - - public override void Update() - { - base.Update(); - } - - public override void Send(byte[] sendbytes) - { - base.Send(sendbytes); - } - - protected override void DealByte(byte[] data, ref int offset, int length) - { - - - - base.DealByte(data, ref offset, length); - } -} diff --git a/Assets/Script/Core/Network/Socket/SocketService.cs b/Assets/Script/Core/Network/Socket/SocketService.cs index 22623923..0e24cebc 100644 --- a/Assets/Script/Core/Network/Socket/SocketService.cs +++ b/Assets/Script/Core/Network/Socket/SocketService.cs @@ -8,7 +8,7 @@ public class SocketService : SocketBase { - private Socket m_Socket; + protected Socket m_Socket; private Thread m_connThread; protected int m_offset = 0; @@ -20,6 +20,7 @@ public override void Init() m_acb = new AsyncCallback(EndReceive); } + public override void Close() { isConnect = false; diff --git a/Assets/doc/Xmind/Export/LuaManager.png b/Assets/doc/Xmind/Export/LuaManager.png new file mode 100644 index 0000000000000000000000000000000000000000..0c1530035aa0667544a660ea2759c3f1f533a8a6 GIT binary patch literal 45190 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 MgR17=dGhvu0HQ^7&Hw-a literal 0 HcmV?d00001 diff --git "a/Assets/doc/Xmind/Export/\345\220\214\346\255\245\346\241\206\346\236\266.png" "b/Assets/doc/Xmind/Export/\345\220\214\346\255\245\346\241\206\346\236\266.png" new file mode 100644 index 0000000000000000000000000000000000000000..20613243fc983f58e314b47ffc6b43b30a0be9e4 GIT binary patch literal 26681 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�tV3_ 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 m0M%zC^2%sJ^Z)-$rWI9P#*>a1q8dh0} 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 z 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 z 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 literal 0 HcmV?d00001 diff --git "a/Assets/doc/Xmind/\347\203\255\346\233\264\346\226\260\351\200\273\350\276\221.xmind" "b/Assets/doc/Xmind/\347\203\255\346\233\264\346\226\260\351\200\273\350\276\221.xmind" new file mode 100644 index 0000000000000000000000000000000000000000..0d90612d18d943bffc6eb913596cf3f4e943c54b GIT binary patch literal 48443 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 literal 0 HcmV?d00001 diff --git "a/Assets/doc/Xmind/\347\216\251\346\263\225\347\274\226\350\276\221\345\231\250.xmind" "b/Assets/doc/Xmind/\347\216\251\346\263\225\347\274\226\350\276\221\345\231\250.xmind" new file mode 100644 index 0000000000000000000000000000000000000000..3526d2d42bbfd4553e5c3c54a1e361de4c553925 GIT binary patch literal 54036 zcmdqJ2Ut_t_BR}L9NUc8yMQ246i6k6YC%!ZpactjLP&3r0@Ce@1(YfpKv4*wh=^1v zR*)iyG(iLlMY{A3-%e1+igV}Az5n~YGmj8*PWE1V)!!;7I}NA&vH&uD`g902(9sa` z*?-f)YbKG0SJ}^GOgcGE%l||N;*=@2#SzSh& z%fqv5@eDSLs4c@{%joK8iPn$?pJZ{hW%wMH#(pN1Wea}d?Z6N4u7>Ca4Y+8vPiu?* z($U($=TX=k9W5-LNz~EDQw{M{EmiR!TAP`8DnnIA%ZNh;KUF{8xrsx>^N2cHCRFeV zI249fhQXBK2x*wQ1`4AAQ`b@zU(r(ic%%6Dr#<%V0Hl4~V$b+Nb&L@zXcedmSWOKE zgTkOt1YAq?S7@R>F&K$eIqDw)dC(b}g2Zr4)Xr=w-6g9MwK0#ZL-+lVL7 z$s9JHWxI*Z0H2rLBK}WH_3I0O=08_f6){U^r{T2e1`eSi-jg7Zli=UZ9}0065F&xi z;t^Rqu^g|gv8ec)aui8S`NLWh%JaiL<02gwF^R1$L*eo4G*nd`9UWC15h`pTI2ZQG(LE|F$>NYgG9h*Sof)o6JSdl65*mhKcm^>JR&%huY zkSHDpO-0(;(d;pFI?I6uQ~M!#96o`^=Ma?%3_KSYF%TWlC15Eke5y!}$^;6Y!&Bkg ziLC$QQP6fQ7#o9t^9e);BwZZ}MZKiRZJ(9#~|v|CnwjR@UBe`Xz)L+ zrOFe(r$wMp8MYiEFe~w4xY9f)JHQZIU=Rcf(e}$j+S_yNDR2bI9#3T0uvrW`!Io@e z$7R_5twZuSM4}3?X$sKMKaYrjVwfCt4h?TlBf%*M8iPnekdRO+(&0x(gsO?C6d$K9 z=4|7EJMS{ieL9~Vn@i;Z&ngXcTw^~_1}GZr23`YogsVekfS>yT3-G+}v4DqhfZG7U z!jUMFI>G_tz@ZS}cqEzsLl%6L9gIt*A)$DCl!H2p!cwC;(9lqlJ=dNM)c*Uj`|Mz~ zsi$i1Bz`)Ts#sW`E1;S^QJqO3F`!%r8XJa&+SzgK)X4S@XrMpewZT6*{%;XhAAEUY z!r)9>B!g&UgM^Vd_HZbRO+`WxYzH)n^`9lI?qpG#8Az>Ug6TxQlXlNE0V@Jg^kWelGg(UuvdlUJU@0%P-jb?}D^N|b& z42FVZxOQB71_I6IaM?f9O!U8CatIjk(H~4s4W;(4njDfxrBg^WHd_r(kah8+cO&!oXbH>9TSCM+i`5j2m-)NaHK6!oy+-0&-piS%b)W6Ic|ZgeS=#* zMUnr#u!ZEqpac?>MIpl(TzfKyi?>0tku;V)0C7KYjc7W9%|~!}P_hl0NJOJJG#Cp_ zfg#j?9E>oZ?4rRdsy^PoAuRwvz`CHwPtpHt#Q~7(BL;+tG2pl6fx<)8xhxEvhR5?b zRCNY|h^FHS4kX@>k{T}WzvKq~JnmPK;OkQ&K(PIIP9$6$c)vX-63V2bD0VhL@rFN}wPa2qg38*ck!0Ra3+8YV`utmjeWh355{5?F zG2v?VFcRH{?SO#M;9PqynhJHm{3i(eTowL*4C=?Z_`jZch|}l>zdLowhowOZ^Px(> zAu{lyESgK9+JO^%{wF9_+QLA6W&)27?tp{LdxAJDF4Ne;><}ypT8(JSBSCFhL`=7=P6oQJkqf+P$H9Ae5%V#i16g-8G=HWqE>-$#tnNE#c;kyjqx})Kr4lK&m zIBbTp9h=JHffIl6w=|v!DvUgB8K?@tN_ZBT0V*b-mZ=6qV=xGHH24WaVgLjK)f^(I zIfz`@H@^AL5Tvdy1}LJFTlI5Ee^>4k6~4yh zK9OdKFzw;$NIH^WM`9D1grCdZmTkj?@<|9d7m26Y;@K!J55U8Dn|lExx8e6qi?$mPJ>?v*9c|426TB!R_H_8vL&q{JYHK^>?oR z_e>qMG(YhlbZ`F~rVayDo{u6|M*dSiejmrB$X>!W{9V>^y zKMU*M-STf3`9$*k5Y;CL0AeHOQJ7R4GK-5MQ|WM?1D-`h@)7nN0>I)wiRvfn+5bQH~jO@`asa(^!Ie;vSoCh^Pz^|$Z*_uM+L z>yIuLIbJmUiu+&u`A-D$&%y}6a^Hy~f5XE60&bt6%`cKS=&G?e95f%GFc^i%COIHU zL^2sP5ka-_Cl-!C!Z{=dH4+@dViO6rU>JkSM4||w+44i54*!JP|Bn*&&k{B`?0Z7^ z$Hfkcq94$kGWxqa{tdBD)b06z+b1Xli$gh#!&GBY5qK1bjz{tAs3<5>jb_6n|9JZ2 zVaOOm)DRC_aKu;PYq*KGc@#07^SQ2<3l@z5c&!=9oVdH5lfgRs_i@Z&Q=EZ|k;P>a_W#R$1Rw=)T$Tbki74YxJ18y_HfSY(gge#tJdm;&c z{qM}TjW0Ffc$@f^|J-ofS2K{~1nFpre~SmWCK?iBfk{bi8KA1-(I_wg0$h@4Y!6I` z*bzBADv>K~^J(r-bfd_6*>-pWl?SGbpeo}wEZ*z$Ehif0`f^M0Scu3EissF}*p|%! z6DrDJ)DFy%i3T3EWn`gxNVN?cWTb6AyXHu>ETlFcHfzT6Q30)x~3wY=Oo%16A6HP5pPLU z2AEO&Fxx3M(QlYLQ9JhkaprzAP-p`rL7;46vsi$Gpo*^|n%;B#uZd!!`Le$#ijNBV zLH`gy|3ql$8>vq;$@CYu`rK?j*~x$2q}2Xhlloti`b4u=e^C^FRq7Ls()_)xMAG=K zf=x7?@E5oGKT@!N)@T1UCp=Nx|9_iX|IeA@MDqZDQ51jG94G3=e!11>-39<}KL7J` zl=Icb$j@D+I0SqFKE41YHf%7Q{#{E(O;CFHC#d{FgZ?&^6E(X2PpBNnZyy8WmMv;( z(D7#0H?bHxL9^z6ob-vh4gUkABM@q8Tef^(ttYCQ|BsVCQTg|OfOL_jtBqG(ztQ!H z>RSH<>Hmz&o2U%)Pf+>qxV&*J4@wt!K93C^TLXEnn9JZD@o#aG4yURkxKM@z1z`s# zlMoIZ3<64E+rt>3j`ZaL{-ul=g;L+F2a0Z=BeM?~swmU=d3rpae}DZP*EeYw7%+7B zm;rzEpda`CIxYTg%tABZ7y^_IMvR~gG?!?@gQB?hYIfjhjjzwo;VZHIpoNLd=bBN#fM4&bdhaw!*;3x+u9!=p=kvzH$ z*?~?4qmf?<%SQCP<~X$&0sHU2c`Uy#UGkOBI+7{&UeEhDZ-fElANxB+Ij z5Qt45-n0XcfDt+1pFXgc2^U#!5N=?wy{2E~B(%}2HPVWDeW8U9gA z{*fX5g#wq}rp;|AtOXz|@aA@zEGz zXapLy`Tr@VBG?odlMTaTh!_^thJqkb`SwIx3fK1UG4(?b`RIKU z7hf8WA>jEF@sP3D)IKT^3M2aeFIeA4pZB45`cWChY4TU0@Z+r?Ireo)-L8^Nwj>OfNa2E=zU1$Bn=oS5 zD3dvOTPpZwhA&9ufj$C<2%6X9WHb2;9`&=f33&c~{K997@WDzyBUJTUY|6xQ0Yvx? zRGsJ>1;&q3o9tVgeBonPN&H0wq85+n3kg0$KRQ~rL=qm5JHE$<2jxG;FD~E4MAQ=k zXzkN?1WW*u!C59=Z5%Xyw%7!S^Cydagh8K^HUT93$!Y{V13VVS`{u9{AfunH2vmfF zXMD5b1YqSSD}paiVSTgQ1Y!Co%Y6Xa->f)6jQYunBnBH8FN^%0C4cC+f3oBke(p29 znZQ&2WJQr>f40yBE&(j0`mMQqYznD=x#GdcaXm6>XKVPivgV^^hH>JU%2p?hGg$wbCXXfEM%r>8+64DC9K1k~le zpISNv{63+^0pwp=SGxcLS#SDS5uEGRSsb`PTqP9Uwh;@y4ae`O0Gvo+7G^47*P_4j z0lAxk!P;jrPhxvwpFidINqD&pj2>ppt$gUcefZTw@7ST?tvkoGA&@yzlWI%4TZX-p zcpj~uHJ&xu`gd-)IxueyXX~LnrGonJc}mqh3mqQ4(<2{y2766%E(Eg6n1yxYGzLtM zDz8~O(+0Y;{iXN3KAlRH(Y-zE!HG`a;?SHOtcIIbE|HX=A*UaHF<-HRP^TaZf#~@A z<8-T^J+Y6v!0YsF&U3Gfas~(2+ti48#ICB`vUUpO6|ND}GaM3c-e*1CPGS1OBIB?~ z6Yt581Jf0>g&F1^J~Q%A+cR?3_b7m^4m{&Ft<96D3E4VTeZi3@f$h4H&fr^~^wxv* z+AA+)djl2HeXO|ujs9u-mIf3VhlfTkQvaGtdLF zd!_%FOXCz4Ry#!$y5|LEj1}A>_!ejf4l~|!a;%#wU)^e7?rql^B$KyYFJy^7KXR!X z`6b(XvPj6f_k(dki{@Tzwe!n67`gp7%(80=GMBprKFr$TRMQ~d&}ap=c!ylAU%&a| zSmTm<*wvHLKxy8~R$;=6B=k+awJ=_i#0PnjQbF%JW-iVqTwv$8Thi5*hRT534lEcI z7~Bc&)K*({L2s$a)5OP|#63 zZ=0k@OV8qFVG{D$zXoB7AD&p2e{2>+Bc`s9AA&$4f4^K1m7k*43=?iQ zF=ch5X1s)zE4iqK?(p?oB0663bbBoEWP@R1&Z}NQ?v0D@<5kN0pBe=b+lcNf-c|`Z z*60MfIK8oz0=7H@+`1%%Fk7}cE|Ol@l2LEAIY8muW`E|~a+I!{>MsU>)dvJO8~h^L z88=p~Ktx(}ZOl5Oyr(uNVf)FHG*6@IJR)XoVE6`81z=CLdaH!_GaLMxHFg_EgxzZY zh3DWY>)Cyr^Kg#H#5ghmxH9l9LIdGaft|G3xHC@S-u7#D>G-`^-DeQo;(JhT(^KBM zCwFsnAdveCxfr?FTS+d^!sTri@>?;5Q<`oBd70&;>}gv(>9;jPfrqM#E{61U?^3Yz z0jar<6`2M&HF|DgRLgCpa>a%$L39gsL!a!15KLV{T~1V0&!m^dJFI`XcKw=W;7MTj zcfF_A`VIW<7=W&^~2`HP<*({g^FEwS{dX%i-7L#$BKl5eC|Ti#l6VTX}2@b(8AJ@$ueVBH{!3j zT5c2?i?nEXx(hZZp40iq>5(HBY6P7Zo+w9ettn1z5%N6(W9Lz@L`1>Jf%#zZ_3w^q z3G-ju=xUQyVs1BX3A}=<=a;tL>aeZ22T#xGI1p|h1p7-hgS+-N1Gt;{V7B zyHNk=VfBZH(lxwkJ-GR#DFFg<-|g9*!%TYM;>9-T~Ve&}}a z@L5Exu+CGw&c<<66T)i?Y-7Zcu466)F<(^xS8IezG-C=$HC z(k(C>^sR9Wm6`$EqJQCy9n~X;3DNqKAnSke3&Axz1Up3$rSD#rHt}+>G>yA#_{l-` zI39CP3)d7~3aQ~bG>^{u^eJjVU+E3{m15w%-CbnDoux&-(-eb(YKR_@MQ{)OrF{8lKS$&-4ee*4m?&s3y-vQ$y&R- zaRl^W26Ffb!s8L7H4EH(a%mPJ?k%Spcl2FFkFgu;{Ts{9G9IFRaeJ>__gi*x_!~hHq|AD z*HmAx^Xu!)ksTYX^%%Cc_MkM@kG)5Gbb7R`?d^CZfgSEoY|Fgs3iR#d!tL0j8-|8< zG&{IkGJcQMiF97)-_bQD=dr8Nym?FMl&KJDE81#dmM=P#ZlT0&I?O%3TS5rec}`aq zX0KFE;72v>nhcqviSohe8?~NQP8fM26)kD_=xRhUy`6_yLDci_Z&^|t0^DDs+2g2` zfr`bwuKM*RW3RTAK8U*7d(2fhF!@5jY(R?fEKE;hUGc4OJ(DO&!=q>9o?Qz_PBJk} zZ@M=LG6$D%7RO%UVO4JesEy7xc6zdQhj3ujeB|)4q1(8F04yAR+)z?Ad>uApWbhpk zES~ln(fiieX!uljLujPrA_$~o;ecS7QMHz2 z(ww&OE@sH~3d~&OMJ{`1xC2MYs;TXnaQnz`&AZK|aXWg>gD@LKX(%ble^`Xm9GqrU z@T3r&nD4pYEMawU@+CKEF0EKQI{O#M`t6%Fg?d|aw!KqLy1qv{pvj=xz_GntXX_4O zdDZ2`rLU-^4}fKQg$3iXY~H<@QcBpBy-(v{IMD8$t12-)&n{;Z;+8nOk7V};yYsp)~l#y)ijmUDjYLXg7BuJKJvUp@0j)(;G@kmoFw7qS6L0HN{1irH9VyodmgL zaD*G(F#G~8w9?!obY2I6NN30ha9LX2^R-=ed&?o`E#6l+A96tHlpS^?x`$eSx#4yR zohy_ak|B=(q1^(@zVfej)UE2u>S)l^cuf-6 zL&rvJ>B-j!XKYNSxtQ9($odjtppjI|^WnDRE;@$Y*CY+quSWC;<}Hsengodq1J^x6 z(m9gOVxi7k#&>MQpj@|zKYR{cT%H{oh$-ccGD`_F&a~!r3z{^;oB_~zxYdN4n`|Z} zKg2nW?n^*NinfQ%D-~4U9GY~aj9gxE)o8OkU}R+2)_T9K3KhmO(I(y?ls&Xu4L;c4 z(Tnx~st&l(CKH4kIV?{UpC0TIdat;WPujN@s07W^7VBo$b~8Wf@XCvTSGK1U=FMAd zA_2ly@(Ek)880~?{fwd4A@|m%1Gd1;1Di09j-CbQ3fNk|Kx-+c)Wbr2l3ASSL}Y9U zH~N~X`0rC&#V1?*;*L}szDQA1R;ZEE3rt}5yc~h^4f`m;$s5knuZvT66)JXs=p1?S zU7cUtv4&YL8CRUwy(ZL(Y~nJ&s*8*A6bZi<2F}*L0p2ezz20EbWl*|l5=2@hED#rJ zrK8MkN+9q7Z8|c-vg)YxOz%9P6FZfQ@}fez*zw2Yfw%X5S0|DITv$C~=iL+sFt#34 zSXsmN!N{c=^z6GY?__8$Vaa$v{%~+B?8=ts>%>YWUifOQNq3Cl?s2YIVJ)T7wf2Ya zy)9Bkz%y4-REt(|#vC1ghtu;KO3^-#juq0hra;)Yx}QMaI6SLKg&mv@93SnSjWT(?7%$o!4Ey&5sJf zO$m-ZJ{hv!LT{b;eDw=(MK5<$ZLJx-k|=U2K&S2J#tD{%t~mGN&6}{MxFgT{b(=8> z&{(kzY&PK<^sK*6YuaPx$`$ij!2pwxoGfillX1fJ>;uQ;oy(8Psf`qi_1)trn!)YT z*vFKnCz%Ac@AIe(W&A+=z^{8x&1$@s8B-W9?C6;VKwa?3WC^e{KpQ#MgGUJ)OOc5;8SYnH$Jm|&L!Uvv2wV>g5LJNnUJh^H#A`@Sem{wErrt*XcBxKIxZf^NeFT!wc%P>!LJI=`5R>zSclV~J(D&1F+E!tT9g&tJcD zst+zCJEAj^-OR5s)HzmnF}UH~N|Ek#_yxDbkNG639cf_Gy>Bb1EYp&@)pDsbKPqDQ zciJdDz!>Mm&8^cscWP_1b&yE0_J`N|#nyC$JlYu6|Fgv{lc~|F!-E%vBYyPTs>jyq(tT4o-N0W;(a={YgsA-Y8PZZ7bN|F*x zvFT2_uJv(?7du<$w+xpJSkWoYi_Uhf^by(hqqWMyle%hk+o!)Rk2Bnn(on*nnbnrK zs5W`;aYjDJ$c9}FQ4-*Kqqa@uD6L{E_0QH#+0-_)>z!tCL~N*8zb0WIb=}(;kOSAE z8~jFYIIn$Pkd;zjlF#6{-r|y<7X1%v&$M%#7ZjH#n(Q7IzEl5!> z#-i&5x7@a51`ga2S>2q-+|ZUTje80AiPqV{T3n@M%FTieNk%@ZRw09S!!eASkHoj=Q6{knj3QhaGg6%JTWM~C{I~GV=Bhq^Vee4w=$A9+uoIW zgKwl!K?z&(=Do|E5$)Rki2LgaI%Z+MqCB(Qb9v(nkCMazzdY(r-RxG8F&h|<__~#u zp91M;i-OuR!KU|;7IAT}1iRUTFYefSHlwdU6buT{7CNn|`!q!AekppaK<9<*0+?fN z*V@Gke^>GLB?tI6lhgatCAar>RE-75)s>WXZx&&8RG1$Q$hfV%Wv!a<`UA(p@X6_Q z1x7}75odz3%uKK;r%9}c^;nG8>mbRZw>u`gpThx$%<8lab&*-9RnahX`L<(kidB4U zB;}@@x8ra9&a-Srhmy086XcsW1^VC+zJm{=8sm7ci!Y_OX>Subcb`sRYbQ>7Ti*T5sE->h6tZxU61{H_iQ zIHU7=yM_`rVs>vw_G=t&aA(BqudjPD(qd+d-BDe_rLoqujs{b?DzA1vOu9Ff3!?wi zsUbKW56!&_!r{%E!tPG>jd^(GNX8PZ^%l8?8hmbkHeyBS| zy}NjEn~}GWEPOVLD|XT=&f$vC+5whw`0=2AMWL?b&71qf_XW=v1=%qZ`P9KURhoIt zT=AM-fWdZ2^|Q5wS-Ix|NGNbjI>gV*Dq% z0RU{j@)no3{aqmXP0pGevRz~fQ77vB1Sd1_eN&>d!z$k|T_dv2dAo8IH`Mz*H<8dw z@M4PYlV1HeilXs;!F(XQ>7F101IQ!GrTMKLjff~7$xi761*lwr2mly33vP#8o);&m z>>PXm7v88&26(RN^l$dNmx3aMtPQ4zlSd1}furp9-W(ibm|%))ZZE?E_yZ|@92L2( z`i(Jwuty9Ya+*M-?!4uOL(B)XZLOILL{t+a;?Vl}ae_mMPyOukZDS-UM09%xHfs|@!T^Q zTiH>&4WGqnJOY#~&{Gw@dAu(@-abXVjwVNGW?9XXreJWqJ)rbA_^u8dj_uKP+yZW+qBg4p??`Xkbn3W)FO!qltI8Qm=MYgI_;j<`JWAj=^&P-%U-#qA+%v z7V?aA>6BpEI};J0dnMx|PKn+obeqsFm;$G8WY21D(|b>4xKKykai0k9tgqS(7h-!> zp2hIHOJ;-Y?&`T!%nXw^hnnoc-mU=ZkAvd6fKqVYZD0fW%So*9@Ta(-|uv2hN^yz&?3WIQp7q{kvpDB~Rjb1jyM=M%MdHk7}_A z@#wfy>|!DzzccHyh|PoW5OTyR>oP!RJX#Vx3*2=Gb1}`f3iPoEn5;&r58*weqJoC&aq`tA? z_r5p-;2CzA-1|e6D$~)kJ!fpe1aiaDJue5qZ z!M^=U>l+Vo4e7)Tbzua#;Zbbu!PgysNG&S0caf2Ecbz1;;}?kZ?8yaDQtZY(9E+J7 zKy|5ysM~5HE=;X{EO>*qXI}E01ZqcTKlKmZPr7`BqPWXMT<@~|B?wm&qno2wzf8Jj z`z3MTVGFp|zwS8O=;~zG^^u)*LlV)FfSc#$+G0C2lS%Kd`~tbF%bBUt4~jmoq%cz# z4}~iKaweUmT|lBF>WcwACpU5zJ2uV?lTqbw>+T|jURf}7Wk@LB~Xhqx1kQPMgX&rfLMclnGu0caJUM@daTx*Rtd#tGI z`!swbCY*S3R60dQk>BPgxvv+s*g##Q&dPH8=4lY=6|_~t)B63!mmh2$;N~t;sn9me zk7_Abx_M;xh751)j<$+m?JbXrM49$hDwgQptcm4&^4^<60}9^nGMVayHEqx$zKHBk z!BM$S_i=KYcjC5X2f(KwuwBGoUrmpl2hbf5-X@Hk6tvx@PNzKhSwV80WVSUHBeg;5 z;@fv78Jp}?noXR1=x5A+4OmK>vw1TJ;IFKcje0BCeU@sh%k_PfvkumQN9PT%*vGjj zX@$i)6`bnK^iP!56iXYF`EhehRtaw(iu1bKFX$X?s;qhBvh--ns-%tj!du>|S&I6* z3#!)b72&VZqZ+~$>_cn)aAxHF2`Ahq$GzG-(jq^9sGCcR$dhcShEUA+-Sfcu+ubTm zynm=;G0Ynid1{I%k?LRED^Q{xstkrrr1%BDuM7Th@;Xe3aj)%{9+xexhZl?WnwLNcMRz((CL(gkvsDNgq3)Q9;(u zt!sbm8-C3oBw$qN&9X@9YR>Alc>4?lyS!GtLaUTQQ1hq(Rg~wTE;QS!5tZ0c`@}e7 zHAK$&;vQRM&!Q?+(Vq6yD`{?zP7Wp>$#%1l(sn^hS)0EoZ7n+Zbh;_lv^s`lIsI<( zqqV|XH_Pe@`I>f;&SBE^{Z@9cLl$BF=W%8GpE)Q17~TL6iHK^;kgyr(Y0w=^!3gtT z-1B5Zf2PQ4>X^nVu-XQz2RI3_y zO@ z9WTAokrHUOq#j;!plj>-I8Xh6xoR2_ncGiEJd`pVT{|V=MwQ^!7Tq&2`pU>&VE_c4T1cuFrIl%-N)QLzvTT!4;HuY1Er+#HPfa zv{DcIduMx8${t95X6%euOy8|TXZ zI!Vr?-VbBF?h(Ok`dw!UIyR{Aw^Tvn+WlLMLP>rvHdybg%4qRjVg3|XG)-IH`}nJO zCOdIOPpC49h{c+M0h#&wjBvR?AGg!6*Df7QZ%-4+m%e`f|^v>3KOB(6spWc)iSXD?zMhYM$ryKU`D+tCuxWUFoc)m9smA zH~$5wVhb8cSPgROQmSG8qoBG=KD8X4L1s>sa^m@pi<>!_5o-oK(g&3C)ms~a4BfqK zCPhc;RFGeDqVsZ7&K_*}E$P&?1@S(@7r!{gfCtR1G{oHkBuu}KR=?_f0p|vK` z0JsKkvyX0HAL8p)?>b`>REP6cUs-0p(s`nUNv$M6sLMCl7T z1AZw*W#%EcqWG?-FD{&(Id90hd?y>1vB@ZL13>=K0*=+INB1xRyRfV}hrH-Vw9 zTG7Aj*zxArYLL05yFWRlmlrxKOzFO_dJC@6t+r4bqa9FD?NT%rr+B&JFsOUISQV3c zCA6=_N2;yK^!$9ybt+a*>Pw2Q1(`3p?GkhAEABc_$+V?SZZEzE*^rzEm7% zH-^YR@vwcQCR85VB^cH}+$sMG)UKBtLwdI9y!Dk0is6!XVR~#D@)^$-!JExgP8?4y z={((k-Sv4;#VR-N)CYmxsS$+eDII~&!$oE9Wutu=g+y!ZP4-uEsseCIWu z((|p$)57a@G|fOo0q5X372ChcZct zGvlKa2OJB1uV&4=m*{3uyho+erXJ9IJ z?s^5iJ!dfq-SV03I=b@!4W57YE-xurR97_I((rG#G3gyikF5wi6`%MfBCJ8?>EJ7? zYgbh%xVMYzvSldwhSN^%IC4&_vm4}YoKUovt~HjkFv0trMfaW^GvUIrR*f#>y!8hp zrpx`={`}>}6}gOmADu4{KV9o^Fi+L8HPO`yS7*9y?h+K}@#%jp)mBYR_v zTtL^sdv9tw@14DDyB=Ye+1!P;*!0nYr(if{TK|EaZw9o{g|(xZalnqx5;La9(IMT zs;|>M%^wSKr*7`GbfaO`%Nq!J z-4w~!#aqI{C5OU#Gf_K+4?Og41UzncyB+-27&3>{$(h=@@|4VZE0!sS7jneQ}-Pggm-f1O!k))c2|Wjdfcn3k70*sNV+HuUgWsnJ>~*IgI; zCwWR0myIlzS&;#mL%0=pdf`$~O?k)fH@F>W@0WM}=F#;gO2V)ml7aBVbC(bG%^9;? zHl_m|B}|1}8q~8Cb;vBpd1{Xg+Mu9#!SA_NCVUhkn6pj_Q}+j5F>c_zj@-Q5eWxGp zGh7UT)PbcH++jIgZk+)Dt7yu{pDKh0rQ6o}ZKG+Vy9K3(yBdXR6vgiy)lUJfNR{|Q6M%_MR!PtVx?)@Ow$?hr213-hJ zxr(yl-r%~T!eOPc$5E%Xl;x6+#O}U-CQr>%LP^^e0+|d0ALRMNybY`{fsKer|F$t85!X70vyjoiis~(NtmzdM5Dde28_ujPxu7|$Q~he&K+THw z_9+m(%Ke@7V7bI?%`4W~EgTZSPu$RWZ{j@iGGsH#HLF3kN8oW$HVks$LdU(72g@CF zrMV}gOl~|@JkFH3>fzTYlpozZqZpLQBDF!mE_UTL#G=VN$n|>_R~S7%i6=~w~)V)13FuN7Y^;MU%VRe@7kOO9&FMKn*eQ_N@Nm#5YO2sG%eRbMl z)4f+lM%EBwX7B0w1yb@`7r!(u5x9jYNm9>Q+?ogEla@rKOwbV|q|C0rIt4=Ww6{c+ zE3>jeHsR~Ve01ZW)me*D9P7>7OQQaM0%LJl9MgWtUmqL9u#9dn*~>lPJqW58dwixs zN+jPd7F0D^4bK|52as~~@jc91lRY#I$EculmmyO7X(XGxW(jVvEJ)?-wb%FD4{2W# zXzV4yQKDbMv7=J&C=K#$`lXgaF72t9z0;EkY9vh?6xU;k2`tdqbt2YfJO<(fg1UP@ z1ahGA56$%pU-Vg?!wikB;5A<6+kVCOK^9 zU+mv=f_b?>V_;^be2Z|m_w?z;>Y+nf zF3)vAD}LGG&ITQfzyF1@2%`kFN%tv>bo-)xeJ$aeyt7+`eG%xxriRq2!& zcN}#Ms)i_c`mIZ+Ogc2TzF|~^LPGLZt#txamG*)tl!d9cP5=cZ^%F}v*tiZj45|g% z*hO}rUXfwBYGAR}&euZ23V9~#m=TQH$}Wf7OwY@9Gb$7HNpqSzFex2 zhK)_f~ijq884-iUyn6dVXBd4APmgH#bHdk_YyewCh$UHNLs?}$>1-rZa@y^mk z@7F~FX%(VW7GAth-zFn4$++4ZJo2os#rmafUUF#om$!X7BGACo-Zx?@L7c({_9FahV>9A<@8`Prjx8!&MX7`WdUOj1L;TN|73Ea8DD> zVT2y9HU?evw*1A0?jQq5mf4ZN`!)YEH>qKj^BJv{%po&R)u_+ z^$*;fu{~0Iwf$T{oi-hGK~_X;47XYgKVG9fyVFIn;ebc|!+WeD&7(BJ=r22GX!Si9 ztMYcl#+ZePPTq8R0SI#gAg(?+9(6jU>4f*pG?iMC|Ap!lT-C}EMnIs+NDsOzm+p*@ zd6&6!tkyi!B?Z-*8vNM((T&k=g89oN>m>8uiZs=lx2I2syZqYC1X<>ZN%KR7YE4f3 z9$I7`-KJ8ysl#x!xZh$%1D++G;r!dw(Nt-&p)L8mGkoj?Y$$clpkZ`>SkSb%%&U7! zg7faQyRBrd=Yx|tHp+)B^ze1>}S(FmbDNvXCZFJ@3DEGP}o zZB)~M4(>J5es-y+tf@8NibZ_XywMwx8-S9E{Dgl}`!;Q%Mq-qtfhR~blhQ`trv_Ws z+#EV6QLu84_6ie0bf8JssETTE(B2$5pyqGi+QU^dB9hE6jvZ|pOr!OxnP&d|B@v6e!B`ms^h?xtjotb#A=r%QoGh$ z+4Q!jH=y%Pxm{77wL8L;*4*#&X`(MW+Dgf6)~U?&Nv|;&k;_XtMssbBW~hZr{pupr zbR1SR!j7yNI`cfuD6{Sbzfrh6A%C94eZ~8g55(HJq`@R+pM}NwpdHxN`cHPDv~jr@ z(h-Ztv-_K4h1Kj?&&E0~xVTEGM(r9~OnX(^A#__=nUhiaqIj(uwS(udbF4-7_qKF7 zhxx=~7w(BxbmK&Cc^*b{#}_19w%(m{37UTOg0)dXAa>}mt+jSK*}JTM(wLG)=l1P$dFbd(SJ?GxDg#(nWF2|Z@|d%+1nSJpjshK zPLSRBacx>udBf!-FfL|5>{g3;{Cpt8eNYu7>zq)WKjqqDO|_oXnhcxGZszyj>Zmy8 zzI-wg?`8Q?a;4<`PM-@wL9d{OLQCW4ssA8(+ zek)_k^YvTyxB8Nu8Bfx#9y?2kC{t z9)k9@B94klXuZ;MPKk~rN=y(@#qv68+7J06<4y^%rgL9wx+cy30YP)rO_$E;@EG6Bky(l z-d@0El@8MAZ6;nRr{KPkBwVpCE~(Zt6KJ8mAu01AyLtNtza8PO`oc6$Zn9-f&53ZW z7?X#d_tf`;J}|)JS{n6EgSa}w=q{;CiL$+$$GVD|<@itOu!~y(4^Il#!mE;lC082B z3mcrDVMnCwXAIj z;%dv>MRYJ|8Bm^74O+sj?dYX}^WeXXq`umZh;Q(!7!clxUAp(kK8KbIbxj?c5$RW# z%{TK#{vDeO3pTOoaI3+G)6=Xc zyIkyC>71J$nKcS2edTXujtxq(%yjCE-4m0pW7ecQ9l_YUyr;|gf_>}KA-eVJX2S)8 z8xsb6%n&3}v2Sq-xgoKy`|WOYb}K{iW7g zCG}tD4h0s0Slh5HuwGFqMLgbmZi@tF_l2siuAs!OB(D4{b=TuAz&o$3w_%9C2URWTs%qZn;LV?=8g%1VieUb2t*|TChwDsO zPp(C*>01AWsO8iJ5?WA+t@7ESTCd~Y`zZ5jcm|Si$Z*hYN7*G2Jsi#&j>+qD4w; z0F2yLtB(%HnuP|Su}`+wVipl^mw-aV*pmlin_K&@oT}L}NkK)}61yR>?|!oKLmzhI ztMhNgdo4u3{a7y}gWIp2LAY&xvaxWk>fX+os?01yL7|6cM)&Jly-renG^#!4?N04k z+_&v7xJ{2_+1ht(Hoq+LPUGh4M1}3Cc_aU3n_n?V6y9wQ@2K68;@wd(#%`b4HJh(G zdbG$Gl%z-GYnT!A(t98{`VFP#y>RCFoa%{mxT<2y!9`BC7tY2TE&n zR`G@Vmufll%4e?C7P=2*xSq}OCT)+8-J+6UE4-~URMx`8q_yL)o> zzU1LQvg;2;b%Xr2>td%KBO$Y9^?gGvKYL#8_FsZx!bOD^-2_&7P@vhb(OrEpa-eH{ z{rOW-#`4w&SLTtiwD4I~QB*;T`Pi0h#PO)@u`)-EdK+DiwC6}o2FMEcq``fd6YZel z&QNF#b_*CoeW`#(rlbrHa-kn#>FJ z89I;4N%Z`~XXwO@c|)3k>U}Z}4ot<@A0F6<%yee}-H|5cS+Yd|-DX7MlSd>+)`HE1^18yd=)U_>JRpfrkv#J!&To7(6M)CO|6?nmb`id^qvV@{W7b#|@_BmtivlNb-_X)xNAQ#J<`7VNO zji;hdF>TkS-~8icPHRg>dEWf|{cVe{-re^@l%(nip{OsdwC$Z=ydg07?S-0e1+t~RHpuSqcq$y*pm z0HFO;0LSe;7!wfH0@j2N_K6==dD!7)Jn;X~_11AwHedfZVS)-0q9Rfv9nwoHAV@5+ zbW4b|EFB9X(%k|J2nfs4T~dm4iF8Y|NJy8!Zx-+S^Ld`v@B93FU31MfbLPycd7m?G zT?O-x>Sc3uNp+w-+20(d-LG{W3lu;zGP)$pAp-9_jjYB5)mMM0X)<(fG>_O_?Zb4xv@y9(Zem=! z|9jsmuQ`0VK}jz4;!-Ad-mupO@@otxnuoic!S7}A@X9uC_Aj4*E z2K`Th4b)`pB9MY*l=_HD2fbXqhmggyc;hzK@GUy{PvcGJ(~9&FcTxY!Ngv1TjFTn@ zaiWU8(+`Vk=k}tgN)B~VvX5*7WjmY|H`q=rmNnz4&$dsmj)f{-L{mVr(4SJ~w7oxd z7}DO<&Z=rX*m6r{+AFbfhVz~{QI@O`^@bgv;`tit-es?DxaDDJr9W!a(j)E?4pZ8E ztU=V((6R%&HBoO_afQ9%*~dFiSVj(x?6rh+j>Xd^-{kBH%nXKpSR}(~N}!wJUK3G^ zOXmFUp=F4Zg-H-zK<()71g8ea6Q(g5o(Fh8ly60Zi-7a>H=U2eEne(ITe1kC;Vt3W zhOcZ_v>j7C)mM@**Agd4(FeVXNI{;nGjZsj=CQ3_rN_@1=P15Z%Nxs^yg8fjQ0yaS=@j9ylN=qGt(cB<^)|*=G&?xc0Hd;ZNvJ4 zYwzDnhKcg>8OOsw@&l~@BmxVGdar8-yB82da{ZpnapGqwUD(7MmMWv;uNmw)f^_5z zJ3Ap6NZas59l0dg-ZR8Zb&0c8{x>$1<(n6dAX&DgV^>R67lL@HvZt)$6rjut@`fXv~-+ zTxVhq(wxozX^BEuJn@5U@3@Yov-8I0NvpZ4y+|A-3INgo*c7Dr0O4b)ZCpIUF073Xs zB+W2w{g3Hfvl3&3x5&7+o1Eu^iFmm-R+LckF4EEf3lt@WJ%^sw>H}I-CJxSBrD%0& zbWnUhIH-`XG}FqAdhTB?zXw8)y~nsXYFZ^P`p|`5Ly}L4bv&LoH151xRmq`10SHab z{*bymG%OV0IN$v?JU@%@{(M>oUdjL%NA4$c2|M)32!M3rJ%hdg6hSDhQmn~OUyvjd z1@a!o-6i&viHYHI!7wO@TPaCX-@AC3GNyJs;p7h02aeADOYf1<05c=8=eP$@t?HuJ zE(IW?jS~TIc-6SSS4aAyYjt_hB&Q+$J^w*nh5VkNGVVew845Xf+y>G=G-ZCw=oTp@ zj*n%y^Ip3TVZfq}b%c-fMW*K%Z zZ?3M6JeE)7Y-L;};EMoLjRE-_$Nwh7Sa!B+)o#R1DxgUbxmVw_TntMMn=EDECW{?` z^Pg;<(=fi8_*!q9;}qK=lV{{nFjZ?f2u}5(m*TM8Rq=Dp=s3z>Pd3O#l85oo7!?f} zsyrr~nY1tbZm{g^Iba470-R`21OVtuBbbrZO}kgWH_jfIE&-Qg&B(~NbtqsSXj@S8 z0}yKE$~^j-2u{GS-3G}(nEv0)mSEo0!RZR~R0|HV(eL>^k}}B4 zA7BmPDv9Cpm?6_iQ^+qFs5&^K#bKxsik`0HtYTXZR;+2sdi&O)Gg@N*5qA}gqp7G0~*h{;U-=M%ISG>%KalRrz}*ly3c0O?%0BH+Ad z^~=Flv_d793Zn??;*QMZw6w@}0cZQhg|@-V5-$ z6)qD;F3!pmGnM%@K70@rW!=qo`mi*2#IQM(ynZA0^rolS!zM$$D45@y9xg1ID#p6?DHTM@?MSj&RYbug*q9?ygO_5hGLU9ALGPuq353D;3nfejT2g>VXi^<$Q zpTyU)`tUo@-sdh9=ay3|Y3HcKcaWiR^$iyyroan{RiW?#x?XEq^W>y$EYrgmBE(RY zN3X**RG*=Lr{MaC5^js{ELYT7tm@1GxClMDL$=q7P&}jYA6p4v3KiHp^)pE|0 zg(d=FbVu3M+NvS12j}TlA}nem_*4vN4*sdkWh{C*9VaK68!q=yH#+%OKl1@sX$q!m zNL_5ZN!`qF!$*z=^+|AX5DUb==?J9wTNboC^q%>#H7RPF9!0EvAz^_wSyrRi;qj?v zqDOi1EXKNVdpt(Lo#H4UejrT-wsjkYw4BOWCM)ar8NIfWmMezJ(4BkH#r!MydOV^t zRhW+}zb6Vl<-d#3!9+dDR!T1gLKTWV=2#wVU<4vqB91JDxglF<%v6a`XOk7)DHg%< z9cj6~t!Lk$_j6mbm%Hcmu0Bu*x`hRt(_tl^JmBD{Ir% z%9M0m9;CoMa)Q&=CdQ&c@}lQ&SzixmkZ6`+)#ptbJb6!ob|A08+5p&piX!IA01&nx z<$~RD+1*KM$FlksNnq55KQcQ#OZ!HqSpUE|Lm4aRm5fPKOuNw}M~hCE0O(}vOR(a2 zs`*vvpb4L!XEc~3>&L*fE*@(R7yBZvH#CUM#AL(~rB3QHPFo}ZXl zCGhuA8L2yhTt?+Cykk^uV+;Zw@(Kz`q3Z7Wcnspr&6*K5i>~UEKp}Jkg#bD2l*AOs z4_xG6O7M~CLl^7H0P4inFk_A)5&eGa6Tb;UvaD+{K1}+a`;}Y>-TTWBh88wds9*mH zKvfgGwWLAe32@~rW<`%&0s-yQ*0EUUJ+s@ob1>wkP;$WA+R$|m)jo9ZV=N(WF7C>G zxx(UFTJ+eV)5w5+u+GwVCHH0zCXZh3Y5)MEegYOMVJ7|)7_{g^(cR3Q0f~|h<}#Ps z3chD4c|j!Vd_{N{n#%C-tAGnKPmOy~5_m3o7FQP8J;-82N%Zo*8Fqp0zw2gBvug;khrYmXuE`;Rw5a8d-+2Qy zGww{5r%kl#+@0I)Pi|ILwWmcoaS9K zXCCV0?IpNT2$Dtqz{^JdBJp(SqlkMuvxTjgs8DKyz3xow;{igDGWwoI%{u-4BpXW~ zN$G>iANvAk6f#)#-kBKyKmuO(<(Gn2hc8L16S4@9>lZQg<##>|iykr+1Iig!qBvHD z2x1n4%+9e4Zbwtsxu&1*ycp>*hq^tAVUNm3Gl(Y^JeCoSf~gm8zF03sSZ!caV98O~ zk)RSmdJ%}?5rT3EzT0&IZ%(3GmHz5Qpts`|owAiYp(n9ey{NA2k|0Kza!*a70BDtk zSXLD^U^lItd#akojF^YCqyO-9)Gx*U8d{j|J(~+gvOJ%MgB;ld;2pf}1nRV;3oWI4 z8k{|iC%ngB5VNrItq3A&u zsXh>n$Ffimya+Z9JD$;OYS!Aw1IE#Zwxr(o>yZH zO2vL|*@sDTWC<_<+k=hVE~){LqpR_$R-XR*=^vz?PTFVxqDkE(u<->8E=*m zy%Gyrai+|bw})O1L$ds6Cr*&K@>W8dh;dQa$TW?HFIjuE%pt%lFF(^7I^@Bp4J%58 z4aPnL0&4`g1(&+%QQSQyVXPidc8+YB*76ucBkyH(epFHt(E2;~ROOxk*?@rFOnb>M zgmdW&11cYN5}FNnJDL8bcD!%uz75yauS5}~tqmL)&Be-rZs)ODM89&ggfm+hoX7!M z5YT@#g))%DxBt*>_uzZqjo+?o16hRdrOdl;|UlY!Qxp?RoE?kl|-el9)~d#X@$8#>p}N*xx2 z8E@_?YUvQm0_toUGE@ho;BXjV7974W^r*>%kKF4H9;#jFoq*7zrPdm;uJP498=D%d z9xigxOMgEBdG~|aAbkh?$Opp|yO$GHhEgDp)o1#m<=&~KYAFp%7P*u~9rxoG%gm94 zn)(?sIKmZsu$v0gt0ThcTo%k)-jULiYb1tm@_Q&^WHRB5CzI35Z5T1Xi$5?}*9HK~ zK!P~9rae`EDG5O_F71MbyZ)B7x%{AV$%r~nc=6m(;dlEsB7 z7p?gV-7Q%wlGJarH^)J6J`Ga+UI1u54Go=Fu($&669z^ogTGkUw`)>sDLjHsUmtS7I={W!sUOmo3Uz*^*X;?h@76U z&yJTqAi3k9@cuzy(maB*NUDKUy^B%=62C9xAU~&$rJf!0ZFRZ=Vtwpy%t9H;c@U*J z&;8XRu1GXpG`f2i>TRNUJl$5lo|pGS6dyQi+mSF(~ z8Y*&^VA3UruTF;BdCevZ_Z}TP`XC7DP@ThADO39yYvx__%dqzAyQG{oI4!2ies=R3 z3#$B9sqWMgeH2~+&^DeR@iIxc9H|4=YJ*7PrV3VyzHyQg?>VU7!_XR-S@~^e!ff&! z(#WV2G+_WiU3-8c1+^#euv1gAcCh4+^QuwTC4MT@pHS$*AeyQs^!QS4G-T2FTc_vf zY9)I`dD8X*XBqHq&?IxmXbJ2H)X3JL`XvfGF&Ll?T4 zh6`v+F^E$}-$T_Itr**NRZ%uI1un>gV@oT^@yW@z*7uGd zHDVLk(!7xfWW+>B(H5b!-10;~p2$j0AV%w-0>}DNCemQciTQ*nL5y>wVSViSXyPlK z5m77m$Z>E|ayGfGQlMWGNn!yG-ZAaUN0Le#N;pp#PtT_|zVxHt ztXK{^Se{M+SwM3aw_J_37hkg#K{}P7;Efcmt&)TAac8Hv=SBL=?hfN0E9{Ub?^2q> z#?hko!nBvsIY@5q_S$Km#ha=QRwzjC&s}ZfODpY)zrVWbWuAu7@7NUhdc@*aaqa`!|sIf$J~t* zDK-_`eso};2s0BNSpH$o5!%N21ogaiE#`}S7drjDbNm}~`QxZ7>rX>@{FkmKkhfe8 zjY^wAa+51phMNkEt#-IT?HyUzLh;oUWUpoveaeJwKT638dr*hRG@?5k1Umv%@J@t& zoS!JI1%yAGSUu2vlw|P>_vHRnxJQlp45~t2SVCI*i}<+=N)N($e;!^Oj3lTik*akw z!dzQb0I5~5jR-KPA_*#P!PWfh$qh3>mRBj|` zz{X}zf3&j~loCRPlf}%6Qoxvsd7F!Cfs`N#Co=EXxl)POG4ZZH;GMO`?-qZnyE&lZ z&l7yi4feZf=uy*{{mC!Yf8;eA7p10G*T=s{UNFOpLMq!o@Lq5`UL+UGAii@|VCGfhhHJ#=cIF+ZrEdYBv9a%&tx_BPKq<_rs|x@J_LLvJ$d!b!ZzCV(sT zxHD+zrn1EX8MlAmLLr1+?257*y(E2Uj1)=Gd7OYVpGy!+?&rLX5>ByK6G@uxg9MAQCJw;UnqdDBgYd3*`z_8-*2^pbAobc|T^Gett_2?DL@O|qKzLry z#GHg8>QvDrkVWq&j)VjMb+I<-$;z^L>^e`TK}nUDQc&6ud^L%C3(Sz6v8oL2mAC+d zsFPhPOc^3~w&BXr+x464aO#PUhO_z8ZKj0Lv;DDy+yq$T;h!9fV>jT+jE~HgY8}z% z@8SWC{^8AAg5R`mtju4tOmy3PP`B;|4b(SIu*Ow#PH-IDo|<2KbX%1!NXjCS+S4@W zTSb+;Sn^|~-)4;I6H5CQu>3l_oK;9%uL9%DSoGOyt{xQexv<>sE-@&4_V~d^yvb08 zR#TCnV{M1F`?@3@h$~7&LXwt4(du&?bK!96M7h?QMmeU6tWX9bQ*mujW34*YExbk^ zy6CY$pl8}z#}5iORCFHM>8@+6&BP+N+XN+AbpH^W(7BIOj)&1J6`~&rsA$5eqx2>c zZ0x2+SvD9pI5sj&7qaS7?`w_?bbC#Db)>>P#05ALj2bVM)*_>?_*VqM7RUxw4Wt*; z+8=SeW__Gr<7?GRqw(DTd2P~Xu!wfG<}o~R(N)pCCeV}ANye@h>+Lqd2nHuMD_a|y z0pSxitL$W@A#^V@&5c;i+YoZGsgnu@Q6E=g^g=C*&txl!J8Su1Rl6&Z zMa4Q(Yx#rlu!Kt@mu+eZ6hyQnq2$bN@}GIPO$--Gd2(<~f}Zq059^}r=^1qSq~xU$ zJCMtex6q9$PN`$nNDMe-x9izCS`vm61d_sYWlvHEmp_e6F`P*kx${Z{f!W^QuzDjJ z1&*ONNVj)fq?vh8U+d6k!+75#Vbb^IKaEVIDbzukvrOFJ$htUQ0!$O^Dw1&<5MRB1 zr|<{XKDa!{56^Yg?*U$=PDcGa(Y1QOcts++onRoLe(eE$H@Xhy_&Ds=tXK21@Kp-` z^UWiW*)NT)kCu*;sycu!Tq@jiDH13$qp=0Rp6MAIPraT0wrw^qmxPt(U_GRpMgsA7 zt)@n6_j@ZUdEDs=SZWVlUo%HM1eq!TvW(VQ-2>&xQ2PK9&U=S~LK-@CHg97>`I(ZAMXPNx4fRvkD-?)sl-O_RPXt}bTcKib+oEWd%?`ZZtHp?zD+vMn3Ay#m5; zAi5owe(rkQ1Y=8h%k?1YjO>{v9;yhM9!3M_;$Wb+gp(cM}{c%octDJVdh7wGbt)wbPIsM|1rD&axFi3o9W$l$rrQkp|kaZqgV;JvH`Bujrt zi(|xXUpXZ!8kl*?5y;#RXY=D3*SEvG=p}&JcjpI zAnI;Q8RHG18NsXoTBOsqpLkr!-}WaL{PCd5LSX%Pz5f|uP7I7A)-dOTJPm$D7&13_ z-(OE9sP$T*RJLi0jQ@PgcnpLdU~5qNi<2YgA!+Ux645>2WxBn3s_ou6Dc#}I><&Gh8w7iI zLJ|fD^^aVVi^AB;tFU+HJtSu7bGr{!i!tBRDw=SSI|Z#lzxYpRP^JY8tm z&Hgji)$Yd*(tKxqn4{QLT-y6m;);_W+V#FFO?+$1l_A6ZmugvRmO=s%mTULTPk#=~ z&CLz2Gbh4oU|zqo{~dUova1D+{?eM#sa>xHBrd5l_2#yH#`AN6haRu%MQ;&-VZUUOhIy)CkJ7(yTOh7;hvvb8M{a4~1CK!&!bT!FINd zhDIx%u;<9L_N|fH8D)ly)aCT!m$0KmN1wBfNMXn20WzkRBnO@I~ zOs<1ibZ18cIICDaR~yDezv=dX*kfvba4@i$nh+iyT;J+!W~V(Onm4unV;QWwNjp0F zQZ#J8C6Cm`sgTIhCez@6)5g$5*I>OTFQ*-?GdMJcI+$w zRs+fGY)1nNu0!`lMKdgG^m&JKgd)GM=Ta=9s!u%LdufGC*`Xb6RKuyX9uJFWow?Is zo{rphS$@AB5(BHq_3%DmC90>>v0P8F3Zpc8Wn)-bUxs!teJwTnJ6A~>+QEb1IOs$j z{vcQpz68o?s}+M9WEkbx`~SFCMsUf#)7>rI3mHCiL;Pm9SRR#QJPmHZ`y`c&Pbu(gSbay4fKe)h&dRY z;IJ z`2vwF2D8XgB}JA<*mXD97nj5O(Y%zCU+vEapQR%$yC#PRlfADywHbz(iI`XcYkGLH zq_rYPC|M{BvA}-wfRC5Mj%+5d0ts)DxTPjuS2dw7K_CD3L@d^paxqVRj>25QXad>Qq26>QRypt z+7yvQPSl?VDcgs5ezr@FhMqUm?!~vc{z$ac_E^>#dGlmidWCO!3TbvVRfxu!$8PS9 zwo$7iJnHH8o#j`^_FtpJw02{Tn~#e)St`#@ybm#wth&CP%mY$P;*h->WPq(9qSFV7 zmjMP4#V59q6}lc`E;QYanxP?*j*EsZ$p}pB-G=zFkZwIPH@x@K^noXwqu16tqkBOt zd1EV|n!aY+G%-rgtzkH#;gEiUo%MYATu%yp7nF0Wo8X{SXq{UcjzLuJWpN8^tU4!W z*$G(cd$7)+c2hN*!0)}>gSKi{u?#_8YCzo4rBIFPqbrvI~NJd`aJ;KQ&gO0eVR!9 zsl5hf0C6gZo*2o<9Pd+;f=Z9n0;!eLEnth&qKGY*kldB{N>q_;CBfEYnXZ%2<$JKq zP-tg-jM+A*cl{0I6GnfPHg3=f^@xlWBA?p2wsfS*c_zt$a&~+)eT>ekX=ffREL`Gn zkOks7W((Tv7zI%`!tCTvB3VXQ=`>lfbwmNcQ_!KrM8vIZ*N*xvi1U5fs>?6&c%c3W zRXVbzOI!5ObCrTaR0^7Y=N_bDDVz^@o0WZcMwl83iv;#dOhoNC5%a_DMpa0=O~&4IUbztHZTr=x?$q`(lu21 z=SqtKUB1WVEWcEkiWFO(U8hTydIs{&Hb8bA9jY+GAigR@cL6PN+W>j>5{nNqIBd{S z=kvl0wW3O#tWv~n^&G0xwt?i0CnTM9d*|ZbcResH7d=#-01 ze2<$U;e7kq=hU^)=9WmlBtqdEA4^C#NRbjoI1W)Y;Ng9urMbJf{D(g(Cu{^f#!(2p zDg7b!jobm$>fkv_Lu{T>`d|!w?vmS!p`Y_uJsii0r$?#2a-SO;&5X_=iI|MVG~-#) z9iwe*W@)E{Fh5l7INh9o3PkCxg)BE8ydZ%Ld1cs}{38m7GmjJcv)RI#5 z0&}Cj_+8Ik`&Kq~FH`2q;q4yBp8|fes$X`?itaQ%y0YIWZg|+eWOwJj{I~eS?g#Vz zCS0gk)_N*xD&0-C+-y-+dT+#AM>>?M0x~`+UTk7tZYv@qZ=vIb=l0jO=Mgt@XuisZ zDrn2cMSRu_o*5oFV%zz&jS7=ddH|QZ-*Y3SdUtl|ARz=PG&02@J~rTDDWfYngBae# zUvk~dv7Io^#E zd7xWQxLnQH47zZ4UFf$zvWP^*$-Ee~G;{sa9f+S>6;$kG>OlYO{4}{yyZSZW%H#1< z)2^}u1Bb$PRuL)97a5xrG0M=^Oh$i5R_H7LPTRcWpTCoQWa?+Vc_JS!kjVwX2K##! z2XI!$(*$R0^k3jw(zZs+W!Mx|8@7-Vsi;IBF6mGlQAVT+F2{0-a90!CSF#jlQduyd*j9sDyb^IIiG``ooEGkrhHcMJDpXqZb>0*<)L_NM zjip5u%SPBy6z=k|vqP904s^Ei=xV;TnNPENQmSSYm2o}VKdUq4WOD1P{_+<(eZfOU^#qswcZMcX@Sf#&P}yFdj`>1OdeUQS#PucH3%S$ZZql> zUKuxaFI9dvXBPJ@INc>#Lex+bp-%MjldhAaWN>rYad$ zd*X0q7s#HGE{~LY46#y+pR9g`yF3b9p}nUBr-xT8zy z6sf9P-!zmMjs$lMwmhWxgGSvqE57#aKbT+4DYQSx1NBcD3HX!lk+3tIX`ZPpWFFEB zGt=|{)s*u3vAwaauCAAm_m1D3fFQ*?G=|s>@}fChDn3#Gg0?2#T2PnoRm+`}Rp=!f zb{R{d@|U?Xlrp|r|NDo8R2(vYe6)7$mH0VDa4a3lD2eHj{W}WOn>_0UU5+S2^0y|MCB zjeX@9p>2-^+n)xFGN<}+RbE$LFz|UWrUrKw1+S7cYKV$&yZ)%}Elho!-KwULBOI(M zErQ>Ba57Q6W43pNPvU+gOg6uv*N;7F!Hm^7DV(R^O<`jtT;jTCPe(x()+=RveBj3$!htjo2~ka zvPr_eqHsc|>7PXCXHeRyK|c|v0oA<_M>8TPdquB^$r;*qX-O?pW6MxcJmj~sS!?E_ zR^clVS99bcv|I5u+C=GYp<=qpRUsc!=}w2!{r9! zFwM9bpk}fJJDf**ua{*F=i&F)uW~H<x5Q0vMUw3Cq z&B@sX?6Aj-N#J$>^SEiQ{q(kTIp3ROq9SYj%c-i5$Ut~0By(S8)amEVfi`1bus*9{ z?o2FyUqmK%Tv431UbmOn`RaKabx6Qr({2fl4;UVCY+a*_$Y?Dr z%~LEb(Urv^IOCZr_IY4Zl1`P)_05nBbun>y6#8Ay7G2O@4YDr9czusX+ zf2&4rrx9j}3ErQ1>qw8nX=;1@>NSwOVV@1n94=8w$*W)L^*kzfT--Sd>WC`o{@uM+ zKPM0$7jx`(9RblcZ*6?shznQH&IFFw!e#PGxWOh=e6UnB{| z>FGN51gif)&oOK?T!0&MJ9hY6BKl0>GoPG0%}FPC{8bhVVBq6 zB@RuhqUQI@u7xA1k&N-2Nv@r*T8`j_XWqo+x>75jw|BrQtMR1Xi?4dN42NY$Fx;Hv z+;>xe6eO}fiUyI=DQc#4b{ba zPOrcTo`YrjY5R)5ZBUKsM*MDMUo9v!d%XWOpz+T_*VjCrCy+V4d$Q0k*TAerdU}^0 zqgo%k1&H;i5xLpKzRCHR^+BS=czj#?i8Gb1YRx1~OFb;-DxBc0dfmYYM`G|@$C=yF zrxjrs%Po)TMXT%$IYW;XsIw;<4=+!0-Z3GN@%WI-O%I0-Mx2kHZ=P0M{q`d1w4z5v z*ZEewx9wTwZjJer+ieZR18ZufRRR^joul8pz1NSj_H4}uLC-Ugn4_*r2}ny2ggf=J zu4}k_!;0q*X;~**{gSx?gm+J$7(L1e5B!6pf4!)_cHMMB7a8;`-IjtCyZi)}7VXhJX>iVjBmm(UL)Gc08>a7Q_ zI(#qOFz3!X89Zbo@Qu*LUKrx%4!Bm!^vQ{pX7~GU?{nRg#t&U+P~W6+aM}NJe=}1} zT#wCm@xmV3vvWvu0Xdfl?txehL*f~QNpBYE?~4*LZV#O_wBI<7yGi@2d0o{IlY|>F z1qtb^bvLU@OPOdnD`S6ZzzzRPxlI4l3f;i~2Li%xpKQ#>3_pt@akC7{N*~$U=Z`wp zb!U}nuM!AJEJqD>5guaV!r&PBmu^~dqw{I|veWE4tFiFwmKnJV7Stkxs_qGs zUo~sUsrCT+u2`?>v?A}6ZRbHpY~M1fH1WtK9hVoo&K4ynRv|IA2J2{1YS{%fIN-ik z#?;Vo@m>WHrv{3fAF-UnQ2~m$#NQ){=s@$duu8K&5C&HRT;~-QrZ-To@f%g+H#vS| z1i><-<%FSdLRaU`#^^etx38?xIYV(7lyYQwsJHE_0k&E4V0GjEw}n6v%yi;RZJFr= zh^UqfvI>LkN#TG?1-2AF+QNH%ogxGVOHAij&Ju&O96jfeq|{9)@H&{7D=9LG!8H3+ zfQEO_Zr`Bm3qf!UN|ziBDDd=jrukZ#5ib|0^03gD{0&pP74!Htx*#a zkcN&K8@4@8geiJxB#GS_1^Ue>OlNNf$am2^!W@YUrF47>vF6#FCfC6j1v*z|G%Z+;Q9Uw;iZq9tiL~2GTNl zKR;G_@5?M-Hqq61aKGHAsPS>&3UY6xzevU^YLh-N2Jns_`>sE{@`@Y3sC#A0Zb=hP zMG51j?flR4xTH*FXS%%qR<$3P}3+6jFN~0Z6DwO*l9A%G-PfG2%jkhlhP54@_>% zaTJx!&B^!S<_-cXzSSu*>zc?qhSbtD36t>->qz_x0N)T3{|}MxU7vEyv4LLy5N<@gv;9 z@JYZ87Lf$N1?F^EJv`C?-F;a7Jk#?0CWO1GtRc;uzkceNxZp4|MvtBTBJ&YvrYAu(CGOZw3NFCsQj@FYl4CY?m z|M=_;*e5s){EdxzcgS6`>1n{eS_EA2ThB#U_&TlNlUJrttiOvfdCCnYZXKW8VLN)n zZFOACMAtB+`h7O)DOj*eV2MZ9UU@TqcFDLx{lI`;rnkS09XJu!CBP`OPlBF9gL8Zc z>}_Rbh_U+;?GX$R?QHQ6M05{|=30dh0R^?JeyS8%qk$9159W~ycxTcs;4Prtu#i`S zI>=;h8%`FxgTs#%uU5a#)VWcA-Iho-u!zgG6Tm0>zUxCX48Cv%?te!-2@$`fjLnsY zd!1CI{FNL$2(~~zFuMvV75!ST_k4(JzC$;zy#uyM(*R&KZq&FEFW95sC;*+IY_>9w zjyGINNZC9A8?ZT=7t0{AKAXtMl}?@Gf3*Dq|%e?A#X1in9@P!LFN(83y2Ggq-Se+La??%BXNtt@$74$S}XRGYE> z;ie53wx(~f956JB9EM=XxDh=s8{a0cez zi4;P(6@jsXg8ex8+i$AV+?ZG16n@rU8U*73qXobO+~VL`x@N@6wM`)PT-!?q2VCTC z6-0y=2q5$Vsjy-h5PRP1rId7!Y*1UP{yB^I;UtH+Qd1cNb2d`8CNY1UH2oMG6wnKKDr-460D0Qtm8uLT_`(Uu8ybic zmJ8^m=kzh_Oq7~nlGUdVfM}-q0@x^jS~Ypbuopr!8>CYHa@i$iJ{Vy<3k+9Tt|I9* zyLw$cry<}H?LMKy(`o zS{yU|1Z|9b2NDj19D;?v$Amk+kv49<1I8qmtzmS!?sD*Fp)vT^sNuw+oaniwh7qQ? zVQ+kbdWH)@Rzj~MM;3?4d4;;T+-S4uh2WBlsE9Ctp?)o<|v92>TR703n{eyd2M}VdN+E-xm2z z@D_sn$W^MFM91-GKa-NoL~C{i8jpO==Z{i|SiCw=@_f4z-XeFzD}z8cwpR6vAoE8gDV}h3*>h^~?sR!ozHTsRA$$)%&|CNA^6S@C2aAVBl zch_8&K;PyYgMygMuTO;45ACbcRfUB41TwxEswBa5xC-Zh8AVLMT3q*LoREGT$+Bs2 zVCNWQJ@)Gi|K~OzB;x^Oktb(TQXJ=>sQ~IzKs{c5qeaziJSnPk%xN_kTZ?t@jQ>E{ ztp2z=*GR7goUG80X&AZ9mQ%E5q}H!akve+itW~5^zTe=izj5p*rCUuS3(dkZ-apO! zXUEXnM!AQ6y|fF?TROLXt{&`1!TA5jWVk-S;DvdI^a(|AH*Y`|>f{2)(1Sq!{ySN& zWZ3G7nFzW@bw+rgXF}6s`Q{$ zeJlZQvQHEFQhm0iS`J)VEWz{-e;hBzK0wCdqg`3!4zgbIU1soCW}Roj+KcJMcwL03 zdM-MT{oKJyUjjti+pX!N{MAi#JdB*a*q`$7uI3gHK-c`pwG0H;{cbOfu_j;IQ@SGq zC%5}L0jWAVo3r}>o9}d@bDpK(F3bmt;NP|?edbDa$61nD3wLs)3skPv8pqn30Zkym z^rY781G(0n7b|5le~A}+cX5zM!)VOcyzhVP4eaXtUUU0*_xzpAjZ{&m4RDFlDb`WcuvT{~x)*B;`wyniyF5cA}-?# z0h@-Aw#lo1@CCHeYD^gR>fmj^zJq@F*0(zT0Q|n_+P=s?zuZ~Yl zusbgl4vY_vVm!jAYEeO_3Qqbt%z=#f%)SB2GccmX+;%#p+R5(6E-sxjpg_FQo2=z|q;&v9OcP;K-y8bbYfx4q;zBqxv&(UTjPz21aukWvRHvxCW{?nmv z{}^*b5*^AIxHU#VQVB`%72@@%K$fxyr1;QEae907s5wC2zwZ)Z4A<3CrFxxJ#Z|Zk z$OW74YC1i~&I@vxDzpdML9JD--FeTj8`=T_j7<*#MQ{1H4tXLv?3mMPjP?He6!+!T z)WbRTl^TJK<7=rfpMc>%kF;z_vIO0y$5u!*+*5 zpk6M_|C2jOzSDv%?uHQ#Cb%3a zwkyFG|6#A6kFXJ!zeDxV`+u<-_%E>&l*-a|qh{H_a$`77Vd!5b)4sGqyk4#2sNf{f zxUhXXH!`Sd8p^8p50^>C&RcS1*VT|kmt{Yo2E~;DO5=iQ=qNRJ*cWdr_KA+X$(b`3 zu?$8AgX;t?rbygVtyA4Da1fPwk;|$w>#^Kev5-p*`MZQ*3(yAJtIN_>y^AK*FnGy( zVAET}Y{x;W8=5Ed?{0mnl+8IQy{P?+VL-!g)8)qVSO0J`mU|SdGALL(dGeObGZ%i_ z8|<0rwE!6PU$*_1Hw6ntqS0(oaxi%>d#^*a8}zN}b^me|je+0IlM{XF*^Lg?G<%j4 zomu(R|HWZaJcYS4FE*T%-0Tl89nKnMhT3O=JB9xKVO%3rBRNIq@Xjk#^jqu(149aU z-4=J3Eu8QRT-lA&g9b$cH00kGE3N8Vy`PshN|Eqe#cy4ZJpbJV0oOJ=Snm-Q3R}fa z70W;wK#h>Uf4IFcI9VR+fPVJzwaj9fSWZ)x@aW?iggE5iFLOhq}q``G{8nQ#8T-D>9R(T1c*U@l3BK`uFsYS+gG zP@(L+`*_vvpG!gMneR*L{P$mv?zq$fEANcfamj|PdpP0Oq;e(KsNf#$SXi-n^X5ut zUha4i`S#VC$ENB*v#sOp9YwP@7WqZn>Uytr@~z~W7KxMzV$+vD6Y_pK<+Jyz$A{Rt z4<6mo#R^U933|(){ZrWg6*Cv$YL&=jx3x9Df)vNA+f(14n6JQNJHLSW zKM3fz1;D}rA#m`=TCF>enId|CO$n}JtAW>e=>Tg+4_1&?Mls;v1p|W z{pTcMg%)?94Gf;HelF{r5}E?M**Rua$k=4J1Fu&E;s9@E77+#x4i1LQ>E+%al`sIj z3y{IrHN;WZ)6Y#mH!&|WEw#8ruOc^xQI+Y|UmJTMOQ9^as5mn}&sND$&p=5bH7_|o zB{MJGRw*>ZP1iz6p|~V5FC{T2KQGl*DKB5i-p&SQjsj43Ua_rGX;Ge4MQ&zZ3Xn`J z01`k^E0`iHu&D)!#l_|MMJc)&nRz9)N=kM%X_+~xx~X|3MU@I^r8zme1&JjYwo1wQ zc_lzWkPDR*a#K?>6Lm`}3xGD4q*j#ZgGBXlX@z?eRU;7^U`{2+*4)&RL~`^MmsIAY z7L%hhB%?GpDK9ZIr&ym@pCV}~f$7#O$V*4npP8GOo~jQL28J;_vDkqUTUWSztQPPZ zK2;zN@MdHZVL&7|ud?~``hk~4b^$R5EZxCrSoompdMiI=*$OoVhQ&b44Ob0f90i(# zlnl@{zPn}g@sb<^!&x8(UU7#6mT53BAc7TLA98+?K+?s)umPC2aD@=MDaZi<%3BDK bcpgVi3-D%T11Vz#LIa@R&H*93vXk&;~y#IFR@P8i%c^h){tmDv;Rr93qWP(Nx^CTVGjC zQ9&Riu!#gFhfUH{WOEd?wKSkL6u>9h0!>8`pRIm?MPn1eR{|G&0q?3qH>e|_)xNC_ zz0%UyC=yaRd@T)Q0*j=zg+MbT&@@zsUubM*5ok zfq*06a1>HQ_3OniD?uylrixg0Y(N%76^%k;YiXEkA+RV7RdX#33oW#ohN=Z1_3O1w z1bYUB&k?bSx*R6>{Br%_KN_mPzW`|dZDmzRSXw&`Cru8_Ir8xI7#Qp%__ySHIoLq_G)4 zzZJTwsK5e-Os0{D%63kgil41bQ9%d{379mC3+x?(K%kK*I3ABh;r?K&0xF3lRG<+x z6;XCfG>gHcGkIJAgG=Tj@O(8SoPk24ezpgd!~))efHSyU0vClvI^Y;Mdp3urMi!!x zBp%r8CuE?2lL$Fnn*H#`7&Qu#qsC&h)G%;5iizL|?78+l9@+tT)(@Ez2>Bv=p@>gX zwr3Iqz&(LdfRz9rP!Z7}4Jq4G34Ec7hzt3(6O*J2@rT9Y=v+2cK%%I@F(NdT$Ki80 zJT9H}Cv?(;Op;dpMen+kSLy<9Xs8N@-_Wq9(wIa(33$seCjteb6BkH>2<+URN+N#8 zAxa=rBhayU5e5y%v9MG&mqABx9Pk)G;Qvz&k$8yCVTS5ruhx4cHbljJX^6?}DhDu@z2^<34f%9+iDddw# zDohd?c-ROv5_xnXn?`2X5#cPhK!`^&$#fhWLk8CJ6LW)N@@FO+uEf^G2Gu1+{G3TN z_8Xfh4E)D@A_zP(MvW}6cR*kq*bXE-k;mdw*$znFzr`n$L!sIKkx_dVj)DXnGWqsc zj*x4I#oJ?17$ysB@;5Mw{*6sE{>N;>>39*;-lz+k|;$P4wQf&mIKhr0i%IA=fL^6Sd=5Ucz zEK`U>GX+eM2>&-Sicy0z?YR^+0)~Xf(nT1qJ(5VJ@_A_B9DmAa)77K(cfCe4To74) z)9B9_MdINi2L?k82mW(FG6-nk&`3O*$7lYHjH2vGST@d{$AGhOJUEL-KoKwwTm*>? zr1=v@k>51>=Zs=dAR&DTL_hUVEDgyb@r4K?8%bmHxl9(7jiggW3<~{kWE4YZaye`i zFjfXyNW)?6={zP^4TEOkh)+y90c=t4LR&*w4_ z0yQd<%%`)^912B<;{M!}hq29P%#f5+?{T{E%8dq}U+Zoi`6zzM>1a4sFi=Glpmb~Fx&Y%jo*?08fJn}H<#)DXVH zK?IYFpfb=@IKdu+B#Kx>78b?8k`WwWLqCa9zp1v#EvPZ}H>3o~iqByxb2&7&5b*ll zYXt%eR7*lYtO^KR1U7{UU?Ql?um~I;k5a>duLv|AWGR4ONdRU+Xyp&k3pXOTe+FOQ z?eQOO2_@7&Y>5I88XpZfebzW;6bLz7rBEEOc!WI~ z%jO{jOgs)xAPeo`G#caQ@$Q?(i7b0Qn@T~FfUa>AJ35cVBjV@+BnY!V(Kz~BUV5A4 z^)|_EWVrrL8vi$xjsijEivn<{A1UBF3jS3y`;pF-M}S{oaZn)oZjax;hJwJK>U=bf ze%ASDI1|!2(gBILC)wNc$$T|X*zvh25sw1$9ph)!?{5Jd@jso92rd7Z&PUVe7oCp+ zxgnh+M0hgUj=)FbaSn7Wn@?j<$P59EM*)45pVS`T{G5Zd!%*#oc)SCK$ixY`Bs||i zK;#j~f5Fc`^t-SpOZtm{D*;kv$K3jk!v-wneJnrWuvh{iy$;37LdM#x~ZnDC!B#lCtthRDOR)dW}uQH^R(NAT?^1RfqQz^nZn zmj6%Tzai9rOW~tI@y`lJj8ck13P&LsOeBZEr7}cRIN1&>;xPGGHWJPG3($>(V}t4z zOAv8zT#|r+6w(|>OeRk7^YRn(4Z8i)U|ksjA<8evP3=c0>btD+w*WW92;`=W{M+FA zC>s51X&gi4;Sn?;i;QJrnQ)en&1NzBBxD-APEkK~`>2?$ng+b@z8GIyz z_E&UXf6n`@xQjJa~G3W#eiAKj0K{xJCRo-;MyD|1kL#+Qlr}Yt~ zxiSv%k0@OkJ;Ks3Kiu>CV*M`_=l?lwM+xWxni`(xfE2MvaI78ZLKD?EbU4xBPaPde z0zS<_(vWmx??c^jMl+P&Q~a*4EFzf!ux*? z-Z9{0m~2l)V(DOL#=%aF&qLruLNcTrE`cvrjRDWuz3O^jf4`AKo9Sy zzK;D3%l-4dJ_5`sWB!={uZ+Ts&^q>S()yn#_0i5%prnpNu^sHe0WFG;qtl zGa3gcUEkas|M}GGJJ|5&CEIt6SSa=nPxgTCBj=xnC$N&-3O{aJ34`f@e?OnVngS-U zhWn_3;Q_2rMMBkoGJy4YsZr;zhHv@5H+}WHAw7af$N|G!G<)UGq-kjke;=Mmf(vkX zFdRrlP$(QU#g0#Bt0CxQxR3@$FW6wHPg4;X?eMtI@DUgkouFwZWpD_`1*gt5l0dU)K zdp<|NAqy2O2wO=YJbqs7_cKp+d~mo&)#b3+Bzx$q{!eTIjX|>EY6vPuL`M;j4qOq& zj*X?LVTho){vX)HC_?>e6JMPXfkWXioBw|$R0NsLwqv7+0uBL(C&Jb2Ss;Kp;0X?Y zh*^Kh(Y}OJ_!npTD!Bi9QS7f8?oUG3Uogop0rH3G2@B4CF$g=F0|ti#Ge06cf@=r2 zV+$yMNKgN$^c+dhNR6hV9ft{8l;0)4uhu>ykbQaUhYTWV2!ew>lf+Y_k<^%Ift>># zP9dXdXi!ss?{gzh-$4={`Eq1x1Bd1uM`h5t`{Ts)@TJe;LCB{KkEaZ~+E*jO;Gw^N z!TY|(yuXkNzux*)Vr*!R9*iJ@_l02ENSR2o=kSMzhoFZs*uTdzKS`bh0rijB^T+bV z39%xsfFq#VGk_=Z8CW$cM}!bT3w$qMFh2#v3OzwE0^1FXMw!AVfXWpb>={9#5TF%4 z36x5o-(!hDkvjqef?4&?7e*Mu7cU(_sOlfFDT^Qg5a9<e^_x8u<|D>f=7the^_pmH2o*b zeF55kSaFmb^(QNmnH=D}Y|0;&93^o7$&w=j+el515-I;=MaZ*97$EZJAptC;`bT&9 zS~aQu$TdOzJ?tpM)#PXoo_rr|gu_1e7pqCQ9vZuG;}20aRM@ z+DLT%vtSLZn=K%N2(GDUPv8z$JL0bqdqko6SK#UIi;K16 z9Z?z$i|faw5q6Y^N&Y7-D5s6|*wLOz`Jc3YFRjrYZ26zGelM-jo{ssSw0Kt=Hl`pN16HkFDD%_%Jk~rLHgh0rlZYU{`XKh+Hm0i z6Dq$CCMXmZtFQmB1d~xF-~J2ufurE4e~F*bX1e}s`5{8B;~xf0#3;i`|6gQhlqsCQ zgB|R@3K+ik9w-q*5550MD*gY>%kFK?BEdhGRl5Dw_y z=quKo9W%%4zjlKN^p>a&p9pR9+iz~Rk@Z#B zrNcLl+V_}mhb+iKuUUHjMoEjwVAS~9HeJoUmuDMU31g}Zs-<$9RFJ_ywZyrAj5*}^ zJ++aVj6R=$Cu@09PNQpd;!t#c`6=mGnA_3iQnA6_W>z0Nc&Y#0nTBO+u6oEp96%Ow z{^*nw>Pql{z!zbwUMJjqUO?aSdS85vfx)VsDanh*Vhvas$Zv zOifHUw4J4hnGJa>(?6i#l#(=8ExoF4>w!Y zt!8*^xm2B)Tf8(RlDO$EMG>jHfI}1kL*6R!ly1>J@N&Dv zC$HOCsnDvixJn%`rw5q3R-N7VaCzYnap-15f=bMc^hf=U!DWjUYB=2KxvNyB+QCPQTZXQU3?;mV>uB%+nDQ!*K@@aiBTy!4>dkb7_ zZY1uO6|SH$+xu{ay`T$Kuf6$2jQlSy>2Io^ge}g-ykV)rU{6nj_*N2ZF2Z@|q*GLc ztxfw>?bxF3CGu+n%+8I=0t|G0W?(+`nbqQSVVY}C)QNrh>aV89X%h!s_~PxK$W=ZE z_0$I66+fo#1KH^8kknJt4r*qhD_3tQ==QCIo(a~wIR(&zy{ z(G0~|s1H+NI@m8)Q;bk}%~hzj#_Z`%il+dPCH+nPdC1C?D% zdgR+{jJhYl6uiG|Tp7M7B&p+dzBprjZir4uAAFYj|-ZtIbT=s<;_hcV8P?c5BtE zNhY|bg8(`=QihsaR9#lGSsp9t_0V_>{B`RL6V<2DMV^c4cXcb3W;U{CgZ!^39s62M za3xRfL*2B8;DfUwWhNJZ#g;moMB-Ns0y5;T*(l6e8rp20+G}|*rL=_&k~92_`0)Gb z)8x;Q(#P8Zg}RkY)!TH``UtR>#~Yg`T)jH6=FLE=2sa7lX0=>8cJ|qfp2!$Oyc6J9 z)>nLZazR01PFJF44X+(&p-OoyOd(>cMCZ=&EmJz*vP$qU*yX8_G9E8q$v6jBAJY3| z=BNvNQ`H1454(N3WNJ2r?NXm*y5y3zdSvP{V9YbX-H-iRWJ24M99!!-tn&VVwgjNi z4S@DlUS3}Ib8-5QPGpl@2*!>Au#}96>a0tTn|7h3#)YR^*ua5%H#JYF1-fH|S9f?4 zs#s%S3bufxLnVqQ9z2*(RRCUZ0k5N1t>OemIvy?tk;hK2d4lXNwHFoQU!UHe9%0O~ zN&j^0lK0Gl0;3bvz$ITDE15dJv@AU>J71y*Q;mCMkmDDXUZRO}yjfMq0x@qPSdfd9 zB=k%$kksb(TSnWmS_T3@IMHE(E6d+yNsgO*#F%iOi{9P4u&f+0Xqmja#Q_R>o1m?0 zr^O*_)$`<;8e*KVJ$+9XFq%>GOb&};<)zFuw+?PwBYioeI+|o?q_B`1?P(G-t zB-OImCTX9ik;!k#a33ZG;4#@N;TA*lXS_LwbL}>1l2LAlVy*{dgGUXUV{oM#aM~Nx zwTRbk9-XA@Rs)#|0f_LJ_)xrh6$eU5Pl2S+ijC&&gSPnrhPV&ow@GR_L||B(fHBGL z(v~JfEx#YrAD8d5W13gVK{{h)aYC@*B|Y5c;h{0G$rHdvZmlH@d3%Y$Yu#Sve1YJZ zbEVv|na?8=KLvNEH^6^nKAhXUI$}$KXmK`)?NZtoBe0&BSd!OFg29f0Ord8-7jM_EE>B)N zY*Ou8C4|0#_JI#(?bTV=4|_GLS6Ql}fx$MfY5$O))V2WN923qBJ@K=uqjz$*mwD!F zuu-2B>=YOz|EvlW2m2MI$Je5YlwB;EQzDyq`c7kDTV+i+0k`K>*qcorq8`We=9VlDW7OLNSWqN^6l(*awFy;6w@UoVV-Q@GKJF zgub4AL3SKW!4r^az!5%E@wUd{v;`maQUe_e@^*B`1rhrI?Df=Zo^C1|X1VEFY>Sra zH0FVUWr2>DDpEdB+Zic~LFCc!6=$7KX}loU)SLq1!t-U-$_JOGVh?R|3NK0iu(yV{g1~N&C<#-TlpzC&FmYpkqZHcwI_tZ(4Woqevb7dM>Y^!4` z*n2tPYzjWbdWlu{`|>t;J0f|GpEz#1tw|XLuF8tjcnWeu3WRxOAs&;8Vh%op;I{4;5w17%ZA^%E<(5C&Q`WAn)J817($RS@B+^VH_v|YDa7?&O z{Mn4?mwr>vKuPyV+{d_6nIH!~2Q<@Hr1%vRvt(8tFLgbypc{XEXH>Ykb7W6f=6#U- zvEoN<_4O3Ji<*b7R_%JMusX`y_~onh43JxYiNtMBF^$7ue=1&q74p3fO(%FYm4N(S|BUpeDKlf5jK|7-93U`Zq7cH%w85z zZ3xg&{N2++d3LjA^}YV`R>xqcJAozrP6Qodd29dP+zpF9UEMJ~wZ-A(^1&4@IB*dBTSl(EExfG8v5$DLC`(({~xjU)w=uV)g3wGS6>35|)> ze38z%UN&7@b(+W9b;#J>9kU76Q8M{n8h)}Ez|q_3;KK#iYy{VjRR~J*&EG9i$ugF_ zCe^0644kgfsOS$`Pvcr8NCup{=u4f8*N%k@OL0=7q|;5j#5bUzMQzm$D2Ii{N&)68 zEO#FR%RvDp%Wjuk=dR6)eT0-ee1}M^i3-{wxsIoIUaDKf9GrBe+#}n0vn^uvfYtGRN*0Ifo5TffXx+9eJl|wSLT9X? zIM}P+l+z@i>x~FrCXY@j*`Q%^K)Tb=JB?v8*y*i}iW@pN5GChYak~e>n+Y;^5`W;x zPy;AvI*)_pcJ8>l^Ow}bUS-r|LLKt1M&gI~GWwkEU9VRi`mn75K%Tzs67nzY06a{* z*BE98BGAVz!1kX-Cb}?VEMGq*Ht#7re*>{GhO97y$rm%5a`(ho4pJ;%I6p390y~Fk zZKK0W5jg)9v7^k6wx=JiSunqLV%q&6J<%U|Z+J%;>y&)~!|d-jlBD7`+QB zH!#z9*KE2@0NAv9hehS?&;lT_rwdKuQj>cZ`La)Ur*}W}r4;!6s#lB|dMnbhuEUVCc5y~LD!Hz0!iF5=3R1PCtk~`n2EG@_* zxpTekM%s2s>En~ZO3fl`)2rwM!?khKg@KZ&(A#H1fU2yAgd!}EVP~kgDLujlvqj{ z%>ljz)*Nv$e8IS@mRXIUl$sS;5@BNz44}yJC|Q@=u6~meG zwT=(n7+cH*3xX&ZJN@A9OZun3-QWjF4+5QlF}lw?c1@y*qt|-9#N$PvS)^dnWGDf} zQDh6sBM*cgZ??s89S`>OuojSGt`(mbpV%^`zAv>IzbaEbLvPKeRb!^Ilep-^+Bx+s|!Kza)HlPPAe8M%h`-Ozg_E3z?CplAhe2WI0Qv zsd8^`U1p|gG-J3QH0$`8GVZL`C85+P!zDN8#_`sj?C^XYSiY?x2I@P(ChP82^53&= z(V>z?V`J|CCG2*i(|#@hU;-5dY%-8EpJA^J>@$)ab64(^Vf0wtDy>@yIgY~i*%3BT z7c=_e2W%fo7sSe$D{)>FTfCo~7c*(*@Xk+vJyU2hTNv$lsI$KDwX~)k$lET70Pqt;*jdX$>?Q41Y0DJbUu1iy zv&NXjeOz1)wL1@I2a7A8&wf?vZmVKkxZT4`mR4Edx8w`-h0WUP5n1NYj5&SF=KA}M zc+1U~G^fc}nQ(e>tP&?XkaW(>Qj(j| zmw$EYR6+d_(wn(irEwQqkV)5V_NtBpk`2qW%F2icEME&sE#uP$`M!#d2-njYB$e2{^2 zHMGi}`P*lK5@B}3T`8SznxQ0X`LUThM5l~jK79@@z}}t+Eva-8x?5BnOmj`V07*r` z?8CL{(^^ev)An%O(xT$w+fIf;k-EF2^g8+d5&&BaA!sqEa;`<&B>+gi5`{3b z{8vRhvKsoRJHc{{PHMy7>s%uFMU!_$Sm)F0U)YPvP(vb`j&&XmGAp>75n!N zZM$}Ejpd0?wbv)WbRITp<0{{8CG3A6&>KHF1At-PidUM}EoA`Fr!48oiQ1+&SMR9* z0vK#jn6~t0e!Q8+T~VaC`y>F}UF(Kc1}P|}-2qw%7=OJQ1ZVzi+xX(do@YG|+Urba z*4Ken(d~SH>Jg9k#h@;?pL1U9b={KzA?AW4(8uC5YZrK}@A_>O;`M5~$UBf$d^)UK zI!)>*@gqO(FE%>&%wDly3p73qyZ5NLesEvf$XLoS zANBfOyV}*8YbMNsTCw1wuoJ#OgxJD5wdXcM&B6|)DwSj&d zz{-PNnQkrfGrd<;ZP1$K%LeUgqry|EDfO>smVTI&;!@>CeF;hfhR;xmWlDJQ{@F*o z+oVpBE*=0ov!|9u87%{0W|$h$u_Z>)#8Tp&+r@$b1TQ+oEM@dg^v9Mbl zh>d-vz4xa7%Gl*EW5?j`o5%T?=9#gPQdykioo8u7_Y3oueiq=p63blHblXD{({K7d zNin#x*NFCuu_S%NqeCX-pu|U|#RKP0s~EVR-BBRrdDqTuP-UDRJb4eqq7^%B`#VeB zC-i8aPa2x9^K7f6;9B+mH~xO-le1W}l7`-$jVN@my?Yl$ZJus3_BHZ&bCFx0q=CP6 zf4J+LUhH|XWT~;$;gYF3!Te3qI7wlW_3QmD{6ePE5Yo)hsRhJHUt}ZA?^H*eyx6^g^gg#yb{YP{>Xh!>z^@{J$ItEU@wVVYpVRW zm<-I^q@=ukW3%7P-3*0N#6_#M>u+7RkzQVT|JPd_v1weIP`+xvO+(lYb@%GR<7G>c zVe!i~y`ml?nv#11C#p|!Q_frW_<8I+4lA;(dnTqMm$6sz*1n;rj=-^t&fY6w)EggE zKfgBS{F!xzZqF@~5_?M+N;E&)@)N#dhB7hy4*sL*z&~=Yx(bpMR0j1D9-6d+wnKi4$I`S|sDq0}EagW~idC zdVX(LXN=^!c7cp`HM#1;n__L5*qo47}Kvn0e)KNmMNPl@@Z} zdDokgv>?M~5hHE+j8cOW&q)RHk!8&%nqm8-rw&O2!qPIN>iUbDpW9!!BqJXjwWyX@dZ>3si zehn4X4LV<|-tHrP$N@#4u=aRw7pRkF(}y$ML(qF(6&53B)~1n?p|mK^;1`r;Fse&W zc0mvA!o0l6Ggf4mXVezCD3!!kS{xFF@p|h|*0yUk^KUg&JT!?DH}&TQ1(xxY?ye+n zz_nq6ls6?$&aU-@-B@NDX=b!*%-(T3=lrU93xhqJUmnhHIIAiSkkYP0 zHVdD2MV~>{zlgzel@#9$6eew{l=ZKO?5Ph>pYt-Mr+r;mrfTS#fo)cUZLegzc3gKo z8SJs)oy#uI6xHtJI(tfU46oNXxZ_=E`?|JfWN3Ti(KeS!XO~eT&1N$n1~BwyP&%qQ zXK|XUb1iljM1unJiIa~(4S-wMCtpc%DZ3!f!{60!I_4*?!xVI%KdpGP%;!dO^^t?k z*E5$b%coD7?Nqmu?Omc|7uzBNjcv0PO;BfGm-#B@;`mp$itM)Z&vS}e_^jr`$D0%O zu|n54<|1#I~Ce8Cyx4K5<9k4ZqaGl=wx_HA&H> zPpc`_W|0anZuBXqmD!yiGA@(_EnL&R_D8g)@{$kU<>?A`2P`AJT@ab*SyK6N?P6v$ zmAV1JSBos$A}0*Dv50*oOC&Y>xo6xxcU`V!K6q$-w`i!$0+AKU^IrYLoFg01&@_u? zKE51OQ~7pwvwaKhvBh1!DUUzC_w0V$RMZscncQ1`teTZ@XJ=RT-aX|noK>6)Cbw!F z+uKWN(a&AKsw{Y~W&p03x8{khN_v$w(+O{m{$y;)d%jnxqfn2lWnUxcDj?}43OM{n^JFPS_w!298;-;3! zFTd`YYW*xuS$e_6RB3%hX>APdiM72;XiUYmdZBvZn^`8Dz9p^B1?v^q2kXXcY2I_L zqw(Vz5x(Py@0id-{ly;wax%P}E5}~5>3M3Y#9EhO9&UqKUzRr0gtI>XH(d)b}Q z*?UxL)%maXzI<<&wYlE=Qm~OzxtfhkoqzNIHP$x{o3E1=mA8ife(AA-tCMGk{gRQh z&V*B?B)(o<+^%cUlt6#7*BnT^fafN>@nph>=OXe1k2gWxt1bIoh|MBxoTa3s1r?O4 zD5ZBe5$;ESXw^vB7`pKdIBp4vbZia1qI2FyKp0}pE!sCww( z&X!XBLF#;q#EasY-AkBe7fht-R~XHrJk{Ns#;-z_Pm1s^DyS>$?b~N-^=v(7iR>?N zv%Mp#I~kFZvn)$XrMQ_L4c+OTtW3+~?ZSP9ZoX18mUK_Sr`82;Ubu}vb!wTkRC4uT z^WD8tdhCrdk&$QdD_&P*+3KZ{i8l|Gmc4h7?u-r7TlRj8yIJ#+53dljU{qoB}&oQy@ygDw-Wj77^l%18(6>s_{|d>zX~ETQni!nhkzwTT@1x zt~HmRDSG+UO-5gkkJlX6SNfKIJ2Qh9pF3^aBo<}GjPq_5i>A|jTS_YRj_HQ1wKa-bLWl{Z zcX#(MX%U^@^P>G)>1|R*Mf*F%J*8O(Pb-}h6Lv_RWMKWTy05NDZA`klRib_H@u$aY zW(+zt1nr9~TONHfyH|3a7Ss2`ht6b zwjU3)l%6|hx*VJiYM8VKIS#U^hdN6mWAZF#SnUDN`cd}O}0*&sD}K6=9I}M9M7${6yJ%b&vi+C5OBUUD>BkF z=c40QAPsOlCX;q&&LjDi-bWkbGdJqhx%)9Tghe5PSp>M zkpINbNRkNTl2alRJp1=FTq`g<=Du~aVo{39Y0(hsVXZ}jY71L2Q{igN*gS&nFLhVgtaLnMo{oQDb4N`Ud36`NF>K;5Ic4&X8 zw)s7a^h1_4c13luEJ0P;)Frnsh&NxXN-HG!R3uuSbQJ{@rOP4SwBL+rYvI4Q)5+f| zahqzh@0aJQdH>zj5mrPB1b=_|#n-Y1$W_PsygrkL1CMCAKXnVQl@W%rT(ZdB!Wz(|X z$n>0la_m;jjz#cpo91QGNJnb+!o(;WmVbt|+5zX8Tp+s}@TrapCSSCBJEGd4n$>`6oH-O{>h zEJEhPN8{kU6j6)gd{wfu=G;bb_zdYlp0w4BxV!(}$?kIIlL-!f!IQR1o=54QceU^= z^_z62jNSApZHvXH*T)?5R~{~F>peu)um^q1s%9{z7KhdE3<#fi>4`1&0wvZaIWTOM z9;m}0-Zc_TuP-|F*1~=*{EgKdg9|KTbRxfaYR^6VprZUH+P=pXPXzUgUSTgS46+S~ zmyf;PRs11oSHIrdf~g{Q!<17wu57WlFwC=Va4<^&E| zSy{;iFHE4ju09S9oEI#pmnOi^G^h0!%zxmWy6EL*H7km4wKR!0NA0$1kbhfAzh#f; zq%iZCVWUh(aq&R2KDMBsVE3g#mR)D*yO-xDXQx=2<@M&ZIr#_DCx^70!hQbOR9Gai zBpk?NSYDQ|^8=0$R}hku>hl`csbaVP$pOK|MsvN_*4FE#ZWDnm>YPqa4vcIKJgsWEu}O;35y6^P12QeOH>g=7?VSZvUHJ za@!--Pl8^{)(wHqlO~=Hyf<6>UDH0-y1ofgy55+#Qzjj_0s4Jz>p!N!6a3B-!DtgS$5LtGQ?##80ERqGvHO`^Xc^)ujYA|ybvLc)1Sum3ElJgdCGt% zVgWex&VODI`r^)q9s3;fLI$i)$6uVwzbW?Bs-B7mqZV#Vb=O{*A#&@=b0iL74NN7)VKG*Ny*a3?34X4@gp>>MwphBNBG_CIFL!IXQ{E8=(Wj-@ccek+T z+JOeO+q;D!YqU~!EvjW9^b_QKdfKs+8$>qAe7eM85>(w~qDWEKiU!(G{+&u^J z)nFRyZBTlB9XO4d=|N|5FG+(a@fTmvrqW6Ata8Z9OAvi@Zc8`_j(osi zSII`(b9qchq~WD^$nV6>{QK-*<`{v=rOecpbHgS+Nk1M?%WVmn zz8Z7R?DkPqT;PxcgAD)p^3HBO3uid!4=wpn1?=s7uOdfo^#-eZhK}w}<)B-#dh`7J z{I2?>6@$UFAmE3tVM=;18Wv?~l^i+eP+4n9l>!>XWY}5-#kh+$b1mOuoWYSRI4+V{xC+Jx8A6S326i%aL}obXO%HEewQmK6z!=531kR)e>g$4Fb=>|YLm zo^k!eF&!1@_vRe(*WU8pXc4r@`4?Am=Py1x%gG3wVQGS9aeg{D(2h&ptP|}Z+H<6R zpm3p5l!7v(1U*!|-^z38$%<=z%Y>|t#lWt>a2GV_VL3jV?z&^;$CJ9xuFS5QencB` z-mB8ob*az822w0dNuX^2x*0jI4gwzrGhcSn4B8v+?$VFQWaatL(rO&Xh*!IBD1Hoz zxV3++?OW4AojT`=&f9IJ_a{MA8n*Z5E-bzo1J-)>@>71`RO`-5>+8JIb}=(uGTB>$%GZM-|+M=T4y9+&g-|s## zEgiJ$i>l-lv>H^+>aS>}AdEKm_CkkH1tpso?`0QP1%*du^xW@|0mE}1g++t8uUk?= zQY_uqfsLNhsMl^&vjz%@Z@qR|G~YK#&si)|j?Y#}2(g4NZ+o&o@5PD$5YVSh1M@*s zbjC@uPp*wADqIKHpoU%OA|J?DKHC+Hw-i@RQP7ICIlVFq2>$Y;2b->6#DQsF`iAOz z2f_T@T}kJCXfTg8#tx~z%OdaHASIyu!aQgXop%%NJ-d)A_;rHf**0+65P(SsS@PjN za?WWb-G|9!aNio}zWx1!xiXg_uxWH&D^=JD>QRflY4~d@O$si@p&2%h%JPgu1)YP9 z=Zs5{x>}C|S&o|Q^)JRs07bKuq;IdEW|ve2C3*a+}MH?5>8!E6=QH1#{#wuv!%QY|X%>ttsHl zGXpy3fFyfb939-MJ_zQw$Lbu~XY)jArw>fu^OfPTaeNS(N)HZgV5J0~wTB4Z2JCJ{ zLg<*Pn4+T(^3LpN?t95`1bo>*J~*R!MZz9SQKCN1*BK0=4uMI{l*MDSx5S#|h-aig z;eH04VEe@J00=4I48>!t?OX4ZP~E(|6w7ml(CSv9t8XPYgSOdr2{_Hp3Own%^gO<4 zGce^G*2|EVZOrFjk_Q@pnU-FHS1>DWy`wcfy(%+e<4Z_T%A(8u@n;Rd!T(z)r5ger z7mt}oQ{@x2W;uwO*hWvF{rB-NJN60yGw>5T?wB^X$(`LZxSinziAFJ7hcg`v{_^)# zf`|o)_*|d`=uCbxpS9(I$Mi3Eu)v9Yen~$#6$9S(Y1X6ry&9-w8;JHP<0LLj(9!{i zPvC$X;``);v^Nkgx&ePW^?qJ?M(#TDunlNIl*~cJPx~+trOtDIAa_P7Dq-K!*^rXY zAA;iainnOiMDc(c_tOJ#s$va>O~DAz)2amus~S`VOgSZB!bdsegabWbQmH$GRu!|& z9YQY8Dzay$R04sQZj5<(Ep;tk2kid-@h=sM{rtX_+FZAdf~H=0y|rFuIo0w#bhTx zsmFVHVKaN`tfjqIGPs;;&{E-7d~<&-*le6O>x^8RGrgtws{zjF>71}j2;H(Od4IWM zg%Gzg1Ps>YPfH&jT27hpwp!byEaoKvB_7enzFi33N9FiEn)Ur#j8q;tG zjHx^W($|VUxNt4Bg>LA6&#FCLGcHjZG*~&yjLGuDZ@-Csgikf0g4A<%YR~P^as15- z44k?998HnX@XN9@b<=ya!&28;ER$)|tS)?o=M(!~TC#|Bs{rXx(mbjYTRn^Cq-)#H zPwm#Ki#z5X(`~!EDpq>AUvANx3(tGZdL{i5{bm4_3QCk}Iqzo90RQi6j|sEFK+WVf z>*dg?yJ5|mHE%T^e`?yX@?oydy9-Q4MD@+}tO?eI3E8uctd4jTT9HyRE&XE1!sN~n z>`6IA2vU(B-wNDmeDkgBM#hYiy;ZmSPF6>jp~@2y#E;qoj=O;Qp2r3=a+W1?Rh3*% zK;fpK;`#gzm0W{xsR_sXWs9GfRIfa+F@~~ch*`a9$Mq~Qb_ei%IT-vovBf-X9{y@* zov)u9G^p!F)=WWM>++Zw&E_r|*M0L{48GKou{*KUeT>J+^+C1gamyf}YO23_U4*Hu zEUhga%!}E`-e_4VRouu&pMJJtbxv$$WaI?!$jSt_@DJ0>H$>DGZth-~t|T|lkFV#Y%$`(SPx1P?Vp5lXOjU7JR95OUvAskfc+k<2E@NQU$Mc`fjWP6BmR6{g zUb>*&v6pZlNe#RAVn|G{M|HtT*P7wSA>K>)1DoE?)c;g`#OWftw(zJa;GJAa>ThIV&G^sTrN`J`UN1 z_qk(^ii7%;!Q2eY^(waLqQs@@CO05(?URcMtsxB!hW9S6H8$F_POhZHGWlGa-WHYF z4h1F9Gavy=QxtnTlxF0=iQYuxBtha*!_N^oz@t;A-CpYO&Wm+r>nB~$oplFUPH}K8 z_U=9#NppVsu}!aA?_O8JU-ggES#Skr$+-rTI!|A*rWE*8XKjq@lib`T`(ZeWGY!VscNpPkdcXL zv1nIF1g?Es6ml;?{#IUJO4bWvRu<4}uISEErr!HwCN3b1UEauXJmKtevOe5o&k@rz z5A5o6wP{r^3}E%b#9N4g`7>n4FKVeOHIv0G#a=jhuEWr(;A6z2qniT7n~_+h_=p{d z(#20SjPXAGJ+AG6Vk5<}+auA zbH=b;?~+g&jEJEErLTd9KOUkP~X6DxoUu<84f zA6G1vPCLrw*x_u~?A~bSdqJG`>9;h;fMItve+d-aEV63$CBdcX@@b~-i^rWMr>nb48}d6F?8MpAARy%4X2WXrKCT}miCQ|a)!Hy)jnek9 zw-{#eAs@>P#@*@%PZB*LSKjWq)wood`$^ow@irolf9cj?DEGo++$rDL7BhAo$hv6# z(cd`%kryo!=n)$n?8T9fxKcz{OcuWiaeP>U51YH4Iu$||vdbJdJ8D+Hv-ZsC_lrB9 z_e<=2>u~j^<#y!-!3l?B7vnZ9IoeI(LsLTF+y;T#y=e z^vO(e$;x`TvFy`)*Sr-t^y&D=C6#+av-;XnA1obwN)-s(Tp#w`!Mox!w>%yPxw&HW z1iAbiM!3!FH6eREAHy|cc3-|Q(V29N#LO>IQbB0PdVEwoN3LCtacO1Ly^+Kl#au3XtMPhxP)W$qqt%HquI+HR8`#+%<>k@+r_ z9wnv4-&=jQzi{U8w*RNI?|^Eu+tRjUM?pa8QdOGt4i=;eNbf;GdI`OR_9-GA1Vji3 zD7_;!v=EWr1wsjs(1`>>XrYDjztQ{6y?55kzh)+^WRa71@3Z$l`}BRD^YJ|6>jj#m zRz*;P?c}d~r=JFg!Wuxd3PVRc+&F2_rL_!YWMfC{P&r`!@(K*sYdqTN=9!j=IcPOa zEo*kBv|`Tdq4B@ML)inhTXx+fLyRFyp4+>ITsLl}?us`26-@7&#HZ%5keHk2 zl-Tt2>0n@akv*_}Buu;>tFZr}FQ)N5BZ7-tEo;>*(N1sfB|D7(jes}CE;4+2@BIcN zyT9UTtZO~GMnjU=K%gIB8(N(d{(fiT2f21Ac0Lo4mq2&+F~xb?KUm#)rnuUZ#9tzE z>|oC0<=wGS3#|44u~aj3aRbX#vmi4~_Rn_y>aArP)HQAA;`I-ilpTtQ-E~J^mOsUX z3oFZf-oApDE!wdXKurBiOSEK%*!ZRBAdmEuTX!<|xmyxvVDC_gpJ@}0m>@6fAf+Gr z@Zvg*4fC(s#YWjC!?6?D4B}OZNg^uQCi|CfmhF@Up(Su?^F2-cuIKK>Uh-bMx|NQo z`*HC7)tyjlVEFmvrkg%7@#{7b#BdxLSe+ok!?l~Fh#V+kyp^dm@T|& zs9d^s5@%Zz4%WPRx|UYV1=1z68q`mRXFK!DSVe?RwTANkqlgTjw{DJ_=hAR#Fz7pa z<`o=Zd|((6p%&%|N26;tI$4e%7E8y3Gv<6ci^uj$mRSb2Fk{s;q8q)Z;%es^`C7F~ z57Rq%-|p7G9b;Gs9v-#nuYbYawMcGUa1zqCQDyl_dM3rPKZ6G(PdG|VOJ3w>7m?N? zk1n-7V-g3BR6YChaoU33dgv^!>%@2xF-upx)u{t5z7uYAJx4kz)a>G z-A2jY-DGCgq+Pb+JF)Q7K!X-cRSrt4I~h2sbIRlAm$RuD08ZRh-WaP5TLGdXZNH?k zeTi)3Nui%yUS#9c{B=kkxO%KPY_U-`D%y+-v|C*N@ z1^%??LaK9z(#PJC#PDn?noaN+eC66Z7#!6<>^K=eLTdq5qt^TK3K(UsFWLsBAy?{S zmVznun-mAMzZb6H^ahUVPgE>xW-)X;D!W}t$9Wg*85VYXP{*5QpI%7w4<_!UqZ6Zz%%>9^ejLL}}dqonpgr#m;MplwnqyxJuZy4~$8p&5RuDS(yqTkCP#gyp; zXoE;F+1-`tJ;lEo3YpgeD!xu!=rGMJcD`QyZo)OZw94Q*Uu0-!`vas_KIlg;QQNYf zJI}^}88E`3RFLF%4l&PDz1Sb;Q7&ty8yQEH#v~%A+L@~qkZZda3Y}aOFvWpa%-J^; z4JLTRV4szfu%5mvRB1ue0qQv*UnHMg7;s)e;MBQq&Uw=+j&6hbli-0)|NHU_p9?3F z9z8ADnZ?LI4Dum`*>QlJSAf5)XR=5y<(fz#jIu~A>0J&%Ms7R`@}UV8t^Un2%V#5~W56vd5k zT(4@SzBOP_dS}kqgeo&toF_K1et3ejxq(pMs1%6xmMKF7CJ~`PzuB&DeWgJBey;V> z$AyKdy+MM zd=j{r5jZV@G`~gAJCbxyNEd2zR zCVv!qa=0pRa`3`)ohIn=2Ha(mz)X!Msln8ba3`A@mb)K@(!EEKy&)*jkbM00 z39H<75AnNP1%bKcOtNc)0#7b66F@y2~LV|5&aNKFxj zVp!B;BBeU?q$?jyBro^9eVnrmb=$rzEM-auk<%JyTz-NZ;bjQ_R(h3#^wGNcLiRS) zdPY>=WJr$Zmy6l2eT7%<*;fh-Ds80uo&8rnujwmj_}>eQy?`#URaLEgd3I>;x$sWi zDyJmL;BS_|dicnyrg5xQv2A;z(N1;)jk<~@t>bh0jQdKlf>|w|U$N97eR04k@IK)9 zL%)fo-jyjEE&9rj5AgV1f#`vcSslrPv-Ll>!hb9&GijGu+daP>twIu3_ahyt%?mI7 z614WH<=^(t{3fX#iYzj+2B~=F96@v8N5?rE(A@IAXq8T3b!B0T4^=iPRXYmYGy@_u z(N~{Yr{4z@$u(Co7?U|{u6TOiP>%yofL6h#5h8NKA~kh_mwaD`&6RQ+$E+@p{)P3~;OJM2pmy=Vh%?s0>~_#gCp08lBgWu^txk7$Zv2foGLpmGimh>Oo|9OXS8*;1Cx+bmgi;aIe8xI?Y{RI@RxC( zuFmQu8};RRl>onwJ5xJ!Rby(?UAJp1HXZP$sVlozJGfQaN5hTS`&{;;HV>4`#UeHb zb=kz!vrs&ECVp}z9+ZKp6Zjb55Y->J3OGaV%gt?Azr0 zcX;D~^Fw0kGR*nc;S4+RpkqU&5is=hEu4U3pAjF5 zs#(H@$3yy>J*&$KLnl`l-54?~eWw|L%|X#Co2qV2ub<)g2vJOy2FI!)GAuvRA?T)) zYmj8a=O=#e=My+AS6X>z=o(n2ta<2N*HU|!)_5QAd8fHjD#niVf>3KN;pv(mFVGt; zb3!3UbbF(5yM411fP+1vSc_=|A~G(>YV)F}c!*NdAN0U^FEZ@dT>n`AyyJVz=jak} z&)N0NhS#bN5B#i(ehbZ(*0)qo4XYnK4oN(s=KY5qn#@&lCa~*A^3pwKrI_{;UDseN(B6z&>QOp;fPPWK}NrREBcMWj`Z@9 zG|@Wfw+r-6^K_YRWFNlCSuGjy{RJv8xYW_Mv^%<#wXiPR^2duu4R;>wzCy2B-SyMU z!cueMkPO-(PeEd#EI`daGs<4*=P+g z`gpoWvC?2d+B6g3;b{p+VSX#%z(y?evm(H&>op>p37C5AmkVM8BB6vkF`DsFCDfH% zw95PsGPDv)^NF$zt5OwovKbE_V+ZX^R{D;Y)`Nj|!;%2qR734+=^fWqz{DJA6OX*{ zNRt(*B^aNaMk|gV{~x?uDw3oI6#GCi39J%`w`Ga&iiue&*^GPPB`%%VKg`(uR;c_E zzitjL9ZD4SJ{2%S3?d!Si9&boeW^m&NXV%O)oApl^nh}^n@}6vBz{zVN{`0G^qn6S zgTGl#JYbY@p4(tpse%4+QHSkB-GFlf$9DMs9>V4MjF`du^3#R7aGT!jBLDWp(UU6& zODd$lJ+*jwRS)-OGe6PNrufqfhP+$%lgy=ecLOU7^re0qPP9OrqgOj3zUsZ|S$$pIvRKh!AA4t`XJD7mEiXL$Ti7Os zWmx`LRw>NQo%k(V=4^BMIi*1H-{mT_rCP{?ANcsE0`;C~yVh8=;+VeukkY9Vjrk=p zo^NV{`dYO4y`>4;?-r^CG~)_Vqm$cd3(kMq7U8n&`k~|J!!t>~|C#c@o$H?6QPSRWjL# zH+gE1pKj+JPZp8WiD9->3|)CLzOMbVSajvCoyQy?^(- z(L`av>;(50@IPyg(YMq01O81xV52SJ2_tWWcmITwP0UeWbrp+l_)etFhGU13>tD%G zZ#531^=*^3^t9P&CwJ`>NaR-*SuX1pj-6j|e;X;{1B6mU~yIl z(3R;j%Dx|-4dz~6{{oCvRK~ameztuLPo)M0^?hH;2Z8_^zDBlnAgmi#TA%r|X7Uz4 zjg$Ta;FkPkF_b<0WiWa|I0-ZTE{TAprz(YYYsD}`ws`%nM&2%An9-7 zEiA;8&^_`;!3Hb`xFG+TG5sS0HE$~)cb~h&%Qfm^<{(k2Z4oM+ey2Wp(buO`8J?fHCSO143FG3a2i+?@P@lx6_}VR{^2TWXpjsY9 zRq-~yw?5BQdWA(HoT_apKhMS{77A&5#xc`)-dtN?Dh&2{A7c{W=gQ$=CF{x{p?w$> zG`Z+rvacyl+~c@Y$uh*9UNU^*?8B!aDP@}U3)18gLz($KbCOZ+bKuH$1Se1LOvAy> zNYa35%=Ro5Fv}CK)KSEUP6svsu?wOFp8HXPs|&jb{(;068v4l-*rz05|TY~MCa3SKp zG80~Tz^+_^Db2khP1rEl$h+F&QU~|x)=JNMP`+c@XSyrEkg|1nOIDgk*1WS5<-mS( zU}+t@3GK08#|OdW(>q4OkXOKLPqa!#8rOEZ?`D4ht z)E3y+$ftm8kgq)bO0mE;vS`7GF+&p0S=}Cf_+=z?niSfv3Hx?o&^rL(=KrIr=8?s? zR4+lRi|t)UVEFae#9#Yq(|jO_washNvMloZUytDC;r8x(Vy^CUbzm9pV8SsAKDO?3 zIpD&~p2jAd8X2i)=JL(FW|m=5kq2%1h8fQ6A>GCsCWI?kxvfXE?27fC*>Bi=S%P&9 z>ZGO=LpyBNvq!cvTiW!)zG6}4NY(=-{9(R$C?(ro4I1@n9~jVvP~ws-unmCk>Mf)z znt}p<9_086rT>&iBTscCMFqCjdA6e04oh7#eA8EirS<%mt`~tP*Q(mjTmEvf_Km>U z?n830ivn4{e9Mg%`Geo`2+VyL5LCW7xO5S?=E`fhLLGIzDI2uMD%Z9kZgFexK-{C; zZI9n;C+5f5n*m~cSN4bdrutI-AUBs^1pD0SVZ6~YdK1hhIi_^@VL;&R;>y-W*&V`l zy<6bWXf>Wm@eC&ZuHn44;VoQCIbxmd`lVK-$5%-qtc=axyOiE5_9_a>@O33wl+^jA z!2J7p5KZ^&OFE&XdQVVE41B|23Og~z%4IL-68_{Me@?7?Z=RcEn z4ZOsI810>X+1LwmO>cV?J+WWhuifJV)F-0H)l~tGt@F^m%OW@ZVHlWbLUR%_lJ(v? zQRS13Ed4IM$c4-P4mu?6YYBQ1FQpr=1XEy+2-qrj>yEPLLamHK#7o*f;=yM(6H6{&x?*F`N6SC3NnfODp zsJ~D#PA~g4lh$=gNycsFHzE)G$TIweJTr|`_0RvRIu9MXx9+LucfrIF*|sVa^vgD; zII=}Py1|!NjP^Bo^wfh?N^l_AYpe+<3{Wx-4!?i*f#Q@M!^3XFbzo~&qWXK%Oi>}+ z_GvHjjQPf!)cCI<7xzCm(^3vnZCvg;eAo!lcZav7Nh2Jtep}?;j7ZXdA_r|de$t5C z8r~{Jroe8|Qdr*yFaQT{R13Kc3sEIL_Al;nRWO_8mddZDrKd6& z%aM@syeXKG;teDti~S52$4$jnneiJeN|#LYB|@NOMiotxebjtH)cz`P+gr^BR_T9% zdNQw7cRf4nW{A8e$yW9&Vc~|8-+uGe(weXOg7z#%22iH-S{_ymY8qp3l4dp=zA2nnMYcP?{K=l~83tML|?6jAA+`)jpQ6W5fZh!H#o%^Zlxm z@$!AT<3un3TBWYzJ?VR;Y3Z^51G$bxBVlIs4(+(R%7H+j+n~~hvFfH;XWoyxZr7JW z=5~;z;g~Q>e_6X}2`EwDAao zDBq80Y%9E&+$%wqS*3u<3<%RW{7|SDJp~n&S6Oo>vOa{K7QEpZ5PvSFtOyDDR?L4o zJ22w|wBL5DvlrsEcxTN~yz)x0ttQe1j64eFuo-ZNB&r+&X%w|=!7DNl? zvzDXJ*!w^C@iNe?O&E{UIziI;Z&KQhY`nEuQ|<`O3$kBOC-~Jd-}Ikcb4+O7-8RYd zgppy;eq?=;3N!Q3A7c|W2uKc>RE4$ZmUu|e;m0kgxxA;O|vBe`Ga5P85qsw_gRDJ5R&l{N+0rAXLo_gD|@@n6?CH*K@#qj+Ju$A%wR#RH&Q->I7o zvszYWYa*=t?3YVk(z5)te}2>NNTI|9`LF|a&CZloSK;)2CY3x#qsA9Q`)uRq@%1?k z&s;vn8C1zUE4#C=l8P~Q+1D225s5cX)dDua#QD`%O7GSJT@;@=STMM3?^X80%!X&4 zA0RhRyPtbD8;BPmdHoQ`vi%{mYA( z#*blN=2WxP5!C04i9v!#;$;H*D1C3FW6CHNQTHlDe$E5E?CeIFtn-EG8tF;vJZn!_ zK5&3N^X?7`S6+5eZ#gxjff)1ueu1~rB$Q35L# z!=$-5q`+k=X449fM&sfXM^-8MXN2kWw8YVf*x_3N1~&@du%G4mRQxcQ&_mf&+#p#E zXv68L#Kvzq7P%EJciDrA#m0gnA-eE_09!+ToR(u&h$Px+Q{C~)k$lB9NY3s|_v17y zf1vV25&{Qdz2pcw+e$KKwo4|iU1GGNi|&2x6rZKB1eMl)Sn*K%o1&NY5si{h{ba*p z{B@G??y_?Xx3&NqmlwwE$x(?wbPrP5)%CG=rT-0zHQWpR3yPJE`84-O#pwCS7$y3$ zOOCgJ?sK4PTIT`)1gMk%lX>fd3OoD6RfSYx9&gz!y@8C^m;4gQX649SXj##mmE-Qg zjXPiF7WJM3@0r=P#+AQPR16S;<}4!o4Q6&-LEyGHTMc=}Msp0G!b7o(>s>g416*t+w zuRE7&T>Sa-D(B>^>@$==r(;{ z(r82Dg-*iNY7h>ET%h$$hjUx3udOp{Zm59ahBbjOdjGL;mF8w zK7Pafq56+XK^gveH!$BaV}WHgSm%w(gtm>Zs(uT$`e(2et*tp*_7T|5h45gyk4_v^ zDj2aBv!=c{ZFbUerbC{-GsY%5OmgRFtFj*~Um^ar^1_`px}`{V{%M_OBlx+57mRL2 z(?l4$Am{9MYFb51ZPZXLA_h#I+^Pm&Iq%SE)IW18lnpA6bLgMxdR&*?0*o)m(2NY) z0wRJH1Y5gbrHukcTZ)hUKZa>SpPIGQ7Cnm|#bQCeQ zbCdvcoDK}T@d-~Dbx6Klqpp^GU_{zn+$p>F1h*3+IWPPI@3qA$0~1s$RkK|=8Jx2K z>!yC^h}rcD981x7;E>f*Kj%{9aSnt!2QDkct$hIP&sl+)^@M(67$qx97FYPF#km1rc!CS@ z8j-Z|Tx@XM>I5weqPiYk8vm4!k#$|~TI><`X2?jMv&8!>_V-O!HF*m%MHbi%V*_7X zfZD;gUy1BZoT+j0n6b2EfO|B8E0u8Q6W?2!ylIzzG=Ey`8IyapjgB}F1|LtDek>XJzqpa^`jIJHyDKd#D< zvgg%~#Vj_+&qdvry3u3m&{HS%Q7*`x`lGl5CsEE_DPrJu-iY!m1=>9>ERqH=zk!DC z+&uP?8t0;J;q|xtq;Caa|IXW2O&S^o7~@fsR{k%V#yNG$XuPBal39}EmUfp+;q257 zr}hZZVCJ?q2?gi|qXZqr?Ht68lW0U8X{W>$tvJf05nCSp*|ejj#|&#Rxoq*Z4DRV$ z$I|2HH;>=Zp6;UKIRZ0}Tr}x%&x=Pmx;vUS1Z)Lu7QdYyT^Yjj5sc8sgIp%CphN9t z&uN<|2aT&+ISJBZO|%=Hkz-tYPjV&^qGo=hD;?%^#*!_i zTE`AedQakd!Nb_9-kas!baW+L#WB-#=9fp;1R@QNa}Av7YvLNZkxZ4k z*+W{)1-m_SA>zi-j4nf*#3r=W>pAY}``gZ(fg^Jx_%ymHow8cfDTm%{A@jkQ&Sx<3 zFA(bFtlQwAxr$4@^%AZLN%bYcTR7xo<|qAKTp+{O?OB|6F61>A;H8p-N0TvZK z=lM|x(zjP+6tcM>9YD(Pm{eqhBInZpJb_hgNdM5UwIyeh6U|*9F7Qhn4d|D2UERHxP%HC-7U9?X6GiWfdNazwx~y z_C~*={}mBmWRvHSzLE~)z@`bet|{@CsF~2`#p?7^#5|Ahs39aZc+}Y98jR7hqB`(e@FNxQyu6DNFEMneF88HPuvDlpq!! zC`}Tb5@wwOdYTYo^=8sykEO!1c|!fXPh4Q7KxoldGskdMvr^LlpEG)9j8Kl)5rITH z4=aQK9oFC&1cIwb0zmWf5B^DRA3o!^(ql3wq9+GGRo|;NwLDRYJkW zcft9NeSDeL6TIMs3s=ykOsTBI_R?5rv$y?gRkgD~e8~s?opQd#q>;0F`Zu#&FVF96 z65B*a(i-;i;;-K(Y%2UV416Ez3vYn~p%tf2wZ8JVox0j2Oikb4sQw%EjM19A1cxbK zu>^3mfEWS*!uH`6Et#HYv~;vem)Wh?&5}*>r`SH#+XEpA00Qcwp=2rOZCazGU7sC; z=u(yM^Q0O+VY(R%u;W2S0{cearJK&zs@{XC%#n05P?{qAxP70Dtb2;}&Qx%TrKbc8 zd9cH69oMqq#2km(IE5?N1{491vh)^BQx=7vNYf^6slwAvd~u^mbUURr9i~`G#li@d z6p%FF6J#*Pu6HZ(5VL-X=>tp-%EV^3w44%e3?20vW!n*N3`)D=Wfpi<5P+ zY6gy9M?$2Qxt@}NjsY~ak#v_)19oDBd9*2$EIb0fMq zrUp5Eez);a1Ea;UdR2wI&_7z_=V}ucO1j)|=(%)A2}@hzQ|Vap*|AfnqP209{-Xd} z^;k_F>Iu^aj2~&3e(UyAooQ3_)59&0sln06VXuE5(!_zaZuZQ@KQ^5!=LIiLITCdU zY9ln)fmsR}433@f;Q<|rs0Xmbimk^K3?^6yv?LHr|CIH4 zdSy5@R=V%t{VspM{ToBp<>#Sj^#(%e_qRDZfjYUv*(#$`g7w9mz$<)@goo|3U6 zPu&QO`_V~WI!2mEj4f<7yaB=|$*Dlw(c3xcWn*#}tMR9Dq?6j+ftWxPiuxq$4{04R zaZQaQPm(KjDmTOd&~v~iJMjm{{KCYw!!-@QYrsJkppcAlGBwQ!!NwCnY#jiBSLFq? z6L)+w0DkrVNP35Sg8^DoPf_4>I>6&1{BWjcf&voxTR9*^9L>r8hHNONRGur9HRh*T2FgQQP0ue(TBi^Qlr^uGi1JqS8^0 zqJ9ytMyLJs#_j4axmq6*#GDJWy_^(E+O?jH7~$7eQ&CWK8VVcZwH?qHT>Z%_qge9r zaC_(4_pEr#TZ#RrmBLy;k;zc45QDCDG-J{Ed*fI_Vmro)xqsG z@M`q7hc3`SlygG;4!h>zIQYTgNN(P64q(_YUfB{}yXiENw7O=V8lcUM;fd<%ZFNV0 zt+;HO9KiLFi1e=a5d2ya9Y2tA_jiig0Dq1j!}TAj0o5DmlgeGHi=$e{$QSoool>O=qku zX&aTBC;SE={t{C+-k+)s{Gcl)FzKs97Q%kXRvN4dsQ9AU-wCTu=J6o84BvR4Y`LmZ zxggJ`nyp;2Bs$Bcxa_Wm%^}s{;Q~c~;vuSp(wR@LW?T)^b0sM?UBimZ@X}f!L_C0E z5=zKG9ofT{@95{jDhmL8W%k^(gTZRql92M4=NP{6VM@Gvx-{LJ@J^O~Wj4E=HeUd+?Yv}A=A@Ke*0 zfN?>aTtUimju6F4a%!jnR@>$%jW`wDV2;m)F@gLYH!9@=M?0tHe*Zi+RH>#ifibMV zDVNMV@gWMxNxhGcA5h)JCx>Dq*ZX$he4F^vZcU42KIqh6PwlbC8uYbYwQk$0SZ(gZ zZ_Ah3vjOF<7ex0f8p3BKc6;k`ZRntYj1t*Dq+h(7-`>?2AW2$f0rvZTm)IR^e!m!_ zGcD`6JKUf?z%NA3NI8dlGbU!CYyvpdOD+dS#YvM%tFB3gj&zBdL6j{dWssbAi!FX) zVh@K$XIc=6Be^#8q2yemez^Pgj6#yq&D@fJ8!DE@p)8;8N1^96nZY`%_RRID9JLmEm`YRSNWJY941|QsVdjSOwnZc??KhLR`Y7wKJ@} zjNx!kHAAIIfSQ>1r$oqHh5;_od8vXuJ_OBOHV`G?B(`5EC=u1=uP_}y_9;*5nDFhL zzf)mgjFZen6sjX}7ZK&D0_goEgujvGJKtvAD;G#?pSCcg`u!l?C$K2Uv3+&EGbHx! zw08HtFwy_`V)DQLV*JLFw1mO*C9Vedc-JVhn4;F;s>d74?QMO{yy9Sje8v7K91i#M z)<6cm7mGDadIuDNaX!S%GXVy^@r7F-!7Ni1APDlXM#%V};dYbas>JIVuRoVf8#4#0 ztW#=r7g!<|mec7m| zCh3xtejg9d9mbm)O^LU#*_?c@aGn(~9d0_>qk( z(Ey6S)j+f)LSK_&G0A9bRnHOSw(4T%zOH8{=WNb9efS~gw`3j<#`Kc2;b$2y*oZD% zso(`wnvW3LW<%RXq`mqKiG_e=%I%SQ$sTA0o+8YvPU~wi6HK}Go1L9EZ=js7k47cr zr5z~J(CiRD^@{CZP%DIq=NOV8>``_>3kkn{1$SOw;2a5RG9IattWk(rzXDq$3JWIm zpC3sL8XMy+DlAxw)G&h2rfh#4G1(!!$nQ?WlB;GFu9O$kWOS?SX&vN>7~eZYGYcB} zVgKm3Gk{+x1A&N|FeL6En&)tR81tuqx*~i(2&3EvU>D8mL-1kc?wx)(iO&QM{hqc2 zx~+4CHklj0(nn||w{lxwKrcOu`0-=CO_;Y^jPG9=fAk39lb&c@rVXpWUQ%><)cRsg zB>ZULzEAq4k<@;#8{Im(gw>NWGO=(WjbTfrX9EB=fBe}H&WU|^t_QwHAjYyA-u&dRvz*M5b!VqdAWF1@;kU)@%7 zo$b@T@%Fwk6vJ1Az?Tb>MaqYXW`OKe<(6 z$23gfS#NIhE^6FER?resea_Zp*7oW;4mHeTqhvHu{+q%Dl)e-{MYj{+0e&3MqBis3ri zQYZJ)e7f+`i0ST8LQN*ADp3#IbiHTor3_MYWc`}`z8S^tTBBagHE+YBf>(*OYj1yf zyXU@daPQOucg^jBX8T0DVJ^>olG1^ykzeL!X63B$387;gg1hz>yzX;?>IR>g>gir( z=-l+KxMy~NN2sFGBOW>_jadi_#HE6Ae+Umun>Sy}6REh**6{svoeH^u4$A=;0TNL* zy$q@5mYERKJM90)Dwse)flA88C&Q{k%*UO&U3$PMZ~8_^O;oU0U#TMYtW-eaph-8r z2d!$^eSTGNOBe8kI9>Ik!wncoEpcD8e>L2?VD*W0+5HZdo`;NC*UTz-Q#3~eZ=#Ms zTvO|rdtA5LLZ4hsFFb+mo6u^OE$N4Lm+6olgHPAS$Q9ucdL^T%u94xK#SVbFNUWhW}+zN!Eu$gPxw^WotbLxo>$A z4NJM{@LzsWGC!)_Fcr3Dxq_AdyCnxT9UJ{_$wB`3gnzW2zxqa`qv=uwNrpK8n=A2v z(?7a$bYxCR*B>nwVJ{ZAiKLT66O-tZ8{MQ4=-9?s0d zZVFr=_cxjqM5K z>4?fR4TaJtFWm9vMNFRQhuqaz=1YqPB^nHf98kS`DY=Zj7CzrRZKKXdt4Ly+s%KVK@qohtv~f`1#2T)r>V&XY0M SPn`$;9s;`60IkERQ~wW1j%p(S literal 0 HcmV?d00001 From a566b6af9755ff71e57776f4ac19faa6b9e8ffdc Mon Sep 17 00:00:00 2001 From: GaoKai Date: Wed, 17 Jan 2018 10:42:21 +0800 Subject: [PATCH 027/108] =?UTF-8?q?=E6=8C=81=E4=B9=85=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=9F=A5=E7=9C=8B=E5=99=A8=EF=BC=8C=E4=BB=A5=E5=8F=8A=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E5=B0=8Fbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/AnimSystem/AnimData.cs | 42 ++++- Assets/Script/Core/AnimSystem/AnimSystem.cs | 33 ++++ .../Core/Application/ApplicationManager.cs | 3 + .../Core/Develop/DevelopReplayManager.cs | 142 +++++++++++++++-- Assets/Script/Core/Editor/Utils/ImportTool.cs | 2 +- .../Network/Interface/INetworkInterface.cs | 5 +- .../Core/Network/Interface/SocketBase.cs | 2 + Assets/Script/Core/Network/NetworkManager.cs | 38 ++++- .../Protocol/ProtocolNetworkService.cs | 5 +- Assets/Script/Core/Network/Socket/KCP/KCP.cs | 4 +- .../Core/Network/Socket/KCP/KCPService.cs | 148 +++++++++++------- .../Core/Network/Socket/SocketService.cs | 7 + .../PersistentFile/PersistentFileManager.cs | 72 +++++++++ Assets/Script/Core/Utils/ExpandMethod.cs | 16 ++ Assets/Script/Core/Utils/HTTPTool.cs | 148 +++++++++--------- Assets/Script/Core/Utils/HeapObjectPool.cs | 2 +- 16 files changed, 517 insertions(+), 152 deletions(-) create mode 100644 Assets/Script/Core/PersistentFile/PersistentFileManager.cs diff --git a/Assets/Script/Core/AnimSystem/AnimData.cs b/Assets/Script/Core/AnimSystem/AnimData.cs index 4b4d94f9..88919fc6 100644 --- a/Assets/Script/Core/AnimSystem/AnimData.cs +++ b/Assets/Script/Core/AnimSystem/AnimData.cs @@ -24,6 +24,10 @@ public class AnimData public float m_totalTime = 0; public int m_repeatCount = -1; + //V3 + public Vector4 m_fromV4; + public Vector4 m_toV4; + //V3 public Vector3 m_fromV3; public Vector3 m_toV3; @@ -61,6 +65,7 @@ public class AnimData public float[] m_floatContral = null; //自定义函数 + public AnimCustomMethodVector4 m_customMethodV4; public AnimCustomMethodVector3 m_customMethodV3; public AnimCustomMethodVector2 m_customMethodV2; public AnimCustomMethodFloat m_customMethodFloat; @@ -121,7 +126,8 @@ public void executeUpdate() case AnimType.Color: UpdateColor(); break; case AnimType.Alpha: UpdateAlpha(); break; - + + case AnimType.Custom_Vector4: CustomMethodVector4(); break; case AnimType.Custom_Vector3: CustomMethodVector3(); break; case AnimType.Custom_Vector2: CustomMethodVector2(); break; case AnimType.Custom_Float: CustomMethodFloat(); break; @@ -287,6 +293,18 @@ public void CustomMethodVector3() } } + public void CustomMethodVector4() + { + try + { + m_customMethodV4(GetInterpolationV4(m_fromV4, m_toV4)); + } + catch (Exception e) + { + Debug.LogError(e.ToString()); + } + } + #endregion #region 贝塞尔曲线 @@ -747,6 +765,28 @@ float GetInterpolation(float oldValue, float aimValue) return 0; } + Vector3 GetInterpolationV4(Vector4 oldValue, Vector4 aimValue) + { + Vector3 result = Vector3.zero; + + //暂不支持贝塞尔曲线 + //if (m_pathType == PathType.Line) + //{ + result = new Vector4( + GetInterpolation(oldValue.x, aimValue.x), + GetInterpolation(oldValue.y, aimValue.y), + GetInterpolation(oldValue.z, aimValue.z), + GetInterpolation(oldValue.w, aimValue.w) + ); + //} + //else + //{ + // result = GetBezierInterpolationV3(oldValue, aimValue); + //} + + return result; + } + Vector3 GetInterpolationV3(Vector3 oldValue, Vector3 aimValue) { Vector3 result = Vector3.zero; diff --git a/Assets/Script/Core/AnimSystem/AnimSystem.cs b/Assets/Script/Core/AnimSystem/AnimSystem.cs index 7bfb12f0..216792e8 100644 --- a/Assets/Script/Core/AnimSystem/AnimSystem.cs +++ b/Assets/Script/Core/AnimSystem/AnimSystem.cs @@ -570,6 +570,37 @@ public static AnimData CustomMethodToVector3(AnimCustomMethodVector3 method, Vec return l_tmp; } + public static AnimData CustomMethodToVector4(AnimCustomMethodVector4 method, Vector4 from, Vector4 to, + float time = 0.5f, + float delayTime = 0, + InterpType interp = InterpType.Default, + bool IsIgnoreTimeScale = false, + RepeatType repeatType = RepeatType.Once, + int repeatCount = -1, + AnimCallBack callBack = null, object[] parameter = null) + { + AnimData l_tmp = new AnimData(); ; + + l_tmp.m_animType = AnimType.Custom_Vector4; + l_tmp.m_fromV4 = from; + l_tmp.m_toV4 = to; + l_tmp.m_customMethodV4 = method; + + l_tmp.m_delayTime = delayTime; + l_tmp.m_totalTime = time; + l_tmp.m_interpolationType = interp; + l_tmp.m_repeatType = repeatType; + l_tmp.m_repeatCount = repeatCount; + l_tmp.m_ignoreTimeScale = IsIgnoreTimeScale; + l_tmp.m_callBack = callBack; + l_tmp.m_parameter = parameter; + + l_tmp.Init(); + + GetInstance().animList.Add(l_tmp); + return l_tmp; + } + #endregion #region 贝塞尔 @@ -1020,6 +1051,7 @@ public void Update() public delegate void AnimCallBack(params object[] arg); +public delegate void AnimCustomMethodVector4(Vector4 data); public delegate void AnimCustomMethodVector3(Vector3 data); public delegate void AnimCustomMethodVector2(Vector2 data); public delegate void AnimCustomMethodFloat(float data); @@ -1041,6 +1073,7 @@ public enum AnimType UGUI_AnchoredPosition, UGUI_SizeDetal, + Custom_Vector4, Custom_Vector3, Custom_Vector2, Custom_Float, diff --git a/Assets/Script/Core/Application/ApplicationManager.cs b/Assets/Script/Core/Application/ApplicationManager.cs index b6db8f33..f3dc1f47 100644 --- a/Assets/Script/Core/Application/ApplicationManager.cs +++ b/Assets/Script/Core/Application/ApplicationManager.cs @@ -45,6 +45,9 @@ public bool UseAssetsBundle } } + [Tooltip("是否记录输入到本地")] + public bool m_recordInput = true; + //快速启动 public bool m_quickLunch = true; diff --git a/Assets/Script/Core/Develop/DevelopReplayManager.cs b/Assets/Script/Core/Develop/DevelopReplayManager.cs index 453429ce..527a729f 100644 --- a/Assets/Script/Core/Develop/DevelopReplayManager.cs +++ b/Assets/Script/Core/Develop/DevelopReplayManager.cs @@ -97,14 +97,17 @@ static void ChoseReplayMode(bool isReplay,string replayFileName = null) Log.Init(true); //日志记录启动 ApplicationManager.s_OnApplicationUpdate += OnRecordUpdate; - //InputManager.OnEveryEventDispatch += OnEveryEventCallBack; + GUIConsole.onGUICallback += RecordModeGUI; GUIConsole.onGUICloseCallback += ProfileGUI; - //记录随机数列 - RandomService.OnRandomCreat += OnGetRandomCallBack; - - OpenWriteFileStream(GetLogFileName()); + if (ApplicationManager.Instance.m_recordInput) + { + //记录随机数列 + RandomService.OnRandomCreat += OnGetRandomCallBack; + InputManager.OnEveryEventDispatch += OnEveryEventCallBack; //记录输入 + OpenWriteFileStream(GetLogFileName()); //开启文件流 + } } ApplicationManager.s_OnApplicationOnGUI -= ReplayMenuGUI; @@ -150,6 +153,7 @@ static void OpenWriteFileStream(string fileName) try { + string path = PathTool.GetAbsolutePath(ResLoadLocation.Persistent, PathTool.GetRelativelyPath( c_directoryName, @@ -305,6 +309,12 @@ static void MenuWindow(int windowID) MenuStatus = DevMenuEnum.Log; FileNameList = LogOutPutThread.GetLogFileNameList(); } + + if (GUILayout.Button("查看持久文件", GUILayout.ExpandHeight(true))) + { + MenuStatus = DevMenuEnum.PersistentFile; + FileNameList = PersistentFileManager.GetFileList(); + } } else if (MenuStatus == DevMenuEnum.Replay) { @@ -314,6 +324,10 @@ static void MenuWindow(int windowID) { LogGUI(); } + else if (MenuStatus == DevMenuEnum.PersistentFile) + { + PersistentFileGUI(); + } } #region ReplayListGUI @@ -366,7 +380,7 @@ static void LogGUI() } } - static string LogContent = ""; + static string showContent = ""; static string LogPath = ""; static void ShowLogList() @@ -379,7 +393,7 @@ static void ShowLogList() { isShowLog = true; scrollPos = Vector2.zero; - LogContent = LogOutPutThread.LoadLogContent(FileNameList[i]); + showContent = LogOutPutThread.LoadLogContent(FileNameList[i]); LogPath = LogOutPutThread.GetPath(FileNameList[i]); } } @@ -408,7 +422,7 @@ static void ShowLog() try { - GUIUtil.SafeTextArea(LogContent); + GUIUtil.SafeTextArea(showContent); } catch(Exception e) { @@ -432,7 +446,7 @@ static void ShowLog() if (GUILayout.Button("复制到剪贴板")) { TextEditor tx = new TextEditor(); - tx.text = LogContent; + tx.text = showContent; tx.OnFocus(); tx.Copy(); } @@ -445,6 +459,113 @@ static void ShowLog() #endregion + #region PersistentFileGUI + + static bool isShowPersistentFile = false; + static void PersistentFileGUI() + { + if (isShowPersistentFile) + { + ShowPersistentFile(); + } + else + { + ShowPersistentFileList(); + } + } + + static void ShowPersistentFile() + { + scrollPos = GUILayout.BeginScrollView(scrollPos); + + try + { + GUIUtil.SafeTextArea(showContent); + } + catch (Exception e) + { + GUILayout.TextArea(e.ToString()); + } + + GUILayout.EndScrollView(); + + if (URLManager.GetURL("PersistentFileUpLoadURL") != null) + { + if (GUILayout.Button("上传持久数据")) + { + HTTPTool.Upload_Request_Thread(URLManager.GetURL("PersistentFileUpLoadURL"), LogPath); + } + } + else + { + GUILayout.Label("上传持久数据需要在 URLConfig -> PersistentFileUpLoadURL 配置上传目录"); + } + + if (GUILayout.Button("复制到剪贴板")) + { + TextEditor tx = new TextEditor(); + tx.text = showContent; + tx.OnFocus(); + tx.Copy(); + } + + if (GUILayout.Button("返回上层")) + { + isShowPersistentFile = false; + } + } + + static void ShowPersistentFileList() + { + scrollPos = GUILayout.BeginScrollView(scrollPos); + + for (int i = 0; i < FileNameList.Length; i++) + { + if (GUILayout.Button(FileNameList[i])) + { + isShowPersistentFile = true; + scrollPos = Vector2.zero; + showContent = PersistentFileManager.GetData(FileNameList[i]); + LogPath = PersistentFileManager.GetPath(FileNameList[i]); + } + } + + GUILayout.EndScrollView(); + + if (URLManager.GetURL("PersistentFileUpLoadURL") != null) + { + if (GUILayout.Button("上传所有持久数据文件")) + { + for (int i = 0; i < FileNameList.Length; i++) + { + string path = PersistentFileManager.GetPath(FileNameList[i]); + HTTPTool.Upload_Request_Thread(URLManager.GetURL("PersistentFileUpLoadURL"), path); + } + } + } + else + { + GUILayout.Label("上传持久数据文件需要在 URLConfig -> PersistentFileUpLoadURL 配置上传目录"); + } + + if (GUILayout.Button("清除持久数据文件")) + { + OpenWarnWindow("确定要删除所有持久数据文件吗?", () => + { + Debug.Log("已删除所有持久数据文件"); + FileTool.SafeDeleteDirectory(PathTool.GetAbsolutePath(ResLoadLocation.Persistent, PersistentFileManager.c_directoryName)); + FileNameList = new string[0]; + }); + } + + if (GUILayout.Button("返回上层")) + { + MenuStatus = DevMenuEnum.MainMenu; + } + } + + #endregion + #region WarnPanel static Rect s_warnPanelRect = new Rect(Screen.width * 0.1f, Screen.height * 0.25f, Screen.width * 0.8f, Screen.height * 0.5f); @@ -746,6 +867,7 @@ enum DevMenuEnum { MainMenu, Replay, - Log + Log, + PersistentFile } } diff --git a/Assets/Script/Core/Editor/Utils/ImportTool.cs b/Assets/Script/Core/Editor/Utils/ImportTool.cs index 1e1777db..e84d56bf 100644 --- a/Assets/Script/Core/Editor/Utils/ImportTool.cs +++ b/Assets/Script/Core/Editor/Utils/ImportTool.cs @@ -57,7 +57,7 @@ void OnPostprocessModel(GameObject g) model.SaveAndReimport(); } } - Debug.Log("OnPostprocessModel : " + g.name); + //Debug.Log("OnPostprocessModel : " + g.name); } bool isLoopAnimation(string objectName) { diff --git a/Assets/Script/Core/Network/Interface/INetworkInterface.cs b/Assets/Script/Core/Network/Interface/INetworkInterface.cs index 6ef9091e..21173b9f 100644 --- a/Assets/Script/Core/Network/Interface/INetworkInterface.cs +++ b/Assets/Script/Core/Network/Interface/INetworkInterface.cs @@ -32,7 +32,10 @@ public virtual void Close() { m_socketService.Close(); } - + public virtual void Update() + { + m_socketService.Update(); + } public virtual void SendMessage(string MessageType, Dictionary data) { diff --git a/Assets/Script/Core/Network/Interface/SocketBase.cs b/Assets/Script/Core/Network/Interface/SocketBase.cs index c34668c5..18af3138 100644 --- a/Assets/Script/Core/Network/Interface/SocketBase.cs +++ b/Assets/Script/Core/Network/Interface/SocketBase.cs @@ -56,4 +56,6 @@ public virtual void SetIPAddress(string IP, int port) ///关闭连接 /// public abstract void Close(); + + public abstract void Update(); } diff --git a/Assets/Script/Core/Network/NetworkManager.cs b/Assets/Script/Core/Network/NetworkManager.cs index f510330e..2636a3f9 100644 --- a/Assets/Script/Core/Network/NetworkManager.cs +++ b/Assets/Script/Core/Network/NetworkManager.cs @@ -62,6 +62,8 @@ public static void Init(ProtocolType protocolType = ProtocolT ApplicationManager.s_OnApplicationUpdate += Update; ApplicationManager.s_OnApplicationQuit += DisConnect; + + ApplicationManager.s_OnApplicationOnGUI += GUI; } public static void Init(string networkInterfaceName,string socketName) @@ -152,11 +154,14 @@ public static void SendMessage(Dictionary data) } } + static int msgCount = 0; + static void ReceviceMeaasge(NetWorkMessage message) { if(message.m_MessageType != null) { s_messageList.Add(message); + msgCount++; } else { @@ -195,7 +200,7 @@ static void Dispatch(NetworkState status) static List s_statusList = new List(); static List s_messageList = new List(); - const int MaxDealCount = 10; + const int MaxDealCount = 20; //将消息的处理并入主线程 static void Update() @@ -211,13 +216,16 @@ static void Update() s_messageList.RemoveAt(i); i--; - if (dealCount >= MaxDealCount) - { - break; - } + //if (dealCount >= MaxDealCount) + //{ + // Debug.Log("s_messageList.Count " + s_messageList.Count); + + // break; + //} } } + if (s_statusList.Count > 0) { for (int i = 0; i < s_statusList.Count; i++) @@ -226,6 +234,26 @@ static void Update() } s_statusList.Clear(); } + if(s_network != null) + { + s_network.Update(); + } + + } + static float msgCountTimer = 0; + static int count = 0; + static void GUI() + { + msgCountTimer += Time.deltaTime; + GUILayout.Label("MPS " + count); + + if (msgCountTimer > 1) + { + count = msgCount; + msgCountTimer = 0; + msgCount = 0; + } + } #endregion diff --git a/Assets/Script/Core/Network/Protocol/ProtocolNetworkService.cs b/Assets/Script/Core/Network/Protocol/ProtocolNetworkService.cs index 85e17397..b14a43a4 100644 --- a/Assets/Script/Core/Network/Protocol/ProtocolNetworkService.cs +++ b/Assets/Script/Core/Network/Protocol/ProtocolNetworkService.cs @@ -34,7 +34,7 @@ public override void Init() out m_methodIndexInfo, ResourceManager.ReadTextFile(c_methodNameInfoFileName)); - m_messageBuffer = new byte[204800]; + m_messageBuffer = new byte[1024 * 1024 * 8]; m_head = 0; m_total = 0; @@ -76,6 +76,8 @@ public override void SpiltMessage(byte[] data, ref int offset, int length) WriteBytes(data, length); int i = 0; + //Debug.Log("GetBufferLength() " + GetBufferLength() + " ReadLength() " + ReadLength()); + while (GetBufferLength() != 0 && ReadLength() <= GetBufferLength()) { ReceiveDataLoad(ReadByte(ReadLength())); @@ -116,7 +118,6 @@ int ReadLength() int result = (int)m_messageBuffer[m_head] << 8; int nextPos = m_head + 1; - if (nextPos >= m_messageBuffer.Length) { nextPos = 0; diff --git a/Assets/Script/Core/Network/Socket/KCP/KCP.cs b/Assets/Script/Core/Network/Socket/KCP/KCP.cs index 5c6676bd..55f369a8 100644 --- a/Assets/Script/Core/Network/Socket/KCP/KCP.cs +++ b/Assets/Script/Core/Network/Socket/KCP/KCP.cs @@ -3,6 +3,7 @@ using System.IO; using System.Linq; using System.Text; +using UnityEngine; #pragma warning disable public class KCP @@ -240,6 +241,7 @@ public KCP(UInt32 conv_, Action output_) // check the size of next message in the recv queue public int PeekSize() { + //Debug.Log("rcv_queue.Length :" + rcv_queue.Length); if (0 == rcv_queue.Length) return -1; var seq = rcv_queue[0]; @@ -512,7 +514,7 @@ public int Input(byte[] data) if (data.Length - offset < IKCP_OVERHEAD) break; offset += ikcp_decode32u(data, offset, ref conv_); - + //Debug.Log("conv : " + conv + " conv_ :" + conv_); if (conv != conv_) return -1; offset += ikcp_decode8u(data, offset, ref cmd); diff --git a/Assets/Script/Core/Network/Socket/KCP/KCPService.cs b/Assets/Script/Core/Network/Socket/KCP/KCPService.cs index fe7431f3..b6dc93e6 100644 --- a/Assets/Script/Core/Network/Socket/KCP/KCPService.cs +++ b/Assets/Script/Core/Network/Socket/KCP/KCPService.cs @@ -26,8 +26,8 @@ public static UInt32 iclock() private bool mNeedUpdateFlag; private UInt32 mNextUpdateTime; - private bool mInConnectStage; - private bool mConnectSucceed; + //private bool mInConnectStage; + //private bool mConnectSucceed; private UInt32 mConnectStartTime; private UInt32 mLastSendConnectTime; @@ -35,17 +35,30 @@ public static UInt32 iclock() public override void Connect() { + Debug.Log("Connect " + m_IPaddress + " : " + m_port); + mSvrEndPoint = new IPEndPoint(IPAddress.Parse(m_IPaddress), m_port); mUdpClient = new UdpClient(m_IPaddress, m_port); - mUdpClient.Connect(mSvrEndPoint); + m_connectStatusCallback(NetworkState.Connecting); + try + { + mUdpClient.Connect(mSvrEndPoint); + m_connectStatusCallback(NetworkState.Connected); + isConnect = true; + } + catch(Exception e) + { + Debug.LogError(e.ToString()); + } - reset_state(); - mInConnectStage = true; + reset_state(); + init_kcp(1); + //mInConnectStage = true; mConnectStartTime = iclock(); mUdpClient.BeginReceive(ReceiveCallback, this); - m_connectStatusCallback(NetworkState.Connecting); + } void ReceiveCallback(IAsyncResult ar) @@ -66,6 +79,7 @@ void ReceiveCallback(IAsyncResult ar) void OnData(byte[] buf) { + //Debug.Log("收到消息"); mRecvQueue.Push(buf); } @@ -74,8 +88,8 @@ void reset_state() mNeedUpdateFlag = false; mNextUpdateTime = 0; - mInConnectStage = false; - mConnectSucceed = false; + //mInConnectStage = false; + //mConnectSucceed = false; mConnectStartTime = 0; mLastSendConnectTime = 0; mRecvQueue.Clear(); @@ -97,10 +111,17 @@ void init_kcp(UInt32 conv) { mKcp = new KCP(conv, (byte[] buf, int size) => { - mUdpClient.Send(buf, size); + try + { + mUdpClient.Send(buf, size); + }catch(Exception e) + { + Debug.LogError(e); + } }); mKcp.NoDelay(1, 10, 2, 1); + mKcp.WndSize(128, 128); } public override void Send(byte[] buf) @@ -109,7 +130,7 @@ public override void Send(byte[] buf) mNeedUpdateFlag = true; } - public void Update() + public override void Update() { update(iclock()); } @@ -121,47 +142,50 @@ public override void Close() m_connectStatusCallback(NetworkState.ConnectBreak); } - void process_connect_packet() - { - mRecvQueue.Switch(); + //void process_connect_packet() + //{ + // mRecvQueue.Switch(); - if (!mRecvQueue.Empty()) - { - var buf = mRecvQueue.Pop(); + // if (!mRecvQueue.Empty()) + // { + // var buf = mRecvQueue.Pop(); - UInt32 conv = 0; - KCP.ikcp_decode32u(buf, 0, ref conv); + // //UInt32 conv = 1; + // //KCP.ikcp_decode32u(buf, 0, ref conv); - if (conv <= 0) - throw new Exception("inlvaid connect back packet"); + // //if (conv <= 0) + // // throw new Exception("inlvaid connect back packet"); - init_kcp(conv); + // //init_kcp(conv); - mInConnectStage = false; - mConnectSucceed = true; + // //mInConnectStage = false; + // //mConnectSucceed = true; - m_connectStatusCallback(NetworkState.Connected); - //evHandler(cliEvent.Connected, null, null); - } - } + // //m_connectStatusCallback(NetworkState.Connected); + // //evHandler(cliEvent.Connected, null, null); + // } + //} - void process_recv_queue() + void process_recv_queue(UInt32 current) { mRecvQueue.Switch(); while (!mRecvQueue.Empty()) { + var buf = mRecvQueue.Pop(); - - mKcp.Input(buf); + + int input= mKcp.Input(buf); mNeedUpdateFlag = true; - + //mKcp.Update(current); + //Debug.Log("process_recv_queue :" + buf.Length + " input:"+ input+" PeekSize:" + mKcp.PeekSize()); for (var size = mKcp.PeekSize(); size > 0; size = mKcp.PeekSize()) { var buffer = new byte[size]; if (mKcp.Recv(buffer) > 0) { int offset = 0; + //Debug.Log("m_byteCallBack ---------"); m_byteCallBack(buffer, ref offset, buffer.Length); } } @@ -180,40 +204,50 @@ bool need_send_connect_packet(UInt32 current) void update(UInt32 current) { - if (mInConnectStage) - { - if (connect_timeout(current)) - { - m_connectStatusCallback(NetworkState.ConnectBreak); - mInConnectStage = false; - return; - } - - if (need_send_connect_packet(current)) - { - mLastSendConnectTime = current; - mUdpClient.Send(new byte[4] { 0, 0, 0, 0 }, 4); - } - - process_connect_packet(); - - return; - } - - if (mConnectSucceed) + //if (mInConnectStage) + //{ + // if (connect_timeout(current)) + // { + // m_connectStatusCallback(NetworkState.ConnectBreak); + // isConnect = false; + // mInConnectStage = false; + // return; + // } + + // if (need_send_connect_packet(current)) + // { + // mLastSendConnectTime = current; + // mUdpClient.Send(new byte[4] { 0, 0, 0, 0 }, 4); + // } + + // process_connect_packet(); + + // return; + //} + + if (isConnect) { - process_recv_queue(); + process_recv_queue(current); if (mNeedUpdateFlag || current >= mNextUpdateTime) { mKcp.Update(current); mNextUpdateTime = mKcp.Check(current); + //Debug.Log("mNextUpdateTime :" + (current)); mNeedUpdateFlag = false; } } + //SendHeartPackage(current); } - - - - + private const uint SEND_HEART_PACK_TIME = 2000; + private uint tempTime; + //private void SendHeartPackage(UInt32 current) + //{ + // if(tempTime < current) + // { + // tempTime = current + SEND_HEART_PACK_TIME; + // Send(new byte[4] { 0, 0, 0, 0 }); + // Debug.Log("SendHeartPackage"); + // } + //} } diff --git a/Assets/Script/Core/Network/Socket/SocketService.cs b/Assets/Script/Core/Network/Socket/SocketService.cs index 0e24cebc..5754adb6 100644 --- a/Assets/Script/Core/Network/Socket/SocketService.cs +++ b/Assets/Script/Core/Network/Socket/SocketService.cs @@ -78,7 +78,9 @@ void RequestConnect() IPEndPoint ipe = new IPEndPoint(ip, m_port); //mSocket. + //m_Socket.NoDelay = false; m_Socket.Connect(ipe); + isConnect = true; StartReceive(); @@ -116,4 +118,9 @@ protected virtual void DealByte(byte[] data, ref int offset, int length) m_byteCallBack(m_readData, ref m_offset, length); } } + + public override void Update() + { + + } } diff --git a/Assets/Script/Core/PersistentFile/PersistentFileManager.cs b/Assets/Script/Core/PersistentFile/PersistentFileManager.cs new file mode 100644 index 00000000..ab19e4c1 --- /dev/null +++ b/Assets/Script/Core/PersistentFile/PersistentFileManager.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using UnityEngine; + +public static class PersistentFileManager +{ + public const string c_directoryName = "PersistentFile"; + public const string c_expandName = "txt"; + + public static string GetData(string name) + { + string data = ""; + + string fullPath = PathTool.GetAbsolutePath(ResLoadLocation.Persistent, + PathTool.GetRelativelyPath(c_directoryName, + name, + c_expandName)); + if (File.Exists(fullPath)) + { + //永远从沙盒路径读取 + data = ResourceIOTool.ReadStringByFile(fullPath); + } + + return data; + } + + public static void SaveData(string name, string content) + { +#if !UNITY_WEBGL + + ResourceIOTool.WriteStringByFile( + PathTool.GetAbsolutePath(ResLoadLocation.Persistent, + PathTool.GetRelativelyPath(c_directoryName, + name, + c_expandName)), + content); + +#if UNITY_EDITOR + if (!Application.isPlaying) + { + UnityEditor.AssetDatabase.Refresh(); + } +#endif +#endif + } + + public static string[] GetFileList() + { + FileTool.CreatPath(PathTool.GetAbsolutePath(ResLoadLocation.Persistent, c_directoryName)); + + List relpayFileNames = new List(); + string[] allFileName = Directory.GetFiles(PathTool.GetAbsolutePath(ResLoadLocation.Persistent, c_directoryName)); + foreach (var item in allFileName) + { + if (item.EndsWith("." + c_expandName)) + { + string configName = FileTool.RemoveExpandName(FileTool.GetFileNameByPath(item)); + relpayFileNames.Add(configName); + } + } + + return relpayFileNames.ToArray() ?? new string[0]; + } + + public static string GetPath(string name) + { + return PathTool.GetAbsolutePath(ResLoadLocation.Persistent, PathTool.GetRelativelyPath(c_directoryName, name, c_expandName)); + } +} diff --git a/Assets/Script/Core/Utils/ExpandMethod.cs b/Assets/Script/Core/Utils/ExpandMethod.cs index d723a5e6..407abc05 100644 --- a/Assets/Script/Core/Utils/ExpandMethod.cs +++ b/Assets/Script/Core/Utils/ExpandMethod.cs @@ -138,4 +138,20 @@ public static float GetRotationAngle(this Vector3 dir, Vector3 aimDir) return angle; } + + ///

+ /// 递归改变子节点的Scale + /// + public static void SetScale(this Transform tr, Vector3 scale,bool recursion = true) + { + tr.localScale = scale; + if(recursion) + { + foreach (Transform item in tr) + { + SetScale(item, scale); + } + } + + } } diff --git a/Assets/Script/Core/Utils/HTTPTool.cs b/Assets/Script/Core/Utils/HTTPTool.cs index d120af5a..e27509d4 100644 --- a/Assets/Script/Core/Utils/HTTPTool.cs +++ b/Assets/Script/Core/Utils/HTTPTool.cs @@ -14,100 +14,102 @@ public static void Upload_Request_Thread(string url, string file) { NameValueCollection data = new NameValueCollection(); - s_url = url; - s_files = new string[] { file }; - s_data = data; - s_encoding = DEFAULTENCODE; + UpLoadThread ut = new UpLoadThread(); + ut.url = url; + ut.files = new string[] { file }; + ut.data = data; + ut.encoding = DEFAULTENCODE; - Thread th = new Thread(Upload_Request); + Thread th = new Thread(ut.Upload_Request); th.Start(); } - - static string s_url; - static string[] s_files; - static NameValueCollection s_data; - static Encoding s_encoding; - - public static void Upload_Request() + + public class UpLoadThread { - Debug.Log("Upload_Request " + s_url); - - try + public string url; + public string[] files; + public NameValueCollection data; + public Encoding encoding; + public void Upload_Request() { + Debug.Log("Upload_Request " + url); + try + { + string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); + byte[] boundarybytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); + byte[] endbytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); + //1.HttpWebRequest + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.ContentType = "multipart/form-data; boundary=" + boundary; + request.Method = "POST"; + request.KeepAlive = true; + request.Credentials = CredentialCache.DefaultCredentials; + request.Expect = null; - string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); - byte[] boundarybytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); - byte[] endbytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); - - //1.HttpWebRequest - HttpWebRequest request = (HttpWebRequest)WebRequest.Create(s_url); - request.ContentType = "multipart/form-data; boundary=" + boundary; - request.Method = "POST"; - request.KeepAlive = true; - request.Credentials = CredentialCache.DefaultCredentials; - request.Expect = null; - - using (Stream stream = request.GetRequestStream()) - { - //1.1 key/value - string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}"; - if (s_data != null) + using (Stream stream = request.GetRequestStream()) { - foreach (string key in s_data.Keys) + //1.1 key/value + string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}"; + if (data != null) { - stream.Write(boundarybytes, 0, boundarybytes.Length); - string formitem = string.Format(formdataTemplate, key, s_data[key]); - byte[] formitembytes = s_encoding.GetBytes(formitem); - stream.Write(formitembytes, 0, formitembytes.Length); + foreach (string key in data.Keys) + { + stream.Write(boundarybytes, 0, boundarybytes.Length); + string formitem = string.Format(formdataTemplate, key, data[key]); + byte[] formitembytes = encoding.GetBytes(formitem); + stream.Write(formitembytes, 0, formitembytes.Length); + } } - } - //1.2 file - string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: text/plain\r\n\r\n"; - byte[] buffer = new byte[4096]; - int bytesRead = 0; - for (int i = 0; i < s_files.Length; i++) - { - stream.Write(boundarybytes, 0, boundarybytes.Length); - string header = string.Format(headerTemplate, "file", Path.GetFileName(s_files[i])); - byte[] headerbytes = s_encoding.GetBytes(header); - stream.Write(headerbytes, 0, headerbytes.Length); - using (FileStream fileStream = new FileStream(s_files[i], FileMode.Open, FileAccess.Read)) + //1.2 file + string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: text/plain\r\n\r\n"; + byte[] buffer = new byte[4096]; + int bytesRead = 0; + for (int i = 0; i < files.Length; i++) { - while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) + stream.Write(boundarybytes, 0, boundarybytes.Length); + string header = string.Format(headerTemplate, "file", Path.GetFileName(files[i])); + byte[] headerbytes = encoding.GetBytes(header); + stream.Write(headerbytes, 0, headerbytes.Length); + using (FileStream fileStream = new FileStream(files[i], FileMode.Open, FileAccess.Read)) { - stream.Write(buffer, 0, bytesRead); + while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) + { + stream.Write(buffer, 0, bytesRead); + } } } - } - - //1.3 form end - stream.Write(endbytes, 0, endbytes.Length); - } - //2.WebResponse - HttpWebResponse response = (HttpWebResponse)request.GetResponse(); - using (StreamReader stream = new StreamReader(response.GetResponseStream())) - { - string result = stream.ReadToEnd(); - if(result == "ok") - { - Debug.Log("上传完成 " + result); + //1.3 form end + stream.Write(endbytes, 0, endbytes.Length); } - else + //2.WebResponse + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + + using (StreamReader stream = new StreamReader(response.GetResponseStream())) { - Debug.Log("上传结束 " + result); - } + string result = stream.ReadToEnd(); + if (result == "ok") + { + Debug.Log("上传完成 " + result); + } + else + { + Debug.Log("上传结束 " + result); + } - return; - //return stream.ReadToEnd(); + return; + //return stream.ReadToEnd(); + } + } + catch (Exception e) + { + Debug.Log("上传失败 " + e.ToString()); } - } - catch(Exception e) - { - Debug.Log("上传失败 " + e.ToString()); } } + + } diff --git a/Assets/Script/Core/Utils/HeapObjectPool.cs b/Assets/Script/Core/Utils/HeapObjectPool.cs index 486b9ad1..95ff1fad 100644 --- a/Assets/Script/Core/Utils/HeapObjectPool.cs +++ b/Assets/Script/Core/Utils/HeapObjectPool.cs @@ -42,7 +42,7 @@ public interface IHeapObjectInterface #region HeapObjectPool -public class HeapObjectPool where T : new() +public static class HeapObjectPool where T : new() { static Stack s_pool = new Stack(); From 096a5d002a78587e1bacc87bdb23c32285c9c506 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Wed, 17 Jan 2018 17:43:00 +0800 Subject: [PATCH 028/108] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=B8=AA201?= =?UTF-8?q?7.3=E7=9A=84BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/Editor/Package/PackageConfigEditorWindow.cs | 7 ++++++- Assets/Script/Core/Input/RandomService.cs | 3 --- Assets/Script/Core/UI/Utils/UIModelShowTool.cs | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs b/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs index ec8d72b9..98f8fa69 100644 --- a/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs +++ b/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs @@ -745,9 +745,14 @@ static BuildTarget getTargetPlatform void UpdateRelyPackageNames() { - RelyPackageNames = new string[relyPackages.Count]; + RelyPackageNames = new string[1]; + + if (relyPackages.Count > 0) + RelyPackageNames = new string[relyPackages.Count]; + for (int i = 0; i < relyPackages.Count; i++) { + RelyPackageNames[i] = relyPackages[i].name; } } diff --git a/Assets/Script/Core/Input/RandomService.cs b/Assets/Script/Core/Input/RandomService.cs index 768e2391..f4c7f7f0 100644 --- a/Assets/Script/Core/Input/RandomService.cs +++ b/Assets/Script/Core/Input/RandomService.cs @@ -92,9 +92,6 @@ static int GetFixedRandom() throw new Exception("RandomService Exception no RandomList!"); } } - - - } public delegate void RandomHandel(int random); diff --git a/Assets/Script/Core/UI/Utils/UIModelShowTool.cs b/Assets/Script/Core/UI/Utils/UIModelShowTool.cs index 52f049b8..e0fca6fb 100644 --- a/Assets/Script/Core/UI/Utils/UIModelShowTool.cs +++ b/Assets/Script/Core/UI/Utils/UIModelShowTool.cs @@ -19,7 +19,7 @@ public static GameObject Create(string prefabName,out RenderTexture tex) ca.clearFlags = CameraClearFlags.SolidColor; ca.backgroundColor = new Color(0, 0, 0, 5 / 255f); ca.orthographic = true; - ca.orthographicSize = 0.68f; + ca.orthographicSize = 0.72f; ca.depth = 100; ca.cullingMask =1<< LayerMask.NameToLayer("UI"); From 90449c4e2c2b750e7db2523ec2e8282e91b0417c Mon Sep 17 00:00:00 2001 From: GaoKai Date: Fri, 26 Jan 2018 18:36:04 +0800 Subject: [PATCH 029/108] =?UTF-8?q?=E6=94=B9=E8=BF=9B=E5=AF=B9NULL?= =?UTF-8?q?=E7=9A=84=E8=AF=BB=E5=8F=96=EF=BC=8C=E6=8F=90=E4=BE=9B=E5=AF=B9?= =?UTF-8?q?=E6=97=A7=E4=BB=A3=E7=A0=81=E7=9A=84=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/AnimSystem/AnimSystem.cs | 30 -------------- Assets/Script/Core/Data/DataTable.cs | 12 +++++- .../Core/GameObject/GameObjectManager.cs | 3 +- Assets/Script/Core/GlobalEvent/GlobalEvent.cs | 41 ++++++------------- Assets/Script/Core/Network/NetworkManager.cs | 2 +- Assets/Script/Core/Timer/Timer.cs | 11 ++--- Assets/Script/Core/Utils/ExpandMethod.cs | 40 ++++++++++++++++++ 7 files changed, 69 insertions(+), 70 deletions(-) diff --git a/Assets/Script/Core/AnimSystem/AnimSystem.cs b/Assets/Script/Core/AnimSystem/AnimSystem.cs index 216792e8..bf47a514 100644 --- a/Assets/Script/Core/AnimSystem/AnimSystem.cs +++ b/Assets/Script/Core/AnimSystem/AnimSystem.cs @@ -734,36 +734,6 @@ public static AnimData BezierMove(GameObject animObject, Vector3? from, Vector3 GetInstance().animList.Add(l_tmp); return l_tmp; - - - //AnimType animType; - //if (isLocal) - //{ - // animType = AnimType.LocalPosition; - //} - //else - //{ - // animType = AnimType.Position; - //} - - - //AnimParamHash animParnHash = HashTemp.SetData( - // AnimParamType.GameObj, animObject, - // AnimParamType.AnimType, animType, - // AnimParamType.FromV3, from, - // AnimParamType.ToV3, to, - // AnimParamType.Time, time, - // AnimParamType.InteType, interp, - // AnimParamType.IsLocal, isLocal, - // AnimParamType.PathType, bezierMoveType, - // AnimParamType.floatControl, t_Bezier_contralRadius, - // AnimParamType.RepeatType, repeatType, - // AnimParamType.CallBack, callBack, - // AnimParamType.CallBackParams, parameter - // ); - - //return ValueTo(animParnHash); - } public static AnimData BezierMove(GameObject animObject, Vector3 from, Vector3 to, float time, diff --git a/Assets/Script/Core/Data/DataTable.cs b/Assets/Script/Core/Data/DataTable.cs index cea611a9..30e0a138 100644 --- a/Assets/Script/Core/Data/DataTable.cs +++ b/Assets/Script/Core/Data/DataTable.cs @@ -655,12 +655,21 @@ public string GetString(string key) { if (this.ContainsKey(key)) { + //String 读取null 的改进,兼容旧代码 +#if Compatibility return this[key]; +#else + return StringFilter(this[key]); +#endif } if (data.m_defaultValue.ContainsKey(key)) { +#if Compatibility return data.m_defaultValue[key]; +#else + return StringFilter(data.m_defaultValue[key]); +#endif } } catch (Exception e) @@ -678,7 +687,8 @@ string StringFilter(string content) || content == "NULL" || content == "nu11" || content == "none" - || content == "nil" ) + || content == "nil" + || content == "") { return null; } diff --git a/Assets/Script/Core/GameObject/GameObjectManager.cs b/Assets/Script/Core/GameObject/GameObjectManager.cs index 4a777625..f07636b7 100644 --- a/Assets/Script/Core/GameObject/GameObjectManager.cs +++ b/Assets/Script/Core/GameObject/GameObjectManager.cs @@ -177,7 +177,8 @@ public static void DestroyGameObjectByPool(GameObject go,float time) { Timer.DelayCallBack(time, (object[] obj) => { - DestroyGameObjectByPool(go); + if (go != null)//应对调用过CleanPool() + DestroyGameObjectByPool(go); }); } diff --git a/Assets/Script/Core/GlobalEvent/GlobalEvent.cs b/Assets/Script/Core/GlobalEvent/GlobalEvent.cs index 533fe607..7028628a 100644 --- a/Assets/Script/Core/GlobalEvent/GlobalEvent.cs +++ b/Assets/Script/Core/GlobalEvent/GlobalEvent.cs @@ -10,7 +10,7 @@ public class GlobalEvent { #region 以Enum为Key的事件派发 - private static Dictionary> mEventDic = new Dictionary>(); + private static Dictionary mEventDic = new Dictionary(); private static Dictionary> mUseOnceEventDic = new Dictionary>(); /// @@ -41,16 +41,11 @@ public static void AddEvent(Enum type, EventHandle handle, bool isUseOnce = fals { if (mEventDic.ContainsKey(type)) { - if (!mEventDic[type].Contains(handle)) - mEventDic[type].Add(handle); - else - Debug.LogWarning("already existing EventType: " + type + " handle: " + handle); + mEventDic[type]+= handle; } else { - List temp = new List(); - temp.Add(handle); - mEventDic.Add(type, temp); + mEventDic.Add(type, handle); } } } @@ -76,14 +71,7 @@ public static void RemoveEvent(Enum type, EventHandle handle) if (mEventDic.ContainsKey(type)) { - if (mEventDic[type].Contains(handle)) - { - mEventDic[type].Remove(handle); - if (mEventDic[type].Count == 0) - { - mEventDic.Remove(type); - } - } + mEventDic[type]-= handle; } } @@ -95,13 +83,11 @@ public static void RemoveEvent(Enum type) { if (mUseOnceEventDic.ContainsKey(type)) { - mUseOnceEventDic.Remove(type); } if (mEventDic.ContainsKey(type)) { - mEventDic.Remove(type); } } @@ -115,20 +101,17 @@ public static void DispatchEvent(Enum type, params object[] args) { if (mEventDic.ContainsKey(type)) { - for (int i = 0; i < mEventDic[type].Count; i++) + try { - //遍历委托链表 - foreach (EventHandle callBack in mEventDic[type][i].GetInvocationList()) + if (mEventDic[type] != null) { - try - { - callBack(args); - } - catch (Exception e) - { - Debug.LogError(e.ToString()); - } + mEventDic[type](args); } + + } + catch (Exception e) + { + Debug.LogError(e.ToString()); } } diff --git a/Assets/Script/Core/Network/NetworkManager.cs b/Assets/Script/Core/Network/NetworkManager.cs index 2636a3f9..c26732e9 100644 --- a/Assets/Script/Core/Network/NetworkManager.cs +++ b/Assets/Script/Core/Network/NetworkManager.cs @@ -200,7 +200,7 @@ static void Dispatch(NetworkState status) static List s_statusList = new List(); static List s_messageList = new List(); - const int MaxDealCount = 20; + const int MaxDealCount = 2000; //将消息的处理并入主线程 static void Update() diff --git a/Assets/Script/Core/Timer/Timer.cs b/Assets/Script/Core/Timer/Timer.cs index b47ccf34..8c76af3f 100644 --- a/Assets/Script/Core/Timer/Timer.cs +++ b/Assets/Script/Core/Timer/Timer.cs @@ -6,7 +6,7 @@ public class Timer { public static List m_timers = new List(); - public static List m_removeList = new List(); + //public static List m_removeList = new List(); public static void Init() { @@ -27,16 +27,11 @@ static void Update () if (e.m_repeatCount == 0) { - m_removeList.Add(e); + m_timers.RemoveAt(i); + i--; } } } - - for (int i = 0; i < m_removeList.Count; i++) - { - m_timers.Remove(m_removeList[i]); - //HeapObjectPool.PutObject(m_removeList[i]); - } } public static bool GetIsExistTimer(string timerName) diff --git a/Assets/Script/Core/Utils/ExpandMethod.cs b/Assets/Script/Core/Utils/ExpandMethod.cs index 407abc05..838b39ba 100644 --- a/Assets/Script/Core/Utils/ExpandMethod.cs +++ b/Assets/Script/Core/Utils/ExpandMethod.cs @@ -6,6 +6,7 @@ public static class ExpandMethod { + #region ToSaveString public static string ToSaveString(this Vector3 v3) { StringBuilder sb = new StringBuilder(); @@ -79,6 +80,10 @@ public static string ToSaveString(this string[] list) return sb.ToString(); } + #endregion + + #region 向量 + //向量逆时针旋转 public static Vector3 Vector3RotateInXZ(this Vector3 dir, float angle) { @@ -139,6 +144,9 @@ public static float GetRotationAngle(this Vector3 dir, Vector3 aimDir) return angle; } + #endregion + + #region GameObject /// /// 递归改变子节点的Scale /// @@ -152,6 +160,38 @@ public static void SetScale(this Transform tr, Vector3 scale,bool recursion = tr SetScale(item, scale); } } + } + + /// + /// 优化的设置SetActive方法,可以节约重复设置Active的开销 + /// + public static void SetActiveOptimize(this GameObject go, bool isActive) + { + if (go.activeSelf != isActive) + { + go.SetActive(isActive); + } + } + + #endregion + + #region Animator + + /// + /// 可以重复调用的过渡动画 + /// + /// + /// + public static void CustomCrossFade(this Animator anim, string animName,int layer = 0,float time = 0.5f) + { + if(!anim.GetCurrentAnimatorStateInfo(layer).IsName(animName) + && !anim.GetNextAnimatorStateInfo(layer).IsName(animName) + ) + { + anim.CrossFade(animName, time, layer); + } } + + #endregion } From 77b65350fdad478f21b68968d6e6ede00258e959 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Tue, 6 Mar 2018 11:03:28 +0800 Subject: [PATCH 030/108] =?UTF-8?q?Timer=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/Develop/DevelopReplayManager.cs | 24 +++- Assets/Script/Core/Develop/GUIUtil.cs | 66 ++++++++++ .../Core/Editor/SDKManager/SDKEditorWindow.cs | 5 + Assets/Script/Core/Network/NetworkManager.cs | 32 ++--- .../Script/Core/Render/ParticleLODService.cs | 2 + .../ResourceLoad/ResourcesConfigManager.cs | 12 +- Assets/Script/Core/Timer/Timer.cs | 9 +- .../UI/Components/JoyStick/UGUIJoyStick.cs | 13 +- .../Components/JoyStick/UGUIJoyStick_hide.cs | 122 ++++++++++++++++++ .../ReusingScrollRect/ReusingScrollRect.cs | 10 ++ Assets/Script/Core/Utils/ExpandMethod.cs | 45 +++++++ Assets/Script/Core/Utils/HTTPTool.cs | 22 +++- 12 files changed, 325 insertions(+), 37 deletions(-) create mode 100644 Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick_hide.cs diff --git a/Assets/Script/Core/Develop/DevelopReplayManager.cs b/Assets/Script/Core/Develop/DevelopReplayManager.cs index 527a729f..9f193522 100644 --- a/Assets/Script/Core/Develop/DevelopReplayManager.cs +++ b/Assets/Script/Core/Develop/DevelopReplayManager.cs @@ -435,7 +435,7 @@ static void ShowLog() { if (GUILayout.Button("上传日志")) { - HTTPTool.Upload_Request_Thread(URLManager.GetURL("LogUpLoadURL"), LogPath); + HTTPTool.Upload_Request_Thread(URLManager.GetURL("LogUpLoadURL"), LogPath, UploadCallBack); } } else @@ -493,7 +493,7 @@ static void ShowPersistentFile() { if (GUILayout.Button("上传持久数据")) { - HTTPTool.Upload_Request_Thread(URLManager.GetURL("PersistentFileUpLoadURL"), LogPath); + HTTPTool.Upload_Request_Thread(URLManager.GetURL("PersistentFileUpLoadURL"), LogPath, UploadCallBack); } } else @@ -523,10 +523,13 @@ static void ShowPersistentFileList() { if (GUILayout.Button(FileNameList[i])) { - isShowPersistentFile = true; - scrollPos = Vector2.zero; - showContent = PersistentFileManager.GetData(FileNameList[i]); - LogPath = PersistentFileManager.GetPath(FileNameList[i]); + //isShowPersistentFile = true; + //scrollPos = Vector2.zero; + //showContent = PersistentFileManager.GetData(FileNameList[i]); + //LogPath = PersistentFileManager.GetPath(FileNameList[i]); + + string path = PersistentFileManager.GetPath(FileNameList[i]); + HTTPTool.Upload_Request_Thread(URLManager.GetURL("PersistentFileUpLoadURL"), path, UploadCallBack); } } @@ -539,7 +542,7 @@ static void ShowPersistentFileList() for (int i = 0; i < FileNameList.Length; i++) { string path = PersistentFileManager.GetPath(FileNameList[i]); - HTTPTool.Upload_Request_Thread(URLManager.GetURL("PersistentFileUpLoadURL"), path); + HTTPTool.Upload_Request_Thread(URLManager.GetURL("PersistentFileUpLoadURL"), path, UploadCallBack); } } } @@ -668,6 +671,8 @@ static void DevelopHotKeyLogic() if (Input.GetKeyDown(KeyCode.F5)) { + Debug.Log("Time.timeScale " + Time.timeScale); + if (Time.timeScale == 0) { Time.timeScale = 1; @@ -863,6 +868,11 @@ static string GetLogFileName() return logName; } + static void UploadCallBack(string result) + { + GUIUtil.ShowTips(result); + } + enum DevMenuEnum { MainMenu, diff --git a/Assets/Script/Core/Develop/GUIUtil.cs b/Assets/Script/Core/Develop/GUIUtil.cs index 5166ab3f..0c8f20fe 100644 --- a/Assets/Script/Core/Develop/GUIUtil.cs +++ b/Assets/Script/Core/Develop/GUIUtil.cs @@ -1,5 +1,6 @@ using UnityEngine; using System.Collections; +using System.Collections.Generic; public class GUIUtil { @@ -62,4 +63,69 @@ public static void SafeTextArea(string content) GUILayout.TextArea(content); } } + + #region Tips + + static List tiplist = new List(); + + public static void ShowTips(string content) + { + if(tiplist.Count == 0) + { + ApplicationManager.s_OnApplicationOnGUI += TipsGUI; + } + + tiplist.Add(content); + } + + const int tipWindowStartID = 1000; + + const float tipWidth = 600; + const float tipHeight = 500; + static void TipsGUI() + { + int lastID = 0; + for (int i = 0; i < tiplist.Count; i++) + { + lastID = tipWindowStartID + i; + + Rect rect = new Rect(GetTipPos(i) ,new Vector2(tipWidth, tipHeight)); + GUILayout.Window(lastID, rect, TipsWindow, "TipsWindow"); + } + + GUI.BringWindowToFront(lastID); + } + + static Vector2 GetTipPos(int i) + { + Vector3 pos = new Vector2(Screen.width / 2 - tipWidth / 2, Screen.height / 2 - tipHeight / 2) + new Vector2(50, 50) * i; + + while(pos.x + tipWidth > Screen.width) + { + pos.x -= Screen.width/2; + } + + while (pos.y + tipHeight > Screen.height) + { + pos.y -= Screen.height/2; + } + + return pos; + } + + static void TipsWindow(int windowID) + { + GUILayout.Label(tiplist[windowID - tipWindowStartID], GUILayout.ExpandHeight(true)); + + if( GUILayout.Button("OK")) + { + tiplist.RemoveAt(windowID - tipWindowStartID); + if(tiplist.Count == 0) + { + ApplicationManager.s_OnApplicationOnGUI -= TipsGUI; + } + } + } + + #endregion } diff --git a/Assets/Script/Core/Editor/SDKManager/SDKEditorWindow.cs b/Assets/Script/Core/Editor/SDKManager/SDKEditorWindow.cs index d8dc4780..5580a0b1 100644 --- a/Assets/Script/Core/Editor/SDKManager/SDKEditorWindow.cs +++ b/Assets/Script/Core/Editor/SDKManager/SDKEditorWindow.cs @@ -42,6 +42,11 @@ void OnEnable() void OnProjectChange() { SchemeDataService.ReloadEditorSchemeData(); + m_currentSchemeData = SDKManager.LoadGameSchemeConfig(); + m_currentSelectIndex = GetCurrentSelectIndex(); + LoadSchemeData(m_currentSchemeData); + + CreateReadMe(); } #region GUI diff --git a/Assets/Script/Core/Network/NetworkManager.cs b/Assets/Script/Core/Network/NetworkManager.cs index c26732e9..da03c9bb 100644 --- a/Assets/Script/Core/Network/NetworkManager.cs +++ b/Assets/Script/Core/Network/NetworkManager.cs @@ -63,7 +63,7 @@ public static void Init(ProtocolType protocolType = ProtocolT ApplicationManager.s_OnApplicationUpdate += Update; ApplicationManager.s_OnApplicationQuit += DisConnect; - ApplicationManager.s_OnApplicationOnGUI += GUI; + //ApplicationManager.s_OnApplicationOnGUI += GUI; } public static void Init(string networkInterfaceName,string socketName) @@ -240,21 +240,21 @@ static void Update() } } - static float msgCountTimer = 0; - static int count = 0; - static void GUI() - { - msgCountTimer += Time.deltaTime; - GUILayout.Label("MPS " + count); - - if (msgCountTimer > 1) - { - count = msgCount; - msgCountTimer = 0; - msgCount = 0; - } - - } + //static float msgCountTimer = 0; + //static int count = 0; + //static void GUI() + //{ + // msgCountTimer += Time.deltaTime; + // GUILayout.Label("MPS " + count); + + // if (msgCountTimer > 1) + // { + // count = msgCount; + // msgCountTimer = 0; + // msgCount = 0; + // } + + //} #endregion } diff --git a/Assets/Script/Core/Render/ParticleLODService.cs b/Assets/Script/Core/Render/ParticleLODService.cs index c7405ac6..14388105 100644 --- a/Assets/Script/Core/Render/ParticleLODService.cs +++ b/Assets/Script/Core/Render/ParticleLODService.cs @@ -24,6 +24,8 @@ public override void OnCreate() { ResetLOD(RenderManager.LOD); GlobalEvent.AddEvent(RenderEventEnum.UpdateLOD, ReceviceUpdateLOD); + + //Debug.Log("OnCreate " + (RenderManager.LOD)); } public override void OnObjectDestroy() diff --git a/Assets/Script/Core/ResourceLoad/ResourcesConfigManager.cs b/Assets/Script/Core/ResourceLoad/ResourcesConfigManager.cs index 3a5311bb..fed70702 100644 --- a/Assets/Script/Core/ResourceLoad/ResourcesConfigManager.cs +++ b/Assets/Script/Core/ResourceLoad/ResourcesConfigManager.cs @@ -12,12 +12,18 @@ public static class ResourcesConfigManager public static Dictionary m_relyBundleConfigs; public static Dictionary m_bundleConfigs ; + static bool s_isInit = false; + public static void Initialize() { - ResourcesConfigStruct result = GetResourcesConfig(); + if (!s_isInit) + { + s_isInit = true; + ResourcesConfigStruct result = GetResourcesConfig(); - m_relyBundleConfigs = result.relyList; - m_bundleConfigs = result.bundleList; + m_relyBundleConfigs = result.relyList; + m_bundleConfigs = result.bundleList; + } } public static bool GetIsExitRes(string resName) diff --git a/Assets/Script/Core/Timer/Timer.cs b/Assets/Script/Core/Timer/Timer.cs index 8c76af3f..3763921f 100644 --- a/Assets/Script/Core/Timer/Timer.cs +++ b/Assets/Script/Core/Timer/Timer.cs @@ -24,14 +24,11 @@ static void Update () TimerEvent e = m_timers[i]; e.CompleteTimer(); - - if (e.m_repeatCount == 0) - { - m_timers.RemoveAt(i); - i--; - } } } + + //移除所有完结的Timer + m_timers.RemoveAll(item => item.m_repeatCount == 0); } public static bool GetIsExistTimer(string timerName) diff --git a/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick.cs b/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick.cs index 0eaafba0..9de0267f 100644 --- a/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick.cs +++ b/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick.cs @@ -13,10 +13,18 @@ public class UGUIJoyStick : UIBase, IDragHandler, IEndDragHandler,IBeginDragHand public UGUIJoyStickHandle onJoyStick; public bool canMove = true; + + //当前分辨率,与UImanager上的标准分辨率之间的换算比 + public float conversionX; + public float conversionY; + void Start() { //计算摇杆块的半径 mRadius = ((transform as RectTransform).sizeDelta.x-content.sizeDelta.x) * 0.5f; + Vector2 referenceResolution = UIManager.s_UIManagerGo.GetComponent().referenceResolution; + conversionX = referenceResolution.x / Screen.width ; + conversionY = referenceResolution.y/Screen.height ; } public void OnBeginDrag(PointerEventData eventData) @@ -24,10 +32,13 @@ public void OnBeginDrag(PointerEventData eventData) canMove = true; } + Vector2 centerDelta = new Vector2(0, 0); public void OnDrag(PointerEventData eventData) { - Vector3 contentPostion = content.anchoredPosition + eventData.delta; + centerDelta.x = eventData.delta.x * conversionX; + centerDelta.y = eventData.delta.y * conversionY; + Vector3 contentPostion = content.anchoredPosition + centerDelta; if (contentPostion.magnitude > mRadius) { contentPostion = contentPostion.normalized * mRadius; diff --git a/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick_hide.cs b/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick_hide.cs new file mode 100644 index 00000000..e9283e86 --- /dev/null +++ b/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick_hide.cs @@ -0,0 +1,122 @@ +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +using UnityEngine.EventSystems; +using System; + +public class UGUIJoyStick_hide : UIBase, IDragHandler, IEndDragHandler, IBeginDragHandler, IPointerDownHandler +{ + protected float mRadius; + + public RectTransform content; + + public RectTransform bg; //控制可拖拽范围的大小 + public UGUIJoyStickHandle onJoyStick; + + public bool canMove = true; + + //当前分辨率,与UImanager上的标准分辨率之间的换算比 + public float conversionX; + public float conversionY; + + + public GameObject rocker; //需要移动和隐藏的摇杆背景加摇杆 + private RectTransform rockerRectTran; + Vector2 referenceResolution; + void Start() + { + //计算摇杆块的半径 + mRadius =( bg.sizeDelta.x - content.sizeDelta.x) * 0.5f; + referenceResolution = UIManager.s_UIManagerGo.GetComponent().referenceResolution; + conversionX = referenceResolution.x / Screen.width; + conversionY = referenceResolution.y / Screen.height; + rocker.SetActive(false); + rockerRectTran = rocker.GetComponent(); + } + + public void OnBeginDrag(PointerEventData eventData) + { + canMove = true; + + } + + Vector2 centerDelta = new Vector2(0, 0); + + public void OnDrag(PointerEventData eventData) + { + centerDelta.x = eventData.delta.x * conversionX; + centerDelta.y = eventData.delta.y * conversionY; + Vector3 contentPostion = content.anchoredPosition + centerDelta; + if (contentPostion.magnitude > mRadius) + { + contentPostion = contentPostion.normalized * mRadius; + } + + content.anchoredPosition3D = contentPostion; + + //onJoyStick(GetDir()); + } + + public void OnEndDrag(PointerEventData eventData) + { + canMove = false; + content.anchoredPosition3D = Vector3.zero; + onJoyStick(Vector3.zero); + rocker.SetActive(false); + } + + public Vector3 GetDir() + { + Vector3 dir = new Vector3(content.anchoredPosition3D.x, 0, content.anchoredPosition3D.y); + + dir /= mRadius; + + return dir; + } + + void Update() + { + if (onJoyStick != null) + { + try + { + if (GetDir() != Vector3.zero && canMove) + { + onJoyStick(GetDir()); + } + } + catch (Exception e) + { + Debug.LogError(e.ToString()); + } + } + + } + + public void ReHomePos() + { + canMove = false; + + content.anchoredPosition3D = Vector3.zero; + onJoyStick(Vector3.zero); + } + + //从屏幕坐标,换算到UI坐标 + public Vector3 ScreenPosToUIPos(Vector2 screenPos) + { + Vector2 normalized = new Vector2(screenPos.x / Screen.width, screenPos.y / Screen.height); + + normalized = normalized * 2 - Vector2.one; + + Vector2 UIpos = new Vector2(normalized.x * referenceResolution.x * 0.5f, normalized.y * referenceResolution.y * 0.5f); + + return UIpos; + } + + //鼠标按下时 + public void OnPointerDown(PointerEventData eventData) + { + rocker.SetActive(true); + rockerRectTran.localPosition = ScreenPosToUIPos(eventData.position); ; + } +} diff --git a/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs b/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs index eda53459..7a56cd05 100644 --- a/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs +++ b/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs @@ -65,6 +65,16 @@ public override void Dispose() m_itemCaches.Clear(); } + public void Refresh() + { + for (int i = 0; i < m_items.Count; i++) + { + m_items[i].SetContent(m_items[i].m_index, m_datas[m_items[i].m_index]); + } + + SetItemDisplay(); + } + public void SetData(List> data) { diff --git a/Assets/Script/Core/Utils/ExpandMethod.cs b/Assets/Script/Core/Utils/ExpandMethod.cs index 838b39ba..a26c74df 100644 --- a/Assets/Script/Core/Utils/ExpandMethod.cs +++ b/Assets/Script/Core/Utils/ExpandMethod.cs @@ -193,5 +193,50 @@ public static void CustomCrossFade(this Animator anim, string animName,int layer } + //获取切换进度 + public static float GetCrossFadeProgress(this Animator anim, int layer = 0) + { + if(anim.GetNextAnimatorStateInfo(layer).shortNameHash == 0) + { + return 1; + } + + return anim.GetCurrentAnimatorStateInfo(layer).normalizedTime % 1; + } + + #endregion + + #region ParticleSystem + + public static void RecursionPlay(this GameObject ps) + { + ParticleSystem[] list = ps.GetComponentsInChildren(); + + for (int i = 0; i < list.Length; i++) + { + list[i].Play(); + } + } + + public static void RecursionStop(this GameObject ps) + { + ParticleSystem[] list = ps.GetComponentsInChildren(); + + for (int i = 0; i < list.Length; i++) + { + list[i].Stop(); + } + } + + public static void RecursionPause(this GameObject ps) + { + ParticleSystem[] list = ps.GetComponentsInChildren(); + + for (int i = 0; i < list.Length; i++) + { + list[i].Pause(); + } + } + #endregion } diff --git a/Assets/Script/Core/Utils/HTTPTool.cs b/Assets/Script/Core/Utils/HTTPTool.cs index e27509d4..2ddbac17 100644 --- a/Assets/Script/Core/Utils/HTTPTool.cs +++ b/Assets/Script/Core/Utils/HTTPTool.cs @@ -10,7 +10,7 @@ public class HTTPTool { private static readonly Encoding DEFAULTENCODE = Encoding.UTF8; - public static void Upload_Request_Thread(string url, string file) + public static void Upload_Request_Thread(string url, string file,CallBack callBack = null) { NameValueCollection data = new NameValueCollection(); @@ -19,6 +19,7 @@ public static void Upload_Request_Thread(string url, string file) ut.files = new string[] { file }; ut.data = data; ut.encoding = DEFAULTENCODE; + ut.callBack = callBack; Thread th = new Thread(ut.Upload_Request); th.Start(); @@ -30,6 +31,7 @@ public class UpLoadThread public string[] files; public NameValueCollection data; public Encoding encoding; + public CallBack callBack; public void Upload_Request() { Debug.Log("Upload_Request " + url); @@ -93,11 +95,19 @@ public void Upload_Request() string result = stream.ReadToEnd(); if (result == "ok") { - Debug.Log("上传完成 " + result); + Debug.Log(files[0] + " 上传完成 " + result); + if(callBack != null) + { + callBack(files[0] + "上传完成 " + result); + } } else { - Debug.Log("上传结束 " + result); + Debug.Log(files[0] + "上传失败 " + result); + if (callBack != null) + { + callBack(files[0] + "上传失败 " + result); + } } return; @@ -106,7 +116,11 @@ public void Upload_Request() } catch (Exception e) { - Debug.Log("上传失败 " + e.ToString()); + Debug.Log(files[0] + "上传失败 " + e.ToString()); + if (callBack != null) + { + callBack(files[0] + "上传完成 " + e.ToString()); + } } } } From 3fec5818293f575f84927a584fe949284afed75c Mon Sep 17 00:00:00 2001 From: GaoKai Date: Fri, 9 Mar 2018 15:23:49 +0800 Subject: [PATCH 031/108] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=A2=9E=E5=BC=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/Audio/AudioManager.cs | 72 +++++++++++-------- Assets/Script/Core/Develop/MemoryDetector.cs | 16 +++-- .../Package/PackageConfigEditorWindow.cs | 2 + .../Editor/Package/ProjectBuildService.cs | 2 + .../Core/Network/Socket/KCP/KCPService.cs | 4 +- Assets/Script/Core/Record/RecordManager.cs | 27 ++++++- .../ResourceLoad/ResourcesConfigManager.cs | 5 ++ Assets/Script/Core/Timer/Timer.cs | 9 ++- 8 files changed, 95 insertions(+), 42 deletions(-) diff --git a/Assets/Script/Core/Audio/AudioManager.cs b/Assets/Script/Core/Audio/AudioManager.cs index 499a78e1..da266abe 100644 --- a/Assets/Script/Core/Audio/AudioManager.cs +++ b/Assets/Script/Core/Audio/AudioManager.cs @@ -107,17 +107,17 @@ public void Update() /// /// 播放一个2D音乐 /// - /// 音乐名 - /// 是否循环 - public static AudioSource PlayMusic2D(string l_musicName, bool l_isLoop) + /// 音乐名 + /// 是否循环 + public static AudioSource PlayMusic2D(string musicName, bool isLoop) { s_MusicIsPlaying = true; AudioSource audioTmp = GetAudioSource2D(SoundType.Music); - audioTmp.clip = GetAudioClip(l_musicName); - audioTmp.loop = l_isLoop; + audioTmp.clip = GetAudioClip(musicName); + audioTmp.loop = isLoop; audioTmp.volume = s_MusicVolume; - if (l_isLoop) + if (isLoop) { audioTmp.Play(); } @@ -130,13 +130,25 @@ public static AudioSource PlayMusic2D(string l_musicName, bool l_isLoop) return audioTmp; } + public static AudioSource StopMusic2D() + { + s_MusicIsPlaying = true; + + AudioSource audioTmp = GetAudioSource2D(SoundType.Music); + audioTmp.volume = s_MusicVolume; + + audioTmp.Stop(); + + return audioTmp; + } + /// /// 播放一个2D音效 /// - /// 音效名 - public static AudioSource PlaySound2D(string l_soundName) + /// 音效名 + public static AudioSource PlaySound2D(string soundName) { - AudioSource audioTmp = PlaySound2D(l_soundName,1,false); + AudioSource audioTmp = PlaySound2D(soundName,1,false); return audioTmp; } @@ -144,15 +156,15 @@ public static AudioSource PlaySound2D(string l_soundName) /// /// 播放一个2D音效, 可变音调 /// - /// 音效名 - public static AudioSource PlaySound2D(string l_soundName, float l_pitch, bool l_isLoop = false ) + /// 音效名 + public static AudioSource PlaySound2D(string soundName, float pitch, bool isLoop = false ) { AudioSource audioTmp = GetAudioSource2D(SoundType.Sound); - audioTmp.clip = GetAudioClip(l_soundName); - audioTmp.loop = l_isLoop; + audioTmp.clip = GetAudioClip(soundName); + audioTmp.loop = isLoop; audioTmp.volume = s_SoundVolume; audioTmp.PlayOneShot(audioTmp.clip); - audioTmp.pitch = l_pitch; + audioTmp.pitch = pitch; return audioTmp; } @@ -160,23 +172,23 @@ public static AudioSource PlaySound2D(string l_soundName, float l_pitch, bool l_ /// /// 延时播放一个2D音效 /// - /// 音效名 - public static void PlaySound2D(string l_soundName,float l_delay ) + /// 音效名 + public static void PlaySound2D(string soundName,float delay ) { - if (l_delay == 0) + if (delay == 0) { - PlaySound2D(l_soundName); + PlaySound2D(soundName); } else { - ApplicationManager.Instance.StartCoroutine(DelayPlay(l_soundName, l_delay)); + ApplicationManager.Instance.StartCoroutine(DelayPlay(soundName, delay)); } } - static IEnumerator DelayPlay(string l_soundName, float l_delay) + static IEnumerator DelayPlay(string soundName, float delay) { - yield return new WaitForSeconds(l_delay); - PlaySound2D(l_soundName); + yield return new WaitForSeconds(delay); + PlaySound2D(soundName); } /// @@ -193,9 +205,9 @@ public static AudioSource PlaySound3D(string l_soundName, GameObject l_gameObjec return audioTmp; } - public static AudioSource GetAudioSource2D(SoundType l_SoundType) + public static AudioSource GetAudioSource2D(SoundType SoundType) { - if (l_SoundType == SoundType.Music) + if (SoundType == SoundType.Music) { if(s_2Dmusic == null) { @@ -224,9 +236,9 @@ public static AudioSource GetAudioSource2D(SoundType l_SoundType) } } - public static AudioSource GetAudioSource3D(GameObject l_obj) + public static AudioSource GetAudioSource3D(GameObject obj) { - AudioSource[] l_players = l_obj.GetComponents(); + AudioSource[] l_players = obj.GetComponents(); for (int i = 0; i < l_players.Length; i++) { @@ -236,20 +248,20 @@ public static AudioSource GetAudioSource3D(GameObject l_obj) } } - AudioSource l_newAudioPlayer = l_obj.AddComponent(); + AudioSource l_newAudioPlayer = obj.AddComponent(); return l_newAudioPlayer; } - public static AudioClip GetAudioClip(string l_soundName) + public static AudioClip GetAudioClip(string soundName) { AudioClip clipTmp = null; - clipTmp = ResourceManager.Load(l_soundName); + clipTmp = ResourceManager.Load(soundName); if (clipTmp == null) { - Debug.LogError("AudioManager GetAudioClip error: " + l_soundName + "is not AudioClip ! "); + Debug.LogError("AudioManager GetAudioClip error: " + soundName + "is not AudioClip ! "); } return clipTmp; diff --git a/Assets/Script/Core/Develop/MemoryDetector.cs b/Assets/Script/Core/Develop/MemoryDetector.cs index 4fa5c7fa..3a431fe3 100644 --- a/Assets/Script/Core/Develop/MemoryDetector.cs +++ b/Assets/Script/Core/Develop/MemoryDetector.cs @@ -1,12 +1,15 @@ -using UnityEngine; +#pragma warning disable + +using UnityEngine; using System.Collections; #if UNITY_5_5_OR_NEWER using UnityEngine.Profiling; #endif - /// - /// 内存检测器,目前只是输出Profiler信息 - /// - public class MemoryDetector + +/// +/// 内存检测器,目前只是输出Profiler信息 +/// +public class MemoryDetector { private readonly static string TotalAllocMemroyFormation = "Alloc Memory : {0}M"; private readonly static string TotalReservedMemoryFormation = "Reserved Memory : {0}M"; @@ -59,8 +62,7 @@ void OnGUI() string.Format(TotalReservedMemoryFormation, Profiler.GetTotalReservedMemory() * ByteToM)); GUI.Label(this.unusedReservedMemoryRect, string.Format(TotalUnusedReservedMemoryFormation, Profiler.GetTotalUnusedReservedMemory() * ByteToM)); - //GUI.Label(this.RuntimeMemorySizeRect, - // string.Format(TotalUnusedReservedMemoryFormation, Profiler.GetRuntimeMemorySize( .) * ByteToM)); + GUI.Label(this.monoHeapRect, string.Format(MonoHeapFormation, Profiler.GetMonoHeapSize() * ByteToM)); GUI.Label(this.monoUsedRect, diff --git a/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs b/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs index 98f8fa69..08c00627 100644 --- a/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs +++ b/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs @@ -372,6 +372,8 @@ void BundlesView() CreatePackageFile(); //保存编辑器文件 CheckAndCreatBundelPackageConfig(); //生成资源路径文件 + + ResourcesConfigManager.ClearConfig(); } if (GUILayout.Button("增加选中资源")) diff --git a/Assets/Script/Core/Editor/Package/ProjectBuildService.cs b/Assets/Script/Core/Editor/Package/ProjectBuildService.cs index 0ca5a5dc..5507f2f7 100644 --- a/Assets/Script/Core/Editor/Package/ProjectBuildService.cs +++ b/Assets/Script/Core/Editor/Package/ProjectBuildService.cs @@ -4,6 +4,8 @@ using UnityEditor; using UnityEngine; +#pragma warning disable + class ProjectBuildService : Editor { #region 参数解析 diff --git a/Assets/Script/Core/Network/Socket/KCP/KCPService.cs b/Assets/Script/Core/Network/Socket/KCP/KCPService.cs index b6dc93e6..4e6fe0d8 100644 --- a/Assets/Script/Core/Network/Socket/KCP/KCPService.cs +++ b/Assets/Script/Core/Network/Socket/KCP/KCPService.cs @@ -1,4 +1,6 @@ -using System; +#pragma warning disable + +using System; using System.Collections; using System.Collections.Generic; using System.Net; diff --git a/Assets/Script/Core/Record/RecordManager.cs b/Assets/Script/Core/Record/RecordManager.cs index a8615e2c..38d36dd2 100644 --- a/Assets/Script/Core/Record/RecordManager.cs +++ b/Assets/Script/Core/Record/RecordManager.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System; using System.IO; +using FrameWork; public class RecordManager { @@ -89,7 +90,7 @@ public static void CleanCache() s_RecordCache.Clear(); } -#region 保存封装 + #region 保存封装 public static void SaveRecord(string RecordName, string key, string value) { @@ -141,6 +142,14 @@ public static void SaveRecord(string RecordName, string key, Color value) } + + public static void SaveRecord(string RecordName, string key, T value) + { + string content = Serializer.Serialize(value); + SaveRecord(RecordName, key, content); + } + + #endregion #region 取值封装 @@ -194,6 +203,22 @@ public static Color GetColorRecord(string RecordName, string key, Color defaultV return table.GetRecord(key, defaultValue); } + static Deserializer des = new Deserializer(); + + public static T GetTRecord(string RecordName, string key, T defaultValue) + { + string content = GetStringRecord(RecordName, key, null); + + if(content == null) + { + return defaultValue; + } + else + { + return des.Deserialize(content); + } + } + #endregion } diff --git a/Assets/Script/Core/ResourceLoad/ResourcesConfigManager.cs b/Assets/Script/Core/ResourceLoad/ResourcesConfigManager.cs index fed70702..54ad808f 100644 --- a/Assets/Script/Core/ResourceLoad/ResourcesConfigManager.cs +++ b/Assets/Script/Core/ResourceLoad/ResourcesConfigManager.cs @@ -26,6 +26,11 @@ public static void Initialize() } } + public static void ClearConfig() + { + s_isInit = false; + } + public static bool GetIsExitRes(string resName) { if (m_bundleConfigs == null) diff --git a/Assets/Script/Core/Timer/Timer.cs b/Assets/Script/Core/Timer/Timer.cs index 3763921f..8c76af3f 100644 --- a/Assets/Script/Core/Timer/Timer.cs +++ b/Assets/Script/Core/Timer/Timer.cs @@ -24,11 +24,14 @@ static void Update () TimerEvent e = m_timers[i]; e.CompleteTimer(); + + if (e.m_repeatCount == 0) + { + m_timers.RemoveAt(i); + i--; + } } } - - //移除所有完结的Timer - m_timers.RemoveAll(item => item.m_repeatCount == 0); } public static bool GetIsExistTimer(string timerName) From 4ec2ecd4aeb5c3299adfcfd18117009c7e5a24da Mon Sep 17 00:00:00 2001 From: GaoKai Date: Fri, 16 Mar 2018 14:39:14 +0800 Subject: [PATCH 032/108] =?UTF-8?q?=E4=B8=80=E4=BA=9B=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/AnimSystem/AnimData.cs | 24 ++++++++++++++++ .../Language/LanguageDataEditorWindow.cs | 8 +++++- .../Core/ResourceLoad/AssetsBundleManager.cs | 2 -- .../Script/Core/ResourceLoad/MemoryManager.cs | 8 ++++++ Assets/Script/Core/UI/Model/UIBase.cs | 9 ++++++ Assets/Script/Core/Utils/ResourceIOTool.cs | 28 +++++++++++++++++++ Assets/Script/Core/Utils/UGUITool.cs | 20 +++++++++++-- 7 files changed, 94 insertions(+), 5 deletions(-) diff --git a/Assets/Script/Core/AnimSystem/AnimData.cs b/Assets/Script/Core/AnimSystem/AnimData.cs index 88919fc6..b0881ab6 100644 --- a/Assets/Script/Core/AnimSystem/AnimData.cs +++ b/Assets/Script/Core/AnimSystem/AnimData.cs @@ -605,6 +605,7 @@ void LocalScale() #region Color List m_animObjectList_Sprite = new List(); + List m_animObjectList_TextMeshList = new List(); #region ALPHA @@ -620,6 +621,13 @@ public void AlphaInit(bool isChild) m_animObjectList_Sprite.Add(images[i]); m_oldColor.Add(images[i].color); } + + TextMesh[] meshs = m_animGameObejct.GetComponentsInChildren(); + for (int i = 0; i < meshs.Length; i++) + { + m_animObjectList_TextMeshList.Add(meshs[i]); + m_oldColor.Add(meshs[i].color); + } } else { @@ -629,6 +637,13 @@ public void AlphaInit(bool isChild) m_animObjectList_Sprite.Add(image); m_oldColor.Add(image.color); } + + TextMesh mesh = m_animGameObejct.GetComponent(); + if (mesh != null) + { + m_animObjectList_TextMeshList.Add(mesh); + m_oldColor.Add(mesh.color); + } } SetAlpha(m_fromFloat); @@ -652,6 +667,15 @@ public void SetAlpha(float a) index++; } + + for (int i = 0; i < m_animObjectList_TextMeshList.Count; i++) + { + newColor = m_oldColor[index]; + newColor.a = a; + m_animObjectList_TextMeshList[i].color = newColor; + + index++; + } } #endregion diff --git a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs index a05cbbc8..695e2d96 100644 --- a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs +++ b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs @@ -181,10 +181,16 @@ void SelectLanguageGUI() { string[] mask = s_languageList.ToArray(); m_currentSelectIndex = EditorGUILayout.Popup("当前语言:", m_currentSelectIndex, mask); - if (mask.Length != 0) + if (mask.Length != 0 + && m_currentSelectIndex >= 0 + && m_currentSelectIndex < mask.Length) { LoadLanguage(mask[m_currentSelectIndex]); } + else + { + Debug.Log("m_currentSelectIndex " + m_currentSelectIndex + " mask.Length " + mask.Length); + } } void LoadLanguage(string LanguageName) diff --git a/Assets/Script/Core/ResourceLoad/AssetsBundleManager.cs b/Assets/Script/Core/ResourceLoad/AssetsBundleManager.cs index ecdcfc93..8d2fdd30 100644 --- a/Assets/Script/Core/ResourceLoad/AssetsBundleManager.cs +++ b/Assets/Script/Core/ResourceLoad/AssetsBundleManager.cs @@ -389,8 +389,6 @@ static Bundle AddBundle(string bundleName, AssetBundle asset) bundleTmp.allAsset = bundleTmp.bundle.LoadAllAssets(); bundleTmp.bundle.Unload(false); - Debug.Log("Unload false"); - //如果有缓存起来的回调这里一起回调 if( LoadAsyncDict.ContainsKey(bundleName)) { diff --git a/Assets/Script/Core/ResourceLoad/MemoryManager.cs b/Assets/Script/Core/ResourceLoad/MemoryManager.cs index b7b2f685..432e4b47 100644 --- a/Assets/Script/Core/ResourceLoad/MemoryManager.cs +++ b/Assets/Script/Core/ResourceLoad/MemoryManager.cs @@ -93,9 +93,17 @@ public static void FreeHeapMemory() public static void LoadRes(List resList,LoadProgressCallBack callBack) { + //Resource 模式直接返回完成 + if (ResourceManager.m_gameLoadType != ResLoadLocation.Resource) + { s_loadCallBack += callBack; s_LoadList.AddRange(resList); s_loadCount += resList.Count; + } + else + { + callBack(LoadState.CompleteState); + } } public static void UnLoadRes(List resList) diff --git a/Assets/Script/Core/UI/Model/UIBase.cs b/Assets/Script/Core/UI/Model/UIBase.cs index bc94299c..2e5cc4a1 100644 --- a/Assets/Script/Core/UI/Model/UIBase.cs +++ b/Assets/Script/Core/UI/Model/UIBase.cs @@ -732,6 +732,7 @@ public void DestroyItem(UIBase item, bool isActive) if (m_ChildList.Contains(item)) { m_ChildList.Remove(item); + item.RemoveAllListener(); item.OnUIDestroy(); GameObjectManager.DestroyGameObjectByPool(item.gameObject, isActive); } @@ -742,6 +743,7 @@ public void DestroyItem(UIBase item,float t) if (m_ChildList.Contains(item)) { m_ChildList.Remove(item); + item.RemoveAllListener(); item.OnUIDestroy(); GameObjectManager.DestroyGameObjectByPool(item.gameObject,t); } @@ -886,6 +888,13 @@ public void SetEnabeled(string ID,bool enable) { GetButton(ID).enabled = enable; } + /// + /// Only Button + /// + public void SetButtonInteractable(string ID,bool enable) + { + GetButton(ID).interactable = enable; + } public void SetRectWidth(string TextID, float value, float height) { diff --git a/Assets/Script/Core/Utils/ResourceIOTool.cs b/Assets/Script/Core/Utils/ResourceIOTool.cs index 9ea8edb3..a884f992 100644 --- a/Assets/Script/Core/Utils/ResourceIOTool.cs +++ b/Assets/Script/Core/Utils/ResourceIOTool.cs @@ -78,6 +78,27 @@ public static string ReadStringByResource(string path) } } + public static Texture2D ReadTextureByFile(string path,int width,int height) + { + //创建文件读取流 + FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read); + fileStream.Seek(0, SeekOrigin.Begin); + //创建文件长度缓冲区 + byte[] bytes = new byte[fileStream.Length]; + //读取文件 + fileStream.Read(bytes, 0, (int)fileStream.Length); + //释放文件读取流 + fileStream.Close(); + fileStream.Dispose(); + fileStream = null; + + //创建Texture + Texture2D texture = new Texture2D(width, height); + texture.LoadImage(bytes); + + return texture; + } + ///// ///// WWW同步加载一个对象 ///// @@ -240,6 +261,13 @@ public static void WriteStringByFile(string path, string content) CreateFile(path, dataByte); } + public static void WriteTexture2DByFile(string path, Texture2D texture) + { + byte[] dataByte = texture.EncodeToPNG(); + + CreateFile(path, dataByte); + } + public static void DeleteFile(string path) { if (File.Exists(path)) diff --git a/Assets/Script/Core/Utils/UGUITool.cs b/Assets/Script/Core/Utils/UGUITool.cs index 4bf9430a..0b5a947e 100644 --- a/Assets/Script/Core/Utils/UGUITool.cs +++ b/Assets/Script/Core/Utils/UGUITool.cs @@ -24,9 +24,20 @@ static public bool IsHitUI() static public void set_icon(Image img,string name,bool is_nativesize = true) { + if(name == null) + { + Debug.LogError("set_icon Image name 不能为 null !" ); + return; + } + + if (img == null) + { + Debug.LogError("set_icon Image 不能为 null !"); + return; + } + try { - //Texture2D tex = ResourceManager.Load(name); Sprite sp = ResourceManager.Load(name); img.overrideSprite = sp;// Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), Vector3.zero); img.sprite = img.overrideSprite; @@ -45,11 +56,16 @@ static public void set_SpriteRender(GameObject go , string name) try { Texture2D tex = ResourceManager.Load(name); SpriteRenderer sprite = go.GetComponent(); - sprite.sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), Vector3.one * 0.5f); + sprite.sprite = CreateSprite(tex); } catch { } } + + static public Sprite CreateSprite(Texture2D texture) + { + return Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector3.one * 0.5f); + } } From 9873f4f40e257c2ff505e7b62eddda5edb503a10 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Tue, 20 Mar 2018 11:45:59 +0800 Subject: [PATCH 033/108] =?UTF-8?q?UI=E5=B1=82=E7=BA=A7=E6=94=B9=E8=BF=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/Editor/UI/UICreateService.cs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Assets/Script/Core/Editor/UI/UICreateService.cs b/Assets/Script/Core/Editor/UI/UICreateService.cs index 1582e5c3..bac6a19e 100644 --- a/Assets/Script/Core/Editor/UI/UICreateService.cs +++ b/Assets/Script/Core/Editor/UI/UICreateService.cs @@ -7,9 +7,15 @@ public class UICreateService { - public static void CreatUIManager(Vector2 referenceResolution, CanvasScaler.ScreenMatchMode MatchMode, bool isOnlyUICamera, bool isVertical) { + //新增五个层级 + EditorExpand.AddSortLayerIfNotExist("GameUI"); + EditorExpand.AddSortLayerIfNotExist("Fixed"); + EditorExpand.AddSortLayerIfNotExist("Normal"); + EditorExpand.AddSortLayerIfNotExist("TopBar"); + EditorExpand.AddSortLayerIfNotExist("PopUp"); + //UIManager GameObject UIManagerGo = new GameObject("UIManager"); UIManagerGo.layer = LayerMask.NameToLayer("UI"); @@ -138,7 +144,14 @@ public static void CreatUI(string UIWindowName, UIType UIType,UILayerManager UIL uiBaseTmp.m_UIType = UIType; - uiGo.AddComponent(); + Canvas canvas = uiGo.AddComponent(); + + if(EditorExpand.isExistShortLayer(UIType.ToString())) + { + canvas.overrideSorting = true; + canvas.sortingLayerName = UIType.ToString(); + } + uiGo.AddComponent(); RectTransform ui = uiGo.GetComponent(); From 28568fbb281b1163b960f569dd107c1b4cdf0615 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Wed, 21 Mar 2018 17:54:24 +0800 Subject: [PATCH 034/108] =?UTF-8?q?=E5=A4=9A=E8=AF=AD=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Language/LanguageDataEditorWindow.cs | 59 ++++++++++++++++--- .../Script/Core/Editor/UI/UIEditorWindow.cs | 36 +++++++++++ .../Script/Core/UI/Style/LanguageManager.cs | 2 + 3 files changed, 89 insertions(+), 8 deletions(-) diff --git a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs index 695e2d96..7ece8ee2 100644 --- a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs +++ b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs @@ -62,6 +62,7 @@ void OnGUI() EditorLanguageGUI(); SaveDataGUI(); AddLanguageGUI(); + GenerateLanuageClassGUI(); } else { @@ -280,14 +281,6 @@ void AddLanguageModelGUI() EditorGUI.indentLevel++; m_newModelName = EditorGUILayout.TextField("模块名", m_newModelName); - if (!s_languageKeyDict.ContainsKey(LanguageManager.c_defaultModuleKey.ToString())) - { - if (GUILayout.Button("新增默认模块")) - { - s_languageKeyDict.Add(LanguageManager.c_defaultModuleKey, new List()); - } - } - if (m_newModelName != "" && !s_languageKeyDict.ContainsKey(m_newModelName)) { if (GUILayout.Button("新增模块")) @@ -304,6 +297,15 @@ void AddLanguageModelGUI() EditorGUILayout.LabelField("模块名重复!", EditorGUIStyleData.WarnMessageLabel); } } + + //不再支持新增默认模块 + //if (!s_languageKeyDict.ContainsKey(LanguageManager.c_defaultModuleKey.ToString())) + //{ + // if (GUILayout.Button("新增默认模块")) + // { + // s_languageKeyDict.Add(LanguageManager.c_defaultModuleKey, new List()); + // } + //} } } @@ -547,6 +549,47 @@ void AddLanguageGUI() #endregion + #region 生成模块类 + + void GenerateLanuageClassGUI() + { + if(GUILayout.Button( "生成语言模块声明类")) + { + GenerateLanuageClass(); + } + } + + void GenerateLanuageClass() + { + string content = ""; + string SavePath = Application.dataPath + "/Script/Generate/LanguageModelDefine.cs"; + + + content += "public class LanguageModelDefine\n"; + content += "{\n"; + + //只创建模块名 + foreach (var item in s_languageKeyDict) + { + content += "\tpublic const string c_" + item.Key + " = \"" + item.Key + "\";\n"; + + List list = item.Value; + for (int i = 0; i < list.Count; i++) + { + content += "\tpublic const string c_" + item.Key + "_"+list[i] + " = \"" + list[i] + "\";\n"; + } + + content += "\n"; + } + + content += "}\n"; + + EditorUtil.WriteStringByFile(SavePath, content); + AssetDatabase.Refresh(); + } + + #endregion + #region FindLanguageData private string m_directoryPath; diff --git a/Assets/Script/Core/Editor/UI/UIEditorWindow.cs b/Assets/Script/Core/Editor/UI/UIEditorWindow.cs index 79023e75..63a6b657 100644 --- a/Assets/Script/Core/Editor/UI/UIEditorWindow.cs +++ b/Assets/Script/Core/Editor/UI/UIEditorWindow.cs @@ -210,6 +210,42 @@ void UIStyleGUI() } + #endregion + + #region UITool + + bool isFoldUITool = false; + + void UIToolGUI() + { + EditorGUI.indentLevel = 0; + isFoldUITool = EditorGUILayout.Foldout(isFoldUImanager, "UITool:"); + if (isFoldUITool) + { + EditorGUI.indentLevel = 1; + + if (GUILayout.Button("重设UI sortLayer")) + { + ResetUISortLayer(); + } + + if (GUILayout.Button("清除UI sortLayer")) + { + CleanUISortLayer(); + } + } + } + + void CleanUISortLayer() + { + + } + + void ResetUISortLayer() + { + + } + #endregion #region UI diff --git a/Assets/Script/Core/UI/Style/LanguageManager.cs b/Assets/Script/Core/UI/Style/LanguageManager.cs index ff890303..c1203d12 100644 --- a/Assets/Script/Core/UI/Style/LanguageManager.cs +++ b/Assets/Script/Core/UI/Style/LanguageManager.cs @@ -120,6 +120,8 @@ public static string GetContent(string moduleName,string contentID, List public static string GetContent(string moduleName, string contentID, params object[] contentParams) { + Init(); + string content = null; if (!s_languageDataDict.ContainsKey(moduleName)) From 68fb896cf0876ab853d0f656b77a8ef0e7fe041e Mon Sep 17 00:00:00 2001 From: GaoKai Date: Mon, 26 Mar 2018 15:57:40 +0800 Subject: [PATCH 035/108] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Editor/Language/LanguageDataEditorWindow.cs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs index 7ece8ee2..51ecaddf 100644 --- a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs +++ b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs @@ -571,12 +571,12 @@ void GenerateLanuageClass() //只创建模块名 foreach (var item in s_languageKeyDict) { - content += "\tpublic const string c_" + item.Key + " = \"" + item.Key + "\";\n"; + content += "\tpublic const string c_" + StringFilter(item.Key) + " = \"" + item.Key + "\";\n"; List list = item.Value; for (int i = 0; i < list.Count; i++) { - content += "\tpublic const string c_" + item.Key + "_"+list[i] + " = \"" + list[i] + "\";\n"; + content += "\tpublic const string c_" + StringFilter(item.Key) + "_" + StringFilter(list[i]) + " = \"" + list[i] + "\";\n"; } content += "\n"; @@ -588,6 +588,16 @@ void GenerateLanuageClass() AssetDatabase.Refresh(); } + /// + /// 去掉所有不合法的字符 + /// + /// + /// + string StringFilter(string content) + { + return content.Replace("-",""); + } + #endregion #region FindLanguageData From 16d8f5d23708333fe619a390f020c7207a293c3e Mon Sep 17 00:00:00 2001 From: GaoKai Date: Mon, 26 Mar 2018 16:20:20 +0800 Subject: [PATCH 036/108] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Script/Core/Editor/Language/LanguageDataEditorWindow.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs index 51ecaddf..890b639c 100644 --- a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs +++ b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs @@ -562,10 +562,10 @@ void GenerateLanuageClassGUI() void GenerateLanuageClass() { string content = ""; - string SavePath = Application.dataPath + "/Script/Generate/LanguageModelDefine.cs"; + string SavePath = Application.dataPath + "/Script/Generate/LanguageDef.cs"; - content += "public class LanguageModelDefine\n"; + content += "public class LanguageDef\n"; content += "{\n"; //只创建模块名 From 146a1f15bda8f067521365044cc61bf6065361de Mon Sep 17 00:00:00 2001 From: Gaokai Date: Mon, 26 Mar 2018 21:21:14 +0800 Subject: [PATCH 037/108] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Resources/Config/111.json.meta | 8 +++ .../Resources/Config/BundleConfig.json.meta | 8 +++ ...undleConfig.json.meta~Stashed changes.meta | 8 +++ .../Config/ResourcesConfig.json.meta | 8 +++ Assets/Resources/Config/SDKConfig.json.meta | 8 +++ Assets/Resources/Config/qeqweqwe.json.meta | 8 +++ Assets/Resources/Config/version.json.meta | 8 +++ Assets/Resources/Data/GuideData.txt | 4 ++ Assets/Resources/Data/GuideData.txt.meta | 8 +++ Assets/Resources/UI/GuideWindow.meta | 9 +++ .../UI/GuideWindow/GuideWindow.prefab | Bin 0 -> 11688 bytes .../UI/GuideWindow/GuideWindow.prefab.meta | 9 +++ Assets/Script/Core/Audio/AudioManager.cs | 1 - Assets/Script/Core/Network/Interface.meta | 9 +++ .../Interface/INetworkInterface.cs.meta | 12 ++++ .../Core/Network/Interface/SocketBase.cs.meta | 12 ++++ Assets/Script/Core/Network/Json.meta | 9 +++ .../Network/Json/JsonNetworkService.cs.meta | 12 ++++ .../Protocol/ProtocolAttribute.cs.meta | 12 ++++ .../Protocol/ProtocolNetworkService.cs.meta | 12 ++++ Assets/Script/Core/Network/Socket.meta | 9 +++ Assets/Script/Core/Network/Socket/KCP.meta | 9 +++ .../Core/Network/Socket/KCP/KCP.cs.meta | 12 ++++ .../Network/Socket/KCP/KCPService.cs.meta | 12 ++++ .../Network/Socket/KCP/switch_queue.cs.meta | 12 ++++ .../Core/Network/Socket/SocketService.cs.meta | 12 ++++ .../Network/Socket/WsSocketService.cs.meta | 12 ++++ Assets/Script/Core/PersistentFile.meta | 9 +++ .../PersistentFileManager.cs.meta | 12 ++++ Assets/Script/GameStatus/FirstStatus.cs | 1 - Assets/Script/GameStatus/GameStatus.cs | 2 - Assets/Script/GuideSystem.meta | 9 +++ Assets/Script/GuideSystem/GuideSyetem.cs | 27 +++++++ Assets/Script/GuideSystem/GuideSyetem.cs.meta | 12 ++++ Assets/Script/UI/GuideWindow.meta | 9 +++ Assets/Script/UI/GuideWindow/GuideWindow.cs | 21 ++++++ .../Script/UI/GuideWindow/GuideWindow.cs.meta | 12 ++++ Assets/Script/UI/ShopWindow/ShopWindow.cs | 13 +++- Assets/doc/Xmind/Export/LuaManager.png.meta | 68 ++++++++++++++++++ ...\255\245\346\241\206\346\236\266.png.meta" | 68 ++++++++++++++++++ ...\226\260\351\200\273\350\276\221.png.meta" | 68 ++++++++++++++++++ ...\274\226\350\276\221\345\231\250.png.meta" | 68 ++++++++++++++++++ ...\255\245\346\265\201\347\250\213.png.meta" | 68 ++++++++++++++++++ Assets/doc/Xmind/LuaManager.xmind.meta | 8 +++ ...34\215\345\212\241\345\231\250.xmind.meta" | 8 +++ ...74\226\350\276\221\345\231\250.xmind.meta" | 8 +++ ...26\260\351\200\273\350\276\221.xmind.meta" | 8 +++ ...74\226\350\276\221\345\231\250.xmind.meta" | 8 +++ ...55\245\346\241\206\346\236\266.xmind.meta" | 8 +++ 49 files changed, 753 insertions(+), 5 deletions(-) create mode 100644 Assets/Resources/Config/111.json.meta create mode 100644 Assets/Resources/Config/BundleConfig.json.meta create mode 100644 Assets/Resources/Config/BundleConfig.json.meta~Stashed changes.meta create mode 100644 Assets/Resources/Config/ResourcesConfig.json.meta create mode 100644 Assets/Resources/Config/SDKConfig.json.meta create mode 100644 Assets/Resources/Config/qeqweqwe.json.meta create mode 100644 Assets/Resources/Config/version.json.meta create mode 100644 Assets/Resources/Data/GuideData.txt create mode 100644 Assets/Resources/Data/GuideData.txt.meta create mode 100644 Assets/Resources/UI/GuideWindow.meta create mode 100644 Assets/Resources/UI/GuideWindow/GuideWindow.prefab create mode 100644 Assets/Resources/UI/GuideWindow/GuideWindow.prefab.meta create mode 100644 Assets/Script/Core/Network/Interface.meta create mode 100644 Assets/Script/Core/Network/Interface/INetworkInterface.cs.meta create mode 100644 Assets/Script/Core/Network/Interface/SocketBase.cs.meta create mode 100644 Assets/Script/Core/Network/Json.meta create mode 100644 Assets/Script/Core/Network/Json/JsonNetworkService.cs.meta create mode 100644 Assets/Script/Core/Network/Protocol/ProtocolAttribute.cs.meta create mode 100644 Assets/Script/Core/Network/Protocol/ProtocolNetworkService.cs.meta create mode 100644 Assets/Script/Core/Network/Socket.meta create mode 100644 Assets/Script/Core/Network/Socket/KCP.meta create mode 100644 Assets/Script/Core/Network/Socket/KCP/KCP.cs.meta create mode 100644 Assets/Script/Core/Network/Socket/KCP/KCPService.cs.meta create mode 100644 Assets/Script/Core/Network/Socket/KCP/switch_queue.cs.meta create mode 100644 Assets/Script/Core/Network/Socket/SocketService.cs.meta create mode 100644 Assets/Script/Core/Network/Socket/WsSocketService.cs.meta create mode 100644 Assets/Script/Core/PersistentFile.meta create mode 100644 Assets/Script/Core/PersistentFile/PersistentFileManager.cs.meta create mode 100644 Assets/Script/GuideSystem.meta create mode 100644 Assets/Script/GuideSystem/GuideSyetem.cs create mode 100644 Assets/Script/GuideSystem/GuideSyetem.cs.meta create mode 100644 Assets/Script/UI/GuideWindow.meta create mode 100644 Assets/Script/UI/GuideWindow/GuideWindow.cs create mode 100644 Assets/Script/UI/GuideWindow/GuideWindow.cs.meta create mode 100644 Assets/doc/Xmind/Export/LuaManager.png.meta create mode 100644 "Assets/doc/Xmind/Export/\345\220\214\346\255\245\346\241\206\346\236\266.png.meta" create mode 100644 "Assets/doc/Xmind/Export/\347\203\255\346\233\264\346\226\260\351\200\273\350\276\221.png.meta" create mode 100644 "Assets/doc/Xmind/Export/\347\216\251\346\263\225\347\274\226\350\276\221\345\231\250.png.meta" create mode 100644 "Assets/doc/Xmind/Export/\347\275\221\347\273\234\345\220\214\346\255\245\346\265\201\347\250\213.png.meta" create mode 100644 Assets/doc/Xmind/LuaManager.xmind.meta create mode 100644 "Assets/doc/Xmind/\346\234\215\345\212\241\345\231\250.xmind.meta" create mode 100644 "Assets/doc/Xmind/\346\270\270\346\210\217\347\216\251\346\263\225\347\274\226\350\276\221\345\231\250.xmind.meta" create mode 100644 "Assets/doc/Xmind/\347\203\255\346\233\264\346\226\260\351\200\273\350\276\221.xmind.meta" create mode 100644 "Assets/doc/Xmind/\347\216\251\346\263\225\347\274\226\350\276\221\345\231\250.xmind.meta" create mode 100644 "Assets/doc/Xmind/\347\275\221\347\273\234\346\270\270\346\210\217\345\220\214\346\255\245\346\241\206\346\236\266.xmind.meta" diff --git a/Assets/Resources/Config/111.json.meta b/Assets/Resources/Config/111.json.meta new file mode 100644 index 00000000..d91c87a2 --- /dev/null +++ b/Assets/Resources/Config/111.json.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 42ae12b4dcbe4c34c92184ab3ede0387 +timeCreated: 1520037994 +licenseType: Pro +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Config/BundleConfig.json.meta b/Assets/Resources/Config/BundleConfig.json.meta new file mode 100644 index 00000000..5036849d --- /dev/null +++ b/Assets/Resources/Config/BundleConfig.json.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 181e7f1beb2b5c947a42a6578c7a6ef8 +timeCreated: 1520037994 +licenseType: Pro +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Config/BundleConfig.json.meta~Stashed changes.meta b/Assets/Resources/Config/BundleConfig.json.meta~Stashed changes.meta new file mode 100644 index 00000000..beb77e9e --- /dev/null +++ b/Assets/Resources/Config/BundleConfig.json.meta~Stashed changes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5102097386a2c0d448eb5ddbff8649f7 +timeCreated: 1520037986 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Config/ResourcesConfig.json.meta b/Assets/Resources/Config/ResourcesConfig.json.meta new file mode 100644 index 00000000..b9b953a7 --- /dev/null +++ b/Assets/Resources/Config/ResourcesConfig.json.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 871f2d401d94c6148acf7d03dfe10c9d +timeCreated: 1520037994 +licenseType: Pro +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Config/SDKConfig.json.meta b/Assets/Resources/Config/SDKConfig.json.meta new file mode 100644 index 00000000..067b08bd --- /dev/null +++ b/Assets/Resources/Config/SDKConfig.json.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4a4995e7e06b9ec4aaf97e1735b701b3 +timeCreated: 1520037994 +licenseType: Pro +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Config/qeqweqwe.json.meta b/Assets/Resources/Config/qeqweqwe.json.meta new file mode 100644 index 00000000..98985d06 --- /dev/null +++ b/Assets/Resources/Config/qeqweqwe.json.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f03e00dbd97134d4e84508c792141216 +timeCreated: 1520037994 +licenseType: Pro +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Config/version.json.meta b/Assets/Resources/Config/version.json.meta new file mode 100644 index 00000000..affba084 --- /dev/null +++ b/Assets/Resources/Config/version.json.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 470a331219966fe42ae37d6c03f9b6f3 +timeCreated: 1520037994 +licenseType: Pro +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Data/GuideData.txt b/Assets/Resources/Data/GuideData.txt new file mode 100644 index 00000000..b85799a4 --- /dev/null +++ b/Assets/Resources/Data/GuideData.txt @@ -0,0 +1,4 @@ +GuideID StartPoint EndPoint Premise NextGuide CallToNext ClickToNext GuideWindowName GuideObjectName GuideItemName TipContent TipContentPos MaskAlpha +type Bool Bool String String Bool Bool String StringArray StringArray String Vector3 Float +note 引导开始点 引导结束点 前提条件 下一步引导,如果为空,则为下一条记录 是否接收调用去下一步引导 是否接收点击去下一步引导 引导的界面名字 高亮显示的对象名字 高亮的Item名字 提示文本内容 提示文本位置 遮罩Alpha +default False False Null Null False False Null Null Null Null 0|0|0 0.75 diff --git a/Assets/Resources/Data/GuideData.txt.meta b/Assets/Resources/Data/GuideData.txt.meta new file mode 100644 index 00000000..eb8b65d3 --- /dev/null +++ b/Assets/Resources/Data/GuideData.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dfb8a835c78d2434d9ffd9f644148888 +timeCreated: 1514124344 +licenseType: Pro +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/UI/GuideWindow.meta b/Assets/Resources/UI/GuideWindow.meta new file mode 100644 index 00000000..1e6d9d95 --- /dev/null +++ b/Assets/Resources/UI/GuideWindow.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8bfd50b1bc9e25849bf3386a6efb8189 +folderAsset: yes +timeCreated: 1514124366 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/UI/GuideWindow/GuideWindow.prefab b/Assets/Resources/UI/GuideWindow/GuideWindow.prefab new file mode 100644 index 0000000000000000000000000000000000000000..6d0de3aebe6280ce58fe720e5d6c7dca43acd415 GIT binary patch literal 11688 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 WI)1X=NEYVN^@NO0A3euo>-Jv?dIQe@ literal 0 HcmV?d00001 diff --git a/Assets/Resources/UI/GuideWindow/GuideWindow.prefab.meta b/Assets/Resources/UI/GuideWindow/GuideWindow.prefab.meta new file mode 100644 index 00000000..f18e589d --- /dev/null +++ b/Assets/Resources/UI/GuideWindow/GuideWindow.prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3e251f87a30a1aa4da64121cf7613435 +timeCreated: 1514124366 +licenseType: Pro +NativeFormatImporter: + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Audio/AudioManager.cs b/Assets/Script/Core/Audio/AudioManager.cs index 499a78e1..2f9cc00a 100644 --- a/Assets/Script/Core/Audio/AudioManager.cs +++ b/Assets/Script/Core/Audio/AudioManager.cs @@ -68,7 +68,6 @@ public static void Init() Init2DpPlayer(10); } - } static void Init2DpPlayer(int count) diff --git a/Assets/Script/Core/Network/Interface.meta b/Assets/Script/Core/Network/Interface.meta new file mode 100644 index 00000000..6cc3b9e2 --- /dev/null +++ b/Assets/Script/Core/Network/Interface.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b8165ce5a557c4041b4ea5b29c17038c +folderAsset: yes +timeCreated: 1520037986 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Network/Interface/INetworkInterface.cs.meta b/Assets/Script/Core/Network/Interface/INetworkInterface.cs.meta new file mode 100644 index 00000000..db332280 --- /dev/null +++ b/Assets/Script/Core/Network/Interface/INetworkInterface.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d46d6d4c9fd03064d95cc32a51ed93cc +timeCreated: 1520037987 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Network/Interface/SocketBase.cs.meta b/Assets/Script/Core/Network/Interface/SocketBase.cs.meta new file mode 100644 index 00000000..dcfc3f38 --- /dev/null +++ b/Assets/Script/Core/Network/Interface/SocketBase.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1f727728c94adb840bbc1e7c1bb07a60 +timeCreated: 1520037986 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Network/Json.meta b/Assets/Script/Core/Network/Json.meta new file mode 100644 index 00000000..65529e02 --- /dev/null +++ b/Assets/Script/Core/Network/Json.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 15b6a3d167e311047a83cd9bdc53a188 +folderAsset: yes +timeCreated: 1520037986 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Network/Json/JsonNetworkService.cs.meta b/Assets/Script/Core/Network/Json/JsonNetworkService.cs.meta new file mode 100644 index 00000000..f1b3548e --- /dev/null +++ b/Assets/Script/Core/Network/Json/JsonNetworkService.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3667739e3d4a3b44490a20be2f7009d8 +timeCreated: 1520037986 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Network/Protocol/ProtocolAttribute.cs.meta b/Assets/Script/Core/Network/Protocol/ProtocolAttribute.cs.meta new file mode 100644 index 00000000..ccc66393 --- /dev/null +++ b/Assets/Script/Core/Network/Protocol/ProtocolAttribute.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: dc3bdebebc4f40947942bc5c0ae57809 +timeCreated: 1520037987 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Network/Protocol/ProtocolNetworkService.cs.meta b/Assets/Script/Core/Network/Protocol/ProtocolNetworkService.cs.meta new file mode 100644 index 00000000..63934ee6 --- /dev/null +++ b/Assets/Script/Core/Network/Protocol/ProtocolNetworkService.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 30afb706671f2c641946b55d961a3a03 +timeCreated: 1520037986 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Network/Socket.meta b/Assets/Script/Core/Network/Socket.meta new file mode 100644 index 00000000..ec5a9558 --- /dev/null +++ b/Assets/Script/Core/Network/Socket.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 336ee2d0c3a566f4f94bbe5a50674f1f +folderAsset: yes +timeCreated: 1520037986 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Network/Socket/KCP.meta b/Assets/Script/Core/Network/Socket/KCP.meta new file mode 100644 index 00000000..7f65cb24 --- /dev/null +++ b/Assets/Script/Core/Network/Socket/KCP.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 036367e0d7ffeb7489faaf7f5f09db08 +folderAsset: yes +timeCreated: 1520037986 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Network/Socket/KCP/KCP.cs.meta b/Assets/Script/Core/Network/Socket/KCP/KCP.cs.meta new file mode 100644 index 00000000..1f6b5a2e --- /dev/null +++ b/Assets/Script/Core/Network/Socket/KCP/KCP.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c84281e6c0e450b408f903d419e37f8e +timeCreated: 1520037987 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Network/Socket/KCP/KCPService.cs.meta b/Assets/Script/Core/Network/Socket/KCP/KCPService.cs.meta new file mode 100644 index 00000000..f1a9a5f8 --- /dev/null +++ b/Assets/Script/Core/Network/Socket/KCP/KCPService.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 43e5233c20d5ad74bad6b2268c077bd3 +timeCreated: 1520037986 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Network/Socket/KCP/switch_queue.cs.meta b/Assets/Script/Core/Network/Socket/KCP/switch_queue.cs.meta new file mode 100644 index 00000000..c1a5bf1f --- /dev/null +++ b/Assets/Script/Core/Network/Socket/KCP/switch_queue.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 49070a8d0e780c84eb0d802c7d9f2594 +timeCreated: 1520037987 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Network/Socket/SocketService.cs.meta b/Assets/Script/Core/Network/Socket/SocketService.cs.meta new file mode 100644 index 00000000..beac5d12 --- /dev/null +++ b/Assets/Script/Core/Network/Socket/SocketService.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 26685c328efeb62439b45ce6dd917664 +timeCreated: 1520037986 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Network/Socket/WsSocketService.cs.meta b/Assets/Script/Core/Network/Socket/WsSocketService.cs.meta new file mode 100644 index 00000000..8063bb01 --- /dev/null +++ b/Assets/Script/Core/Network/Socket/WsSocketService.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f7c2fc39942fec5449a1e15367d13b30 +timeCreated: 1520037987 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/PersistentFile.meta b/Assets/Script/Core/PersistentFile.meta new file mode 100644 index 00000000..4ce76161 --- /dev/null +++ b/Assets/Script/Core/PersistentFile.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5eabd9a192290af45b12b85d2e55176c +folderAsset: yes +timeCreated: 1520037986 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/PersistentFile/PersistentFileManager.cs.meta b/Assets/Script/Core/PersistentFile/PersistentFileManager.cs.meta new file mode 100644 index 00000000..c2c4bcf8 --- /dev/null +++ b/Assets/Script/Core/PersistentFile/PersistentFileManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9eb581d57fd8f3d41bc606950d432429 +timeCreated: 1520037987 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/GameStatus/FirstStatus.cs b/Assets/Script/GameStatus/FirstStatus.cs index c3a445a8..1cffb5d5 100644 --- a/Assets/Script/GameStatus/FirstStatus.cs +++ b/Assets/Script/GameStatus/FirstStatus.cs @@ -25,7 +25,6 @@ public override void OnEnterStatus() AnimSystem.Move(go, null, Vector3.one, callBack: (object[] obj) => { } , parameter: new object[] { }); - } //public void CallBackTest(InputNetworkEvent e) diff --git a/Assets/Script/GameStatus/GameStatus.cs b/Assets/Script/GameStatus/GameStatus.cs index 7b133aba..a1c67394 100644 --- a/Assets/Script/GameStatus/GameStatus.cs +++ b/Assets/Script/GameStatus/GameStatus.cs @@ -7,7 +7,5 @@ public class GameStatus : IApplicationStatus public override void OnEnterStatus() { OpenUI(); - - //UIManager.OpenUIWindow(); } } diff --git a/Assets/Script/GuideSystem.meta b/Assets/Script/GuideSystem.meta new file mode 100644 index 00000000..9b2c08d4 --- /dev/null +++ b/Assets/Script/GuideSystem.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c1467ec1396c84847855c62a7ab1bf78 +folderAsset: yes +timeCreated: 1514124344 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/GuideSystem/GuideSyetem.cs b/Assets/Script/GuideSystem/GuideSyetem.cs new file mode 100644 index 00000000..3044cbff --- /dev/null +++ b/Assets/Script/GuideSystem/GuideSyetem.cs @@ -0,0 +1,27 @@ +using FrameWork.GuideSystem; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class GuideSyetem : GuideSystemBase +{ + private static GuideSyetem s_instance; + + public static GuideSyetem Instance + { + get + { + if(s_instance == null) + { + s_instance = new GuideSyetem(); + s_instance.Init(); + } + return s_instance; + } + + set + { + s_instance = value; + } + } +} diff --git a/Assets/Script/GuideSystem/GuideSyetem.cs.meta b/Assets/Script/GuideSystem/GuideSyetem.cs.meta new file mode 100644 index 00000000..3fb4f07a --- /dev/null +++ b/Assets/Script/GuideSystem/GuideSyetem.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1560e6b656c276f45992422c5e8d06e6 +timeCreated: 1514124344 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/UI/GuideWindow.meta b/Assets/Script/UI/GuideWindow.meta new file mode 100644 index 00000000..75268ea3 --- /dev/null +++ b/Assets/Script/UI/GuideWindow.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 82e0d02d3f19e3247b5512b7d407f21b +folderAsset: yes +timeCreated: 1514124344 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/UI/GuideWindow/GuideWindow.cs b/Assets/Script/UI/GuideWindow/GuideWindow.cs new file mode 100644 index 00000000..bbfe2ef6 --- /dev/null +++ b/Assets/Script/UI/GuideWindow/GuideWindow.cs @@ -0,0 +1,21 @@ +using UnityEngine; +using System.Collections; +using FrameWork.GuideSystem; + +public class GuideWindow : GuideWindowBase +{ + public override void ShowTips(string content, Vector3 pos) + { + if(content != null && content != "") + { + SetActive("Tips", true); + + SetText("Text_tip", content); + GetRectTransform("Tips").anchoredPosition3D = pos; + } + else + { + SetActive("Tips", false); + } + } +} \ No newline at end of file diff --git a/Assets/Script/UI/GuideWindow/GuideWindow.cs.meta b/Assets/Script/UI/GuideWindow/GuideWindow.cs.meta new file mode 100644 index 00000000..7af9ad44 --- /dev/null +++ b/Assets/Script/UI/GuideWindow/GuideWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a973ff3aec47cdb4a93657e0324208c2 +timeCreated: 1514124345 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/UI/ShopWindow/ShopWindow.cs b/Assets/Script/UI/ShopWindow/ShopWindow.cs index eac35430..93fb5c47 100644 --- a/Assets/Script/UI/ShopWindow/ShopWindow.cs +++ b/Assets/Script/UI/ShopWindow/ShopWindow.cs @@ -58,14 +58,25 @@ List> GetShopData() for (int i = 0; i < itemData.TableIDs.Count; i++) { + SingleData singleData = itemData.GetLineFromKey(itemData.TableIDs[i]); + + string itemName = singleData.GetString("Name"); + int cost = singleData.GetInt("Cost"); + Dictionary tmp = new Dictionary(); - tmp.Add("Name",DataGenerateManager.GetData(itemData.TableIDs[i]).m_ItemName); + tmp.Add("Name", DataGenerateManager.GetData(itemData.TableIDs[i]).m_ItemName); tmp.Add("Cost", DataGenerateManager.GetData(itemData.TableIDs[i]).m_key); data.Add(tmp); } + + //itemGenerate data = DataGenerateManager.GetData("1"); + //string itemName = data.m_ItemName; + //int cost = data.m_Cost; + + return data; } diff --git a/Assets/doc/Xmind/Export/LuaManager.png.meta b/Assets/doc/Xmind/Export/LuaManager.png.meta new file mode 100644 index 00000000..fa43bb4f --- /dev/null +++ b/Assets/doc/Xmind/Export/LuaManager.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: e3450c6ee010d5d43a419585d0cd46e3 +timeCreated: 1520037993 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/doc/Xmind/Export/\345\220\214\346\255\245\346\241\206\346\236\266.png.meta" "b/Assets/doc/Xmind/Export/\345\220\214\346\255\245\346\241\206\346\236\266.png.meta" new file mode 100644 index 00000000..00c251bf --- /dev/null +++ "b/Assets/doc/Xmind/Export/\345\220\214\346\255\245\346\241\206\346\236\266.png.meta" @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: bba92c8c6c79e6c4a99d7ed50748d7d2 +timeCreated: 1520037993 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/doc/Xmind/Export/\347\203\255\346\233\264\346\226\260\351\200\273\350\276\221.png.meta" "b/Assets/doc/Xmind/Export/\347\203\255\346\233\264\346\226\260\351\200\273\350\276\221.png.meta" new file mode 100644 index 00000000..ad6689f1 --- /dev/null +++ "b/Assets/doc/Xmind/Export/\347\203\255\346\233\264\346\226\260\351\200\273\350\276\221.png.meta" @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: e5247c0968cdd114689ab66dd00c5aab +timeCreated: 1520037994 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/doc/Xmind/Export/\347\216\251\346\263\225\347\274\226\350\276\221\345\231\250.png.meta" "b/Assets/doc/Xmind/Export/\347\216\251\346\263\225\347\274\226\350\276\221\345\231\250.png.meta" new file mode 100644 index 00000000..861f113b --- /dev/null +++ "b/Assets/doc/Xmind/Export/\347\216\251\346\263\225\347\274\226\350\276\221\345\231\250.png.meta" @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 60622ca48d6fcec478f5631f697901ee +timeCreated: 1520037993 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/doc/Xmind/Export/\347\275\221\347\273\234\345\220\214\346\255\245\346\265\201\347\250\213.png.meta" "b/Assets/doc/Xmind/Export/\347\275\221\347\273\234\345\220\214\346\255\245\346\265\201\347\250\213.png.meta" new file mode 100644 index 00000000..13594a27 --- /dev/null +++ "b/Assets/doc/Xmind/Export/\347\275\221\347\273\234\345\220\214\346\255\245\346\265\201\347\250\213.png.meta" @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 166bf36c700cc3045b6b77ffa2d921d3 +timeCreated: 1520037993 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/doc/Xmind/LuaManager.xmind.meta b/Assets/doc/Xmind/LuaManager.xmind.meta new file mode 100644 index 00000000..eef7efbc --- /dev/null +++ b/Assets/doc/Xmind/LuaManager.xmind.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b0faf124619e43b498a6c9020d7348d6 +timeCreated: 1520037986 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/doc/Xmind/\346\234\215\345\212\241\345\231\250.xmind.meta" "b/Assets/doc/Xmind/\346\234\215\345\212\241\345\231\250.xmind.meta" new file mode 100644 index 00000000..bb22c14d --- /dev/null +++ "b/Assets/doc/Xmind/\346\234\215\345\212\241\345\231\250.xmind.meta" @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7fcf12647df04e9458f68f2927e7485d +timeCreated: 1520037986 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/doc/Xmind/\346\270\270\346\210\217\347\216\251\346\263\225\347\274\226\350\276\221\345\231\250.xmind.meta" "b/Assets/doc/Xmind/\346\270\270\346\210\217\347\216\251\346\263\225\347\274\226\350\276\221\345\231\250.xmind.meta" new file mode 100644 index 00000000..eb6119c5 --- /dev/null +++ "b/Assets/doc/Xmind/\346\270\270\346\210\217\347\216\251\346\263\225\347\274\226\350\276\221\345\231\250.xmind.meta" @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6a91b174477c9d748833046131de227e +timeCreated: 1520037986 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/doc/Xmind/\347\203\255\346\233\264\346\226\260\351\200\273\350\276\221.xmind.meta" "b/Assets/doc/Xmind/\347\203\255\346\233\264\346\226\260\351\200\273\350\276\221.xmind.meta" new file mode 100644 index 00000000..8ee9d035 --- /dev/null +++ "b/Assets/doc/Xmind/\347\203\255\346\233\264\346\226\260\351\200\273\350\276\221.xmind.meta" @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ecf80a4ae6f4f1b458db6323f22101c4 +timeCreated: 1520037986 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/doc/Xmind/\347\216\251\346\263\225\347\274\226\350\276\221\345\231\250.xmind.meta" "b/Assets/doc/Xmind/\347\216\251\346\263\225\347\274\226\350\276\221\345\231\250.xmind.meta" new file mode 100644 index 00000000..0d83007f --- /dev/null +++ "b/Assets/doc/Xmind/\347\216\251\346\263\225\347\274\226\350\276\221\345\231\250.xmind.meta" @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f68429217b464474f91c51cc82673315 +timeCreated: 1520037986 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/doc/Xmind/\347\275\221\347\273\234\346\270\270\346\210\217\345\220\214\346\255\245\346\241\206\346\236\266.xmind.meta" "b/Assets/doc/Xmind/\347\275\221\347\273\234\346\270\270\346\210\217\345\220\214\346\255\245\346\241\206\346\236\266.xmind.meta" new file mode 100644 index 00000000..c20a0a97 --- /dev/null +++ "b/Assets/doc/Xmind/\347\275\221\347\273\234\346\270\270\346\210\217\345\220\214\346\255\245\346\241\206\346\236\266.xmind.meta" @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 76276ec1878580b43b6df4c017236fe5 +timeCreated: 1520037986 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: From 30c567ac168ca9f568543336750725cab5d2c47e Mon Sep 17 00:00:00 2001 From: GaoKai Date: Tue, 3 Apr 2018 16:41:53 +0800 Subject: [PATCH 038/108] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=96=B0=E6=89=8B?= =?UTF-8?q?=E5=BC=95=E5=AF=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/GuideSystem/GuideSystemBase.cs | 10 +- .../Core/GuideSystem/GuideWindowBase.cs | 4 +- .../Script/Core/HotUpdate/HotUpdateManager.cs | 2 +- Assets/Script/Core/Timer/Timer.cs | 40 +++-- Assets/Script/Core/Timer/TimerEvent.cs | 5 + .../ReusingScrollRect/ReusingScrollRect.cs | 2 +- Assets/Script/Core/UI/Model/UIBase.cs | 155 +++++++++++++++--- 7 files changed, 174 insertions(+), 44 deletions(-) diff --git a/Assets/Script/Core/GuideSystem/GuideSystemBase.cs b/Assets/Script/Core/GuideSystem/GuideSystemBase.cs index db3c9089..32e565a8 100644 --- a/Assets/Script/Core/GuideSystem/GuideSystemBase.cs +++ b/Assets/Script/Core/GuideSystem/GuideSystemBase.cs @@ -52,6 +52,14 @@ public abstract class GuideSystemBase //int m_currentGuideIndex = 0; string m_currentGuideKey = ""; + public bool IsStart + { + get + { + return m_isStart; + } + } + #region 外部调用 /// @@ -88,7 +96,7 @@ public void Start() { SingleData guideData = LoadFirstGuide(); - if (!m_isStart + if (!IsStart && guideData != null && GuideStartCondition(guideData) && GetGuideSwitch()) diff --git a/Assets/Script/Core/GuideSystem/GuideWindowBase.cs b/Assets/Script/Core/GuideSystem/GuideWindowBase.cs index 7637ce43..c82cf3ff 100644 --- a/Assets/Script/Core/GuideSystem/GuideWindowBase.cs +++ b/Assets/Script/Core/GuideSystem/GuideWindowBase.cs @@ -59,9 +59,9 @@ public void ClearEffect() public void ShowGuideUIByItem(string uiName, UIWindowBase ui, string itemName, Vector3 offset, bool isFollow) { - UIBase aimUI = ui.GetItem(itemName); + GameObject aimUI = ui.GetItem(itemName); - ShowGuideUI(GetRectTransform(uiName), aimUI.gameObject, offset, isFollow); + ShowGuideUI(GetRectTransform(uiName), aimUI, offset, isFollow); } public void ShowGuideUIByObject(string uiName, UIWindowBase ui, string objName, Vector3 offset, bool isFollow) diff --git a/Assets/Script/Core/HotUpdate/HotUpdateManager.cs b/Assets/Script/Core/HotUpdate/HotUpdateManager.cs index 9607adb3..6cd007e0 100644 --- a/Assets/Script/Core/HotUpdate/HotUpdateManager.cs +++ b/Assets/Script/Core/HotUpdate/HotUpdateManager.cs @@ -107,7 +107,7 @@ static IEnumerator CheckVersion() if (www.error != null && www.error != "") { //下载失败 - Debug.LogError("Version File DownLoad Error URL:" + s_versionFileDownLoadPath + " error:" + www.error); + //Debug.LogError("Version File DownLoad Error URL:" + s_versionFileDownLoadPath + " error:" + www.error); UpdateDateCallBack(HotUpdateStatusEnum.VersionFileDownLoadFail, 0); yield break; diff --git a/Assets/Script/Core/Timer/Timer.cs b/Assets/Script/Core/Timer/Timer.cs index 8c76af3f..6e695146 100644 --- a/Assets/Script/Core/Timer/Timer.cs +++ b/Assets/Script/Core/Timer/Timer.cs @@ -6,6 +6,8 @@ public class Timer { public static List m_timers = new List(); + public static TimerEvent test; + //public static List m_removeList = new List(); public static void Init() @@ -17,28 +19,32 @@ static void Update () { for (int i = 0; i < m_timers.Count;i++ ) { - m_timers[i].Update(); + TimerEvent e = m_timers[i]; + e.Update(); - if (m_timers[i].m_isDone) + if (e.m_isDone) { - TimerEvent e = m_timers[i]; - e.CompleteTimer(); if (e.m_repeatCount == 0) { - m_timers.RemoveAt(i); - i--; + m_timers.Remove(e); } } } - } + + if(test != null) + { + Debug.Log("Test " + test.m_timerName + " " + test.m_currentTimer + " " + m_timers.Contains(test) + " isDone " + test.m_isDone); + } + } public static bool GetIsExistTimer(string timerName) { for (int i = 0; i < m_timers.Count; i++) { - if (m_timers[i].m_timerName == timerName) + var e = m_timers[i]; + if (e.m_timerName == timerName) { return true; } @@ -51,9 +57,10 @@ public static TimerEvent GetTimer(string timerName) { for (int i = 0; i < m_timers.Count; i++) { - if (m_timers[i].m_timerName == timerName) + var e = m_timers[i]; + if (e.m_timerName == timerName) { - return m_timers[i]; + return e; } } @@ -197,6 +204,8 @@ public static TimerEvent AddTimer(float spaceTime, bool isIgnoreTimeScale, int c public static void DestroyTimer(TimerEvent timer,bool isCallBack = false) { + //Debug.Log("DestroyTimer " + timer.m_timerName + " isTest " + (timer == test)); + if (m_timers.Contains(timer)) { if (isCallBack) @@ -217,9 +226,10 @@ public static void DestroyTimer(string timerName, bool isCallBack = false) //Debug.Log("DestroyTimer2 ----TIMER " + timerName); for (int i = 0; i < m_timers.Count;i++ ) { - if (m_timers[i].m_timerName.Equals(timerName)) + TimerEvent te = m_timers[i]; + if (te.m_timerName.Equals(timerName)) { - DestroyTimer(m_timers[i], isCallBack); + DestroyTimer(te, isCallBack); } } } @@ -253,9 +263,11 @@ public static void ResetTimer(string timerName) { for (int i = 0; i < m_timers.Count; i++) { - if (m_timers[i].m_timerName.Equals(timerName)) + var e = m_timers[i]; + + if (e.m_timerName.Equals(timerName)) { - ResetTimer(m_timers[i]); + ResetTimer(e); } } } diff --git a/Assets/Script/Core/Timer/TimerEvent.cs b/Assets/Script/Core/Timer/TimerEvent.cs index f2c33d91..f46a7777 100644 --- a/Assets/Script/Core/Timer/TimerEvent.cs +++ b/Assets/Script/Core/Timer/TimerEvent.cs @@ -61,6 +61,11 @@ public void CompleteTimer() public void CallBackTimer() { + if(this == Timer.test) + { + Debug.Log("CallBackTimer " + (m_callBack == null)); + } + if (m_callBack != null) { try diff --git a/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs b/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs index 7a56cd05..8f3d83ad 100644 --- a/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs +++ b/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs @@ -189,7 +189,7 @@ void UpdateConetntSize(int count) content.sizeDelta = size; - Debug.Log(m_itemSize + "" + size + " m_rectTransform.sizeDelta " + m_rectTransform.sizeDelta, m_rectTransform ); + //Debug.Log(m_itemSize + "" + size + " m_rectTransform.sizeDelta " + m_rectTransform.sizeDelta, m_rectTransform ); } void UpdateIndexList(int count) diff --git a/Assets/Script/Core/UI/Model/UIBase.cs b/Assets/Script/Core/UI/Model/UIBase.cs index 2e5cc4a1..2a64fc8f 100644 --- a/Assets/Script/Core/UI/Model/UIBase.cs +++ b/Assets/Script/Core/UI/Model/UIBase.cs @@ -283,7 +283,7 @@ public Text GetText(string name) } public Toggle GetToggle(string name) { - if (m_Toggle .ContainsKey(name)) + if (m_Toggle.ContainsKey(name)) { return m_Toggle[name]; } @@ -436,9 +436,9 @@ public RectTransform RectTransform set { m_rectTransform = value; } } - public void SetSizeDelta(float w,float h) + public void SetSizeDelta(float w, float h) { - RectTransform.sizeDelta = new Vector2(w,h); + RectTransform.sizeDelta = new Vector2(w, h); } #region 自定义组件 @@ -586,7 +586,7 @@ public virtual void RemoveAllListener() m_EndDragEvents[i].RemoveListener(true); } m_EndDragEvents.Clear(); - #endregion + #endregion } #region 添加监听 @@ -665,7 +665,7 @@ public void AddEventListener(Enum EventEnum, EventHandle handle) //TODO 逐步添加所有的移除监听方法 - public InputButtonClickRegisterInfo GetClickRegisterInfo(string buttonName, InputEventHandle callback, string parm ) + public InputButtonClickRegisterInfo GetClickRegisterInfo(string buttonName, InputEventHandle callback, string parm) { string eventKey = InputUIOnClickEvent.GetEventKey(UIEventKey, buttonName, parm); for (int i = 0; i < m_OnClickEvents.Count; i++) @@ -696,7 +696,7 @@ public void RemoveOnClickListener(string buttonName, InputEventHandle m_ChildList = new List(); int m_childUIIndex = 0; - public UIBase CreateItem(string itemName, string prantName,bool isActive) + public UIBase CreateItem(string itemName, string prantName, bool isActive) { GameObject item = GameObjectManager.CreateGameObjectByPool(itemName, GetGameObject(prantName), isActive); @@ -738,14 +738,14 @@ public void DestroyItem(UIBase item, bool isActive) } } - public void DestroyItem(UIBase item,float t) + public void DestroyItem(UIBase item, float t) { if (m_ChildList.Contains(item)) { m_ChildList.Remove(item); item.RemoveAllListener(); item.OnUIDestroy(); - GameObjectManager.DestroyGameObjectByPool(item.gameObject,t); + GameObjectManager.DestroyGameObjectByPool(item.gameObject, t); } } @@ -767,20 +767,124 @@ public void CleanItem(bool isActive) m_childUIIndex = 0; } - public UIBase GetItem(string itemName) + public GameObject GetItem(string itemName) { - for (int i = 0; i < m_ChildList.Count; i++) + //Debug.Log("GetItem v0 " + m_ChildList.Count); + if (!itemName.Contains(".")) { - if(m_ChildList[i].name == itemName) + //Debug.Log("GetItem v1 " + m_ChildList.Count); + int index = 0; + if (itemName.Contains("[")) { - return m_ChildList[i]; + index = int.Parse(itemName.Substring(itemName.IndexOf("[") + 1, 1)); + } + int rd_index = 0; + for (int i = 0; i < m_ChildList.Count; i++) + { + if (m_ChildList[i].name == itemName) + { + if (index == rd_index) + { + return m_ChildList[i].gameObject; + } + else + { + rd_index = rd_index + 1; + } + + } + } + } + else + { + //Debug.Log("GetItem v2 "); + string[] itemNames = itemName.Split('.'); + //Debug.Log("itemNames.Length " + itemNames.Length); + + List Comp_list = new List(); + + //for (int i = 0; i < m_ChildList.Count; i++) + //{ + // Comp_list.Add(m_ChildList[i].transform); + //} + + for (int j = 0; j < itemNames.Length; j++) + { + + int index = 0; + string t_itemName = itemNames[j]; + + if (t_itemName.Contains("[")) + { + index = int.Parse(t_itemName.Substring(t_itemName.IndexOf("[") + 1, 1)); + } + t_itemName = t_itemName.Substring(0, t_itemName.Length - 3); + if (j == 0) + { + //Debug.Log("===tsss=>"+ t_itemName); + //Transform tss = GetGameObject(t_itemName).transform; + + //Debug.Log("===t=>"+ tss.name,tss); + //Debug.Log("==child" + tss.GetChild(0), tss.GetChild(0)); + + + //int len = tss.childCount; + //Debug.Log(len); + //for (int i = 0; i < len; i++) + //{ + // Transform itemts = tss.GetChild(i); + // Debug.Log("===item>" + itemts.name); + //} + + Transform[] aa = GetGameObject(t_itemName).GetComponentsInChildren(); + //for (int i = 0; i < aa.Length; i++) + //{ + // Debug.Log("bbbbb " + aa[i].name); + //} + //Debug.Log("aaaaaaaa " + t_itemName + " " + aa.Length); + Comp_list = new List(aa); + } + else + { + + + //Debug.Log("t_itemNameA " + t_itemName + " " + index + " " + Comp_list.Count); + int rd_index = 0; + for (int i = 0; i < Comp_list.Count; i++) + { + //Debug.Log("Comp_list[i].name " + Comp_list[i].name); + if (Comp_list[i].name == t_itemName) + { + if (index == rd_index) + { + if (j == itemNames.Length - 1) + { + //Debug.Log("GetItem v4 "); + return Comp_list[i].gameObject; + } + else + { + //Debug.Log("GetItem v3 "); + Transform[] aa = Comp_list[i].GetComponentsInChildren(); + Comp_list = new List(aa); + break; + } + } + else + { + rd_index = rd_index + 1; + } + + } + } + } } } throw new Exception(UIName + " GetItem Exception Dont find Item: " + itemName); } - public UIBase GetItemByIndex(string itemName,int index) + public UIBase GetItemByIndex(string itemName, int index) { for (int i = 0; i < m_ChildList.Count; i++) { @@ -789,7 +893,7 @@ public UIBase GetItemByIndex(string itemName,int index) //Debug.Log("GetItemByIndex " + index, m_ChildList[i]); index--; - if(index == 0) + if (index == 0) { return m_ChildList[i]; } @@ -841,7 +945,7 @@ public void SetImageColor(string ImageID, Color color) GetImage(ImageID).color = color; } - public void SetTextColor(string TextID,Color color) + public void SetTextColor(string TextID, Color color) { GetText(TextID).color = color; } @@ -884,14 +988,14 @@ public void SetActive(string gameObjectID, bool isShow) /// /// Only Button /// - public void SetEnabeled(string ID,bool enable) + public void SetEnabeled(string ID, bool enable) { GetButton(ID).enabled = enable; } /// /// Only Button /// - public void SetButtonInteractable(string ID,bool enable) + public void SetButtonInteractable(string ID, bool enable) { GetButton(ID).interactable = enable; } @@ -939,34 +1043,34 @@ public void SetGuideMode(string objName, int order = 1) public void SetItemGuideMode(string itemName, int order = 1) { - SetGuideMode(GetItem(itemName).gameObject, order); + SetGuideMode(GetItem(itemName), order); } - public void SetItemGuideModeByIndex(string itemName, int index ,int order = 1) + public void SetItemGuideModeByIndex(string itemName, int index, int order = 1) { SetGuideMode(GetItemByIndex(itemName, index).gameObject, order); } public void SetSelfGuideMode(int order = 1) { - SetGuideMode(gameObject,order); + SetGuideMode(gameObject, order); } - public void SetGuideMode(GameObject go,int order = 1) + public void SetGuideMode(GameObject go, int order = 1) { Canvas canvas = go.GetComponent(); GraphicRaycaster graphic = go.GetComponent(); GuideChangeData status = new GuideChangeData(); - if(canvas == null) + if (canvas == null) { canvas = go.AddComponent(); status.isCreateCanvas = true; } - if(graphic == null) + if (graphic == null) { graphic = go.AddComponent(); @@ -993,7 +1097,7 @@ public void SetGuideMode(GameObject go,int order = 1) go.SetActive(false); } - if(!m_CreateCanvasDict.ContainsKey(go)) + if (!m_CreateCanvasDict.ContainsKey(go)) { m_CreateCanvasDict.Add(go, status); m_GuideList.Add(go); @@ -1088,7 +1192,8 @@ public void ClearObject() } } - ls.Sort((a,b) => { + ls.Sort((a, b) => + { return a.name.CompareTo(b.name); }); From ff25f5f1e60c11444d4e96b593c22cb99b5c6fd5 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Tue, 3 Apr 2018 18:39:20 +0800 Subject: [PATCH 039/108] =?UTF-8?q?=E6=96=B0=E6=89=8B=E5=BC=95=E5=AF=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Editor/GuideSystem/GuideSystemEditor.cs | 5 +++ .../Script/Core/Editor/UI/UICreateService.cs | 15 +++++++++ .../Core/GuideSystem/GuideSystemBase.cs | 32 +++++++++++-------- .../Core/GuideSystem/GuideWindowBase.cs | 2 +- 4 files changed, 39 insertions(+), 15 deletions(-) diff --git a/Assets/Script/Core/Editor/GuideSystem/GuideSystemEditor.cs b/Assets/Script/Core/Editor/GuideSystem/GuideSystemEditor.cs index 4793ad3c..7fdb4f4c 100644 --- a/Assets/Script/Core/Editor/GuideSystem/GuideSystemEditor.cs +++ b/Assets/Script/Core/Editor/GuideSystem/GuideSystemEditor.cs @@ -91,6 +91,11 @@ static void SaveDataTable() data.SetNote(GuideSystemBase.c_guideEndPoint, "引导结束点"); data.SetFieldType(GuideSystemBase.c_guideEndPoint, FieldType.Bool, null); + data.TableKeys.Add(GuideSystemBase.c_guideClosePoint); + data.SetDefault(GuideSystemBase.c_guideEndPoint, "False"); + data.SetNote(GuideSystemBase.c_guideEndPoint, "引导关闭点"); + data.SetFieldType(GuideSystemBase.c_guideClosePoint, FieldType.Bool, null); + data.TableKeys.Add(GuideSystemBase.c_PremiseKey); data.SetDefault(GuideSystemBase.c_PremiseKey, "Null"); data.SetNote(GuideSystemBase.c_PremiseKey, "前提条件"); diff --git a/Assets/Script/Core/Editor/UI/UICreateService.cs b/Assets/Script/Core/Editor/UI/UICreateService.cs index bac6a19e..9a885bcc 100644 --- a/Assets/Script/Core/Editor/UI/UICreateService.cs +++ b/Assets/Script/Core/Editor/UI/UICreateService.cs @@ -325,6 +325,21 @@ public static void CreateGuideWindow() maskrt.anchorMin = Vector2.zero; maskrt.anchorMax = Vector2.one; + GameObject tips = new GameObject("Tips"); + mask.layer = LayerMask.NameToLayer("UI"); + RectTransform tipsrt = mask.AddComponent(); + tipsrt.SetParent(root); + + guideBaseTmp.m_objectList.Add(tips); + + GameObject Text_tips = new GameObject("Text_tip"); + mask.layer = LayerMask.NameToLayer("UI"); + RectTransform txt_tipsrt = mask.AddComponent(); + Text txt = Text_tips.AddComponent(); + txt_tipsrt.SetParent(tipsrt); + + guideBaseTmp.m_objectList.Add(Text_tips); + guideBaseTmp.m_mask = img; guideBaseTmp.m_bgMask = BgGo; diff --git a/Assets/Script/Core/GuideSystem/GuideSystemBase.cs b/Assets/Script/Core/GuideSystem/GuideSystemBase.cs index 32e565a8..4d618b54 100644 --- a/Assets/Script/Core/GuideSystem/GuideSystemBase.cs +++ b/Assets/Script/Core/GuideSystem/GuideSystemBase.cs @@ -14,6 +14,7 @@ public abstract class GuideSystemBase public const string c_guideStartPoint = "StartPoint"; //引导开始点 public const string c_guideEndPoint = "EndPoint"; //引导结束点 + public const string c_guideClosePoint = "ClosePoint"; //引导关闭点 public const string c_PremiseKey = "Premise"; //前提条件 public const string c_NextGuideNameKey = "NextGuide"; //下一步引导,如果为空,则为下一条记录 @@ -154,6 +155,11 @@ protected virtual bool GuideEndCondition() return GetGuideEndPoint(m_currentGuideData); } + protected virtual bool GuideCloseCondition() + { + return GetGuideClosePoint(m_currentGuideData); + } + /// /// 判断是否满足引导的下一步条件 /// @@ -343,13 +349,15 @@ void NextGuide() //清除上一步的操作 ClearGuideLogic(); - //保存这一步 - SaveGuideRecord(m_currentGuideData); + //如果是结束点则保存这一步 + if(GuideEndCondition()) + SaveGuideRecord(m_currentGuideData); SingleData nextGuideData = GetNextGuideData(m_currentGuideData); //退出判断 if (!GuideEndCondition() + && !GuideCloseCondition() && nextGuideData != null) { //读取下一步引导 @@ -375,10 +383,7 @@ void GuideLogic() string uiName = GetGuideWindowName(m_currentGuideData); - if(uiName != null - && uiName != "" - && uiName != "Null" - && uiName != "null") + if(uiName != null) { //获取UI进行表现 UIWindowBase ui = UIManager.GetUI(uiName); @@ -427,10 +432,7 @@ protected SingleData LoadFirstGuide() //如果新手引导启动时没有为m_currentGuideKey赋值 //则认为从第一条记录开始 - if (m_currentGuideKey == "" - || m_currentGuideKey == null - || m_currentGuideKey == "Null" - || m_currentGuideKey == "null") + if (m_currentGuideKey == "") { guideData = m_guideData[m_guideData.TableIDs[0]]; } @@ -488,6 +490,11 @@ protected bool GetGuideEndPoint(SingleData data) return data.GetBool(c_guideEndPoint); } + protected bool GetGuideClosePoint(SingleData data) + { + return data.GetBool(c_guideClosePoint); + } + protected bool GetCallToNext(SingleData data) { return data.GetBool(c_CallToNextKey); @@ -532,10 +539,7 @@ protected SingleData GetNextGuideData(SingleData data) { string next = GetNextGuideNeme(data); - if (next == null - || next == "null" - || next == "Null" - || next == "") + if (next == null) { int newIndex = m_guideData.TableIDs.IndexOf(data.m_SingleDataKey) + 1; return GetGuideDataByIndex(newIndex); diff --git a/Assets/Script/Core/GuideSystem/GuideWindowBase.cs b/Assets/Script/Core/GuideSystem/GuideWindowBase.cs index c82cf3ff..45f69faf 100644 --- a/Assets/Script/Core/GuideSystem/GuideWindowBase.cs +++ b/Assets/Script/Core/GuideSystem/GuideWindowBase.cs @@ -109,7 +109,7 @@ public void HideAllGuideUI() public virtual void ShowTips(string content, Vector3 pos) { - if (content != null && content != "" && content != "Null") + if (content != null) { m_TipTransfrom.gameObject.SetActive(true); From 60c8f316bd0864ad84cac1d098ad02093629f07e Mon Sep 17 00:00:00 2001 From: GaoKai Date: Sun, 8 Apr 2018 17:30:04 +0800 Subject: [PATCH 040/108] =?UTF-8?q?=E6=89=93=E5=8C=85=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Editor/GuideSystem/GuideSystemEditor.cs | 13 ++- .../Package/PackageConfigEditorWindow.cs | 16 +++- .../Core/Editor/Package/PackageService.cs | 17 ++-- .../Core/GuideSystem/GuideSystemBase.cs | 84 +++++++++++++------ 4 files changed, 89 insertions(+), 41 deletions(-) diff --git a/Assets/Script/Core/Editor/GuideSystem/GuideSystemEditor.cs b/Assets/Script/Core/Editor/GuideSystem/GuideSystemEditor.cs index 7fdb4f4c..69f9c882 100644 --- a/Assets/Script/Core/Editor/GuideSystem/GuideSystemEditor.cs +++ b/Assets/Script/Core/Editor/GuideSystem/GuideSystemEditor.cs @@ -106,15 +106,20 @@ static void SaveDataTable() data.SetNote(GuideSystemBase.c_NextGuideNameKey, "下一步引导,如果为空,则为下一条记录"); data.SetFieldType(GuideSystemBase.c_NextGuideNameKey, FieldType.String, null); + data.TableKeys.Add(GuideSystemBase.c_ClickToNextKey); + data.SetDefault(GuideSystemBase.c_ClickToNextKey, "False"); + data.SetNote(GuideSystemBase.c_ClickToNextKey, "是否接收点击去下一步引导"); + data.SetFieldType(GuideSystemBase.c_ClickToNextKey, FieldType.Bool, null); + data.TableKeys.Add(GuideSystemBase.c_CallToNextKey); data.SetDefault(GuideSystemBase.c_CallToNextKey, "False"); data.SetNote(GuideSystemBase.c_CallToNextKey, "是否接收调用去下一步引导"); data.SetFieldType(GuideSystemBase.c_CallToNextKey, FieldType.Bool, null); - data.TableKeys.Add(GuideSystemBase.c_ClickToNextKey); - data.SetDefault(GuideSystemBase.c_ClickToNextKey, "False"); - data.SetNote(GuideSystemBase.c_ClickToNextKey, "是否接收点击去下一步引导"); - data.SetFieldType(GuideSystemBase.c_ClickToNextKey, FieldType.Bool, null); + data.TableKeys.Add(GuideSystemBase.c_ConditionToNextKey); + data.SetDefault(GuideSystemBase.c_ConditionToNextKey, "False"); + data.SetNote(GuideSystemBase.c_ConditionToNextKey, "是否自动判断条件去下一步引导"); + data.SetFieldType(GuideSystemBase.c_ConditionToNextKey, FieldType.Bool, null); data.TableKeys.Add(GuideSystemBase.c_GuideWindowNameKey); data.SetDefault(GuideSystemBase.c_GuideWindowNameKey, "Null"); diff --git a/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs b/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs index 08c00627..426929ff 100644 --- a/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs +++ b/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs @@ -317,9 +317,19 @@ void ObjectListView(EditPackageConfig pack) } } } - //if (GUILayout.Button("资源去重")) - //{ - //} + + if (GUILayout.Button("打印所有依赖资源")) + { + for (int i = 0; i < pack.objects.Count; i++) + { + Object[] objs = GetCorrelationResource(pack.objects[i].obj); + for (int j = 0; j < objs.Length; j++) + { + Debug.Log(pack.objects[i].obj + " -> " + objs[j]); + } + } + } + EditorGUILayout.EndHorizontal(); } diff --git a/Assets/Script/Core/Editor/Package/PackageService.cs b/Assets/Script/Core/Editor/Package/PackageService.cs index 7e40a562..76de8339 100644 --- a/Assets/Script/Core/Editor/Package/PackageService.cs +++ b/Assets/Script/Core/Editor/Package/PackageService.cs @@ -7,6 +7,7 @@ public class PackageService { static BuildAssetBundleOptions relyBuildOption; //依赖包打包设置 + static BuildAssetBundleOptions bundleBuildOption; //Bundle包打包设置 static BuildTarget GetTargetPlatform { get @@ -30,9 +31,15 @@ static BuildTarget GetTargetPlatform public static IEnumerator Package(List relyPackages, List bundles, PackageCallBack callBack) { relyBuildOption = BuildAssetBundleOptions.DeterministicAssetBundle //每次二进制一致 + //| BuildAssetBundleOptions.CollectDependencies //收集依赖 + | BuildAssetBundleOptions.CompleteAssets //完整资源 + | BuildAssetBundleOptions.ChunkBasedCompression; //块压缩 + + bundleBuildOption = BuildAssetBundleOptions.DeterministicAssetBundle //每次二进制一致 | BuildAssetBundleOptions.CollectDependencies //收集依赖 - | BuildAssetBundleOptions.CompleteAssets; //完整资源 - //| BuildAssetBundleOptions.UncompressedAssetBundle //不压缩 + | BuildAssetBundleOptions.CompleteAssets //完整资源 + | BuildAssetBundleOptions.ChunkBasedCompression; //块压缩 + BuildPipeline.PushAssetDependencies(); @@ -72,10 +79,6 @@ public static IEnumerator Package(List relyPackages, List Date: Sun, 8 Apr 2018 18:09:56 +0800 Subject: [PATCH 041/108] =?UTF-8?q?=E4=BF=AE=E5=A4=8DBUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Package/PackageConfigEditorWindow.cs | 5 +++ .../Core/Editor/Package/PackageService.cs | 41 +++++++++---------- .../Script/Core/Editor/UI/UICreateService.cs | 4 +- 3 files changed, 26 insertions(+), 24 deletions(-) diff --git a/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs b/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs index 426929ff..36112a0d 100644 --- a/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs +++ b/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs @@ -247,6 +247,8 @@ void RelyPackagesView() relyPackages[i].path = c_relyAssetsBundlePath + "/" + relyPackages[i].name; EditorGUILayout.LabelField("Path: ", relyPackages[i].path); + relyPackages[i].isCollectDependencies = EditorGUILayout.Toggle("收集依赖", relyPackages[i].isCollectDependencies); + //子资源视图 relyPackages[i].isFold_objects = EditorGUILayout.Foldout(relyPackages[i].isFold_objects, "Objects"); EditorGUI.indentLevel = 5; @@ -1810,6 +1812,9 @@ public class EditPackageConfig public List objects = new List(); //所有子资源 public bool isFold_objects = false; //子资源是否折叠 + //依赖包独有 + public bool isCollectDependencies = true; //收集依赖 + //bundle独有 public EditorObject mainObject; //主资源 public int relyPackagesMask; //依赖包mask diff --git a/Assets/Script/Core/Editor/Package/PackageService.cs b/Assets/Script/Core/Editor/Package/PackageService.cs index 76de8339..c91c6caf 100644 --- a/Assets/Script/Core/Editor/Package/PackageService.cs +++ b/Assets/Script/Core/Editor/Package/PackageService.cs @@ -3,11 +3,17 @@ using System.IO; using UnityEditor; using UnityEngine; - +#pragma warning disable public class PackageService { - static BuildAssetBundleOptions relyBuildOption; //依赖包打包设置 - static BuildAssetBundleOptions bundleBuildOption; //Bundle包打包设置 + static BuildAssetBundleOptions relyBuildOption = BuildAssetBundleOptions.DeterministicAssetBundle //每次二进制一致 //依赖包打包设置 + | BuildAssetBundleOptions.CollectDependencies; //完整资源 + // | BuildAssetBundleOptions.ChunkBasedCompression; //块压缩 + + static BuildAssetBundleOptions bundleBuildOption = BuildAssetBundleOptions.DeterministicAssetBundle //每次二进制一致 //Bundle打包设置 + | BuildAssetBundleOptions.CollectDependencies //收集依赖 + | BuildAssetBundleOptions.CompleteAssets; //完整资源 + //| BuildAssetBundleOptions.ChunkBasedCompression; //块压缩 static BuildTarget GetTargetPlatform { get @@ -26,21 +32,8 @@ static BuildTarget GetTargetPlatform } } -#pragma warning disable - public static IEnumerator Package(List relyPackages, List bundles, PackageCallBack callBack) { - relyBuildOption = BuildAssetBundleOptions.DeterministicAssetBundle //每次二进制一致 - //| BuildAssetBundleOptions.CollectDependencies //收集依赖 - | BuildAssetBundleOptions.CompleteAssets //完整资源 - | BuildAssetBundleOptions.ChunkBasedCompression; //块压缩 - - bundleBuildOption = BuildAssetBundleOptions.DeterministicAssetBundle //每次二进制一致 - | BuildAssetBundleOptions.CollectDependencies //收集依赖 - | BuildAssetBundleOptions.CompleteAssets //完整资源 - | BuildAssetBundleOptions.ChunkBasedCompression; //块压缩 - - BuildPipeline.PushAssetDependencies(); float sumCount = relyPackages.Count + bundles.Count; @@ -87,11 +80,6 @@ public static IEnumerator Package(List relyPackages, List relyPackages, List bundles) { - relyBuildOption = BuildAssetBundleOptions.DeterministicAssetBundle //每次二进制一致 - | BuildAssetBundleOptions.CollectDependencies //收集依赖 - | BuildAssetBundleOptions.CompleteAssets; //完整资源 - //| BuildAssetBundleOptions.UncompressedAssetBundle //不压缩 - BuildPipeline.PushAssetDependencies(); @@ -145,7 +133,16 @@ static void PackageRelyPackage(EditPackageConfig package) FileTool.CreatFilePath(path); - BuildPipeline.BuildAssetBundle(null, res, path, relyBuildOption, GetTargetPlatform); + if(package.isCollectDependencies) + { + BuildPipeline.BuildAssetBundle(null, res, path, relyBuildOption, GetTargetPlatform); + } + else + { + BuildAssetBundleOptions bbo = BuildAssetBundleOptions.DeterministicAssetBundle; + + BuildPipeline.BuildAssetBundle(null, res, path, bbo, GetTargetPlatform); + } } static void PackageBundle(EditPackageConfig package) diff --git a/Assets/Script/Core/Editor/UI/UICreateService.cs b/Assets/Script/Core/Editor/UI/UICreateService.cs index 9a885bcc..fe51ee9b 100644 --- a/Assets/Script/Core/Editor/UI/UICreateService.cs +++ b/Assets/Script/Core/Editor/UI/UICreateService.cs @@ -326,8 +326,8 @@ public static void CreateGuideWindow() maskrt.anchorMax = Vector2.one; GameObject tips = new GameObject("Tips"); - mask.layer = LayerMask.NameToLayer("UI"); - RectTransform tipsrt = mask.AddComponent(); + tips.layer = LayerMask.NameToLayer("UI"); + RectTransform tipsrt = tips.AddComponent(); tipsrt.SetParent(root); guideBaseTmp.m_objectList.Add(tips); From 6f9ffb46e7acf66acf4bf7440f6293209a43b1a7 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Sun, 8 Apr 2018 18:12:02 +0800 Subject: [PATCH 042/108] =?UTF-8?q?BUG=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/Editor/UI/UICreateService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Script/Core/Editor/UI/UICreateService.cs b/Assets/Script/Core/Editor/UI/UICreateService.cs index fe51ee9b..44663a91 100644 --- a/Assets/Script/Core/Editor/UI/UICreateService.cs +++ b/Assets/Script/Core/Editor/UI/UICreateService.cs @@ -333,8 +333,8 @@ public static void CreateGuideWindow() guideBaseTmp.m_objectList.Add(tips); GameObject Text_tips = new GameObject("Text_tip"); - mask.layer = LayerMask.NameToLayer("UI"); - RectTransform txt_tipsrt = mask.AddComponent(); + Text_tips.layer = LayerMask.NameToLayer("UI"); + RectTransform txt_tipsrt = Text_tips.AddComponent(); Text txt = Text_tips.AddComponent(); txt_tipsrt.SetParent(tipsrt); From 0b20aaca7911ce9f47ab5fb73d94f99f08cc8d05 Mon Sep 17 00:00:00 2001 From: Gaokai Date: Sun, 8 Apr 2018 21:26:24 +0800 Subject: [PATCH 043/108] GuideDemo --- Assets/EditorConfig/BundleConfigEditor.json | 2 +- Assets/Resources/Data/GuideData.txt | 3 ++ Assets/Resources/ResourcesManifest.json | 2 +- .../UI/GuideWindow/GuideWindow.prefab | Bin 11688 -> 15552 bytes .../UI/GuideWindow/GuideWindow.prefab.meta | 2 +- .../Core/GuideSystem/GuideSystemBase.cs | 50 ++++++++++-------- .../JoyStick/UGUIJoyStick_hide.cs.meta | 12 +++++ Assets/Script/GameStatus/DemoStatus.cs | 1 + Assets/Script/UI/ShopWindow/ShopWindow.cs | 2 +- Assets/main.unity | Bin 24840 -> 26264 bytes 10 files changed, 47 insertions(+), 27 deletions(-) create mode 100644 Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick_hide.cs.meta diff --git a/Assets/EditorConfig/BundleConfigEditor.json b/Assets/EditorConfig/BundleConfigEditor.json index ba464fae..4b94a327 100644 --- a/Assets/EditorConfig/BundleConfigEditor.json +++ b/Assets/EditorConfig/BundleConfigEditor.json @@ -1 +1 @@ -{"relyBundles":"[]","AssetsBundles":"[\"{\\\"isFold\\\":false,\\\"name\\\":\\\"111\\\",\\\"path\\\":\\\"Config/111\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/111.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"BundleConfig\\\",\\\"path\\\":\\\"Config/BundleConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/BundleConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"HotUpdateConfig\\\",\\\"path\\\":\\\"Config/HotUpdateConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/HotUpdateConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaConfig\\\",\\\"path\\\":\\\"Config/LuaConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/LuaConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"qeqweqwe\\\",\\\"path\\\":\\\"Config/qeqweqwe\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/qeqweqwe.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ResourcesConfig\\\",\\\"path\\\":\\\"Config/ResourcesConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/ResourcesConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"SDKConfig\\\",\\\"path\\\":\\\"Config/SDKConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/SDKConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"version\\\",\\\"path\\\":\\\"Config/version\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/version.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LangData_Afrikaans\\\",\\\"path\\\":\\\"Data/Language/LangData_Afrikaans\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/Language/LangData_Afrikaans.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LangData_Arabic\\\",\\\"path\\\":\\\"Data/Language/LangData_Arabic\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/Language/LangData_Arabic.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LangData_ChineseSimplified\\\",\\\"path\\\":\\\"Data/Language/LangData_ChineseSimplified\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/Language/LangData_ChineseSimplified.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"item\\\",\\\"path\\\":\\\"Data/item\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/item.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"testData\\\",\\\"path\\\":\\\"Data/testData\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/testData.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject 1\\\",\\\"path\\\":\\\"Prefab/GameObject 1\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/GameObject 1.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject 2\\\",\\\"path\\\":\\\"Prefab/GameObject 2\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/GameObject 2.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject\\\",\\\"path\\\":\\\"Prefab/GameObject\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/GameObject.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"Assets/Resources/Prefab/GameObject.prefab \\u6709\\u4e22\\u5931\\u7684\\u811a\\u672c\\uff01\\\",\\\"Assets/Resources/Prefab/GameObject.prefab \\u6709\\u4e22\\u5931\\u7684\\u811a\\u672c\\uff01\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"gogo\\\",\\\"path\\\":\\\"Prefab/gogo\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/gogo.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 1\\\",\\\"path\\\":\\\"Prefab/UItest 1\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 1.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 2\\\",\\\"path\\\":\\\"Prefab/UItest 2\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 2.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 2 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 3\\\",\\\"path\\\":\\\"Prefab/UItest 3\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 3.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 3 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 4\\\",\\\"path\\\":\\\"Prefab/UItest 4\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 4.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 4 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 5\\\",\\\"path\\\":\\\"Prefab/UItest 5\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 5.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 5 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 6\\\",\\\"path\\\":\\\"Prefab/UItest 6\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 6.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest 6 \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest\\\",\\\"path\\\":\\\"Prefab/UItest\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Sprite)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_01 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_02 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_03 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_04 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_05 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_07 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_08 (UnityEngine.Texture2D)\\\",\\\"Prefab/UItest \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! dl_09 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_01\\\",\\\"path\\\":\\\"sprite/dl_01\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_01.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"MainObject \\u91cd\\u590d! dl_01 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_02\\\",\\\"path\\\":\\\"sprite/dl_02\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_02.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"MainObject \\u91cd\\u590d! dl_02 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_03\\\",\\\"path\\\":\\\"sprite/dl_03\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_03.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"MainObject \\u91cd\\u590d! dl_03 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_04\\\",\\\"path\\\":\\\"sprite/dl_04\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_04.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"MainObject \\u91cd\\u590d! dl_04 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_05\\\",\\\"path\\\":\\\"sprite/dl_05\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_05.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"MainObject \\u91cd\\u590d! dl_05 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_07\\\",\\\"path\\\":\\\"sprite/dl_07\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_07.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"MainObject \\u91cd\\u590d! dl_07 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_08\\\",\\\"path\\\":\\\"sprite/dl_08\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_08.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"MainObject \\u91cd\\u590d! dl_08 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_09\\\",\\\"path\\\":\\\"sprite/dl_09\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_09.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"MainObject \\u91cd\\u590d! dl_09 (UnityEngine.Texture2D)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameWindow\\\",\\\"path\\\":\\\"UI/GameWindow/GameWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/GameWindow/GameWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaTestWindow\\\",\\\"path\\\":\\\"UI/LuaTestWindow/LuaTestWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/LuaTestWindow/LuaTestWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"MainWindow\\\",\\\"path\\\":\\\"UI/MainWindow/MainWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/MainWindow/MainWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ShopWindow\\\",\\\"path\\\":\\\"UI/ShopWindow/ShopWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/ShopWindow/ShopWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ShopWindow_Item\\\",\\\"path\\\":\\\"UI/ShopWindow/ShopWindow_Item\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/ShopWindow/ShopWindow_Item.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"test01Window\\\",\\\"path\\\":\\\"UI/test01Window/test01Window\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/test01Window/test01Window.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"UI/test01Window/test01Window \\u5b58\\u5728\\u91cd\\u590d\\u8d44\\u6e90 ! New Material 2 (UnityEngine.Material)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"test02Window\\\",\\\"path\\\":\\\"UI/test02Window/test02Window\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/test02Window/test02Window.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"Test2Window\\\",\\\"path\\\":\\\"UI/Test2Window/Test2Window\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/Test2Window/Test2Window.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"Image_item\\\",\\\"path\\\":\\\"UI/testWindow/Image_item\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/testWindow/Image_item.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"testWindow\\\",\\\"path\\\":\\\"UI/testWindow/testWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/testWindow/testWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UIManager\\\",\\\"path\\\":\\\"UI/UIManager\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/UIManager.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject_adasd\\\",\\\"path\\\":\\\"GameObject_adasd\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/GameObject_adasd.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"Assets/Resources/GameObject_adasd.prefab \\u6709\\u4e22\\u5931\\u7684\\u811a\\u672c\\uff01\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 2\\\",\\\"path\\\":\\\"New Material 2\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 2.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[\\\"MainObject \\u91cd\\u590d! New Material 2 (UnityEngine.Material)\\\"],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 3\\\",\\\"path\\\":\\\"New Material 3\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 3.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 4\\\",\\\"path\\\":\\\"New Material 4\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 4.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 5\\\",\\\"path\\\":\\\"New Material 5\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 5.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 6\\\",\\\"path\\\":\\\"New Material 6\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 6.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material\\\",\\\"path\\\":\\\"New Material\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ResourcesManifest\\\",\\\"path\\\":\\\"ResourcesManifest\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/ResourcesManifest.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"Version\\\",\\\"path\\\":\\\"Version\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Version.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\"]"} \ No newline at end of file +{"relyBundles":"[]","AssetsBundles":"[\"{\\\"isFold\\\":false,\\\"name\\\":\\\"111\\\",\\\"path\\\":\\\"Config/111\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/111.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"BundleConfig\\\",\\\"path\\\":\\\"Config/BundleConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/BundleConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"HotUpdateConfig\\\",\\\"path\\\":\\\"Config/HotUpdateConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/HotUpdateConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaConfig\\\",\\\"path\\\":\\\"Config/LuaConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/LuaConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"qeqweqwe\\\",\\\"path\\\":\\\"Config/qeqweqwe\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/qeqweqwe.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ResourcesConfig\\\",\\\"path\\\":\\\"Config/ResourcesConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/ResourcesConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"SDKConfig\\\",\\\"path\\\":\\\"Config/SDKConfig\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/SDKConfig.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"version\\\",\\\"path\\\":\\\"Config/version\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Config/version.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LangData_Afrikaans\\\",\\\"path\\\":\\\"Data/Language/LangData_Afrikaans\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/Language/LangData_Afrikaans.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LangData_Arabic\\\",\\\"path\\\":\\\"Data/Language/LangData_Arabic\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/Language/LangData_Arabic.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LangData_ChineseSimplified\\\",\\\"path\\\":\\\"Data/Language/LangData_ChineseSimplified\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/Language/LangData_ChineseSimplified.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GuideData\\\",\\\"path\\\":\\\"Data/GuideData\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/GuideData.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"item\\\",\\\"path\\\":\\\"Data/item\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/item.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"testData\\\",\\\"path\\\":\\\"Data/testData\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Data/testData.txt\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject 1\\\",\\\"path\\\":\\\"Prefab/GameObject 1\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/GameObject 1.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject 2\\\",\\\"path\\\":\\\"Prefab/GameObject 2\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/GameObject 2.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject\\\",\\\"path\\\":\\\"Prefab/GameObject\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/GameObject.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"gogo\\\",\\\"path\\\":\\\"Prefab/gogo\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/gogo.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 1\\\",\\\"path\\\":\\\"Prefab/UItest 1\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 1.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 2\\\",\\\"path\\\":\\\"Prefab/UItest 2\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 2.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 3\\\",\\\"path\\\":\\\"Prefab/UItest 3\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 3.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 4\\\",\\\"path\\\":\\\"Prefab/UItest 4\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 4.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 5\\\",\\\"path\\\":\\\"Prefab/UItest 5\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 5.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest 6\\\",\\\"path\\\":\\\"Prefab/UItest 6\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest 6.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UItest\\\",\\\"path\\\":\\\"Prefab/UItest\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Prefab/UItest.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_01\\\",\\\"path\\\":\\\"sprite/dl_01\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_01.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_02\\\",\\\"path\\\":\\\"sprite/dl_02\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_02.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_03\\\",\\\"path\\\":\\\"sprite/dl_03\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_03.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_04\\\",\\\"path\\\":\\\"sprite/dl_04\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_04.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_05\\\",\\\"path\\\":\\\"sprite/dl_05\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_05.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_07\\\",\\\"path\\\":\\\"sprite/dl_07\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_07.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_08\\\",\\\"path\\\":\\\"sprite/dl_08\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_08.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"dl_09\\\",\\\"path\\\":\\\"sprite/dl_09\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/sprite/dl_09.png\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"AAAWindow\\\",\\\"path\\\":\\\"UI/AAAWindow/AAAWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/AAAWindow/AAAWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameWindow\\\",\\\"path\\\":\\\"UI/GameWindow/GameWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/GameWindow/GameWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GuideWindow\\\",\\\"path\\\":\\\"UI/GuideWindow/GuideWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/GuideWindow/GuideWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"LuaTestWindow\\\",\\\"path\\\":\\\"UI/LuaTestWindow/LuaTestWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/LuaTestWindow/LuaTestWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"MainWindow\\\",\\\"path\\\":\\\"UI/MainWindow/MainWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/MainWindow/MainWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ShopWindow\\\",\\\"path\\\":\\\"UI/ShopWindow/ShopWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/ShopWindow/ShopWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ShopWindow_Item\\\",\\\"path\\\":\\\"UI/ShopWindow/ShopWindow_Item\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/ShopWindow/ShopWindow_Item.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"test01Window\\\",\\\"path\\\":\\\"UI/test01Window/test01Window\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/test01Window/test01Window.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"test02Window\\\",\\\"path\\\":\\\"UI/test02Window/test02Window\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/test02Window/test02Window.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"Test2Window\\\",\\\"path\\\":\\\"UI/Test2Window/Test2Window\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/Test2Window/Test2Window.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"Image_item\\\",\\\"path\\\":\\\"UI/testWindow/Image_item\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/testWindow/Image_item.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"testWindow\\\",\\\"path\\\":\\\"UI/testWindow/testWindow\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/testWindow/testWindow.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"UIManager\\\",\\\"path\\\":\\\"UI/UIManager\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/UI/UIManager.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"GameObject_adasd\\\",\\\"path\\\":\\\"GameObject_adasd\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/GameObject_adasd.prefab\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 2\\\",\\\"path\\\":\\\"New Material 2\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 2.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 3\\\",\\\"path\\\":\\\"New Material 3\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 3.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 4\\\",\\\"path\\\":\\\"New Material 4\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 4.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 5\\\",\\\"path\\\":\\\"New Material 5\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 5.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material 6\\\",\\\"path\\\":\\\"New Material 6\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material 6.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"New Material\\\",\\\"path\\\":\\\"New Material\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/New Material.mat\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"ResourcesManifest\\\",\\\"path\\\":\\\"ResourcesManifest\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/ResourcesManifest.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\",\"{\\\"isFold\\\":false,\\\"name\\\":\\\"Version\\\",\\\"path\\\":\\\"Version\\\",\\\"objects\\\":[],\\\"isFold_objects\\\":false,\\\"isCollectDependencies\\\":true,\\\"mainObject\\\":{\\\"path\\\":\\\"Assets/Resources/Version.json\\\"},\\\"relyPackagesMask\\\":0,\\\"warnMsg\\\":[],\\\"errorMsg\\\":[]}\"]"} \ No newline at end of file diff --git a/Assets/Resources/Data/GuideData.txt b/Assets/Resources/Data/GuideData.txt index b85799a4..e5646b43 100644 --- a/Assets/Resources/Data/GuideData.txt +++ b/Assets/Resources/Data/GuideData.txt @@ -2,3 +2,6 @@ GuideID StartPoint EndPoint Premise NextGuide CallToNext ClickToNext GuideWindow type Bool Bool String String Bool Bool String StringArray StringArray String Vector3 Float note 引导开始点 引导结束点 前提条件 下一步引导,如果为空,则为下一条记录 是否接收调用去下一步引导 是否接收点击去下一步引导 引导的界面名字 高亮显示的对象名字 高亮的Item名字 提示文本内容 提示文本位置 遮罩Alpha default False False Null Null False False Null Null Null Null 0|0|0 0.75 +1 True False True MainWindow Button_Shop Click to Open Shop +2 True ShopWindow Button_Close Click to Close shop +3 True True MainWindow Button_Start Click to start Game diff --git a/Assets/Resources/ResourcesManifest.json b/Assets/Resources/ResourcesManifest.json index e0eecb2a..bc0d3018 100644 --- a/Assets/Resources/ResourcesManifest.json +++ b/Assets/Resources/ResourcesManifest.json @@ -1 +1 @@ -{"relyBundles":{},"AssetsBundles":{"111":{"name":"111","path":"Config/111","relyPackages":"","md5":""},"BundleConfig":{"name":"BundleConfig","path":"Config/BundleConfig","relyPackages":"","md5":""},"HotUpdateConfig":{"name":"HotUpdateConfig","path":"Config/HotUpdateConfig","relyPackages":"","md5":""},"LuaConfig":{"name":"LuaConfig","path":"Config/LuaConfig","relyPackages":"","md5":""},"qeqweqwe":{"name":"qeqweqwe","path":"Config/qeqweqwe","relyPackages":"","md5":""},"ResourcesConfig":{"name":"ResourcesConfig","path":"Config/ResourcesConfig","relyPackages":"","md5":""},"SDKConfig":{"name":"SDKConfig","path":"Config/SDKConfig","relyPackages":"","md5":""},"version":{"name":"version","path":"Config/version","relyPackages":"","md5":""},"LangData_Afrikaans":{"name":"LangData_Afrikaans","path":"Data/Language/LangData_Afrikaans","relyPackages":"","md5":""},"LangData_Arabic":{"name":"LangData_Arabic","path":"Data/Language/LangData_Arabic","relyPackages":"","md5":""},"LangData_ChineseSimplified":{"name":"LangData_ChineseSimplified","path":"Data/Language/LangData_ChineseSimplified","relyPackages":"","md5":""},"item":{"name":"item","path":"Data/item","relyPackages":"","md5":""},"testData":{"name":"testData","path":"Data/testData","relyPackages":"","md5":""},"GameObject 1":{"name":"GameObject 1","path":"Prefab/GameObject 1","relyPackages":"","md5":""},"GameObject 2":{"name":"GameObject 2","path":"Prefab/GameObject 2","relyPackages":"","md5":""},"GameObject":{"name":"GameObject","path":"Prefab/GameObject","relyPackages":"","md5":""},"gogo":{"name":"gogo","path":"Prefab/gogo","relyPackages":"","md5":""},"UItest 1":{"name":"UItest 1","path":"Prefab/UItest 1","relyPackages":"","md5":""},"UItest 2":{"name":"UItest 2","path":"Prefab/UItest 2","relyPackages":"","md5":""},"UItest 3":{"name":"UItest 3","path":"Prefab/UItest 3","relyPackages":"","md5":""},"UItest 4":{"name":"UItest 4","path":"Prefab/UItest 4","relyPackages":"","md5":""},"UItest 5":{"name":"UItest 5","path":"Prefab/UItest 5","relyPackages":"","md5":""},"UItest 6":{"name":"UItest 6","path":"Prefab/UItest 6","relyPackages":"","md5":""},"UItest":{"name":"UItest","path":"Prefab/UItest","relyPackages":"","md5":""},"dl_01":{"name":"dl_01","path":"sprite/dl_01","relyPackages":"","md5":""},"dl_02":{"name":"dl_02","path":"sprite/dl_02","relyPackages":"","md5":""},"dl_03":{"name":"dl_03","path":"sprite/dl_03","relyPackages":"","md5":""},"dl_04":{"name":"dl_04","path":"sprite/dl_04","relyPackages":"","md5":""},"dl_05":{"name":"dl_05","path":"sprite/dl_05","relyPackages":"","md5":""},"dl_07":{"name":"dl_07","path":"sprite/dl_07","relyPackages":"","md5":""},"dl_08":{"name":"dl_08","path":"sprite/dl_08","relyPackages":"","md5":""},"dl_09":{"name":"dl_09","path":"sprite/dl_09","relyPackages":"","md5":""},"GameWindow":{"name":"GameWindow","path":"UI/GameWindow/GameWindow","relyPackages":"","md5":""},"LuaTestWindow":{"name":"LuaTestWindow","path":"UI/LuaTestWindow/LuaTestWindow","relyPackages":"","md5":""},"MainWindow":{"name":"MainWindow","path":"UI/MainWindow/MainWindow","relyPackages":"","md5":""},"ShopWindow":{"name":"ShopWindow","path":"UI/ShopWindow/ShopWindow","relyPackages":"","md5":""},"ShopWindow_Item":{"name":"ShopWindow_Item","path":"UI/ShopWindow/ShopWindow_Item","relyPackages":"","md5":""},"test01Window":{"name":"test01Window","path":"UI/test01Window/test01Window","relyPackages":"","md5":""},"test02Window":{"name":"test02Window","path":"UI/test02Window/test02Window","relyPackages":"","md5":""},"Test2Window":{"name":"Test2Window","path":"UI/Test2Window/Test2Window","relyPackages":"","md5":""},"Image_item":{"name":"Image_item","path":"UI/testWindow/Image_item","relyPackages":"","md5":""},"testWindow":{"name":"testWindow","path":"UI/testWindow/testWindow","relyPackages":"","md5":""},"UIManager":{"name":"UIManager","path":"UI/UIManager","relyPackages":"","md5":""},"GameObject_adasd":{"name":"GameObject_adasd","path":"GameObject_adasd","relyPackages":"","md5":""},"New Material 2":{"name":"New Material 2","path":"New Material 2","relyPackages":"","md5":""},"New Material 3":{"name":"New Material 3","path":"New Material 3","relyPackages":"","md5":""},"New Material 4":{"name":"New Material 4","path":"New Material 4","relyPackages":"","md5":""},"New Material 5":{"name":"New Material 5","path":"New Material 5","relyPackages":"","md5":""},"New Material 6":{"name":"New Material 6","path":"New Material 6","relyPackages":"","md5":""},"New Material":{"name":"New Material","path":"New Material","relyPackages":"","md5":""},"ResourcesManifest":{"name":"ResourcesManifest","path":"ResourcesManifest","relyPackages":"","md5":""},"Version":{"name":"Version","path":"Version","relyPackages":"","md5":""}}} \ No newline at end of file +{"relyBundles":{},"AssetsBundles":{"111":{"name":"111","path":"Config/111","relyPackages":"","md5":""},"BundleConfig":{"name":"BundleConfig","path":"Config/BundleConfig","relyPackages":"","md5":""},"HotUpdateConfig":{"name":"HotUpdateConfig","path":"Config/HotUpdateConfig","relyPackages":"","md5":""},"LuaConfig":{"name":"LuaConfig","path":"Config/LuaConfig","relyPackages":"","md5":""},"qeqweqwe":{"name":"qeqweqwe","path":"Config/qeqweqwe","relyPackages":"","md5":""},"ResourcesConfig":{"name":"ResourcesConfig","path":"Config/ResourcesConfig","relyPackages":"","md5":""},"SDKConfig":{"name":"SDKConfig","path":"Config/SDKConfig","relyPackages":"","md5":""},"version":{"name":"version","path":"Config/version","relyPackages":"","md5":""},"LangData_Afrikaans":{"name":"LangData_Afrikaans","path":"Data/Language/LangData_Afrikaans","relyPackages":"","md5":""},"LangData_Arabic":{"name":"LangData_Arabic","path":"Data/Language/LangData_Arabic","relyPackages":"","md5":""},"LangData_ChineseSimplified":{"name":"LangData_ChineseSimplified","path":"Data/Language/LangData_ChineseSimplified","relyPackages":"","md5":""},"GuideData":{"name":"GuideData","path":"Data/GuideData","relyPackages":"","md5":""},"item":{"name":"item","path":"Data/item","relyPackages":"","md5":""},"testData":{"name":"testData","path":"Data/testData","relyPackages":"","md5":""},"GameObject 1":{"name":"GameObject 1","path":"Prefab/GameObject 1","relyPackages":"","md5":""},"GameObject 2":{"name":"GameObject 2","path":"Prefab/GameObject 2","relyPackages":"","md5":""},"GameObject":{"name":"GameObject","path":"Prefab/GameObject","relyPackages":"","md5":""},"gogo":{"name":"gogo","path":"Prefab/gogo","relyPackages":"","md5":""},"UItest 1":{"name":"UItest 1","path":"Prefab/UItest 1","relyPackages":"","md5":""},"UItest 2":{"name":"UItest 2","path":"Prefab/UItest 2","relyPackages":"","md5":""},"UItest 3":{"name":"UItest 3","path":"Prefab/UItest 3","relyPackages":"","md5":""},"UItest 4":{"name":"UItest 4","path":"Prefab/UItest 4","relyPackages":"","md5":""},"UItest 5":{"name":"UItest 5","path":"Prefab/UItest 5","relyPackages":"","md5":""},"UItest 6":{"name":"UItest 6","path":"Prefab/UItest 6","relyPackages":"","md5":""},"UItest":{"name":"UItest","path":"Prefab/UItest","relyPackages":"","md5":""},"dl_01":{"name":"dl_01","path":"sprite/dl_01","relyPackages":"","md5":""},"dl_02":{"name":"dl_02","path":"sprite/dl_02","relyPackages":"","md5":""},"dl_03":{"name":"dl_03","path":"sprite/dl_03","relyPackages":"","md5":""},"dl_04":{"name":"dl_04","path":"sprite/dl_04","relyPackages":"","md5":""},"dl_05":{"name":"dl_05","path":"sprite/dl_05","relyPackages":"","md5":""},"dl_07":{"name":"dl_07","path":"sprite/dl_07","relyPackages":"","md5":""},"dl_08":{"name":"dl_08","path":"sprite/dl_08","relyPackages":"","md5":""},"dl_09":{"name":"dl_09","path":"sprite/dl_09","relyPackages":"","md5":""},"AAAWindow":{"name":"AAAWindow","path":"UI/AAAWindow/AAAWindow","relyPackages":"","md5":""},"GameWindow":{"name":"GameWindow","path":"UI/GameWindow/GameWindow","relyPackages":"","md5":""},"GuideWindow":{"name":"GuideWindow","path":"UI/GuideWindow/GuideWindow","relyPackages":"","md5":""},"LuaTestWindow":{"name":"LuaTestWindow","path":"UI/LuaTestWindow/LuaTestWindow","relyPackages":"","md5":""},"MainWindow":{"name":"MainWindow","path":"UI/MainWindow/MainWindow","relyPackages":"","md5":""},"ShopWindow":{"name":"ShopWindow","path":"UI/ShopWindow/ShopWindow","relyPackages":"","md5":""},"ShopWindow_Item":{"name":"ShopWindow_Item","path":"UI/ShopWindow/ShopWindow_Item","relyPackages":"","md5":""},"test01Window":{"name":"test01Window","path":"UI/test01Window/test01Window","relyPackages":"","md5":""},"test02Window":{"name":"test02Window","path":"UI/test02Window/test02Window","relyPackages":"","md5":""},"Test2Window":{"name":"Test2Window","path":"UI/Test2Window/Test2Window","relyPackages":"","md5":""},"Image_item":{"name":"Image_item","path":"UI/testWindow/Image_item","relyPackages":"","md5":""},"testWindow":{"name":"testWindow","path":"UI/testWindow/testWindow","relyPackages":"","md5":""},"UIManager":{"name":"UIManager","path":"UI/UIManager","relyPackages":"","md5":""},"GameObject_adasd":{"name":"GameObject_adasd","path":"GameObject_adasd","relyPackages":"","md5":""},"New Material 2":{"name":"New Material 2","path":"New Material 2","relyPackages":"","md5":""},"New Material 3":{"name":"New Material 3","path":"New Material 3","relyPackages":"","md5":""},"New Material 4":{"name":"New Material 4","path":"New Material 4","relyPackages":"","md5":""},"New Material 5":{"name":"New Material 5","path":"New Material 5","relyPackages":"","md5":""},"New Material 6":{"name":"New Material 6","path":"New Material 6","relyPackages":"","md5":""},"New Material":{"name":"New Material","path":"New Material","relyPackages":"","md5":""},"ResourcesManifest":{"name":"ResourcesManifest","path":"ResourcesManifest","relyPackages":"","md5":""},"Version":{"name":"Version","path":"Version","relyPackages":"","md5":""}}} \ No newline at end of file diff --git a/Assets/Resources/UI/GuideWindow/GuideWindow.prefab b/Assets/Resources/UI/GuideWindow/GuideWindow.prefab index 6d0de3aebe6280ce58fe720e5d6c7dca43acd415..6b0e8a7af5f6c74a6e9f7ed1c58e33e3b9cd7557 100644 GIT binary patch delta 2018 zcmZ9MeN0NGA)rwPlZE`l*GL!&NPjLGK2bKbkRRBw8@=l2k{id#@dw!`| z9oiB;y?6G$vFV-RFYEhnx{jTnpMKWyZ4VmmGNj%pXfmYYxp~IKj08}Ha2vTy0!Uzh zcaXi0GY^rEI1UM9_yIMFP&VRxSYtY`lp$G)do#|aG&gAaAE6)8Z^lW3{F9$^I!{20 z&b5OXbaW99@CU8L8&(Y#bpzO*p-+yMIe+AT{08T38JzsDAjcoH6K_c97tle0K|gp@ zJ6OGV19FOB2XP!C0x#zsI@b76{2(9a{xp}M1^ss-$5O3y5>IM=Brm2o>BUJ0T`XB- zk-Ay`I*are+i$8$9bOxj5>4Sy%om6SV0cej?C6L^>&j{SAjf>^QuirBjKzZ_H!35s zCN+jqyBgx>?SXMFH3Ze6(6ADsb4_lHH!I;`B^He%=~M?=_jW7eblMV*s{8Q9Kyb&H z5*-YNpGMfDL}Ti}e^8qmQo1660W~y)3Yu}0LY7k}*H2_+YqB9VR!}3S)|i!?)Yg*Q zxrsv3m>K#ji&h%<>I)qB?f5nIek0W4{wbVPy1vr0SK>WJm_vC~uot@qOoxnsZvb|2 zcHsOAeZI3*L-D>`!m?WXBD4x{#+tYAnQUy6FFS02wk{- zr@VxWGC{9z=D8og|FwF9{4y%M#+iHi^yJ6Rjj|IJgx>c4XWZwitny`Kq<1$NTO*ea zUG!PyNDjc8+<5ork6TNwSmol}Rfk6Ax34o_z4d?_m4NlzizS)G?KK{_g8&~v^@(U8 z8m}4+sj;~2No6oF8jRVZ%1C%LI-rcOS-Z!?i@}aK?_zCEbE)`zav{<{GS4R)ar#N` z9`RLlCUQu!sF{{;+*9-IiK!80bJViG?fE92Gj_}2cTz!Vh_Fc(MIr}O$Zj<aH<|u4L60?JsdBP9r<&ER>V=fU6^&%PO~Pn+Q!j05TKTk~IyZMeli%`}pG_ zS>$@ozLCwiZE3%Yu2vI&jHwIG9LdC;vm@>@6L+r3TuGBff&Xy(P5crz>2a}0g}E%V z*qJpD{VFl9XQ#MQv$A>2X3_Opwtn|m+1C}eZ2cPclE+P+)2XL$GW6|C=oXTG=M!v~s^d;(F6?pMyY-VAw04j}-$IR~cRW^nOpjaVPol)B^pM~*L8Giu91b~%2jX8U3u5@4eU<+?9Fw~&&DfzfPv*BaVuuC}P+kfq&jxYL$rr3S hM3F-P7V(Ue8LiAGtJtWpL7X?4&)SFs$ugK>VgN1K;l=;} diff --git a/Assets/Resources/UI/GuideWindow/GuideWindow.prefab.meta b/Assets/Resources/UI/GuideWindow/GuideWindow.prefab.meta index f18e589d..78de1d38 100644 --- a/Assets/Resources/UI/GuideWindow/GuideWindow.prefab.meta +++ b/Assets/Resources/UI/GuideWindow/GuideWindow.prefab.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 3e251f87a30a1aa4da64121cf7613435 -timeCreated: 1514124366 +timeCreated: 1523192476 licenseType: Pro NativeFormatImporter: mainObjectFileID: 100100000 diff --git a/Assets/Script/Core/GuideSystem/GuideSystemBase.cs b/Assets/Script/Core/GuideSystem/GuideSystemBase.cs index b22b86da..90d9c8f6 100644 --- a/Assets/Script/Core/GuideSystem/GuideSystemBase.cs +++ b/Assets/Script/Core/GuideSystem/GuideSystemBase.cs @@ -258,7 +258,7 @@ protected virtual bool GuideCallFilter() void ReceviceClickEvent(InputUIOnClickEvent e) { - if (GetClickToNext(m_currentGuideData) && GuideClickFilter(e)) + if (IsStart && GetClickToNext(m_currentGuideData) && GuideClickFilter(e)) { NextGuide(); } @@ -266,7 +266,7 @@ void ReceviceClickEvent(InputUIOnClickEvent e) void ReceviceUIOpenEvent(UIWindowBase UI, params object[] objs) { - if (!m_isOperationUI && UI.UIName.Equals(GetGuideWindowName(m_currentGuideData))) + if (IsStart && !m_isOperationUI && UI.UIName.Equals(GetGuideWindowName(m_currentGuideData))) { m_isOperationUI = true; m_currentOperationWindow = UI; @@ -276,7 +276,7 @@ void ReceviceUIOpenEvent(UIWindowBase UI, params object[] objs) void ReceviceUIShowEvent(UIWindowBase UI, params object[] objs) { - if (!m_isOperationUI && UI.UIName.Equals(GetGuideWindowName(m_currentGuideData))) + if (IsStart && !m_isOperationUI && UI.UIName.Equals(GetGuideWindowName(m_currentGuideData))) { m_isOperationUI = true; m_currentOperationWindow = UI; @@ -305,26 +305,14 @@ protected void Init() m_isInit = true; LoadGuideData(); GetGuideRecord(); - } - } - - void StartGuide() - { - m_isStart = true; - - m_guideWindowBase = (GuideWindowBase)UIManager.OpenUIWindow(c_guideWindowName); - InputManager.AddAllEventListener(ReceviceClickEvent); - UISystemEvent.RegisterAllUIEvent(UIEvent.OnOpen, ReceviceUIOpenEvent); - UISystemEvent.RegisterAllUIEvent(UIEvent.OnShow, ReceviceUIShowEvent); - UISystemEvent.RegisterAllUIEvent(UIEvent.OnClose, ReceviceUICloseEvent); + InputManager.AddAllEventListener(ReceviceClickEvent); + UISystemEvent.RegisterAllUIEvent(UIEvent.OnOpen, ReceviceUIOpenEvent); + UISystemEvent.RegisterAllUIEvent(UIEvent.OnShow, ReceviceUIShowEvent); + UISystemEvent.RegisterAllUIEvent(UIEvent.OnClose, ReceviceUICloseEvent); - ApplicationManager.s_OnApplicationUpdate += Update; - - OnStart(); - - SetCurrent(LoadFirstGuide()); - GuideLogic(); + ApplicationManager.s_OnApplicationUpdate += Update; + } } void EndGuide() @@ -332,7 +320,9 @@ void EndGuide() m_isStart = false; m_isOperationUI = false; - UIManager.CloseUIWindow(m_guideWindowBase); + if(m_guideWindowBase != null) + UIManager.CloseUIWindow(m_guideWindowBase); + m_guideWindowBase = null; InputManager.RemoveAllEventListener(ReceviceClickEvent); @@ -343,6 +333,19 @@ void EndGuide() ApplicationManager.s_OnApplicationUpdate -= Update; } + void StartGuide() + { + m_isStart = true; + + SetCurrent(LoadFirstGuide()); + + m_guideWindowBase = (GuideWindowBase)UIManager.OpenUIWindow(c_guideWindowName); + + OnStart(); + + GuideLogic(); + } + void NextGuide() { //清除上一步的操作 @@ -423,7 +426,8 @@ protected SingleData LoadFirstGuide() if(m_guideData.TableIDs.Count == 0) { Dispose(); - throw new System.Exception("LoadFirstGuide :新手引导无记录!"); + Debug.LogError("LoadFirstGuide :新手引导无记录!"); + return null; } SingleData guideData = null; diff --git a/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick_hide.cs.meta b/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick_hide.cs.meta new file mode 100644 index 00000000..c800fe61 --- /dev/null +++ b/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick_hide.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fd3b4bba1776fe949b6ef0eee9ea4ac4 +timeCreated: 1522070519 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/GameStatus/DemoStatus.cs b/Assets/Script/GameStatus/DemoStatus.cs index 40352053..99572da3 100644 --- a/Assets/Script/GameStatus/DemoStatus.cs +++ b/Assets/Script/GameStatus/DemoStatus.cs @@ -6,6 +6,7 @@ public class DemoStatus : IApplicationStatus { public override void OnEnterStatus() { + GuideSyetem.Instance.Start(); OpenUI(); } } diff --git a/Assets/Script/UI/ShopWindow/ShopWindow.cs b/Assets/Script/UI/ShopWindow/ShopWindow.cs index 93fb5c47..7d73987a 100644 --- a/Assets/Script/UI/ShopWindow/ShopWindow.cs +++ b/Assets/Script/UI/ShopWindow/ShopWindow.cs @@ -60,7 +60,7 @@ List> GetShopData() { SingleData singleData = itemData.GetLineFromKey(itemData.TableIDs[i]); - string itemName = singleData.GetString("Name"); + string itemName = singleData.GetString("ItemName"); int cost = singleData.GetInt("Cost"); Dictionary tmp = new Dictionary(); diff --git a/Assets/main.unity b/Assets/main.unity index e53aaf546686e4c7b785b4eb5b9c6f2b9d192364..9f072a75f3087335203aed3f37600237e58a496a 100644 GIT binary patch delta 1283 zcma))T}YE*6vxl2PM6M_xw%)goHlKkjfGhfUd*;iLu=E`36jqINQ+d4+KR#niFQ-U zL*P}c%RbCvT|}j^=%OxyU6dDQvWPA-KglcC|It@+1F09zd!F-q{^y+MYv`>o`ccRs zs#X)VjuKG{#zuH5G8{1!wjQFja5yZep5?qw7eZ{NaLqrPKA5Mz{v)VYB;LpxIQz1t zWckYCeq{9eZ8@i6Sm1bBt}m9nRX_qP14gBMEKnJE147gcXR@7H8g@cklKdI8O`=*( zg=}`)tYH&cMKaI0NaW=i``DyeldgkOF!6dan#D{86mej=Y|gAn$m6p_ET!@QJ8H>H zafx|_>8x_Y|(R!d`|kiqBbiVXYb#peni>M#{*9*=_ zP*iR--U-21iMhb|r9e-!5_=D}+2q%X$%82>#*4WN&lfl^u^?ChV#sMhVzhgMVTu-u zC1{i&94$%Ag6AC<~8|s<==aCC!pUG%jT;K6j4CMO6+1JblIa+LAy%F zcOL^gXvA;J7f~)~7q$N(Qt7Ut!as#3N7On(P8GA*m659rIW+8zLmdsHQpFm5q@p4k zc%#Ad8vWj_yW{WgazklHQ(LFIve9Gk5Sw(SMOMvpitL?Jd1-4No;32T?Y*7d$RUb_ z84X4F|NXYpUxj2l{fmbkx4QD<*|<~9Ple6f;^e%J@4{~x`)1QIuS>>k=fbR_zL;t2 K<^JJ%Ps|^|mLzEa delta 709 zcmXw#Jxo(!6o$`NT3S({m6BR%p@QH-5Tat(ND7KWLu(yS6QkuP=tPVpH!i&-DqZV| z32yHA)8E(%D?$o2i|>G0;g?{ogX+@&un^GS6QB`l%`9wPGL zy9B2zeS>|MW(Mfkwr$mt?<@qZt+R_gtxrEre~(@)yoi)ue?A&|Y4o6X){1vsckpU- z%r{m?W&#LPb{kxAHq@d*oWB}SVO|LZ!tI(?rDzS^cciw^u2$tDyu*A1>DZ*gjb8@Q;P{Cn(W7EMu_s0nae;1XbM;a+9fK#4qqTyc4uqA2dBOe))5~?A4>}aq z50*tf4VAqDi-6U`TuDTgn}=?0@U>*KHJE%{&#S4BwR!uilVeFgduLp{o3i=m Date: Sun, 8 Apr 2018 21:32:15 +0800 Subject: [PATCH 044/108] GuideDemo --- Assets/main.unity | Bin 26264 -> 24872 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Assets/main.unity b/Assets/main.unity index 9f072a75f3087335203aed3f37600237e58a496a..26c8ddebde8c16b32c8862a5709bc22f662b9510 100644 GIT binary patch delta 494 zcmXxhJ4nM&7zN-Hv=84=GgxuzqM($D4{$5!;vib}7m0<6T}u!;ItsqY z;Nl=oU4#yzqOIuWq}4Wqi}76jJN%rS@8;ecNa031xYmL|^d49r0?^IpDiaf-$O;tvg};Ku~?3_%+A1x*bB=B zyPtC^w!mU&KnrcxSe<1c$daQq;(8j5~mzEeP(o#(IF?F#Bcb&1fa~!cM zt#R>F=5CWqSmQw%rrKK;d!wm4Iye=vFb_(?1UiY&f(2sZzz-*q<`VqewZ~KkR>k&d zBkWzAPqC7iPWuv5hpYGaGf)!?)AH;+oVqSpB>r7&Inim&XH6|W+QYFeuXPn4u*)mA R&DLDZu=Iq-evMx={Q^}iWh4Lq delta 1082 zcma))T}TvB6vxlFA8lnd=B$lGQL@k?+p?j?5yX`(Pgmst0?j2gwJCFx!Np$68a#UfllIy-Pa-Qp21%^Z(udJ?GB7bMLj3 z8I$UW+Pp-`3=vh~J%mh6!JWZ|f~X%FiADr7ArjCY#3R8Lz`CG$@yCLtU{EBY zRbV%i_5(<1>V<2X)6-3!@t=HThen!bdF^TEzfoy+b!l{-{o0sILRe$Hjtx^9b z2a~lxr41PZ&XiST0^;t-3p| zvafOZT=_iw&Y0J7_Ht)8<`6j$pEU(E TGrwF+iujnRyRsLLJ#+j4(-h|h From 6cd66c8b1ab23e05443db93c8dc26db240a57aff Mon Sep 17 00:00:00 2001 From: GaoKai Date: Mon, 9 Apr 2018 10:51:32 +0800 Subject: [PATCH 045/108] =?UTF-8?q?=E4=B8=80=E4=BA=9B=E5=BF=AB=E6=8D=B7?= =?UTF-8?q?=E9=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Application/ApplicationStatusCreater.cs | 71 +++++++++++++++++++ .../Core/Editor/Config/ConfigEditorWindow.cs | 2 +- .../Core/Editor/Data/DataEditorWindow.cs | 2 +- .../Package/PackageConfigEditorWindow.cs | 2 +- .../Core/Editor/Record/RecordEditorWindow.cs | 2 +- .../Editor/res/ApplicationStatusTemplate.txt | 25 +++++++ 6 files changed, 100 insertions(+), 4 deletions(-) create mode 100644 Assets/Script/Core/Editor/Application/ApplicationStatusCreater.cs create mode 100644 Assets/Script/Core/Editor/res/ApplicationStatusTemplate.txt diff --git a/Assets/Script/Core/Editor/Application/ApplicationStatusCreater.cs b/Assets/Script/Core/Editor/Application/ApplicationStatusCreater.cs new file mode 100644 index 00000000..f4e2e44f --- /dev/null +++ b/Assets/Script/Core/Editor/Application/ApplicationStatusCreater.cs @@ -0,0 +1,71 @@ +using UnityEngine; +using System.Collections; +using UnityEditor.ProjectWindowCallback; +using System.IO; +using UnityEditor; + +public class ApplicationStatusCreater +{ + + [MenuItem("Assets/Create/Application Status", false, 90)] + public static void CreateNewLua() + { + ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, + ScriptableObject.CreateInstance(), + GetSelectedPathOrFallback() + "/New Application Status.cs", + null, + "Assets/Script/Core/Editor/res/ApplicationStatusTemplate.txt"); + } + public static string GetSelectedPathOrFallback() + { + string path = "Assets"; + foreach (UnityEngine.Object obj in Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.Assets)) + { + path = AssetDatabase.GetAssetPath(obj); + if (!string.IsNullOrEmpty(path) && File.Exists(path)) + { + path = Path.GetDirectoryName(path); + break; + } + } + return path; + } + + class CreateScriptAssetAction : EndNameEditAction + { + public override void Action(int instanceId, string pathName, string resourceFile) + { + //创建资源 + UnityEngine.Object obj = CreateAssetFromTemplate(pathName, resourceFile); + //高亮显示该资源 + ProjectWindowUtil.ShowCreatedAsset(obj); + } + internal static UnityEngine.Object CreateAssetFromTemplate(string pahtName, string resourceFile) + { + //获取要创建的资源的绝对路径 + string fullName = Path.GetFullPath(pahtName); + string className = FileTool.RemoveExpandName( FileTool.GetFileNameByPath(fullName)); + + //读取本地模板文件 + StreamReader reader = new StreamReader(resourceFile); + string content = reader.ReadToEnd(); + reader.Close(); + + //获取资源的文件名 + // string fileName = Path.GetFileNameWithoutExtension(pahtName); + //替换默认的文件名 + content = content.Replace("{0}", className); + + //写入新文件 + StreamWriter writer = new StreamWriter(fullName, false, System.Text.Encoding.UTF8); + writer.Write(content); + writer.Close(); + + //刷新本地资源 + AssetDatabase.ImportAsset(pahtName); + AssetDatabase.Refresh(); + + return AssetDatabase.LoadAssetAtPath(pahtName, typeof(UnityEngine.Object)); + } + } +} diff --git a/Assets/Script/Core/Editor/Config/ConfigEditorWindow.cs b/Assets/Script/Core/Editor/Config/ConfigEditorWindow.cs index 691a427d..5f98ea57 100644 --- a/Assets/Script/Core/Editor/Config/ConfigEditorWindow.cs +++ b/Assets/Script/Core/Editor/Config/ConfigEditorWindow.cs @@ -12,7 +12,7 @@ public class ConfigEditorWindow : EditorWindow { UILayerManager m_UILayerManager; - [MenuItem("Window/配置编辑器", priority = 500)] + [MenuItem("Window/配置编辑器 &4", priority = 502)] public static void ShowWindow() { EditorWindow.GetWindow(typeof(ConfigEditorWindow)); diff --git a/Assets/Script/Core/Editor/Data/DataEditorWindow.cs b/Assets/Script/Core/Editor/Data/DataEditorWindow.cs index 54c56a4a..23f6f693 100644 --- a/Assets/Script/Core/Editor/Data/DataEditorWindow.cs +++ b/Assets/Script/Core/Editor/Data/DataEditorWindow.cs @@ -13,7 +13,7 @@ public class DataEditorWindow : EditorWindow { UILayerManager m_UILayerManager; - [MenuItem("Window/数据编辑器", priority = 501)] + [MenuItem("Window/数据编辑器 &2", priority = 501)] public static void ShowWindow() { EditorWindow.GetWindow(typeof(DataEditorWindow)); diff --git a/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs b/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs index 36112a0d..7327850f 100644 --- a/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs +++ b/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs @@ -1004,7 +1004,7 @@ public string GetExportPath(string path, string name) // Selection.objects = EditorUtility.CollectDependencies(roots); //} - [MenuItem("Window/打包设置编辑器")] + [MenuItem("Window/打包设置编辑器 &1")] public static void ShowWindow() { diff --git a/Assets/Script/Core/Editor/Record/RecordEditorWindow.cs b/Assets/Script/Core/Editor/Record/RecordEditorWindow.cs index ee7fc7cf..bcef1e1c 100644 --- a/Assets/Script/Core/Editor/Record/RecordEditorWindow.cs +++ b/Assets/Script/Core/Editor/Record/RecordEditorWindow.cs @@ -10,7 +10,7 @@ public class RecordEditorWindow : EditorWindow { UILayerManager m_UILayerManager; - [MenuItem("Window/持久数据编辑器", priority = 500)] + [MenuItem("Window/持久数据编辑器 &3", priority = 501)] public static void ShowWindow() { EditorWindow.GetWindow(typeof(RecordEditorWindow)); diff --git a/Assets/Script/Core/Editor/res/ApplicationStatusTemplate.txt b/Assets/Script/Core/Editor/res/ApplicationStatusTemplate.txt new file mode 100644 index 00000000..e1940841 --- /dev/null +++ b/Assets/Script/Core/Editor/res/ApplicationStatusTemplate.txt @@ -0,0 +1,25 @@ +using UnityEngine; +using System.Collections; + +public class {0} : IApplicationStatus +{ + + //Status的进入逻辑请放在这里 + public override void OnEnterStatus() + { + + } + + //Status的退出逻辑请放在这里 + public override void OnExitStatus() + { + + } + + //Update逻辑放在这里 + public override void OnUpdate() + { + + } + +} \ No newline at end of file From fe38bb6385cee6a90434d6e91a874bc9552bdde7 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Mon, 9 Apr 2018 15:37:22 +0800 Subject: [PATCH 046/108] =?UTF-8?q?=E5=BF=AB=E6=8D=B7=E9=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs index 890b639c..1ea58aaa 100644 --- a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs +++ b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs @@ -25,7 +25,7 @@ public class LanguageDataEditorWindow : EditorWindow SystemLanguage m_defaultLanguage = SystemLanguage.ChineseSimplified; - [MenuItem("Window/多语言编辑器", priority = 600)] + [MenuItem("Window/多语言编辑器 &5", priority = 600)] public static void ShowWindow() { EditorWindow.GetWindow(typeof(LanguageDataEditorWindow)); From df90db674c2b020cb56e4b4fc058dc1b07188ef1 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Mon, 9 Apr 2018 15:45:32 +0800 Subject: [PATCH 047/108] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/Editor/res/UIWindowClassTemplate.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Assets/Script/Core/Editor/res/UIWindowClassTemplate.txt b/Assets/Script/Core/Editor/res/UIWindowClassTemplate.txt index bbe82d55..9931f818 100644 --- a/Assets/Script/Core/Editor/res/UIWindowClassTemplate.txt +++ b/Assets/Script/Core/Editor/res/UIWindowClassTemplate.txt @@ -1,4 +1,4 @@ -using UnityEngine; +using UnityEngine; using System.Collections; public class {0} : UIWindowBase @@ -16,23 +16,23 @@ public class {0} : UIWindowBase } - //UI的进入动画 - public override IEnumerator EnterAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) + //UI的进入动画 调用 base.EnterAnim 表示进入动画播放完成 + public override IEnumerator EnterAnim(UIAnimCallBack animComplete, UICallBack callBack, params object[] objs) { AnimSystem.UguiAlpha(gameObject, 0, 1, callBack:(object[] obj)=> { - StartCoroutine(base.EnterAnim(l_animComplete, l_callBack, objs)); + StartCoroutine(base.EnterAnim(animComplete, callBack, objs)); }); yield return new WaitForEndOfFrame(); } - //UI的退出动画 - public override IEnumerator ExitAnim(UIAnimCallBack l_animComplete, UICallBack l_callBack, params object[] objs) + //UI的退出动画 调用 base.ExitAnim 表示退出动画播放完成 + public override IEnumerator ExitAnim(UIAnimCallBack animComplete, UICallBack callBack, params object[] objs) { AnimSystem.UguiAlpha(gameObject , null, 0, callBack:(object[] obj) => { - StartCoroutine(base.ExitAnim(l_animComplete, l_callBack, objs)); + StartCoroutine(base.ExitAnim(animComplete, callBack, objs)); }); yield return new WaitForEndOfFrame(); From e2c93828bc5340f191836aae20dfa5e2c2a03e78 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Tue, 10 Apr 2018 17:54:19 +0800 Subject: [PATCH 048/108] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/GuideSystem/GuideSystemBase.cs | 48 +++++++++++-------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/Assets/Script/Core/GuideSystem/GuideSystemBase.cs b/Assets/Script/Core/GuideSystem/GuideSystemBase.cs index 90d9c8f6..e7f76c67 100644 --- a/Assets/Script/Core/GuideSystem/GuideSystemBase.cs +++ b/Assets/Script/Core/GuideSystem/GuideSystemBase.cs @@ -38,6 +38,7 @@ public abstract class GuideSystemBase bool m_isInit = false; bool m_isStart = false; + bool m_isRegister = false; bool m_isOperationUI = false; //是否已经操作了UI protected GuideWindowBase m_guideWindowBase; //当前引导界面 @@ -305,7 +306,24 @@ protected void Init() m_isInit = true; LoadGuideData(); GetGuideRecord(); + } + } + + void StartGuide() + { + m_isStart = true; + + SetCurrent(LoadFirstGuide()); + m_guideWindowBase = (GuideWindowBase)UIManager.OpenUIWindow(c_guideWindowName); + + OnStart(); + + GuideLogic(); + + if(!m_isRegister) + { + m_isRegister = true; InputManager.AddAllEventListener(ReceviceClickEvent); UISystemEvent.RegisterAllUIEvent(UIEvent.OnOpen, ReceviceUIOpenEvent); UISystemEvent.RegisterAllUIEvent(UIEvent.OnShow, ReceviceUIShowEvent); @@ -313,6 +331,7 @@ protected void Init() ApplicationManager.s_OnApplicationUpdate += Update; } + } void EndGuide() @@ -320,30 +339,21 @@ void EndGuide() m_isStart = false; m_isOperationUI = false; - if(m_guideWindowBase != null) + if (m_guideWindowBase != null) UIManager.CloseUIWindow(m_guideWindowBase); m_guideWindowBase = null; - InputManager.RemoveAllEventListener(ReceviceClickEvent); - UISystemEvent.RemoveAllUIEvent(UIEvent.OnOpen, ReceviceUIOpenEvent); - UISystemEvent.RemoveAllUIEvent(UIEvent.OnShow, ReceviceUIShowEvent); - UISystemEvent.RemoveAllUIEvent(UIEvent.OnClose, ReceviceUICloseEvent); - - ApplicationManager.s_OnApplicationUpdate -= Update; - } - - void StartGuide() - { - m_isStart = true; - - SetCurrent(LoadFirstGuide()); - - m_guideWindowBase = (GuideWindowBase)UIManager.OpenUIWindow(c_guideWindowName); - - OnStart(); + if (m_isRegister) + { + m_isRegister = false; + InputManager.RemoveAllEventListener(ReceviceClickEvent); + UISystemEvent.RemoveAllUIEvent(UIEvent.OnOpen, ReceviceUIOpenEvent); + UISystemEvent.RemoveAllUIEvent(UIEvent.OnShow, ReceviceUIShowEvent); + UISystemEvent.RemoveAllUIEvent(UIEvent.OnClose, ReceviceUICloseEvent); - GuideLogic(); + ApplicationManager.s_OnApplicationUpdate -= Update; + } } void NextGuide() From 9494650bec67ad8f84581d92bafa3263bcb7ca41 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Mon, 16 Apr 2018 15:20:57 +0800 Subject: [PATCH 049/108] =?UTF-8?q?=E6=96=B0=E6=89=8B=E5=BC=95=E5=AF=BC?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Script/Core/Editor/Lua/LuaEditorWindow.cs | 6 + .../Core/GuideSystem/GuideSystemBase.cs | 87 ++++- Assets/Script/Core/Lua/ToLua/Plugins.meta | 9 - .../Core/Lua/ToLua/Plugins/Android.meta | 5 - .../Core/Lua/ToLua/Plugins/Android/libs.meta | 5 - .../Plugins/Android/libs/armeabi-v7a.meta | 5 - .../Android/libs/armeabi-v7a/libtolua.so | Bin 478028 -> 0 bytes .../Android/libs/armeabi-v7a/libtolua.so.meta | 69 ---- .../Lua/ToLua/Plugins/Android/libs/x86.meta | 5 - .../Plugins/Android/libs/x86/libtolua.so | Bin 686944 -> 0 bytes .../Plugins/Android/libs/x86/libtolua.so.meta | 67 ---- .../Core/Lua/ToLua/Plugins/Debugger.dll.meta | 22 -- Assets/Script/Core/Lua/ToLua/Plugins/iOS.meta | 7 - .../Core/Lua/ToLua/Plugins/tolua.bundle.meta | 28 -- .../ToLua/Plugins/tolua.bundle/Contents.meta | 5 - .../tolua.bundle/Contents/Info.plist.meta | 4 - .../Plugins/tolua.bundle/Contents/MacOS.meta | 5 - .../tolua.bundle/Contents/MacOS/tolua.meta | 4 - Assets/Script/Core/Lua/ToLua/Plugins/x86.meta | 5 - .../Core/Lua/ToLua/Plugins/x86/tolua.dll.meta | 73 ---- .../Script/Core/Lua/ToLua/Plugins/x86_64.meta | 5 - .../Lua/ToLua/Plugins/x86_64/tolua.dll.meta | 73 ---- .../{Plugins => PluginsRes}/Debugger.dll | Bin .../tolua.bundle/Contents/Info.plist | 0 .../tolua.bundle/Contents/MacOS/tolua | Bin .../{Plugins => PluginsRes}/x86/tolua.dll | Bin .../{Plugins => PluginsRes}/x86_64/tolua.dll | Bin .../Core/SDKManager/SDKInterfaceDefine.cs | 72 ++++ Assets/Script/Core/SDKManager/SDKManager.cs | 6 +- .../Script/Core/SDKManager/SDKManagerNew.cs | 338 ++++++++++++++++++ Assets/Script/Core/UI/Model/UIBase.cs | 1 + 31 files changed, 506 insertions(+), 400 deletions(-) delete mode 100644 Assets/Script/Core/Lua/ToLua/Plugins.meta delete mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/Android.meta delete mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/Android/libs.meta delete mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/Android/libs/armeabi-v7a.meta delete mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/Android/libs/armeabi-v7a/libtolua.so delete mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/Android/libs/armeabi-v7a/libtolua.so.meta delete mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/Android/libs/x86.meta delete mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/Android/libs/x86/libtolua.so delete mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/Android/libs/x86/libtolua.so.meta delete mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/Debugger.dll.meta delete mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/iOS.meta delete mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/tolua.bundle.meta delete mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/tolua.bundle/Contents.meta delete mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/tolua.bundle/Contents/Info.plist.meta delete mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/tolua.bundle/Contents/MacOS.meta delete mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/tolua.bundle/Contents/MacOS/tolua.meta delete mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/x86.meta delete mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/x86/tolua.dll.meta delete mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/x86_64.meta delete mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/x86_64/tolua.dll.meta rename Assets/Script/Core/Lua/ToLua/{Plugins => PluginsRes}/Debugger.dll (100%) rename Assets/Script/Core/Lua/ToLua/{Plugins => PluginsRes}/tolua.bundle/Contents/Info.plist (100%) rename Assets/Script/Core/Lua/ToLua/{Plugins => PluginsRes}/tolua.bundle/Contents/MacOS/tolua (100%) rename Assets/Script/Core/Lua/ToLua/{Plugins => PluginsRes}/x86/tolua.dll (100%) rename Assets/Script/Core/Lua/ToLua/{Plugins => PluginsRes}/x86_64/tolua.dll (100%) create mode 100644 Assets/Script/Core/SDKManager/SDKInterfaceDefine.cs create mode 100644 Assets/Script/Core/SDKManager/SDKManagerNew.cs diff --git a/Assets/Script/Core/Editor/Lua/LuaEditorWindow.cs b/Assets/Script/Core/Editor/Lua/LuaEditorWindow.cs index 5e164c2f..77fab315 100644 --- a/Assets/Script/Core/Editor/Lua/LuaEditorWindow.cs +++ b/Assets/Script/Core/Editor/Lua/LuaEditorWindow.cs @@ -82,9 +82,15 @@ void InitLua() string resPath = Application.dataPath + "/Script/Core/Editor/res/LuaLib"; string aimPath = Application.dataPath + "/Resources/LuaLib"; + string pluginsResPath = Application.dataPath + "/Script/Core/Lua/ToLua/PluginsRes"; + string pluginsPath = Application.dataPath + "/Lua/Plugins"; + //复制lua初始库文件 FileTool.CopyDirectory(resPath, aimPath); + //拷贝LuaPlugins文件 + FileTool.CopyDirectory(pluginsResPath, pluginsPath); + //初始Warp ToLuaMenu.GenLuaAll(); diff --git a/Assets/Script/Core/GuideSystem/GuideSystemBase.cs b/Assets/Script/Core/GuideSystem/GuideSystemBase.cs index e7f76c67..abc60876 100644 --- a/Assets/Script/Core/GuideSystem/GuideSystemBase.cs +++ b/Assets/Script/Core/GuideSystem/GuideSystemBase.cs @@ -86,7 +86,7 @@ public void Dispose() /// public void Next() { - if (GetCallToNext(m_currentGuideData) && GuideCallFilter()) + if ( IsStart && GetCallToNext(m_currentGuideData) && GuideCallFilter()) { NextGuide(); } @@ -120,6 +120,16 @@ protected virtual void OnStart() } + protected virtual void OnCloseGuide() + { + + } + + protected virtual void OnEndGuide() + { + + } + /// /// 请求引导记录 /// 可以根据情况选择是从本地读取还是从服务器请求 @@ -242,9 +252,76 @@ protected virtual void ClearGuideBehave() /// protected virtual bool GuideClickFilter(InputUIOnClickEvent e) { + //if(GetGuideWindowName(m_currentGuideData) != null) + //{ + // if(!e.EventKey.Contains(GetGuideWindowName(m_currentGuideData))) + // { + // return false; + // } + //} + + if (GetGuideObjectNames(m_currentGuideData).Length != 0) + { + string[] objnames = GetGuideObjectNames(m_currentGuideData); + bool isExist = false; + for (int i = 0; i < objnames.Length; i++) + { + string objName = GetObjName(objnames[i]); + + if (e.EventKey.Contains(objName)) + { + isExist = true; + } + } + + if(!isExist) + { + return false; + } + } + + if (GetGuideItemNames(m_currentGuideData).Length != 0) + { + string[] objnames = GetGuideItemNames(m_currentGuideData); + bool isExist = false; + for (int i = 0; i < objnames.Length; i++) + { + string itemName = GetObjName(objnames[i]); + + if (e.EventKey.Contains(objnames[i])) + { + isExist = true; + } + } + + if (!isExist) + { + return false; + } + } + return true; } + string GetObjName(string objName) + { + if(objName.Contains(".")) + { + string[] temp = objName.Split('.'); + + objName = temp[temp.Length - 1]; + } + + if(objName.Contains("[")) + { + string[] temp = objName.Split('['); + + objName = temp[0]; + } + + return objName; + } + /// /// 引导调用过滤器,返回true通过 /// @@ -336,6 +413,8 @@ void StartGuide() void EndGuide() { + OnCloseGuide(); + m_isStart = false; m_isOperationUI = false; @@ -358,6 +437,9 @@ void EndGuide() void NextGuide() { + // + OnEndGuide(); + //清除上一步的操作 ClearGuideLogic(); @@ -368,8 +450,7 @@ void NextGuide() SingleData nextGuideData = GetNextGuideData(m_currentGuideData); //退出判断 - if (!GuideEndCondition() - && !GuideCloseCondition() + if (!GuideCloseCondition() && nextGuideData != null) { //读取下一步引导 diff --git a/Assets/Script/Core/Lua/ToLua/Plugins.meta b/Assets/Script/Core/Lua/ToLua/Plugins.meta deleted file mode 100644 index 0e34701e..00000000 --- a/Assets/Script/Core/Lua/ToLua/Plugins.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: de8dc27ae064c5e479e0444b80aeb09a -folderAsset: yes -timeCreated: 1479890094 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/Plugins/Android.meta b/Assets/Script/Core/Lua/ToLua/Plugins/Android.meta deleted file mode 100644 index c785fd35..00000000 --- a/Assets/Script/Core/Lua/ToLua/Plugins/Android.meta +++ /dev/null @@ -1,5 +0,0 @@ -fileFormatVersion: 2 -guid: 729c01aec7bba814d88608249c8a170b -folderAsset: yes -DefaultImporter: - userData: diff --git a/Assets/Script/Core/Lua/ToLua/Plugins/Android/libs.meta b/Assets/Script/Core/Lua/ToLua/Plugins/Android/libs.meta deleted file mode 100644 index 128af838..00000000 --- a/Assets/Script/Core/Lua/ToLua/Plugins/Android/libs.meta +++ /dev/null @@ -1,5 +0,0 @@ -fileFormatVersion: 2 -guid: 72b436146481b3f40b05eb161ca7f39c -folderAsset: yes -DefaultImporter: - userData: diff --git a/Assets/Script/Core/Lua/ToLua/Plugins/Android/libs/armeabi-v7a.meta b/Assets/Script/Core/Lua/ToLua/Plugins/Android/libs/armeabi-v7a.meta deleted file mode 100644 index e0ec585d..00000000 --- a/Assets/Script/Core/Lua/ToLua/Plugins/Android/libs/armeabi-v7a.meta +++ /dev/null @@ -1,5 +0,0 @@ -fileFormatVersion: 2 -guid: 034154e518117d842b99fd1f19efa3a3 -folderAsset: yes -DefaultImporter: - userData: diff --git a/Assets/Script/Core/Lua/ToLua/Plugins/Android/libs/armeabi-v7a/libtolua.so b/Assets/Script/Core/Lua/ToLua/Plugins/Android/libs/armeabi-v7a/libtolua.so deleted file mode 100644 index 0fe295dc3dbc078a45e41241e0adfcb0d08212c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 478028 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

BiFEXrYO_mtsA*_H3ti80DMR)z`Ndyc&Cl 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\kH%{759?8FP3 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 diff --git a/Assets/Script/Core/Lua/ToLua/Plugins/Android/libs/armeabi-v7a/libtolua.so.meta b/Assets/Script/Core/Lua/ToLua/Plugins/Android/libs/armeabi-v7a/libtolua.so.meta deleted file mode 100644 index ef0d7e5d..00000000 --- a/Assets/Script/Core/Lua/ToLua/Plugins/Android/libs/armeabi-v7a/libtolua.so.meta +++ /dev/null @@ -1,69 +0,0 @@ -fileFormatVersion: 2 -guid: 558c9fda5201e8e4a9757a0d902946df -timeCreated: 1487242067 -licenseType: Pro -PluginImporter: - serializedVersion: 1 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - isOverridable: 0 - platformData: - Android: - enabled: 1 - settings: - CPU: ARMv7 - Any: - enabled: 0 - settings: - Exclude Android: 0 - Exclude Editor: 1 - Exclude Linux: 1 - Exclude Linux64: 1 - Exclude LinuxUniversal: 1 - Exclude OSXIntel: 1 - Exclude OSXIntel64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 - Editor: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - Linux: - enabled: 0 - settings: - CPU: x86 - Linux64: - enabled: 0 - settings: - CPU: x86_64 - LinuxUniversal: - enabled: 0 - settings: - CPU: None - OSXIntel: - enabled: 0 - settings: - CPU: AnyCPU - OSXIntel64: - enabled: 0 - settings: - CPU: AnyCPU - OSXUniversal: - enabled: 0 - settings: - CPU: None - Win: - enabled: 0 - settings: - CPU: AnyCPU - Win64: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/Plugins/Android/libs/x86.meta b/Assets/Script/Core/Lua/ToLua/Plugins/Android/libs/x86.meta deleted file mode 100644 index 85ecc6ef..00000000 --- a/Assets/Script/Core/Lua/ToLua/Plugins/Android/libs/x86.meta +++ /dev/null @@ -1,5 +0,0 @@ -fileFormatVersion: 2 -guid: d76e3311efeac224996b0cb7a06a7a3a -folderAsset: yes -DefaultImporter: - userData: diff --git a/Assets/Script/Core/Lua/ToLua/Plugins/Android/libs/x86/libtolua.so b/Assets/Script/Core/Lua/ToLua/Plugins/Android/libs/x86/libtolua.so deleted file mode 100644 index d4ce6cea137de30549525394d3276594b81fc9a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 686944 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

-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 y#eB2D56Nc`&N0bS!)@qI8+c3S(i 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�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

T6Ag7F*qmUt)JdPnGU z&{`3G2%?nO!u0%5_2Jvja8}iYYR-w3wce3`VXUs&!&7Ci`85B{R5*Iw=Mp_3q-6ho zGd-VRxt~_PW$h2yGj*9_Dr3$!)02i&KfB3oSb#L@1`ja$&ysJ#BchD-kG#nP#o6vSR>qvwBo1qYO5}%NCG8(hiyix2P0ii22~Oub{5Gzx;h0byIxpN^M`#Uk`zkE%nj5 zbG&QMIMBDHzNS9UdGb^e*G{YNn3t7auT z8L_kYm7kuKpMBvZKfzX*mqQX;hM1rSD;xc3M~?5vUaH}a0lcYs1qx7L$0cHY4Z|A1 zqhncW-I8~flZ-$R%z2Uf(cG2Js>>3G=a8Hwari7)T!cvCZQvwvn7Dz9c-WWxln95= z@;`-(9F3jhYzK+MU(EF|$62myt@st^M(QM=E3H*a0NNED=mJHF8wm21qJR0O;dt?RuEt*3_C=_D9V<9 z!mjVk{FAd3^68y93Q_eO{`^9e*4%l(F=pN0h8Y1$PbaPpuEWrYxR^+y=1R7k0gcv@ zN5$WW-3RhjJL&LK8NhNosa+A&NzE$^9mYfaAj_!8X@5~@ywu!~NZ-ZE3)JFOC(AF^ zN$R#6*TX3rF-wjulXSng`RuO%Y-3*}@(rtTFr|L8;sa4sL&s zU!B2MvSar!&*^;g+zcx>J1(~R#DRh52fS+}IMsv3z_2dti(a74hO0BjXDiQ#(o2C5 zZ-bwPCKt|Q`r^$3AI|@D=^~tyPl_u_`1$sYh1IeX z82;-Q6xO;aulwGjIBl)q8&~Wn&%Pgr<41Z|FQJu%tE15lENS&GCT-7kLYW@=A1^?P zzuu5PmXG})K9}?gElINEJ;&Xpz*=7)|9h2!|U6R2(Hl5o}I)ACxc5!@qE&n+~|2eZ(bhlw* zd+c%WW7eQ=jLEqE2f(DT~ z_}qRF#;a~3$%ifdN@0<~` ztcMZS%8CcrF?e!Amgvmmtl<}FXh+(F;GAE_jZQsJJ*2%76H5LlJy@6N%kyu9_XmF} zS)d>>lfLLE_8YGnA{=;rCeJfZ=f~qNgqDXeT~?BR+JIrvzV-_T4)LFVGI)P0*oy}Q z{A`0OM|~2VY1FCvvasq^&R>V8uGxu1nMKgI0gOf){AZPH@cX;(=eNJAV+_s(`eB`{ zrr^c{1=somFoo~6QxVyF>(1we4e=X0Nx@d!pWHbL#fNVLz*!V3svLV-a{gZa!ASKJ6pfYON#I7sI?IM$&P9_{Ni8*M4XPm=-zx<7w%(0*ycRJDXp(=yBj^*pwiEfvfNus8| zuGS(*3QZQS_Kx~IpQ%RqUjD0wLOPt5fg0EU2z{x&M)$cU7rnYulcyF!2HymOzmVD$ zyumkmk-elUdzmDhM3e%k4Q$md<+Ma>R)?=)IXuBfC$>gH#3teGSh| zs!*%pOO~QJn<{d%MyN%_lDT?2f{Gn_J7UQf^|mrMYoy**E;&PQN9HE&rMDxOd{%Gw z%FWtaZ}(aZ#Co-6dK9d}Cp_ljjjvFv;ofx}VXFgk z(?_UP#gepIe3+V|YB6HT9PsB==cbR;+sY-}(l^69C^vpDy&bt^iryZao4&W+?zN;@ zZx6|hr^x2AnR_q!gx=QVrthP-RZEEU%=mC3H-2Be-DinPlyK|Q#8_fk>%RQ1j|tPV z^FhaeN;prM%Ad7VJfo1&+x%>VPsWkw!m1EBT+d&%;2exg5RKuAO#W%ijn_73eTn~z zbRe#%imC9BN;!wi_XPdGezh>sBl-z9U3WJ>bda1Cub#lF#ba8u5spvBEDQvNI4HJ; z(1l{~Nw4D*eB<4hjB!NG2<7!##e%{nTxMx6}LEmD-o`erSE8a}Sb%^eZ7uJEo? z`jA?W$WhcVY&~KLw zL6S4kV7hG@CgzYc1W03PDCZ~Ypcq@fR$*p21E5Ze>)#^i2AYFqGb#qI+-_07$bYHZ z@fzB|yZ&{I?JM^-aZb@_{*XxbI=1Uq32;Ni`ez#rxLS7sb9Mep*l&UdGA22K*#b%Z zoaGvSga^$7MS8npj{RlW!hk(|!88 zSe-aG15VpIyN$`jgCFt+W2%_$zn{`D%>psJMEe_NWcaU|C4$jsHpP~k_?FYK>rE3f z7w64lOR!lLOrYmXm~m8D)bgLyfV?L|YHA|pP3hu{_S6IU@rL;;2-?%$Xx`|ZzNUG@ z(s{XA1EV&c*m9T|gEb2m%a@s44YF!RZ456gXx_NwY(1b@%Q5OVH}SZ#`xPdLJsq?7 z&0McVv%{)= zFsEMrXn6n6Ebl&XNM+m3qf=wscAlL&qHX8lsr`^H77r&k$JucNsblBnFX7Cev(8Tw zy3WnN#skB%8+5JRw?&tPyw%S)=`lTyTvYx#H@$DqH;G4`7Rx-{w(|?ARyECebvV7^lF_NJIU|gm9o~^>9Sa&M9betA2@!Up3GK`ddwm` zVJ7AmY0&eW;5-%gD10~$K=tVG;-gVKD&S*g<|!rTBy0xbM_O`D=Vs!BaEEqZUNl#y zGWAuCAb;5w$vMe%3He|mSXAcfJFw{#$*sv~$E~F(Z`3HWeG-b@4ru=s2{)EzSH1$# zDDgkMqp1LowZ~=;J3fkzJKtIQvz{kII&%2|${=b<1pjZO@Sd$4R@QRjBOp9O9sTQ1 z$M~R^7S7^hgCc%7+CFa7!WmpjcrUS13r#N|{_qK}^Lf;gnv#?uHvz9d2(I9BB5YAU z@4%^ugN96>+sd;zTua*`%8_+kua9St#>5PRR%F=N#Z)x%uDZo^-GOcWpY%GQ%CaRl zw)G#yel|bb`ak1!UdRtf4*Vk9CdKmS!>fbv)smfAMfftaaf-K$+i%dyPbCIYA9i#y z#bO7u?eY5Rf%LXqYQ4(E&*HQ&)8I;@AVX@_Q{cIivM65XSh}Y+9seE3AETihKWf^{ zV-yOTsEqz%NUHq$eTRA1bGn@iwCVS9&Sl!CLQyM8C+hpMLf_BxYv9x>+hr{2m%v4A z+?Tu#qB&*b=6IdG{OiUmKRY*AspUhya zUrq4HOPWktrTS|!+qoP}Q2fCjk{4)rEVGLbn-|Buj#B`th)=hE(572K+GOjo5IAvju?VCz>kUY=3?!h)XbrHB>cgqKW)e?LpCUH0 zS6!>WkmnoAEQ;M(&)=~fUPmqe79nLHlzU?Z>As98{_d#d2QytmS1tKImRobuDi*js zC#lh$Kahr4OhWp~+oeM!-datxy?ZdJh5I2r={kD$3eO}|cS#?(W>1EXOwPJTUE!m# z620!xUE!mviXZ-fMo%%<07&*HA1S8FAJ2^u0!M`yZ5ZK7Z=2azx_ckJcO4ETc1uUS10iWn(MKPBiJCJ8%gnA_zw`ER)Cs9R1GEy_i|MVqX5IrYvC z67GucKd1NFu_#75O5VQzbKdI8+9@qGsVrp8mo)juuN5z7`^>rMLd7F%y^h1=U+Q+0 zVcs=|^E=m3cLBu6%P80xL3iQi@*SYPtEMK+9+dGt@ei^T%uy2 z_F}3X99P)SaHz;#TQ`>l(iY#HniT5fTEh|Bjb+OclhDCa=bxEtINr9SADfh`I^Mgl zxEi}*{5e`o1W&~SJ0ObrY^f`Y~JQw{ia}ipNZ8& zj&f>~&DcTS^*a2*(;2j@DXG~7O&-0%Z06t{{-uSMsFaqL-mO9{B2J?;r<3nJf?>d8 zMS66>$`-P}^fRy~YTqhqS7NRNxy(aLY@+Aj7&g~dBDbPwZt(iAly~m#<1QT0QD=Yr z33NKRz*z86pkV;3yLS@+Gv#ackpyOH&4G9Iq52)-@J|kheV+d=Fn~j)2RIxmJ)oGU z6Lt6&Ij`Zz`IEp`w7!GDJ@0l0?gB<~30;_r0{0g`1zg*%quwKUxc~7`fVqd2!OI7P z_A4dVJMI7^@1czh-H4broD+D+gmiuI+cqVe=3Vz8@C{n52rz> z_e@m5cXc$X&p$5N@5I1E%OPU7Re=X$fHTxh5k8QA?XSvk$=+BuP5(@=stq#`rQO-N z63R6k5y@U!Pq4iqw;+N4M+h_aS9rFX|2M=oHS2fdf_-|~{n24Y>t5 z9^`lln~tV|qH5};I?@6qPVJ|EAwtZ}7=a(V1_qk4-r1=q34^F1CN?S1Eg!8sC<=K% z(mF4)uhSpN`SXj3UDbMXNq?X5Dee<8H>qyFZsLJJx^z&D^|3_^+8>KG!y zuXy4*C`z>ge>J@}_pgdvU1)KYw&ruaj>iQzh#@r$@JH7vwxj^Mh00@prD8P) z#vs>mqB>^ZB1^KT*5QR5nU-8@%=7D!A>3hJQ|5I@a7m?Glzu7%JA+D)TgA>x$Yp_K zAIs7^Gn~x7;=<}tZ-ZNARZmm%^PWPGf~9KchP#eLW@~vuhkaqbS>RKMiPUW?r<{S# zVT|BXp5^aB8o;=Y%-pr{&O+)1*I*~VVRpCg z#xaszdpc{zwZq0r(jCQT* z8NS>?L(|xQAt1Hr*j&6N7spnwF3_KL)rp5Js^V5q@|UMnZuib3Wx2k~54c4sy@h>G zlAK%EC@UOYc7*j`@;xbSS;!}h@&T{ksr6djXX}MHbV5eDI-Js{KrV}4>y$VwDM}OO z4%UlvEWT(Nf}sM4@-3|+Gip`fEjZG~Ig4@F$+Qx5>K_B)XC2T3;kq!G$J5~atIVQ< zTfC0JwfR9%1fDZjlWt^eDZRRD08QJrMbc&llYswJt>{ zG(8X}EUfRrjwbZ5^!WT$G=?5#S2p*eJ(9Vp`&BMDF*}*6-<%*zotfP)^LqB=xRv|B zhN;dZs6wBbM);Xj(B}2?Hc-@mYw#Q)R_=42%$DrJwS^J2j*8VV@?Y2^r+dQF>EBvk znb*}D$Q9bs_wY^i*vZxNk7s0IKNsH^z8i$O0>2E!uf8|BarA76Ig2rS?ssA+!nZ>A z+B1{X0IWX>cfxVQ(ZGk}oIQn0m~^vhBWc5<9`XAUUPmKz=J!>5o%&I*iL4vCcyS3V zsx5x%s$2~&a}8EMMXnfhz-2zC#qzvIPtQM@$>k;v7nyzzGWB1p%-Y6?k`OX6PIfJx zA{1_zr+dsBQCO9y*_;^VT6W^K@b3KzT=$*9*9hQ3et)EKHGQd<5NB7eWG*#hXIIak zts&#u^KZuJXPVeZ(9}LzwnYDiZI}1LMEqkYhqy1!=PL3~I)AnMV1mgqrMcunx zx54Igb^>?Ta(82+zpmDqn(}{T6q)FaFcFLb-#0mY1AI+>Axqm03C>iEAXyiz7zz2^ zYkpd|pHip~RTJFwrkG&Ec9=jV{3H*MLCK{okj6n&Z3s4iYcyyp2l}cx9ThQMYqDo{ z*l+gKWHy$iI9oFX{!#6^hdeu;@&(E4^!GUP=GbC-mB|CYHEEn=)WBdz;-%qR022lQeKP;JFLXWNEeZ%xw5`AWT3{DVs%&R){ zOc1-t`jmXu+2DdH@cHin&5)vCh4HMP)1e5HnoDkkI{5TqCM<_9_y!NGKPB~)t6A{> zcw|Dyi4v*QQ06xN!F{a{-@1k0fL2nOqU+l{>Kh8lka&pvjm$Gnoc;L?&H26F@-nWf zZ1HkSnX^;Z;yPK<;5ti09|&8VB6F(^oRz^mUN|Q;cTJ*tl{lT*Bo1EK~Eb+JCK)_nc2Snnpiq}XmjAO;CWDEt+{^DZ8av*a|a@ED8< zhwX;#WfE*>$QcaD_IR=!cUjVa|H~PQi&-_Td)1A;j%e!N-`RbhQw$%@sl~U`kuJ^tcKUlwA5DL`RY> z0;uT-rjtJlm=!cG06v#)HR&QvI6EX*NYBi^P+!!zo>7By^#Y0Jdfli<1OeX6_EG(# z-e`Wz%UQOkP|#0efy3lQfJ98R#k*GF0@Q_Z<{$(H*BKlwk}Z%(5ogm zo(9~E>xP&D9C_95cBRin1uV;V=ruowr+}z+X~|7@;phv5hkGOn!^xSo&lVKF>8*m_^kc5H(BznPEhq|h zd{dZr1{gJSOaCW%@o*VNG3VH212LhRrp>`}8>H)1W{MHe(_D~utbRf&krgW)2_AwN@SS%q{IIUW-nlE&4Y zo51`2B6MoZ1{5N*^??^y#G|z=#kL|4>{g>?4)<;RyH7~PO>pp|MGsE3QKhVB<(HXtr0#&l?4gQS?#Sf#f0}}%LuUrf7Znpp66op_O%J1Wy-Z^nUeJbyRLrRQ^DdNLqQZVxx5c|KBix1 z1ew_hr*Ks0O=}2|G-~OEbZNo>sb`9}Mu^GMTb8H=bjJRS=m#dy3p+$|$=u%dpk`piFKk~jeKDR$GGPA>QyHT>nL z{ySUI`6vO@)GKmuXFxfFNL8hon8W{j5dxExcvOclyIda&{}jT9U+Sc|jGEx2?-xaW zfgg45x&jYQ9B)Jz53YUzygUj*Ztco{6`HczN*sj;hU}>cdbGO1(yH;`La zKryExge=8kBx%tFByP1R5j@H>7PvKx3P9VadKbF@H0ROJL|kUpu&>qXOqJA;dtzTr z%QybuyPo?*=HOF?8WY#>uYZ@o!1_{sFbMvC!12`o6#T#pp*r{lyMzo8j|bX~nOPq-0?YYXMHEHoVYmOnHs`_x@V;_yO&$`>`O96{(H7uAHTYqP{FymB(>*J* z5muZkZlQVtiCw{T_`H4XRWBn2rrM6=D5c4d`de@+NF;M-y2*9LUWMaeq0`~ow>;l@ zz2>Vo!fEhC=Z8rDpr1NjU*0CmdPd#({<^73)fu%>`whUG^M4pdM{^WH4$-@`!wjqQ z5m)DTZ5hVnS`A@w?s{=kVefzd?A`ABhP*B*Ea-co0N0hpiuCu^5lBO+l{H2UNy$l# zSiHI`m<>AvWRkCVX+jjI@r81r;d)Q1;h$cjy@@lJ_V&1{Q0c7%PHtLFe|7Mm+0#tD zo{iIvm*HdsnsMuhUDQf~cAPBS3wSpRJJ09H@Px2G5pnYGv!UICjptD5_EZ~XW})g%SGza z9{_`dhyBJ~;&rH=g8cXA+xn+^9mn!!+!wu0?fW*p^Pp_4()+GokG&@RiYbaXzPiE; z4slzETrSy^ZB#UlbMa#{h_hFpcc_kSXns5Ods`P_9NwB2Gjt2y4@UWufNJ=~M)o?W zbfAlPYAXjIjr=dbw~H?@&h3mNTD(RdOh#?Xk>Dy#zA!r~+Nxr02JHi0yQOb{U`lu_ zF10Y^QVUJ{tpU`g06Ngs9bH z!kfM$Wi!?M3%V<(JGHlJDkkI6JM3AZd1Qmt<$p*YE3aiagje7$5K8sV{(+Tu@8QKj zU;og0TIhd1b^1p}QFf^Qp^V2M{WF$6O613^%m!pfUG|iCPy@TSuRZkz4Eq;`rA|7T z5Nb>E{)0jIAR{Q}|Dh<5(6W_5Jr1b9uFf0_D^&{qvgORtq)7jBMj`AcIBYsIwP1x9 zYux;8p{|aPi{HKYFZW%GE1b~N9ooy|qzmDm7BgB=o6;@W#fjh?c&B}BZVN(hVPAF< zd497-*x5vKHwQ?jRGNh39Xz-=nQF++tj<-fXLejni0^pa?={h+J@ET0Gn;agYUh75 zv*FF#V>4xt%Ho|>9Vw$uG?cb*Y*(_989K(khdzi(*(S-MnO&|}As-JaWa#37toJ)D zHSyH{al=sHuc;2^LGC?&4e#xl65iW0ExNx`bsw{hes|no9ryF`%)<99QE)k5D=uCW ztUVcaTWl^({x}+k_7EwBwUcwF3~-ZAZqi44?(kO7NjV#Blnt4aS-7j`#{{~vExm{$ zr+?$YWpDKx#XKSN4+%B$o&MtfKEzT@?Vn&9{Mf#>_IYAE(~|QKq`2Ul=|pz_w#!j+ zmHs+Vu4}Ar_?t)t1y|~D1Ye`W$ex7$lrhWE-~rvdl^V{s=dSHWUfS@8#Bbp?4YIdb z_hgoGq*Sz|?j6)n-TXN5;!ER*kJK^#`)?vjDUg+#A+a31%NC_7?CI85EaKUHnH!hA z#4`1K#I3{J%Iu9d>w)fVnVTe9Ximj`W>m0riL8cW5Z~%~``wkn6alNNO_wBlemx}q z6^zvNGF>D71r;)h+_#@}7>KVroH6nzYGvH^rMpik_&;6p()G-9QF}AL5TUE;)L!`` zgW6MnsnVdDlx&`qm{+SgEtlcxud5`n8A8gBLNpfjXK$c%3%y;#`@Hfi!w$`#@3|`^ zl!8Cw>T!5*ANT(O7D#rcPj8^iNcl)?U*c@7q1a*3(b6ghyK-TmsMM9%Bm7vYF?x&W zB9SGnRujm7lE7Mte2V;5!7AVlELmP$HJ%`qY$*OzyEzsNe^fy@nrYr1AD~@Fj#8Qse@6YfX;t6-uRvU}a+XMxbh0{8C z&DF{)#3L>1z#-7q^Wv;cd{Aqo1u5UI{HXrb1lDbLYOZ9xmEUVJ2I&z;#rZqSQzOL{ z0XvZ55S1tk=}kH{*!!Pa^Kt)hG#5;Noi*AJeCzL_D;4@3`;?N`@-Rz6`n=XqfbFvK zTL!af5lN9!{)_1Q)_-WMjsG`@zOP5iWYJftQNn1>f5R=8tE#Ek1ljKI_xgzk9@~PXw>TIFVL%9%A516c%HpP+mtxq z{lO2wdT#cNOsA}yoWFm`+hD2QeOKvfnNG>ToPUry)tAASdFNy}=^xP6ptuQNg#QEo z){5XsA~+cOr2g^WZ4oRA#WXCwYO+$0p7W(r2i6K3Pot)E|0*(g8Gp5|WI_t@T~*La zq!+HU4aN(ehH8wCxo`5C;?gAmEeYAXRD}hEK{uai4n9U%)9PRu#K!%7d#AJ7z#ExL(YYMx<9>9` zfF;fBWuuQ}beoelXTYsOO&cWr0J{;PMOo$GCJBD~E)*agSJ-A&W9Pu4@x@>}2)tt9 z2L-cCAFr}boYV|H!&JE7_+d##nFL3HWG%w+ufg2++WsNsAYrux;M&$pF#8!HY}wNw zY;KY}GBeYXK_#;uB6B|P#sw&{#IJm`TsnU5l#UD*v2K!h~C#k1diLtYi^Y_NP z%S}OS#1>32y#Y&n{*Vpp|5S-sC>e4<_+eR(e=-^&9(Kk)GSly~) zE>3^({`1Z{>#U&G#+mNMsegz^()+6Xk^tcllHzf?;HWzI#}j=dEe{}*7;%8$ zhMC+AwUWKPk%z=yGSBLG7CxbW%9sX(<9S~1o~wX5&pDD8`1brL_dJv&R4NEAvgb{M zp6l+{Gwu2D#phG#NP_#`? zDsrr36I|23e;%{dWLR~=oWaOVjvW1NJl-|4R)h~EhaMIRdahYM({5p$-NZ#B!4)ic``X`ZQVQ=lIcEwy5Eak)S8aDQ z%y!gG(+imFhARQQn7mf<=KCqPz%fkG@bN=t|E1`TFY}AuRgF{ZJd}tw#u_*j@KLX$ z9ovd|H}WLTze)%Xj$#`8oxmMRC_H!-ZQL;j%GFH(?{EIX>*xci;Xt{2Dd+%z3`GX& zs0|bAMjg(7K4~ETB%`B8tz{jn)8|G0q0rNJjpd&)u?R!O^Qp9t(S92JtK;0Yb&a%Z zeq{a;B-N8suZQl8LuRXLDdsMudFof=4p0BJM|f8M-@6(Hb>H_q8j1sQVn2~(V&t)s zhj)$%6AL_7t$f50Z5)YM6O5B^*E%>GHMmlJ@uKHDPO69VzF+rT+DVQ|cNKPs>qDay*~i*E+3n+z_VFov?6&Pn)BC?NQIcvyFo+2P!NMsMka{ik=7eJ86lnViF%UYooRDhDq7)ubXa49XCi} zO}vb;Zw_s*Y2Kn)@_48t&I{TYe7Xm%yj1?G3fB zU&zao1zdE#+uYou@DvV4qAvl|LN=IS5V_k^{pP>fFE~Lx6YtJFptXpW>_C(+?W(ot zA|#7Sh$Iii^@}Fm&Jyl<(!WH044T@1pfrLg^VH{q)>(t;Xg9WG2ulg*UObh`I(pQ6+JNbT(vzV>7?BufgH6j)vCuEazUIZ!Hl?mmQ zC93>QOO$&m*wdy>;59GUSw!)KOTHf?@p!@m27Hc2>*KS{)qrb!#n6-(6&@ zmA!ut30(^MU9^-YA*CG7POBgMo9BaYan(hR1I{mKPMQaQ`C4(2s#e<7&n2_{+vVEQ z^Ey8X{|zGYw;`+&)bZ2N%%ON^Iln$IttHh|G)gtvX#h27DPN7UH-ja5dIAb;IBG0L!Uf4_{%O93htAZr&%1T{-2|u8vCH)Y}`cQ@bfS z|KbvHwCnl)0cSr!{|}ncO83jueJKz}D!@|upyI2n?LhgG6P61Pt%B*yp&w1)LDOcJ zhN=jT5J)X>=6OqU9yv|SLKb$GQ z7q}kom2aXMha!H?vxr&y-o@u?gX_UQ=U>*N9~HOlUU`(3CMj{EKu2BX>EMkA(fs3d zwbry)&i6s0*SekeXd=@|DMtap*O#yw<`^p~Y36%y04wO|s<1^~6U=2QqEvKdZMHNT zTXNot^N{Qq2EA0CZD0FQz{3@hAK}UXVw4z!lmoQ0H1H|mVPHxIYZr5#>@#Iv=gH7h z&c8!ia~p4JdWK7Wax8zuxUs3ej@4d=PWP=G8<8S$;}Oi14Yu`Ohl*r!`hBM%ZX0W4 z1TO!x>Cp#4u;|`x$b$Z9Xc~p5Sqi|YG6^8`vAV$wz|r&d1v&}7`4v%hnEqlca9Eed zO&yZKruh`V-65DvaCXTlOTTjn^{zr)l(KAa5dDHy`HR8gE1-n^fV1G=Fum$Ov5<}u zat(3>Dubu+F*{#NjmT`X6K~PyuOn|95FsIA>8b7_UzeyS3;YH1t~4gB&R-A374%ye z|AmAI;?ZqmaQHec<*c<(8u-wrhNM!#Sa9*ZKccH(4#RK>bG&YPDbt-|FTt#zt@^ki zyW>P~ncpL*188cuD6H09AZT3s>_#V1;=zINL(gyYKC%~=t`(H`tN}`;6A1>~Z^c9v zio|ft{rdNAA>zRp$f2kNAcTc@w1XJ)W|l;Z`3~e%AOOG!p8FClL1@A3`wNWH&ENKf zn(q%e5Gx1u|6TQ8DsMiGd1Y&Yv{AReU^xdhc9Leo+s>RXnTe>%q2%oQS@h7PjkRw59^bs&uayeb+*eD!!wi=O`U|1D@G03^ZWKZ zRqyv{KWr-@wAt*L=lqxTt?rBxWNHm2pVRa-^$+4_Zj^h;X|kN{nILa0zFA|6HCXwu z(2ytIR6s){P9%B2H1Z}m64+$|8uWJRy*KzQ6a@6$sRMz&KZKs_gn!!e^kE+im1!?N z=?#{?K}_xG5Ind4uK4R}JkmsPsDXBx11;M8DRD-^_;VI+5S$pCXS$2vio!Cu4%t6Q z&>RIJhi=u4C3eiGpXo1gib79m`p}Pi&zF=+If4V>3CO0nSLFCOWHLJl(;Ga*<~bg{ ziD{Aa-&UCdJJeZ{;^g-&>f5G%( z{q`82zX($+cf+t9MY_xE3|CHpAfuvZ8m+GIA<>!*o>+0c9^b}#{bSI2&00xRB)tE~ zVENIX%weyk?~=uWRQCsaHb6A$ZQvJy)f`6J%~A*fx)~lCv~I_pH{|0BaGjj_AAa&7 zT5tsjB;b@i!;38BT8u$i`nqk8ZM7)Ap9tw6RS*3?FbIFn)(q+ElNez}U!f;zMlNFp z`}4wWO-N;g3;tXmy1m<`**TEje<+bq?-)${eWb$rt2q*k7~3(97L$ zp!-!I^*N+Z(XK9c!$Hv-)=DWn!t4~@4zk$3dN!y)d^@I~rCNPSp3@K}wDZ#@w$$Pt z@Ju#w$e59Q8E5jZ!HS#*D`801pAZGpYJ{I#1Tc^&UNRbWpw0J^IMNvN_Ja+W3pA(- z6$J2LiiClu%HR&Y19P;J0yOmP${M1QdT zAi8RU)dyKMxBfp!R0P|@rO^%zZs($l^=eHwe|K7rQAvMyk{Bjdae%=sCZ_xzK|nH4hUhBiR6XLl2mtpK}7*`kH?U!H`HW zs`E3n$OSW(2jhW0WV%ud@N)Qq%b~{;0^6*>QGuxTbI_U7y*r4SiLEO=D}I^nc;GFV z6#=xeBqnD>7S1*X^kx(0{6id-#x)JW`f21-Wd7J}W};VkQL-}?eC#a2`E00Va{l4! z10X_SENd?KF{(c2PmQ|(U(P?8HldL~%ZCjbYnZ0tO6^%VM2=BkA($s1hjRV|_hc~s zKO+s6a9`ntMsZGOD~D|KgRcvOvm@16ihwdcx5W7SWf|xElQl-f9`<=Z zVN_3p=y~wsA2rDjG0FB<8yJna&k+>waU_Cr=ybno@*6;#Q|I?f1?WzzrM%N7q3U2M z+jQ^WVueRD(c&{%yj+z#lH_k7yAd8bJbcu&x#>~1)f|!71s!T6enWyyGJbdBB@=B`{hBE)g7bf8TCB4df^1(W#6{tyB7SXiqBdw_+lBj2|6sOG zqeOy#Oeg_@uk%Yz<8AbtyWz$e@7tEZ4g9rA$zVDEX2(Yb!L{0N3#A=tKY3gkWesy)t&!)tV6@ zUNSPFN9cPERf=2`$-nnZCw=tw>u9b)p7c=&TbI}z#gEd+0Ai+)q zdj6-unfQpl%$4iQT^bV$1b>`qIJr)h8k#oeCYSr&!%F#TJrg zhhFQ>;5c4qcopwl4WZQVh!wot<_TJp^JDUG&l%zH{hA6D?r~Z z6!c7k7A7i0Vtj2rr@5cDoSk$B1lMnb6g7ldBEjR+g$#=mJkm4D9`*&MV9d|v zVIjU$y#K;Exgoh6a3aw^?i^7C+JIR)c@n<7W32Z5XOGBD8ED?*`CY=o#n)67c1=Vn zPmXgPxJt^=jWL26Z6Z|#9vJ<}@&$Pml-;P^_i;8z9 z$K&ZLXf-UDMjk-8;usm?+SWhxi!1^1;SG_RXe8rq9__&iJ=Lwh)%v-HNy zpvO!c^gKskC6t%#ufEDBTPGRwXYL8l!y`HC+jL2nH9+tZ2R9%&~!7*MQ#aN z>fpv{U{^H8bvz=T|B7AIiHUb3nr!{Ul^RZ@3x;*Vt2&>6hfOYsiN@#Rk07%-$0tCi zItV@vu+j2&BRw5uw_~1%IR^G1{|!14ath033>pt6u4B1?1OLwPzMRNA(T(kE|M?ph zC>0(u5FVND;Ucg}2?JQ?QVbS*^EqM@==Sh@Mu`K-i1CL+AbdV+ZE-)Pkl&jOPO$MV z+QWEnb7aP`lr3mHc#;UQqu!DsptnKrZ~cwnKV%R6{amax82+&1L-2JR(uj)hK7{&5 zXO)?g{VnVNfnV>ApVk7rAw8@^H((d-HDog9cRctmo|V05q43zE(Z(#S(rS!! zB$=q#QI;JV2!5qa=@P6P+*;KH?R)+<*uM_*8C5iZ%Sx1y&;i~XJ=fUP@a)pWrW*<+;`OiuwX>RlKY}91Czcl?=rztJTK!o zNg>34pw&75e5b8f6hf3|uPvzH+n*{0iU;?M4v%7lI3|bmHK3IEaCsIX^9LA3kbGT) zw<+KuqD^_z#hBm%B-zjy#bA7u&~GC6gu#3Eul5Y@et_qA!qFJuod$R&Nd#j=8NV{p zOPv^j_bVJx9T8BhgsEr8_u5f`S2-%+Sf2t+yasMxhav8@{fIrlZT6z8KOIUqr3?h= zUkS;-xFfOxBfWSb>tt9lgTLAhrPvYnftm1lq_;aqMEWXB2H-sZnNF~+m)O!Af=8wb z-(F`MA`&LePKhZr|M&7N3H{=8j&Nhuk2W#~6d`u04(QTWAxfW}@2B zJlMyY{&7!Duc9fvj*EKz7@k1Re|S$#XS=2?QPUk*&pH3kdurO?nl?mDueDzPNz-E3 zI27SAn&w|c$xBa~0LcGKe;FSD+32W`Wj5TFJq`CDQaXPJUq$QfxRtm<{yRJ!9Iq?` z7W$3SVhW2CETk7+m~|tDc*X`S?=ypcaL8w>20UJ1x^=fKSvk}FiR1*!%s%%d%VBt8hXo~Mu@s;b$kB+w6*X^g3}9< z{)>lo1;dqdpY3SBlAM}ce0k|1h)I3EP7{Zb2iuQy=Z&MaH<>U>z0a!jw>Dyoccl&; zdzBV){sGym?vX5tFLRwZ`sTNe2^Qp6l%MeYPlbxaPYo4~%&7&j?aH?F2IQ}s?c5zv zNIbZ=0hU=_)`o!VA6SaCzWOm}5&_t;hJVM-uJn9eP>`K$S5a|*Iajq2pO#zNJBB5> z@IuoBlaqVB6_>@cm)M!g3^gBywe`n%*L~1t-nRC6E1KJ1)F@qj<-(J{Wf*YPsJ}}q zGneRKbIquysC>aU>-k~?Z@d-L%MV(u)`#m$*KpJtTJV2b%%a8k3cbfg6dY)C+m+*O zc~7Oo_MVdu<}9DhflOx^^#*exf7{Z%Fxx^2@6?yGvm==<&m(Aj81i<iv|rFWhajr{M^TqlbeGj7s*2&$*C{=jeVg~peZX?)7W-WS?Vj)40x*NfRKN@ zhbm$S*Myya ziFNUlp3)!d`Fw%D`G)ehlfq8Bo42dmRC9BhYcGG-w{VNW3D_2wQ@n!hlNqexOHUd# z=z7saPsx3IV`o;+Khrwh=+cTz5@H#amCfxcBC0q(a}HDA75NLXakYBqciv+eoj!8- zD%g@2(4yx@jNv5g8 zTKDzuCeZ#(QJcznoAKL;n`Eh!3rI;+Ub<`sO&HGOk-j_pq z-ipZ+Tq;q{|8(I^00r?zH?7z=V+(KorZ@LZ9+CZ%pA-p!mP2lEXmOj5Auc|Bze#>4 z%`@dWe>`18auno+cntnFyXXn;hAQI=@{#^ss{dzN*6?hz+jI)DCOG^DTDe)bgj*}2 zvvt7{fG5@fqV8Z0DK+}FKFSTme7Yb!b61GM2dk%o_SaGuh$8FLjBED(oCc&B=Xzr2l?w!4iMx`{@&! z9?gBNvU%GAk6QV;MZ^4on0IxCIrxvMK2S72iM3!Jk9u=wbQn3-^k~mR`uG0v1T!Nvop*P^?lr%s=PK$kz(u?7d=}+fbPSsy_{cR@{4XRI zm%o9$)cq1~gVspS##hO`$-l@WcRv<3AkC(sRHg;bd{20({2tUqNx*L=auYU!+&X(t zA@Sa>zF~f!4Eb8G;}}$WWQkUD+c3Q{&xWDnTTntBWDwI=epDPZEx{!-GC-DXYRfma z?HuV{qr24F7VTH&b-bZpx?*rH9k%sT5bRbdKg_;}*6NYOu`&fq1xYgZYuN|ku&ufc z%|$fe&fLw~<4W(6z%2srq#w^c@T!c9$e+(m=It?}Cm_~# zv~8zMa^2`A>6*52^(VTrX_Ne2`{u4ZCYF9o&+nfXt)$2@obIW=4cA+@@pZzJ1Gz;m z^ve+Sc_LIH+-?1hsVmz0o7}mew*F(8;#bR7!7anQi5pp(x@@~lD9!iqfq}B#ksCAi zV89t0)od2kdbu2n>aQCY?ZaB#Wp1lVO#vX)J4j~lP%k65>F>-+{dV>Gnl|^`B6^I~7uD(=* zziUVO=?(xRH5ntzH(b4dCWst>69pI(dN zk%YIS5jDZFJeU2hZWMKsNW66>82%E$iP#_QYcILM@K*|6^X}js2zX;BSI(cFop_DAEqIny z7a*pHVN&j`==kiDhwU3`+F6XyCNRVG zaJV}?HM*{j>oFx(;=u`@RY)$1)EY;C$P~LfO!#n+>Tl8IwDDj+Yq(HA!L5VhR+DHg z+|I7gO;II^OaeoKSPvcVF)Vwa+5>f|J-kLmUHrB^b^i+HDvpd%w+jLn^f!U_rbjJl zEbC5%Of{P=ST`YBZDvt1E|xmbVXi~{hbiSPWIJl-$Lyb)$h0FK_MBqsn(|$D4Ytv* z!$b;QK|#M&R=SbJkX88)MZ^XHT+olspQ_GEIuQH{ez{yE{`c$U>nGS`m|wvL!}bM; z4WvwRRT*SXTRA)VZ$g914F?Y5cyQ^#?9dFSi5|$D63m}KP#c$t$4eq>E+2oUMQUb0 zTm{SF+1K0fpJ#X(F|G=THUM&d#w|oVIOQaE2^2-i`Pb`NI1Y`1V|aCc-D!*;V*T|K zMN2n?pPB_rvr3wgmMMduU5}i9?+nWT0?|K-TGDFsheR$<7Q&OG3$1Q1Y4saxb#I|n zqR{HMC9SSjEBt!@lB7A7#6%=xf(6`qrJWt^k2Jl;_KE+;lCOU9OQijzNI%Bl>feZnkiwXDoQdNH{7Dw{#aNiY{2 z)PO<2>Ao*YQ36 zIPuHlPo3y>=n}uo`~J(dJGvD#@;cu`8RS*zHj01UcY`K7{^8?!z0A;%Tb>3P@2uhK zixFb+LGs&M5%brS`(5S!HtI`G*p+`teJy}Xs$$Ek%JWtF0y}_qb28;7yYt&<63rKg zYcp$zS$e%*dw-c%R+gHY=|8;J8}Qm6E5kxOadic^ZBOjax6+gC57Zv6#wS|aPo6li zuY#!rum{>77x(1R2qp0h9)ibwrF)MB-1B!PR{Y-{C*JYl8_!H77JTZ& z%f=lwCpF^4FTZrsztasX72`(@qJIe^XRgu_9gG@V%R*hP6X!JUJR$X@NzIRcly`F%oaRy@35Iajx{0oMa76bm$fvMvZH8!+ ze|{xwn8HNME|TYVac~@VPy5;hgM#-iiqoe%}G9Ll99HL)&vPj8lYU7WwP0EbPxssO;IoG&!i2vh#W> z+uGtvj80^l^(*(MUw+IGpJuSfKDMuPds_KMH9bF@PSXN2D4lR~dHrN(5xvjsQ=*F53XKtmEE<;JbjNfUm| zAZW;|mI%X6$MuqUJ2pVH&Ar&q0# zst88k)IYGHW%ypu`JC>SiUZ0rU#rYa=)*F`u#nWuE~;)`l$?L0PXeeUl?5DG|5=rF z?=Bl}S4WMn%AC^J^BeP{!P5)hAw;=R%eVsd0%XChw_4@d%8w6O_z^!T`1PgnNW~)M zk}>!lTNqO7mafWd)q0uHGoTH@Q{4=R;>=}X!Z~CXRff~p!yLkMNqda<0rx1u{cI@q z@PEdTBA%U_$YumXF7G^}lJEnBJ8I~DX3Hw#m4POpmHr8GEw;wpxZ9g`DtHDJH zkVddfBUHJczSikHg)(~soppD)HQoHBj8L{H%;v7)%-;A!^Q7d01O3aA1F3|W4K$i8 z!h)^+_X#%6Z}49nk@A{Wd-o}TQ8l8adE>k{ExuZdASv8!;iheO*?)a?jQ@qDkq-?^ zBOmTcBd3qbZ1P_m)|D@R^Vi&2xNO8JlS}h0=VV6sTgm<{@7d_+jz8m+QKrySlwab% z+Q_&qnCjU!Eg>h0*JKuH$?A*OlirK(BTaoGN z%GdZiD^oqLGJ*3ggIkEvgBXN072PYkf|@(_NsZ)8px3DiDE{L3+o^e6fI%3Vm8s88 zsR|zXHq1#NXijEYg)N4NR--}{+<0c~_^DWb6~twP@?_SnYWC+(y8lgD=N69f-9vO((OI}!f!Z(YNK4S&$Vy{Zy_@=kBa9$88rA9dRc5;8AOGg< zMgoJv`%;tB63sJ{3;%|)12wtvF>5|=Q)DlML{T3SMWZ8%)bFwts+GMV?o%s!@_RkE zMeW(Wn>^`cs$uv1HC#U$mirsZtseH|T|^Zff(rRv=eQIK*>$?z{hYd~!S)WR(2sXm z@bfI>4^yAvWRL_LW#DlC>&c;o$?YL zwCXfOZh0*W!Si_VW`+g6xK5GAdcqV9JrfN6l`?1eAOZ7_0}Ll=>|+M0AFc#=UdMw! zgx}L^@XIUgq;tJIH7NyAD&lwbZHV8==C@@=NUA#WaU1^V`l%pb8muw{IL`9dofGQ2 zgL25je}-t2d_ISB*^g7)u6=EpZ&pTv4-4Bz!DSkKR&p#?_N>p2S+KvOr{3VBIE*r* zTFclwjW*oa?^MLW$QKZ*=xGp%=-!JI%nM}9ej-zuBFOioSl_^Zvf4o50%g_*M`MoK z>@5b=5WN0*keo2J$}wX)ZDG0-neG${`@8#;bpP#3S^yJy364%^-Gufy{pu2h;CpB7 z!jefnBwgt?BUu|}fyw5Sw%(qyloJ~F+ zeDVJ=`2{X#M?iJ4Dc5EF`!9G;ychzeoQgUf?r>~Us*lD05(_2xFCF=tjEqrBsra|O zjtEYh6^ZiQL@sNK?h^@{1X3xlJ)U2FQaNk*$MA0@A=+P{@48irV61i(}5o} zzi(qd4WX|ek3_yLLc%wi;VP8hoj>&9g<}t{*SQs?W=LR`;pFkOCDxFnOz87CU-nFg9A3&e6jlZ6P>NbZ_8|`|5s6D$J`Sa+Z_;n=_Svg1=Yc>`C;Q zL<{F1>~rZZmpC_SO=e^MH#8ekug>giaVklpNVrxteoMzj{OU>3dz9C zkvf?z`(^NR)|-J1p5|m)EAov{hFe#mjG1BIRPXplaNn<76yx)}hdWA$t{7i+yLq+!ux^EhCo5Z64YJ~C^(4uU-*tvV_`;{vFUn0q4DwfH`} zCgBCH!2@@iaitqivisW&xLlD@aCko6c4|D4Un6pKe28Jxe6{?!BGv#2mu8Z=G?S__ z^BQ{|yZ_id*-X=J;KS&CmW1xfpei(XM(s_ch~x#+-@3o2qCEYYzuHa&!B0gdS$EV=9T8Dq_UH2ZNun;qLp9z9w?FrPY=89s*nZdT{~J7i z`ybo?_M@)-F43Y!4J9rP1@T#8Tz_3 zOEKoE;5M2pH`A(;R`RZ-p+Qe@4OpaA&(Bp4XdLNWLpLz7)C*RHq8JOSxEOEjB^)`p z#bKN{oSb+}wtA@p{*^OWrQ9Xf0JAb2>ACaGHmD~`of=IPwXCc>JS&|KJQcMZn!1;nPIIHo+D!D=?JDA&e6@vW@dccplkfW)Er2 zTF~y7nnF$F<|W21RLXmu=l_InWTASUH}gx{_V-)(ky%m&hEuTFr=j3_5i@pDwyGlY z2nL4VSCzi7={2b-&)JK~eY1OouPW0Y(yzp>N765HW5USw_=XG0M&{dJpx^TJv9@cQ zkiHhz@Nc~W*`iKob6B>)@GCU+My2Y0VeKj-CAGj=xFYKqv7jFZ%Qp$G-r#B!xMr2A z$K*x`Wg8Jc2%*U09z?`W4|A*Roi_7yRd!|>n~9w6^j0jb=z1ld9d|-zr^R-v(sv^Y zd9F&n4Hm=8UMBCqzQ+sWReQ3Zp-W?1+5fB)F1Wu{Q&ver@o{Bv(|nO8X)#(M$kRM; z@2aW%3B|2gOi@)TJmBw1zfUt;qDqcbx*}UH13+Xjh!L?)yTH`)Fy72f9kPclOq%J- zEUpUvKzH7XxfTAd15zI|s6g&r*BBVfu4btS?4a!2%2gi{VPMxQHnBalkGfur zXW3)hC{~&Xnrqo9Est|;9$(qqP$`LX9g4IOVQ1rSCYRB zfp{yXR5$_3AaWjB;6%4Gko|;aoVmOTKkCJJY->*-ZS|w*QC5eeJvW@0i>JA7Mwt>)4CuE+c{kXo+M* z6=;WK6`YfHuX4&to=i&y8hP$}Si}6bc%L%XCR8_1KmgCwsOuVZ#U~61I#mYcfuy!x zP!K)eEyzp0(UZd8-ikfpB|jW$Gd|m~0hr(OI``*+X3?hQtU@b0Az=D80&ey41A%iF3MwY95XlTO}maY#jHBt)3@5p1&1GpA9# zj-LzfP-Haf3FQ1_Hsp5|`l0^@CLZ?x{qXsOI3Ed*#?sNpKiVV6x9FRYkC;#J%4P8L zk9cVNmkHPN9_Y$ZLuG1fewcc&h0a$y07Cf(ed`9jT8F-xki&ZkLk62bm$zb3h1j(} z(g**IU;B+nLVg`~vhnMOP~pN(@bTXj_*DW5gE0FWyGYN`oPCP6{~@3G>l3R^miCto zA&jfUfNZ47U@;dbx`~GHgShyr16YFmv8=1%BfcuBzmCMzM1! z&<@!L8*hi%_`~`_(p0DaKu7d55RTj(N5Eyx(&KLH$s0lKO)~pJIk~&znOk|c@C*(S zfWi44{R6XXOI=BM#Fgv?i}GEVf*onLHMn5!&O!7e{FC2$6Az6)XU?WXC8;6qP)sAb z^jpfc2=mt02Y-3TayM#318%ouZWTMrS?t}`ik>+6_}UN2#$&cS$wiu}*G}>KV+(9o z@;&WJHhP`y!tG={bxu)GR)OuhNt^{9yl;pVT#_t5{09zo+5NI7$1@51c2fJ|WWT-; z?|3v_%PeZl?MTRf@42%`4{cwGZ|k`QXxmY#cNxu z?Y`lr)g-Xn7Hg{LR(ykI6xLewz4)%s@Rc9OLUQs^CSTtH8xJRK_*d>NDdq( z!x?><_Q3&sz)_?^i|_8%;!UzVm}hn_$8}ipxf+mzI}ggTb@Pb_ z$7mbBvFV)<35J%w3~+EiX=pYy{E7geHs-?&B`sY@{S|t5b*%ti zG6XL&C1wF!Sg%YTWBAoQ%K(Sp7D<$7$e=ndVmBWzS7};rrS?Nd+EO_+i5-(|bf-uz z6>dTHxRRwiU;UM=O$+-i*_nOWQ{M|Ix)6s-{c?9+zYze+%4E*Wzffd&``2a8B*f=g z!gJCOFfA$#X) z6&tl!RW{A-fzb>X%J*R1AxJSFcPUbIp?u$M{C~0(jDJ7hMh9bssbJU<(TIO>?<`Xx z9(-=3GNTe8cjMo#jj>&zLkNVgYMRsgrrPsZ#Mnv zWl8>IlmXHoT6_J?Wjp>syUuqmOJ-Yx9W&|WRo-;F7f*M-li8U*Y3$;+7VMWz_h#v^ zcgGIwfJf+$(wci48k#omcqh}9UHn$lW*TMscD#XS*vo%6b@S-weX#E!q)#6f3`OuQm) zrBdO{M0RGfb07l*OtcluZUNx3%uGY;7DMa5c;!D+w&QtP`HNpIyKJBT&)vJgH(jOq z!>4U}rH}%(psf;=N>L~j5Un5-+HlbpN^c;7HEq%hq)AMEX~CfyObf;kbww>+o8q_*gsG={yB~>cP)* zUwQS!$$pGR{J97HaH0NG>lpZ=GKM}x=Gu4kr#$*Ww{vic^Cr|`q5iZ3l%6Wo54VEo zVdQjcyFVLAo*#M^_}=zGhyf6L^`~@1{Dm3qr;h!H=e@_vPJyczJk|bVCsV<1{RyOk zT)_0>$NucOaO?}%s)xZ%kVcrP{jeYVf*5}093mVC%L~t-29CC+E=2C*3ePyxs7h{a zKapMLN30p=ul?xpvcY41?B;NP$MAyGw$}2?20u2f~f{P`e7*R^f=LS8W&RE z^MF7-=Bv&Hg%?`K(vcx9bw^Mvurn;3U&+!LC7RfuVE7)$F4{=azSHL^8+JQ~r#Q0; ztHHm*UhPg70t!MxI3EEcA#f*Akz7V+oc0`teE!)3PCEUmVD53^)KQXJv^dYDV}FK& zI=ck@CB%!B-gq|V^9Xx09gV|vT9abcCuu$)hkx(icgc4ehh)|y7EXnkifh&V} zibIcz^ z`v4?szd_j-I#0Kzp@uzuL%-rYIu2@i>z%R?)z=3uozw38TLeL*Jbkz7Ph_`$Hbf1b z3)irYhn$+BhXjE+V9n8EUxFi$zxGq9&Owau`qSXiQIaAwZ|bp7wnL@$wKI3w`9+AKizNQ!jOVvK8%f*i*0}%;#@Ibzhj$mhSqZNJ@5p z96I*L)Jv+kXN&5KJb#eVUE4FvOiIKR{6K!-FNcD4@vQprj`Nck(;VJ0 zLWbuLhj&~M?u){>B#e+Sz7a-H7ztQHryt&-5k{ggl7x{gj1*zS!9X623@$yD{uT8! zR&E6iYau?aw|Sb*ah~x+wlwB&k&Ois{aG8azqK-B{e3(ZhL;*3SNhX<no=6rSj-ZM8ax$~@)3Ezyu<5Ifz&D}i6^Xb?7irnYN zJ74qa`$gXTfFZwo;=HyT1e9;qtnw?DlFP=Fv zgG8dGJkjbD9MbbHd*G0NiYIQ9cbV*)4jfN;si+c8L%E=V$k|BNN`DilX4v(GSP->{LONXc% zt{#vY-Cx*TBRXkz8?-P|iEAW7+xY^Te4x-ZQY1}tjg(8XasN!)>4hh%v)sQ2+zez! ztf}0(1iqMW^kmRT>;mJRTKC}u_kRSvS-$0(fVCj>xPHKWQoAU6_LpGaAcmkqc-x4ACh zL&fLf&LC&DE#5l;O!tge)ibTMEB#pyP|dEun});#RJf=5NUxq$SFG1Xi&6UdsK*^x z*nULoHbeVN-Sg}F;1A||%O5!Orzr{LrG>|}?llP1zNy8fz{h^={-PV~a$bjPvF^{8 zXn*$P>xdBdmFG!{ICKLrT_Y~%OoaKWPkPEu_!nZq;w{632nyK~+Mhk~D)7(_wL8D0 z2>*$hzH6l0IRz1b?Y=NxyX&9f2lU>OkB}O0J|vtAv$eb4rhwhv=fO^2=Cz?ODnNv< zY_LN6=CcQYxR#{GkI!WjOHn^a!}AO$YZpb-qcyFI)Bfx!PVsRMFDl*?9cq?C-x?(} zVdx$a>K!F8aVVbxs|WlwSd*Z<{?#z4u$X;OVV_hAyDJfho=d*W<5)dn8OA(mLuar; zr?}Tqoaz(AlU@Hte(fmwr=sW|$v9`RdRK60@0_#exWK_XWjvivR5;H>(n%r~?v!y} z0}dq5|Mx1~%_2Q-*`Oc~PR8E{_O|!qV}vW(z?IEgfRV= zGbrTKuV3WMCbXgJMBY5a`z()noWjv<_IrN8QO?my6tmwm{_8m*#4yjZKcuA2_|s%B zsy$jQ1u}`V^y)T7SDpf5yM2{E~mJ3+Kt-m8|jMuRuyo*j^fN4Y1F%A#~Yr+(Go*^PB zas&C1JPZmt5CxK;{n@i58={0m&^B}2JHxn2__M@;pUo+QA#hfd40i&*iR7i%!Isc@*WRH92nTBM&!%6Z9totI5&I zaZl3JZEaIvA!S<+FABPkf;eZqylrcLR(2Ay+?Itb&;7G3?nCLw)Zbc#@ws=%iyk4| zVf}Ir<@kqno=&EZ&5iJou4?< z_$8>J)m+{N$}#Y|yQ^?uh(;h^Nqnf>A9u4net7hK_~yvRNXWNF<03j<|JhSR+KY=gbFT{C8u-Ws>>xe-NtA+=y zmQH$hk_ccxcWq6Hb3zF@9tUFsIOON)^CyZ}-m)WjJ?@z<;2qxiOZ*MF3LkP#@>QSk z|DMj_wVw#-j~w2K>&YxGt{2!#K_9wAPgxHfkFO13q`TKOQtC{5JmaxvD1pFO*GPqP zEIFyq^cBSg=3(e_-l%;Ox6$Lu(T5I%oIPv(cw`fFQ$Ol?<|T@l?i#6dPCUHxZORPU z27ZKhj`Y2Oc+YuKz`qCYb(rt0^Nz0xIR|`I<2C*kH08&ipnRx1*7vzC;No|RG|T;Y zvg<;;G@~u4<3nj;V6y8%0wx+4H2kobG%1kGr#OLe{*nqj-2F))k)Ice`^2Z2gdz7= zR9q&FrPlR3sNyi2kHb3*ym;8um9p2a1q*027!WN*j0R-`p0(wjp$gFKZSSk_P7-8J z()jU_HZffbB#Psiky+C^pO0Qrksq4yzq_8q^Yl81=e}t@2=MHsznE%zd`GyGUd>q8 zNuFBwI<%(8iK`yp06Z}H(7t&_yX*I$-Ze5s>wXNq4NXHjzJ$QEIb9=Z+KwKw=DS9) zc|_wE}cK!}cS^Fzn+z@?6&^0nv+wpf4agu9fjDnS} z?RXM?L%#s3Yh;{nWvaGgJ;&B+JJwLh4|xdo%od^vwcYF*nSigh!K!`K#qlQMP!^o7 zkxXqz2`od6Ji@iw4jPxVyS8)svwSPCZ&k<2Y2ObcMWjM4DF-;3d_(`?s`hwF&UJ!Wx7VJ+FgrbEqDL9yu4;;DyMG` zj+r5iwmV!SKhSpm8d1ER#Ax5%&+ylO2!{iGd+GMO|8rP9JgmGtw4XwU#_}Yd!D$$t z)mPe14=i|;Ar71_FZXp00t+&fvey3-YHIt*O|5|^Gh_g=`_FTR?&Xneaab+c` zliypmI6OunW6vX>cY$>ZSnlq`z#qMPNnQlK{z)LuyPpJ2#!mpgQWnbBuj3eGl`%d? z!4(W%+GF@C(pnL?RunPh#DNbg_+gMe^tvhn@x=XSoB!8{Qz7D1pf#lUKj7K$;GT@Q z!$aRgBzn!vLXo@Pq5Ov$Wk2-MY|T&;{(@n?by!jr$qexDCkOCFTi*hN&Unw;wU?U3 z&@8y=r4EpwjRKNbM89gGE7Z`^K}s z53#&m`zf-=*H1~Tx#ZpBdHL^#_pqAZvH@warAEFO!f+3G9%vcmJ zO=-h13T@{MglOMfFmyA_MH*@Rq7-TDP$qf4wP0vGOz(mr+WtNFZ$k;>QcK8xeW}!Z z0+*Aa&(WqhFKJ86{io}ED=v9Dso-d>-rc;WydAvY+FdmAXy5$Ad+_OvIO^)loD%wC z>Y>2o=gwUSteepns3f(W=Xjt@`?J14eCi?3M}cL&`Eh}}j-3qLe#{@3ckFy%cEO>* z9}D}mf72b93gbuJf$L!G=?+YU@qBk69mbEl1Bo#9cGI2o!`^p@n!qCMyJ%4*8FEVq zEX0)ZrZs384c_ug?t`4sOo*T~Mf>i1alCm2a6Y>9JU;fhr0uLn)Q0boI3e#tKf;6= zsr=5{!HXH0O6X8dOeK8pG+~K`4b@7&wvzhmq6*$$SHbt|7d@S1`t}o!XD>gRaaydX z&;OaP=CAj146OCMzLG(DZ=Kty(d8SB=0-=S1PZ_$jh z#(yK11UcBdi{^)M99vLQaMt?{1$wrEcAguL?dc?)1oi?}y3cF0yJ!u9b8@dk9OCe- ztd}Q{kQ|ujo#g8zT3p+&8DP?swQDQN{jY;ikm5Rc1J_b$chZ3F|A)KJhx{M>Cld7$ zLrIY$B_1v*fSO}3c?9abdwHJ8{yTuRR+MzDC~9aw(MYAmLpyQ`$U>b6Pc?9#LYk6$ z+fI@E;gY##d_D0OfkokLj-EnqCep7ExruDn#=Yk+KsH0SBTqps(TUhUUyf}R_oWHi zPI?AN)Sl}AO>pFTl~Q-Cd;l(2AbH0FBngjPCT)NHi{&I~$JgK#<~hs_GJ#7I zSB>wTJXk$@$phCnmQ!j)p5>*GD28E$R2%;LSDg=G#Bqn7|0V=u7<#F4|Ilj4Ki7SX zbG=QBXU;^w6-9(#`Z}i}IWJF?Wb-q4drkwpSKo)4#X*5yeK&?+)~ly^D)XNtJp=SG z%S*%b%X4ltl0RYDg7?osI&=lY{w~7ZMN>}q_FherGqrblDJ2rnR#cSN_XBOF~qGefJEnk36Axm;s&c z!W9{~R&eNxcxc8k4);URmI^h-8=pfZ&9LnPruKE zqmWRy6?FenM|4n!cmP;6DAwyRJ@0hkFNCu!#rF=Cht||1y`7U`1%440A)ZbR`F9ec z|6a@qKw^!%{j+$f+*{SFd8{gFBOWM~FgJ~Nrg}4bJ$QUQkkVVSllOv9R8DYy>eV0d z;Bz!vx_=lro?c9VL;Fv|>gP+23zWEYm&R8*R>L>IPJ1_Di{!kwJ?L#=o+Iyvom_LO z439oOS*naMlxAa`p@Wok4yo;`Qv|*Gbk0`KvUJZ;Y}?3#=duj!5%u{$kO^MmU`awOJx7|$n@*)ArWZ3TP*_76mKRy8r}x&$>2nP{UYvaGMUsf&SXEH z$qoe|kSYF&f@1W%gT>IrD`bx$vfH~nhs(>?g+R6iIt$NN#NF+;U75Rlg9iOShC}rK zt3Y2lr1KPtOvHc$ZAT}hfqHGuaj+ONjQugbpb&EvKk4OwE)y<@ri{<{@o_#92he(l zn%3GsB7%y=@1aOnXEBJNS^i%EIa(;t@t;R+dzYn9(EKMo zWv4>YlfjU4IMnYgJB8xo^Z?W*E59oDrN8CNd^S`-h;uzH((1M z_dT$69OsGmoIxA+NekjUae=4RY~jRUZxo|ENLs1!*>Lsm=$C8USjc39is7}`wp<4~ zYS#D{qaFkmxTUlWlj(=^5YL^typ5?UI`4n^M9(gVe ztrS{91^NzUljlLMaJ|YV&jt__y~$H@DQ+ZslgBu1rm~yIPtZUcj+b}QOEetvCurZq zkpOIK`+tsB25mKZU(ZOnPk$P7C!80?sM+Vg4z;)eF?`j-_hQGdg5vpVpn2@Bz?epl z2H~s<h8}dHt59=*<`B+S z*S0w3wBZ3E*Tbm~Nw^ynsQ0yFXCB$yj@}0Z_&2~rv^Zx%Q6L%qQ>Y6YaUV|eUqcw} zrykEDRVCg^X94J@%AJ#a<#CU*wQF&cdR;}qC;n2<3t|IFq~QEf(QIQ(Rh0CIdgtJ%3F5g?9vR4G}ZU8 zX2z$5z0zdN^f-f{%GD2oWBye%Jm^o-SsdpSI!IZQjsr@#%UC@uHJ~}&sy~fGC64U-dgEM6B+C2Bj4 z6IwD<1o4H3?S%{N8pnJzWUupeP~csbjw3nxE-z*m`h(hzzalD@;m}Br=V?j}ud#dV znL}=Pk6EU{4Rq3!EyJgU@d-YC4?Z66(f447{!HK*52xC@bh3w&>|LAVaT8rWcM+xY zG*Rt)svETQ7WwfP#wjv9ML}HSEbPZQH1{BI=;w3iQ5;d86`AA}NCTV3YIj~j7bX`G zkD|nyu6mJH)xC!o&1oT@)c+ms9+vu4Be#(AC`{wF6Pgyrw zKmlfQYkk#yIP1|};j7V9;NVoBe-nH?htMK$T04Fb)OB=;+4XS3LTzUXY?wJ5Ms)u$ zCJ&g*BVzRtig_>uO}TM!1v-3jUa zg&#R;z(p*isUV=gu&i6_&fy5%Ugtqy=D4GO@}>WlLOo?&lmsG`9k6Hn>~WYTSNC{O zz0R(LsyQiz)dxJkcDx-(q-yEH`E#^4+5+lHSgL`P=41TLY)2!jCc2iuxr&nMDH~De{je7$mX8s4|LG;6b2wZkHrj=Qa|keb zh2&3Hgwx*6)6VeY>1nj#)z~5&oPndIWrKx>q)m{$ zc<>#4{at);OF@B$UI8Lr2tSE|s|X~5tvCwrd9Pu|7w3~3c8p*FH&Od$^~r|ZG%ln+u`t<@>`CTHih%(~X= zoCG?USBAY;J~+N6*aJ$5L-gFy*%cTXr^oPV5=f=JXz+;|bGJWFq(#Rhok{M8Q&?cB zQq&VsMRn6=Cok%YP>Ef+sGS&DvoJLB&(M$cmgD1=adh`zdMYJS;8iHFsDp}(bpV0|LTFLB&Tr$Pv{6f;H=!7E=+GqCDV^$*p;n^k5|x2g9w$+eoih=7c6kPN zu4#9w;T)Aj+c_6@pZm;PxFV)M0s+F#IVF1v-k5Rw-cF}+u)Q0%pY;dvzz;^-g=Gh| zor@7Jca;Spc{oI;REQzDb0NjW1Oul$mtn-{!>%%}iz7Akehc;ec;1c%rBk4=0==|9 zANn+8OoX#NXyW*fgGRaS>%n*^KNg+Qy>82B$3#e!n5gfw;a@X+mTy; z93pwP??`bT12V>&IJ}2Q3*bTjrn#8?bB0n?;k%USuGJZF*e_m~q;=D^>Y*3F)hndeg6M}^J-?W38f4Gdv{!`{{DVrlW1{sWyMg4HAtWTdBj60k5FkVFxf5mg!;LiwB@K*m2{F^ z(q!MZIL}v9%Se(5vv}eB;gW$JlQg`WRknH93~aUAI%8`UmXrVl*MO1JuZvM3lSlVA4I% zoFE0It9;v!PNSD}?;%eO_?n3ZC-X^3$Xs7lgCVWbpUF}6K*b;?Wr3W{ll>+6=R+Ir#V*Ec zh{6*;uR7}cIda_b{sd7ZzmJnmN1OB+a!H`G#_|2bkR7=+q~K0z*s)p+0_*%Gw~bnq zyWkyL6p3f{;%(7Iu}2rB(qG2W9tIlNd>TdAF^d<0%H0)>Ov;NJIQklaj&tiNw6Fam z8Y-4BZ3k@@`ktoR06QvhqTm1Yd=SjJ4*JkB`*=Oz2=ds%hts87eRvJLH8b#~_l;AC zgbz&OZy-td0%N4hl7h3SW%-seKM=eQ4BPSkWAjC+sjNAoth|CN{kQY*CWNE8rI5&pW4iAG zi>`NVM}AZw`Lr-`M#H1rCXzhha}yWJ{ZC`?6oupTNY{Cj3iT=WahQLi?Y~XanchGl z@!$)=CX{+Hy^)S^A+o3adpVZxX=09-vk0oqG4!$Hx!9)e3uJi56{gs~^kGF+lo|Lv zuJ2$>mh-;}`BTmzX(L{bq_eznP$l4tV3;S+w2TI5Qh{_sMRMMM<7t|o_hC4}a=6dm zi>)|JqkAxo?yvBz<5ToL|82CLh6w}>9qAr?YwUc$04DY72T=PMq(37A14Fqy3x;`; zys#{Qbr78+D*C;H*oyS;#W+dSb#J|1>`G1MCm9DklQ3KL;2tKFA?vsXPHClx%rBtQ z)lIsOD_p`0_v-L6<=CgxzwnK7`C@g$Q%W>((K;L+wy0iJQs3~D?Z`vEvKF~KDhGig z{EtFFZs8}FWGwOCvdTM*5TQVjc6mOOwkrK7H09>DQb6&J`zR&g_f>f^loaQojH@KC zm{IA=m@>~rH1RhYEnJ*P5o4<4+npkxFfWv1DP|PGQ8`D8g(wpD3#Y{kEys~$R>BmO zbj1>hbVabJyck-9r@E@6b5tTxmLeHm1!0+0d&+i!7G`BQLryJ^c*Q?pyP6a@mDn*+ zB1CrK6f4@KESVzjD8HB*BR(pLs)#(IeY%jJpW7~x~MHo8Rp z$_7xwA+Sd=737ACq#!9Kl`577IY~i^nxKd%2$V=J!u?d(BQ{CoGD=ROj^(%%uCDY* zk0!VgPCIrm5Rud(AoqMC;fP3$YEzdl!lsBVHaA)Ps6aB|vNQ++)J2l>i{*vLQ4}vy zFX7@vvR2tdoG^B@K#v|3l@(jID29Y%36k+@h4LA%uq8ShRmo*$hv^B&2wQlfu_cen zKPFHWQ|2pgaB`GzPBIayzE;gng-twnOc*ZXfK0d)>1m>Pq)v-))b0ogu*qbNB6L?w zPnDL^_yn0sVk)8{d5Ku6zgLh)K}ifxqv%)XA7(a*Saey`Ba4UaC;vquCzjMYx@-Xb1-?ad=q7chtsCH9tCx8ZnGZyom6F z3ag?7)TzR*X5~dk0i6KsvTnxjIUYNE9)RD+cl?&1miGNO}}8iZn!Fi$y`KaOpNryb6-U*CEa>iZK}y244LvMn&rI0g+!hrJer1 zWN2jIJsGVgyMt0H$e)vc8--B-t28t4d#hA#Z8O=|G*q=&S+UvbFgesds~oD}6^51; zLzT4@JTcfS!35C4?NwGDB)nEz?JWj#^Ft<1MKh{dLYaAeBU_uvWTybdY;aoYB_gib z(ku~KWD<$Z7HPqJ<`jn6YH1`NQ={Er)-^kHlGUm+Lq<$@>T(_IrUISSDe0^YI=jKb z{mf<~yJ_xdzPS`+v$pB#w&^T}Mya{gq_a3%>P&W?6l#n@9x~ajs6T_zh`$bJ9o41N zjK9X_RsqN-(3!T{&?le|;W#aZt-QyCq*!$=2Fo^Gy}>3q?IuS!O7IAeJs|2w_zYDPy)F1`HAUT%eFY`mkiG<)AXJA<1ECORi6y$AD z_$K3lV7tj?M#n`%i%cG6YS1YK0msnE*?FDu4u*KheVPoS+u`*=rF1Y;i%r_5lM&FV zI2_Fw#gG|>4YUuP*=n^B6}b+!3Ea}%rK3FYXU<%+k-8flo1R-go!z1XW%bngQXY97@6ph-HUX35FZXt1KMvpX#k^}>yI ztJ8-3S)K)ifMYscp0%Mt*cmDnGzd;Y;8=YVS~bMP!t)2)BxXXr)Hhk1(d}<;vGHM; zS<$nLp|jrF(gKOI8SGNC!CWgliFn1{U}!c=Z4{kstP#Qhf~XkyV>T=G$C)~squIEX z=cj~mhDAA)qK2D|?4gK(gDLW(5(6PEXe8Dxb*3f=l+I`}qfZPEF}zLYqj}pJxRs$> ztfy9mDFgaIlN4^Q%UCfhZeYdrthkXC+gNcOD@L`k;ueV&J6N&A%2@@gWHo$93=<=I zTAkHKm4;RXi4e8PX>c@I?Gg$u0x{(wL4=Su(AckY&_JsM*3TI&ly?=EB^cq6$>B6h z4(8-i>u91xxh#?7Qe3&`Mb)Agmb+h`tvocem|Cn5z-84d?$oW4+if_7db?nH*AwJY9R|4MQl=&jH~jHV~NQ|E#{8(&3sxW z`)@IsY_;GKdPF5LSz2pF6o-;zthXZ6l64D)W~U`wZnRjM6p6|Ri<`-TMq>h(Q6MF% z$N_U#C$&y9IwB>+X=x@*ojR77BI~x8wkc`XW7cY6)aVU5Oe$mq-eV|!oJ~6N;yhMq!Bj3XtE8Y~yUUaU=J>y@6HLu32_> z?K1s}RjXyYesu|KODihEzGN4^l~on1Rguv(`U+TErNw&ks;F2)ajRF~vwF?C)hxGBEQDAtjU&8?<>t@3%@LWs zU_?`dZ>Fvhb&BEU7IRpZAo3=fZ!3c>CekJeJq#`V(7#IPMQC=5nGo7FhOA~A<}}R) z2Sl=^*}M(u@P&a%S^z0`V8#T4&sG^G>UL(dIM^I^3-wnfLkly~z>KzzRIs2R40IS) zcr;;_#?yy4ncN%pus_Hp;x7mSeAup!|9^}LjOH}D%rEUGrvvK;l$6`3iy+il7W86f^dHT()&;X#7g#M2 zDAFTPcS|cFW~dicf++woP?kB^#PF)DS{2D528ZpCVh67WZowcVp(jSYfI0XpCjc8Q zdwC?e&J?>MYRFBoI+~o45i2oP7j8dtkdCVr9A*@mq~?2=K?yFHjP2Zmvk-GeFv7?^ zRN?YMSst`Soqdnwx1H6NEUj9)qGD+ouQ#L&88d>%Mk|&Sh-YGTc4#{4QG4LxEG|;y znAO}6?WTFJ;4_ULgwbTRVZ0{JM`DfUC&yG_NfP=G+bmS*EYOT)x}ymV3O+`=6*Q>5 zkosk4@QX#1C8@z~ZQ;@+SsAr_KBkD(2T2bGADzKWE75H_OoYHn^hLrM<|f1XsihgC z6sB!PlcgElmcz(LsQ_gp6$=?m_H>5k+6J?sF)|&E1YrUSNg@Q^<;4tiqSincO+NXA zkQzJ|hT+wLPV^``E1FIN7Jg_14y(BplRB<9z&K4yvT(QATuWj+%8-iwJ(n+07#68Y zcfh~}JD(Eri4%r!Vu;X42)!4p=fU!HLRpHj-28(1jaYbKmNkR%0ccLa+skG+XNoX2v@r+(#1=2pT(Nl^~}U!xAYl zZp?MuNGAGe%+#AL?5_KYvHEhPv9#3u{CrkvF*m?^U!4=nk!B0@i<|C*8%Z#fm{Dab zODnOWB_B#iSKkD_F`WU!nk^b{5hq|V=8I+e8vW`jO!3PwPq!G&CcE4r-ic*jJzrMw z)hfc!noNc*XkE-i6E6CLh6MRw7&)zs8kL1%V#MHs^@<6~7%an_b_-3NXr3pbX4;z2 z;WHGAigwpsZ1G)e(OvA}yV#v~vPGgA7Q+HY!4MNcSWMQ2#jI`{Mp~NMHDjeox)lhm zLogg`BFv@HDPUQkOpzhkd_hY695|?8K#A4@G@GH>j%hUXi7ck)GNN#DC<&1g+F*7%nlOT68HvB>Mhtb-fwx-Ckav`nQ-QLBRxXubpOdB! zkah5fG-^882csKTI-%My-jeP^tfUlwR!hk?qsfx^W6BK;3MQ~vT5n}DX3W5t4fTz^ zxeonaZEap&D@GZsy_S|Pd2B_+n(A`4YIS*a6(lR)VZ}&NhjQ83>|1mzR#)pVUOMXS z%^2Y^C4#_Upuw^P0~bwRF`Fg9#lVy6K%_;@=sTol2)7+oL&G!1q{VFec6Rg4Y%1z= z5nH?%3v^anx@KvKzJx2&&>BozvEB|ZWh_wKqLnM6i#e05S-lfof+Fe25Ysjr=>#l7 zTYy;<)ZC=IMnkr6)h)X#kLD`izzS+ay4&&#*p^oChQ+#js932Y&PT#ihsyG z_@F4jBE!g?sN32yR*Tv6Jxf>U8Fm@a&+wHy2&3H#Hl5bg*h$Eztqi^p!Xn6kqHmCjU^*&d+AaPjlUWKWBaV;G6m{d23^wrc*Z$^CJ*>Mz#jpl$#S{S#G zEnJAlH%qIR)~;ToUtPm(^l|h|Ibs=wHx^EtO8T7{zg* z7BEHSO}5ryucxV+N#2iP*o~3Y?zSeheN;PCiQFH{c}zE;C`LQOAnOn#3tv-kR0H}t zEG&^Cm`D;`52Yj862?-D+PsTJ^FRt)D0mBXYhV{yc~=2Rtl#1=TQN|}StwnpgEiLk z9tv?~vmPBZW)l|bSXn~@`kT^bi*qa6ddC84U8q3aT+H<6v(3l?kdHQI<`&EvS#f!F z%oG56W6W`_7#8?kiD;gM84W2{(Iq-)R7KOM?E}NLMD4;ZiTK9KY7D0CR-|xthnGEfl=Aa`;K_? zuZqVv1FwpOCzHe5g;z%o?V$9giB7Z00HuP| z2F)RcdNgk8k|SdZjc^$3paeFX9kYc78{v>5%!H}_<3U6foTs4B=-;kk63_yf%c^c zV=nQLS|Dah57a}6Z84dQm^Y!xn_8Q#PKQu)GYr)#EizvP(R{|pH!mBdCSg~!%XqRY zRws?c5$$sV62~C+OZ;mGifF3~#O{WBRNUoqLFvcpX8%&tf=!);IT(cS@8V!z4 z(REOoiXsfs!Dn>PZ%S<@ng?T(4LvB>!j{u!7kVIhmrtI<(GrSs#+01){P?B}O(Mh6 z&Ex9jEko)wF-Zl{lolM9VKP?6RrKn0quBgKr3&h0wHr#z&q44KaiuFZh?TBZRu<{1 ztCr6ySU{a0*|0atF4MrzL`N&DZ&8=nkV5n0%O2ozbsyIqM@9>=P@yEl;>h%*l(|#a zMgvW_59@Vzy8k1M*Va|5$k?FoI%&5 zh&!fWq>Q3Lh;U>Pm>$-kU8WF=Wwj(@-$#p@O(37;&t8&`#m2(fPKSLq-Qi30(GQdw$T(+i0Q(38> zOMm7i;m`d1g81_J2}{dL;_tabv$SeW8R5}N9g&L{dmf+SY zqGo&rG40*NBHw@Rf8pHW*B9TFwrk02D-8IcrVF&VY7g!`8>)Kd$}o79@NbJ78>W%- z$x-FENM(=3C$|y#Xa3dM(8j;MGVHlZ__xK44SQ8iYfzQuv~S6q;&(lFHYE5SuJ@(X z*zX6_0v-Su0Cj+R08QjffCfM#pb5|n*bLYLpuxNaU;$9$vjH9i&_a~@KndUk(8<*{ zz*fLEz(auV0k#9$0S^Nn0k{A=0FMIPfDQn?5V;eu3-B0#9@2Uo;05dk_yA7;o&-Dv z_&(qVfTsa;se3Qr8NjoE9|EA8iT+1^B5Ps${J-c~MaE>4ctAhJ%;2*e#uT$?nU;qu zCX3S~rlh8ib;bM?{}7A*cPZu<0wdHA7oVU>OiE5kO&gOwcAPfjp;o(Pb3@(z8)_<6 z-@Sa<;=tzUe~67bj)3|~G1-$rtr|G-sy{jJoDC^(>L6qp?oz zP;P(`up2Oq-2ZkqWCqL!)cot&P&&-66K6yF0Htv6hFJxe54#5VnXsDyLAVKC1sEyp z-$k3`Pv^wc4S)SYRX1_4rvk_L7GEkiR-iZNC!!X#Q98qjaAK%%crNt(RM~{x2OVFFI%o(t`P*##H?P~3Qc@*_Lc6j%I- z9hDU;SKWP2Y1!&Ev8(FH#pM>vK98N16xP51lS+xw)p9=FU0;X=%hBworicAo$@wztqAH zI}3~%>e!^*88t5LTVlCGVQtM&U0_kCN?8dd4Jj~q&a}}h4ky!*6I#HBJ+SB$9z-mP zME7MB4LP=jr6%lMHrGQ@PkTC8RO4<3j)ou^MYU$7oxA`0cXU9aqB{#8B2ySExW@m6 zkwAvLGa2!s4Fs%bMXf2R@!d>i?HR!h`yhhZgngk%kkHA@RxoDAq^F#c;wxwC)@_l9 z)1j}J4pj(04kqh`W7SWYi`cAO?Zks_h9Hk*pt7J6c?C54DaG$9mC2vbUO>A10>#e<*?#E{pPteK;g0YXqk& z7i(l4K}#Dic#^Uj09F8T155-6NvKUMJ) z`eHU6EvEq$G99&}W{9eeC^NCgAk>r!>xe1P>C5}_P$nyT?Q%+TIPKD3F_08;4yU}K zufl4Bd^F03sVRSD1A|uqG>KH3#57TO(YB}y)IpIfdN*jSAqPVENf9?)H2g>;=oi!# zD3o=O5xSbfxA=Guhwd2lsowWT#~azxrws%Vi1Qs>r3eveG+Agnjw0gF2UPZ4dBu;- ziH$+tVe&&*C?u$a@*I0XyhDqmVsv7cQSe=nGG)wgm`NeYwV`yAMoDSdwL;1vS^Du=`kxdeD?*y0LNDiRsQbO{u@g#T1({rcKz`2RbFv8hwLO70f8q5aV zh6yKu{pH9NBIR(3LV&!z1lp*F4!1AaJL*8cvJ<654GVEDE*tQsBSbh-qr$Dr69}p-5a&rX; z*aDCRA=2&4Bz-gvO3<|_Y$w<)Ci4}hF!NZtiT!9{adi8872uq%PsV!#z`3|dbU!|+A-BSjP(Cc*(oj3{P)4I<1N zCgMijDWa1IILE;gjS6sV!~WY=(JkSuNmz>H(Li-^gP(trJIq*bu!Y}xQu)i6N}b9_ z{2jD21}O~JwJKHYmGbe*WM{nLg@;yDBF>0nGf>&KiWF68al~Wbqt^I=NfKB^q$7pK zRT8vD+CR)iM@(02FnTIy(fBF6aB{?>DD>ROp(pCQh@X_oXn0Y?>+;aih(ku)KN1&5 zhvZXK;o@*9l?NYO!NCnCak`F5HywxYrbi|Lh8EoVbMoy=QG7v67R$c3GY-_2*ad3HPpk7sE9NGC52VTM>Dw8FM&!O4$yKrq9#5P-0v|>uZ zCxqaHIF^XHg1G&RU7|Y7iHI}I=(M4wQV*;0TtvqeF|k~%+l+1&yXqD=>2`;s9%m_N z#1Zw#Q;><~?WY-MWH4`)_@z1J2#r!KjuDadaIhk*@(C8c`HU=tlZFsgi{`yLZAtTa z4fb8^IBSKP#ta4r-eAfHJ?JU{KYtggJ1RaQpl<=M=*C@hJ+`xPDfP0x063geA|Q6O zjXv?`VBvmRo*Y7NZl_&Mxx-Lq4)PT!E{|X*=bftmiJEO+7OI+;^Dw^O9Gk?bQ~E2T z^QuDI+f3*U=ohE_66mKmB4)fM z`uD@|PxgPE|6Um7M+hC7e*Wtoe3`svo`bE;8lWs|F zNd8IkZ<5EQG^FfGc`4V=QAH9`nSQo6`R_ zJ!Ndy*uNV$Rr@pT32kCVYQ}RJgBiQWublAX34b?X+Qjco9Gti?^RF`hG4o93{A*TR zW54Ey*SvDg!E65InlslVW-ZHV!@pBm|Cv=dY2WpM>wBjx(QVaT)aBgp@(r3PE2h*> zxozsEslUBx&(!`Klc%*$`@yuIPWyaXXxa_AcjngQO1XcP`(EzJ+_anL-+cV$hUxd; zeE-ewPkZ#{3)2rzf92*GdH3i2%dPj!x^C9)Sp&1CXlCq=TI*6gxXp0rx+;UJ8ivR$4r@pfLa?R;q3 zL(q}IRA5l{Bmb*Ga4T>QLl*}y19k)U0eS#~ADj(tCCH1oYDL!d>FWUj$NH@by_9A75Mwe95^2`0@UIE6ZW3}7xKJPxlVzW$3BHD zd`Earg{QWE*Z5b%Gpf>8a7Xh~!v4Q%j#j2aDEp3>^8X;l9b4Yt#e^T1-5<+lpKN}J z_Cj%=hB@ty3!$p{7ebBmqM-wRUGS?Sm@C3g%!$U?H~T_ppdi}s`TS_NI^FFEOTsUi z|I$(uHGIAz|A~)}i{12-2f6t!&;XDCdsL7K`@kazd-Ouc2#^3BfIWbHfG$7}U>aZ% zfaWUvmqLG2;^N{lF-l3%Tx~2><}*({{ai2P&eX9}C%@FVcJJ=!89eF29?Op|gysWE z0961ZKmv3CG6DN!Ap4@fxezh~wgb`uvF`c!xa72-T?hqXR*eFK@H+z71K9WT3!#I6 z0l@I<$QP!xA87+R0J{Nu0Q&%4fD%9t;0Ry#9!Cv6@Ay0s26nGVWJ%IUu(dr6^b@(sKReE2RZS`1k{pqfpVC5=&aK#t;yNWg0<_B=HBl64YShk7X z@#13l%!h+9DRJ+6Wd5>J9*mc3O^@?4Xf6aN8wSJ?VZdI5D zU2s(l?z6jdg2mNY>(|S;7nqf_2tpH zjgNK4#={H$9RjyBF=^4RZK3-rR**Zcs(A^S(Z5~z1}LSwQlxv|>afgap)M>xdAT?m zpKwcL+`GfLgp(bto}XjekRJM{hI(dOG>-hT))&dR%kL$(@@xIc%S&@?`1Hzm_&Mz_ zPtCDajLCXxrD0ysWDJGcczqs($+J1T+ByDH)HbY5 zV^!@h`#{xgW3Sl$wlt~JWx*f&LbVS$oG(Y(M~)9D|d4DPb(f)S%^J-c z8(zL48h2^cUYXx{FH}@!txrkK+E_j*+srtldf6jXSp! z{xxWO`N6ewveq+>tEBOS%x}xzi+1s#s-IPGMl*A4kk5}BYDWuG{GO5f*&N%rjMi|w zS3;xBNgF5Jl7FCTL5?l$vT-XKGvdmzC2`zq(a%PFL!l=uFW*G&EZ6G$$UFvK=h)&e zOZU3;i8Cmiep$BCvE1SieG9i=;ZK%pImXVFV?&Ne-=ap%dZ|i`fof03-5auk*EGCV z^U6ZC_o#M<=v%UOFE^mI@V-I8yDm79kB5po+ML+@#-&$^@NszGGgsj^KCObWXn$1N zN?OT_c0Hung*j$({HT4c2z|}+^0WwkGSU^lto0WD8Ki7nQdaz;%><5{6Rf@`YyD;! zx9$qKB4$o-?aHk64T)I~luyn!-_Np)Kb#PqrsDcrUbc^9e!nKmH-+kgYt|xMUu?_ho$K(D&#^mX~w0 z)~`;?M!Qyr$Eo^R;qTc=X4d+<#ki$L9>t#h!mGtu>z5~vqj}DKr5lb_zfzcGu8YHP z5}zGhH(!auY>Tz8Rljmq*7{|Mlc@dOw=!xx%nnu-@?OYanxp(c|(HQonx!Q z*h0T;yMFuN%Tu@&f3gqUKPx4;pS~0o{^i)p$7BVqdd%R$bJeVk4`+rEwq)=&(uH=P z72Hx1_J`#encvw5YHnk}7k8<{BK8(O4k+&I0~K@0p7T=G{fb|Xtz-<__p6})F1Gd_w>@~v$eAbzjM zxPV`_ISu1s=YvWVGiaCca;&97dUgLWNydt-hU=A2P+*Qd$2 z@nL$?OQPFGD5N*1qy1&APl_7j)agX*OSj|)E9YgckG~xE?ef`d{i5V7suOontr91D z->a9+9hI=Z#LTflK0h|rj}|9=?2sx_|vGVd`>T|1Ee~DWH48Na!EOUk=8Jm-~%|_rJ++56VG6G}X{Cp}H*aMyb_5o%hy%K-~I>^2U z=J5B0eH!dlfX`4~3hMxLAsw<)8M=@!fe~;5^o3;5kw0j79w5CGfhDjLOp#5pXR7Rb zRCWsM0QBq!JzWC2{twcPfkki={Q6Cl2SDK+zZ5|B=id@=H^QdL;jwAV2M$3H5F7Sg z+y{}L26-vCM6&{lU#wYzII(`QZo-lEopHDjkihL4mdKL$btlGBaCL@G>5pOQY%I)i zOkCWOBaLEYu<>!@6DFig&`e03kTzk=g#3xKC(fBTE>oMCkqP{3SQh?GVw2gma9uYy zdtNrn!OJGs-*Eku>uX96za?zuD0I$8 zehN@JWLKN&w8>6s5G;!U3Ny>;@B3Sk4&jjBAZSwHAl$*Pwc~?lwBs+~sw%-ZtieNY zmvv_PBUVfLyh%6O+a@*Gt8+`{H`votGBQ#!C+8$(Bu!3ANl8g(U0oML3uKrdW8V|w z?)lZl&~`v3;K(}{Lth+3-G2~)Mekk=5oF3H*>zX2AL$Wc)Rd3>?qcXwKo!BiLRL>e z763umy8uT3t%h29j}`Al$nW6cD-?=Pqs3VtcG@JnvALlE&jQk+LKtoI>}&G%!f(eD4}pNIRaTYhWL7kKt<{@j~Cm@pmnxJA{FE zr0JOpq$W(f`YRqfl;1d{lezM#sq!jA>jcOoP#$cBM5g zjPY@R9k`s0TYwplV#F;5yiaZo(f+~*D@vFjml3av2WSX_Y;I~seEE1>UsnKk zY;Bk-*vQ0Xa2xJRbNd*WNdVl-<>BeFKjDu3hV_q&10=G3Eg)k&fXr0cK9%*4hu?UZ z6M&ZqxF!a&;8tJ~?2}b+E$j+h2fG5V;{l>5x?Z(=;0kB7efk2u*cFdi2RL+ulQ#I=OFSTQ2b&| zqfB3{zuMh}^7bzXhF$~A2mHrv!H@@FfW2!)F!bs@-wx?_BOZWE#eTIo-!+`l+X!fq z>F9!;;ts&A_{FA`xl-V4l+D=iZ*w0(oN23qAv56H@c#cA)`N0qRs}9o8&gi z_GvIR4+KLcwZYJCKnEZbFmONYfN6k%O$Y}Jz+YnuhK7y7&?kWZxB^gER|E0|ZYH2h z#y{T-xm3YdD!baB>`9viZb-)Y6U_eu*t07bk^m)uX@E??0D#)P^1ESdQWA|MPDiqQ zwJr%CB*7U>J-;Bi9HSJj-CfeO;X6rD5#SQy~3~~86kAZFj>BAxZG}NgI5v^_@uz#Ul~ghcPo>`1Me&OC&%!3Iu+vs z{(+Ak`ql^hMFA4|)eyanM!ua}xsgIQFzD@AJTPQ1;sGE7-oT}IX_Jgr@=j{3rw=EL zlV7lEG}!BKyCN8$LSM?U<2GzxIB|Y2Gnmk)d`@LV;dO4t4aIm?u@jRTtGxpc{F_T0 z589iuRHN#X_4D#YP?wZql%v_|M%}NaoY{XVkE4m$aCFze6WMwFxH!Kd(KvjM-AP0 zx#*(u!q0oQ=8=m+3Qj-L)8uS4jRfPtWQ)<-5{yq17CdunREnaAT$H)=mUKNn*48X_ z)Zv0eXPu+XU|Vj+3-%4tPI}0`LE42+$dKvAy{*O_csZjXu>-ONto{AYL~`=_tuqcS{A1V!|L(<-6-3vPKmkKrIHgMNrdQ|1C9dG^S~wPL*42)@7*Pf{)*WHrV3&iGjy;`jX zbfUcj)Bj7&<={^YenHhAh<9l0`)MMldx(tAu$1a2P5EeI8}g^RTe|T zJ@DU$E?BY@-=L!GN{jtXT#%{NJg%yqr-y5=TdMzVIbZ+Yb+=T=7FP)F&Esm%o9;Z% z{C|s0c$F^LGlW~Ody@HIy2fQK*PhRHd`!2xBy_P3diw=W^lrZ`#qV3$;pLo}^LP`G zA-%Bli?_dOZXrFXd)Ma{QeTxx(b^dAg4ya}_jS?HQB(6T7d$SP`PF=eW1ma;elwqP`o<4G z;=ktukN6Ms`7xi=2OsgXe0urp?-F%MmS&QudKRzmR4WFm-`Of}F{O|GkA)o)?^D{nof6RV<#q)37_c{LmzkEE> z&U5LF{QqP=&*yVKpXcy-A)o*J_#^%=_`K{BkNB_Uvxm=RpLxW85ubH@^n4Yc>tml+ z@clwQ<#cU+=x@orn`)M9tzGiWW$E-T?1boSfYh|?JLf-DfI?mU#=5kjt>o*>N4W<{ z^wzrCZQg}-*-dq|t##=K#na8F3BH$x)B7vwL(mJPKQokGzt*N}ZXW0JH>4AjF@M^k z*vBUiZG$M}IpVd}E!&nNj8VWk_wrvb@f!UGPI1GY2*~SkL_cN$Qg*sY0vaV z1>5p8(l!UU%WcCVa-I~I(^@S@deDcQL!UqAU(a(yf3sd^xMS32qhJ@nKB>CRUQe5q z2efH3$vzDJ#F2CU#wvWYKf1x523zyRbN zMMxOa%nM-?Z|Xe?&lz}*Ci7es8<%a$UwKW!xBcOBep@o%tv0K2ui1IM1kWCL{>1T^ z`JfAv&b%hwYOF>7Nk8P$gZVb+?XC2IwV?&Dg{edv{gpUY8!jcV>3Cb`yt8raZm=i5 z{MfKlV2^y|_hV&iX29Nu= z4pw7Hx-MPH-E4JfIV66=y5=D1`YnuddbY2UzMb@Ar2kns9Un}(DE_^qpL&$^Nz!LX zkN9w}tni;AJ^hWv<);})4Wz$3od1C3*Z688eI@C-i#lm6GZ96`vgYR=c=o{akB%qF zE_&~)wt(Uthqr0EV*e6(-;&Hb4etcJUwE{9AE@SC0e;yse5h|G_W8PsOMwpnb`{t@ zu&s;P{Y`aemv|2*SpGE`<+TO=!Ec@OFLLFq==he3!6nV~KiIuslk`KfCP_a?y80^6 zukQ102d>E!>S~$T@C%fF7VIIgH#%&5>|Ye?OUZBIjM)r4J&vbRR<95q3&M7RUGeST zkJWs&6>Klq1e?&yJX7}JIx-;_PIWj4-z0n=bmfWHVKi2UdT^)V$sarCXT`&x`fveS zC$yi7kmU1ksykBa?MUdu){NSsr4AYJKjL&CUXE*G6Bcv+e?SU*aZKWrHcUaT+HnHe zd%nxP!8`|j>b1L0ZOyE+y=&?*3HB7&&o8Enn4?rbGkMkG#p+_3AXxwLiv6neZ^Von z{mFsd0`|t_I;SpN5}i9#mwtE-e((3o7j_Kn6xf$J`IWMyp0^~VY{DJ}d*b_#P3~#1 zXTkQur}hlw=DcD^tZDlO6sGA1=lsq%Hp|$on10jtd9X#WpL?{n|HzVRgM;iYKEv=& zoj`|NUWvBuKtk7bWNxVLPdmnsA#>>8SW7sWalIUhjgK6-S`Lg%!*j(VJgcMKYILCm zo&|W4$6-#I9hnzYUmZ-@@OuHc{#Ruz$N31=g;#QB4m}M| zA3Vx8u&38rBPySxwt=xo`g>h^VjJFHt$>=J3-F$Tw`?zr|97vIt@M7<8-5a-pD(wu zC$-sj(wj)1ba{t#?LfG%Rrdp6r@(&2VO`ycGue3CCt_nx@=w9jfBKyNnQHkTiOa8l z8tW6V<+W$LZO0Pi7vLHC={bL2wfyn0e3fNT^1+tds#4deZ54Jm*yTTCeP1Q_-mqA+ zr!xgM54Jp)SLAwY@g>Rwh9&H-$~WYy@6%7mzj>Uzd3g8z{PE?x72e)6kB|2dy!F3$ ze7rO8PCicF+%vG>zdYyvwX+M0w=+@PpxIlE&$}7kt-ngNY0SZ8chC7hU=M)3w5spD z)fKrm{xAvl6xbIE%b#rGacDJX&-uGVNb>Cz&n+ZOGex322{uvs*xZQEhs^a(W~J_T zMr@mW%O0?OU~gG`PROM$PWB73@K3-$_Uo|CxaNGE`1VYPapg_iP{~4UV}1H*hrLc zO{N}}z3^W$`oJHFh5+?+qk0716+M zc&6b$4*!9mZtw?tOF0@j(!YfaE6oU{m9m-YSK@_g?-eL~?sw<>%Y$;Y2jyyY`$P9s zH@8_M^uyZ??+pQO!rs#A1Y3l|BmLP6|MthpzY_ja@E?T#^)COY&gWhmYXK8i?E<^} zS&ZLv=lmUxFG=sco`k+=C16;k%eH?9ky%9Mxy5DX?@JKLtplbl4!~bqI_GoVd@;Qr zTjFWK6dy}=4mu0}Y4|s|{3Eu4B}aK5)ztsl)PMGz|E9&un)5DB=(kqQA@Tg}xE(}h z5t%nXn#>K=iXw@z@%w>fg4E_`BfW2mgK<>qYExYCK)d4qW{-27hBs>3`hEvg=3T?S%LL zt6gvSW9$ub{8c`fJgF79mgDt!@oJXka@|DefTlHp#vHv(Zd9U>N>_5Ey@IG$) z5C8b%I5H`Y>U< zJ?eaL1pY((z8LQfIlVIeLipT8mnvB0(sN=$zN6kyp5V919?N{t4E8YC|IPVe7?~wx zKA!pDFucv@{m*TM^tl9YAH0ueK3MrY?8D>W9U$L9c=y5E5{y}Vq2Rnw-Wchyu`g!4 zuGpAm7{|AQt9K|hN1Pz9txw=L!kBKb|>4I(rcQ z27WK^8dtB152ILi#fi~;bP{Y2*iSob!uY~pO7^(KpZ!z(Y4|S*##fc^3jg~O47c4| z=!3t+Z~V1amG#zeQO#H!1-twYN(t+@=vkyZvJQdGgMGuJl`Hjf1zqEgSO>0Tjbtn! zW3>M9%TW8|=@9)^VejJQ=u7=UQta3I3&Zf2o>KA$9*zIWN&IV!zi|Zq6%E|!zBoVr z%4ZUrK{mbS1;lfnR`P$M=Ze1)nV0(#xZAXFs%qL|Ml!pR+3@sIaE>EE=khvaP-T-> zXKt=0TEBlEGRKhlH_>`NhH_#fDbs23KcmFuskWZMn8|xPLwk){W|(zGBSDY8KP>q= zPiNc3%qx-efLjt;K*}Y(=z;(2GfScU@7Q|L>@B`EK|-tP*9rIsmzP58;Mlm^R5xAg z?OT-pIQ%uwDh20Pc6e3!!~gb0`5XTn{~G@KXnR-cZ}LBwz`r`PT=j>)>)F_Op4EOP zw&czfX#Uwk`XK2aaOnv;l4GZ(N=1zQgZC7?YaMUUm)XH8n{pCt?Q=@L(RIpE!QKl(cK zaa%*;jXv#zrw^Wg4tT2cvC(^%>yB{YIHjdNI1T?v_+PNNKDVSMlFg;@e+jNm|4Au0 z`|0|tGXA_fiBCq#ZO-W_?|yijo?G%C2+Cg3W#{`hnzOZWOHJ9OOMBrThyU}Af1Aew zpD?J#n&$aQ(pNT>{L2>8)eGwyuS?KW)`WwO+#YIgGe0Qb<$u9geqJf@%&^*|h4fz1 zM_sw9+C(wt!D=f>SJZ5Q_W-=R1Kvu1dT%;ERGjuq1DJi_v(I;BSzA|sBT-zH;Ry61 z^w%WFadD}R=_X zB0MMI*&6VK{kp79F2vSi%v)fG;al;iCI1xxU%T?6H24R>sd2kD-Ve3~Z29b5g3aji zeo}2ST9ADj-ue}f>c`|$Ph5PST|vX-UQqI%5Y@4Y{A6N^)Gyj;9{;Vr;>KhL2#x?+o^XE#;%v9dhLKNIj?=y;=R-4xOuf1@H~cC4b1}kTFgnXPG$$4)`9O%a1I|F~`3oGmJcw59&baiG^v~{xNn`5(N3o>5n z%CJ-O>PYHl;t2)4-=MM34Q3q7FC518wdt>R-if$f8KENOKGs3n0@zXbI{%_Fhs4Uq z+Xs;$)S97*q9f7n-5*2FUgX^1@*hzd&3h47;_8&=q9Wn1;EQRWWq-+<3BD1>7t8<7 zSpIF9JEH~ag0Bl1D_&Hw)rmHdpt>2NnQ^uW`FP}mw3NOC@TRi_)o*%^@@`Jjc8fJ_ABSH z6Hw*ScgQD?Pt3MoTKDdE@};uA3fpehXYWra6q_ip?18_rz4U13S@Wjf z;;q@9xvW~5?3_EJ`XEy_M`fzm+*?8x0sSU9`~R@k2K&xn>|sm7??q|vGBuQ{u03`g z{yz8{*P$a%w0R}0Lyjy(2}8`n>(LdVI+97L>+V?q%rnr6vDaj^E9H=(Elr<-9Sq`GaKZ z-jU&iU5vsJ9K5?QM&;Ut+?vZu{>K+D7jdQ&i3OudHB;~p_LTe&@of90Jm+~AhT3&) zM#oaf+*l1(`^r20a@LdZzB$nG%KF6FvBA`Llje~%8RcDoe`RkeI0sp!p>~8t)->EMz$I6H&e-%B5f!%7GHM zC2;ZjS_DJ(1AMw@q*XVR{2vG9G3y}aS#v&**(Xw-)tQYkN=JrWuo&i=7zMq}BmXdY z9VV~m2mKk-+f8)`o|yW6Qhx?x z^;PNGI|yv5IoBY2IRn1oRY~%0b#S}@wg$6cvln15!7|mDyiM6I3y$HNHEaP)KbT>M z33NJ#%N%5HR{#B4`0(=C4YNDo`L^#b9Ir`S9{>y z0`D!3cZ4mD##gKT=^}#AcD}Xo{G(tGgVj7`Z2|VJVheb8F*0J?%I|ZQ=PK2)K94;? zMtOdZt%0<3i&_SFq{Bt{>hCW3s8&T!ZnAIQsNV)i&yhaw(i7H2%x_FpRUOxE;;H-K zKMOxqbYoy`UG`PB8I=DN>Gk(4o_?D2+#=~Y_-k9SU8KK?=TO^~?Ur|W)FzpEvjv{r z@O;0*%h;E>J_WeF@AIRXn@5|+Pek_;s;>PuT-*B zzxTm+9KP|ux2T#g$Cjk-#D9+4S37q0z`yFglK)>W-voQn<$bxDTVvn^yl3G3TEJ`O zd-^nVrvWo$Rn~_-yqI5LfhX1>x7lWx6CuxY?H=KsQcC6&TDB!OeZ-d@X5-N;$qC)9N-i^@q3T zZNw&m@>kWr&l^oHziiVq`~z>V#G(UVEbH}EiqBjKb^+{Ru$9<2c~$&{SI4G2qYt?v z_8gvf!Eg1UGOnFI)g}hi2mkSjlK*7o$)98nK|2NQjUrUWhnbh%+|b3!A<-tO zoesjk^4+E2ef^66(;sQ4JlK<9i(uQL^IK&s@}7Ea>Q9p@5X8os*3-X#7wxN6(7K@A zLLL!2k@Yr(Ct;PhAM7~TcUNP%`vJr04qY>4){KFzeP3mdFWRqJO#=~SS}m&{p|oZs z=Qwhvk@GW`XH1UvQsl?8&@=Z^5t82<_3YtO*|VM4>i3uYd!3v>C$k=njR;qE^=l{C zqhNPPsVn^&ZtFcyOpIZzHfKIY;a~otlD{Wv`@(vWPim zk9&|gh0F(>%xFKdRHY-)piro$FG_H7P9rC`ucCu-Iq@jv>P)p9=|gU#?n^8Ace?U~ z^a0Pmq7TbS?*)4T>>7tPw)ze<#>F+ZlD_PL!Jqv&=L(}^r83rtTj`i+l>i(&@t2hUCrbV&cwR);r#o6_RXn4Jy~vnfBHbl&nkcZL>q;60-A|6@m)H!2U_hXiMR8ta!QAE zS0I{Z?%zA&(s7|pdQ`8u#4TbQ?OJvQo+e~|HJL{n5wS64+q{_o++p~}9iNLecZAOH z=R5{dQk(a~vl;&7pDOvk4)`m5?(9R(`zZWWF19}>sc{b*LthQeBl{Tn93-D-Ew1y- zd4owhkJoNvNsXJBiw^!i8J|j$VPdN)M=vrq|6|E-e$;aGB*_TMu?HDFhf4nU7ngCe zHnne28Cv6>LdMKzi0uTrT50#dXD!Fb-qHH%O zmCdwK4z^)rOntVpZ{y-^jAOf>^oH21Z2TX13ZEb)Ns zCnni@apef=olSjniS_&xxHhr1<6!qZR5@c9_=q_j#R{CR$RQB*NBt$(M)4A?VZUmo;9m4DKg+LY7hTeY7%{zP- ztr=P;wCAWy{E3!_))T{ZL+g*>2A~bba9g2mjp4?i?TX>{LK~0a4nf-!!ySdTKZZLA z?NAIi18p*ftLY9But)-&~A&E@zP)0J{+ zoHRgdfOb&n@F(bA-eaq*O82npD`Dw|e;oezIsQsnBlkzPhYz5sETix(!1pxq@h93I zmG7HT+Ch~sMw^0`jnPg(YlaqX@3YWWK{Ngo@>Sk6#;ySEBRogiEAL$!vXznYt^(Qu z-(mR5YZKQ_k@cGQ=IUk=?-qD--zxbtE>Fj6-diiLmAvm%^QycD;hll^8;;lceB^8A z%#XXpZFyfy6PdAp@Qr?(^S;46X6#=i&s1&l`f@XQHDAeiJ;vTxnlDLu!FnW>nn*s& zV=e-SyKsd}^7%Mx+jlF!w5co(0+Dd4rVzeT(lh8EZ>o3Qr7upGEJ47&ZDSlTazUbW?o6$7R z$KYA@{e&1;!ad)I!S;ehrK5VAWttAAc-xkz!H$6?WYQKGCJ-jKNUMs)nF# z574u(;=VfMWBl4Y{JZ{*z5T!^B8%|(zzgfx-+Va9DKfrs3q{^@|Ol< zw@OBz_mzY);2F!8oP>Yx$&&vaSKsIw*j$tzaUGN1Z*GQnSs!-tM~Qm}Rd;r)+%4co z!M||vau0gHODH!n2+aXo;otfnCI2ftC)!h;8#_?F#?>5f2;TbttnBT^>#W1ttb~HN zm=+PTU1#Cj2j3s@tUuAx*D&6p)f$S8J2XN&0IjUYiaX@oon~sQRivLJz5MR|h}UNK zU|EBO_KD27F^%^D@JCMZzSk1I7@s7-vyB?;EAh5Jo`3L_gSp%<68^d=^i_*UjiX6q zH~bf|B%ZBo^hf)_^<9?Ntcq;C&Vp?OD|;lYiOIRU*p@@8zZRLKzcifAJ#mV+sNOl! zi==(~!oI(mr=xS(H3@oE zc=WmK401=28=lK*u4DYhXbsS|Lo3f^YU35qhM_$cJKPO+?_~4 zuxG%Q+cIeT*u9)8?{Tp8r++_IeUv6RwG!-OotFmSSp`oYJYR77oZusKuKVY7QrzcZ zt3l`NtI0Q36YUv_z2r6d(~>_+zKht2E^lvw%wi@{rrM{3%)y@}y+e6dWxRnCw&{9w z@-bq&z#am-9=^y}%tr4>liaOfPk{Y>{)_D0KCtyaFZr*nlB;Vzf^pZ*nXcfAZ1hR^ zdfmhb>I7PB{CFV3(hvUooadS6Rudk$>q$V0rFWwY|g-Gbb~UzGgM zczj9rrN>sMHYUxR#->WfVPu^76|up^%EsCJeCnA=GIYGb%t19bGX8&E*>6i|pPcuz z>N!YbpatIE-<15H@@(sXO^?p~UEbRg+ICH5eFC*LgK;;02KIUxZ&Q_jUqyC#A9Q=>U-iuALjpQm*Gq+chXoq_gZ5zL(9=7p>~3g&!A&Be8<(0_;Dmrn3O zxUW1OnpQpqc(=n#c**2r%ErkQv(Zz`thWz#{uu;&2<$7u*cux-%|B1|F$ej6Kl(~Ykt+<7`=v?KjOl9tUP1StS4R+`;U}e{b z!A^iJ&jHc+f0mU;#EmsE`7C^g;5!1}AkV=#;oOZGD4>Kn0cKgL@@}aaOY8}TG5U4P zBAC@-Iadc`*VyVNFhgMeK8zu1VC1xA*wU`mt(@j9fvP8XG_D7baS|DS5|$DAy^&p{ zpCx@NoId38;0DI6)%Xtf$PffoK3k+j!qamCDQ&wuD)-db6g$pYC6e*7!G)1j z`%ab_61gs8ZT%FO+{)SD{IzQn<1^pIbW%PVDS0zs3t;%VxZ%_IC?4prv5P&AwQCny+gsPQlc z-@wafgT2{s-?s67)kQHj`4iHwDfnt$F&nH~v=350Xls-s=``tC(m%?x>KvAurE1;YhcD)7d(d|<+z#FVQjd$wt?)2z#IefGL>aRUG@s% z)>$4$p)Wum72V9&Ysdws!1T*nqYDSX47AJ!<8_37Lw+%H6aT^{Jv;_x984e2=vTHl zk}mE{6?brsx2%Td-01?iqu^SCK8nrxYdAx2V}dNpR_7UvgIc)gdHt%hr>_}JJcY!|yzE61Co>9Gi zXX@e|+_Vw2eU_vx;Ld`>g*7;AfVv4=vC-gE&fQ>I*31Uy+}zxN>hW`P=#%|LL7VRs z*eMZJ*1aN zH+xV})h-92rHiwR@6WXJE;u-q9GNud6X)tebn6S+#V}`(VubT~GDB=C$jdgir&nCdste^Gs zPLA_8HmZTu_J>H%lK$r|eH%A7lVo_0k+zbw@|+&$oguwHfmi(XL+B=H|H5-w!kNI;tNz?~<_NrTmV99R;g7Hn5*ON)JwxwuiLxm>=Q39%Glg^b%shTd zGLBFuuBHeNBz}lMXdQTMo_XMz*liD~_ZH*jnFi!$Z83 zn+Mkot{dD*IhHZ~aP7)Fp*zB_U6gy&?7OKACy;UWvRVJRJgcp)rYk5}&tc}UuJ06>_)zKQK!|)AUIUB@Kl6X zimp>Q-OZ#OnL9(@@IrAo@Huo17LT}Q?O&qQyYcjy(RfTEww zU6*-H6{UPJL)lN4BB(BV$p19?|9fY3bXubcJ1wn%+xqDWnM+31sy!j6}gB&M%=ku}=ybW4qOoBeIcA?P#E zZw99}HGO`E>*sYD-I8bePUCP7*j3lNd4lii>x0k=&|bi^<-gA0d-ys{S`TRl6U(3V z9*Gqe4Z{zORf#ongu>cHvYTI{nB#2l8@187y^*`rVqE6uL+e+Eyu@Or4^;RjXKb;? z`z~aky>Zs=;h>qXhw5$4aJA9{Zc58C#PD8R_vh%OejPQkm{@k*bw*97`( z?A!pD`puQO-e44{G(EXmYb5iedQ0X6_&)Hxl1cxpA4!`foY!WS2WI|03}!c&KMr)g zJsN+e(Y1W6T9V<9>`ox-(5-x~hSw@aG3$4!A6Wwy`1S7{Om*qCJ5v}uy9i+Z5H=5X z;`UkpT`B{%ROd*VmCUOglx{ZhmCaz6-7)L`AYooKXMV^l_0sUPShj}t{NR50 z_YckbZze19(%R&TAjHz{GGjccT*txI--Ul{%cWRM=eDIgJQib{9nzdJ7B>Al>U{UC ze}%=WzMBHM`y84bg8{HPu*G}m>jWJy>q+X)B%f)0Ch?BPjhVY`2l3u;5Dc-le>ZtG zzq+FP;k73krXSLd7##Vhs?Ra_y5TFwR4eO7?>*r$Qvh2tOk08dt)64!oIdg15zAwB zMiH2BS-E=})*^Do?w$2F1-e+VL#|!2-ft3oMqEjL?je4_Gkf)aAZee~f2z zY}uNT6ia||tc_R;KAz$n`hOkoUg>`YEwaEn;oS{yQM|O}Hk@00+co9iENX!~2xbb5 z(P1!dZRTALvKHHzUd@p(cS5B-(^{sgYil<1IRJm-YiIpWEU|fn>*?Bgd8#f+|Jaa2 zVH$|kM(W*a-gU30B3`t^k}!)xlA>^QpAbV8@=1o?8^U^~HX9>xb-yllC| zYwA`n@*XoXoA~TSZukAO_Pq(M?Kf^qZ`$c~;d`&f_oj)9<}RS4;F@1g33l z9IeIez1S5NyCs<=ur=Fe{f{~9I_!g~)TP3iP;E_?wCpzKW^in!N#=@;W!&0|9WH=5 z2Bs?wCN_p#pLE&R0NP`X-=0Z**{inCh>=gQ8@We!R?lY#p`U_o{3pu9+}*j;d0 z9RDv5?{P4>U93Soz9f~YUGGl40Vl9(>>P~8MsK=C z%$RAze¬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 list) where T : SDKInterfaceBase #endregion } +#region 声明 + public delegate void LoginCallBack(string ID, Dictionary data); public delegate void PayCallBack(string goodsID, Dictionary data); @@ -612,4 +614,6 @@ public class SDKConfigData { public string SDKName; public string SDKContent; -} \ No newline at end of file +} + +#endregion \ No newline at end of file diff --git a/Assets/Script/Core/SDKManager/SDKManagerNew.cs b/Assets/Script/Core/SDKManager/SDKManagerNew.cs new file mode 100644 index 00000000..5f25ebc8 --- /dev/null +++ b/Assets/Script/Core/SDKManager/SDKManagerNew.cs @@ -0,0 +1,338 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +namespace FrameWork.SDKInterface +{ + public static class SDKManagerNew + { + static bool isInit = false; + const string c_callBackObjectName = "CallBackObject"; + static SDKCallBackListener s_callBackListener; + + #region 外部调用 + + #region 初始化 + + ///

+ /// 初始化 + /// + public static void Init() + { + if(!isInit) + { + GameObject go = new GameObject(c_callBackObjectName); + s_callBackListener = go.AddComponent(); + s_callBackListener.sdkCallBack = OnSDKCallBack; + + Dictionary data = new Dictionary(); + data.Add(SDKInterfaceDefine.ModuleName, SDKInterfaceDefine.ModuleName_Init); + data.Add(SDKInterfaceDefine.ListenerName, c_callBackObjectName); + + Call(data); + isInit = true; + } + } + + public static void Dispose() + { + if(isInit) + { + Dictionary data = new Dictionary(); + data.Add(SDKInterfaceDefine.ModuleName, SDKInterfaceDefine.ModuleName_Dispose); + + Call(data); + + s_callBackListener.sdkCallBack = null; + GameObject.Destroy(s_callBackListener.gameObject); + s_callBackListener = null; + + isInit = false; + } + } + + #endregion + + #region 登录 + + /// + /// 登陆,默认访问第一个接口 + /// + public static void Login() + { + + } + + /// + /// 登陆 + /// + public static void Login(string SDKName) + { + + } + + #endregion + + #region 支付 + + /// + /// 支付,默认访问第一个接口 + /// + public static void Pay(string goodsID, GoodsType goodsType = GoodsType.NORMAL,string orderID = null) + { + Dictionary data = new Dictionary(); + data.Add(SDKInterfaceDefine.ModuleName, SDKInterfaceDefine.ModuleName_Pay); //支付不传FunctionName + + data.Add(SDKInterfaceDefine.Pay_ParameterName_GoodsID, goodsID); + data.Add(SDKInterfaceDefine.Pay_ParameterName_GoodsType, goodsType.ToString()); + data.Add(SDKInterfaceDefine.Pay_ParameterName_CpOrderID, orderID); + + Call(data); + } + + #endregion + + #region 广告 + + /// + /// 加载广告,默认访问第一个接口 + /// + public static void LoadAD(ADType adType, string tag = "") + { + + } + + /// + /// 显示广告 + /// + public static void PlayAD(ADType adType, string tag = "") + { + + } + /// + /// 隐藏广告 + /// + /// + public static void CloseAD(ADType adType, string tag = "") + { + + } + + /// + /// 隐藏广告 + /// + /// + public static void CloseAD(string SDKName, ADType adType, string tag = "") + { + + } + + /// + /// 隐藏广告 + /// + /// + public static void CloseAD(string SDKName, ADType adType, string tag = "") where T : ADInterface + { + + } + + #endregion + + #region 数据上报 + + /// + /// 数据上报 + /// + /// + public static void Log(string eventID, Dictionary data) + { + + } + + public static void Log(string eventID, Dictionary data) + { + } + + #endregion + + #region 其他 + + public static void Exit() + { + Dictionary data = new Dictionary(); + data.Add(SDKInterfaceDefine.ModuleName, SDKInterfaceDefine.ModuleName_Other); + data.Add(SDKInterfaceDefine.FunctionName, SDKInterfaceDefine.Other_FunctionName_Exit); + Call(data); + } + + #endregion + + #endregion + + #region 回调接口 + + static void OnSDKCallBack(Dictionary data) + { + string mouduleName = data[SDKInterfaceDefine.ModuleName]; + + switch (mouduleName) + { + case SDKInterfaceDefine.ModuleName_Debug: + OnDebug(data); + break; + case SDKInterfaceDefine.ModuleName_Login: + OnLogin(data); + break; + case SDKInterfaceDefine.ModuleName_Pay: + OnPay(data); + break; + case SDKInterfaceDefine.ModuleName_AD: + OnAD(data); + break; + case SDKInterfaceDefine.ModuleName_Log: + OnLog(data); + break; + case SDKInterfaceDefine.ModuleName_Other: + OnOther(data); + break; + } + } + + #endregion + + #region SDK接口 + + #if UNITY_ANDROID + + static AndroidJavaClass androidInterface = null; + + #elif UNITY_IOS + + #endif + + static void Call(Dictionary data) + { + string content = Serializer.Serialize(data); + + #if UNITY_ANDROID + + if (androidInterface == null) + { + androidInterface = new AndroidJavaClass("SdkInterface.SdkInterface"); + } + androidInterface.CallStatic("UnityRequestFunction", content); + + #elif UNITY_IOS + + #endif + } + + #endregion + + #region 回调处理 + + #region Debug + + static void OnDebug(Dictionary data) + { + string functionName = data[SDKInterfaceDefine.FunctionName]; + string content = "SDKManagerNew "+ functionName + " : " + data[SDKInterfaceDefine.ParameterName_Content]; + + switch(functionName) + { + case SDKInterfaceDefine.FunctionName_OnError:Debug.LogError(content);break; + case SDKInterfaceDefine.FunctionName_OnLog: Debug.Log(content); break; + } + } + + #endregion + + #region Login + + static void OnLogin(Dictionary data) + { + + } + + #endregion + + #region Pay + + public static CallBack OnPayCallBack; + + static void OnPay(Dictionary data) + { + bool isSuccess = bool.Parse(data[SDKInterfaceDefine.ParameterName_IsSuccess]); + string goodsId = data[SDKInterfaceDefine.Pay_ParameterName_GoodsID]; + //GoodsType goodsType = (GoodsType)Enum.Parse(typeof(GoodsType),data[SDKInterfaceDefine.Pay_ParameterName_GoodsType]); + + OnPayInfo info = new OnPayInfo(); + info.isSuccess = isSuccess; + info.goodsId = goodsId; + + OnPayCallBack(info); + } + + #endregion + + #region AD + + static void OnAD(Dictionary data) + { + + } + + #endregion + + #region Log + + static void OnLog(Dictionary data) + { + + } + + #endregion + + #region Other + + static void OnOther(Dictionary data) + { + + } + #endregion + + #endregion + } + + #region 声明 + + public class SDKCallBackListener : MonoBehaviour + { + Deserializer deserializer = new Deserializer(); + + public CallBack> sdkCallBack; + + public void OnSDKCallBack(string str) + { + Dictionary data = deserializer.Deserialize>(str); + + sdkCallBack(data); + } + } + + public struct OnPayInfo + { + public bool isSuccess; + public string goodsId; + public GoodsType goodsType; + } + + public enum GoodsType + { + NORMAL, //可以反复购买的商品 + ONCE_ONLY, //只能购买一次的商品 + RIGHTS, //购买持续一段时间的商品,例如会员 + } + + #endregion +} \ No newline at end of file diff --git a/Assets/Script/Core/UI/Model/UIBase.cs b/Assets/Script/Core/UI/Model/UIBase.cs index 2a64fc8f..a173c2a7 100644 --- a/Assets/Script/Core/UI/Model/UIBase.cs +++ b/Assets/Script/Core/UI/Model/UIBase.cs @@ -1092,6 +1092,7 @@ public void SetGuideMode(GameObject go, int order = 1) canvas.sortingOrder = order; canvas.sortingLayerName = "Guide"; + if (!oldActive) { go.SetActive(false); From 0e75475da4b089b43b93304ebf5ce6ec68ab0c94 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Mon, 16 Apr 2018 18:22:45 +0800 Subject: [PATCH 050/108] guideDemo --- Assets/Resources/Data/GuideData.txt | 9 +++++---- .../UI/GuideWindow/GuideWindow.prefab | Bin 15552 -> 19960 bytes Assets/Scene/main.unity | Bin 15960 -> 18472 bytes Assets/Script/UI/GuideWindow/GuideWindow.cs | 11 +++++++++++ 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/Assets/Resources/Data/GuideData.txt b/Assets/Resources/Data/GuideData.txt index e5646b43..8a2b8648 100644 --- a/Assets/Resources/Data/GuideData.txt +++ b/Assets/Resources/Data/GuideData.txt @@ -1,7 +1,8 @@ GuideID StartPoint EndPoint Premise NextGuide CallToNext ClickToNext GuideWindowName GuideObjectName GuideItemName TipContent TipContentPos MaskAlpha type Bool Bool String String Bool Bool String StringArray StringArray String Vector3 Float note 引导开始点 引导结束点 前提条件 下一步引导,如果为空,则为下一条记录 是否接收调用去下一步引导 是否接收点击去下一步引导 引导的界面名字 高亮显示的对象名字 高亮的Item名字 提示文本内容 提示文本位置 遮罩Alpha -default False False Null Null False False Null Null Null Null 0|0|0 0.75 -1 True False True MainWindow Button_Shop Click to Open Shop -2 True ShopWindow Button_Close Click to Close shop -3 True True MainWindow Button_Start Click to start Game +default FALSE FALSE Null Null FALSE FALSE Null Null Null Null 0|0|0 0.75 +1 True True GuideWindow Click to continue +2 FALSE TRUE MainWindow Button_Shop Click to Open Shop +3 TRUE ShopWindow Button_Close Click to Close shop +4 TRUE TRUE MainWindow Button_Start Click to start Game diff --git a/Assets/Resources/UI/GuideWindow/GuideWindow.prefab b/Assets/Resources/UI/GuideWindow/GuideWindow.prefab index 6b0e8a7af5f6c74a6e9f7ed1c58e33e3b9cd7557..c33a588371ab15f93cc692d80d6c9466f398a12a 100644 GIT binary patch delta 3416 zcmZ`*Yiv|S6h3!vyDd;k@xcOx7NtmSwX|DWK!k3gK#R}^Z4r5uZF?yfw!3A!EmV|U z0=|P{1`r=H6oEuz;)7_K_y{P^06r27Mu|eA1~dr9VEBXeJ98iVpiX*n=X__r`OeIo zneE}8o3AVP5|uwewD2Yo4M%?mzEo0BT2QjOi2m*G?^gzYaPQVT?%O#f<-ltXB>9}7 z{=Zgq@7h{*w)w!uYljcK+Ly8KW8b+q!l0F^hhEN{@2D$Ae==+&jGICZ`iUswK|cvL z3dW7`dH6mCOM{JuaZ^Z@<42&+<1@wQ>8_$NG7@F2hR>|AFm8#gEXm52ktnMRKC{Nb zxFxdgku2;AB2m^h^qDmt#x0SR!>sTG8R4iR^WO=d^S=+qjqzT5--T7eCc?P!J}k!m ze1v`mESEuK$SN2g`4S$_b3aUp!H=1Eo`HvL!U;2wpFlWe;t$xkA$%G>3qJ@ONVov# zK*E#a@GwOz;lj88MJ(YW8#jbe6;jxZ??A#_NdpOUb;aURmrJlDAz%rY+PEQn6+W+c z3Tz^UY2qtwT&1PJbQ5n9 zFAi~4t+J!ZaeM1!98IBQ$y$rKS*4l52;)v#kD0yKf=Z;ZK68O6<%YrQmGCR&VgswZQLny_P|eqAub!|whIbx znJViTjTl*R&hNoEXCLEe3UcHhAM3}YU1B7DNgF=OZ}jDgxVjFTa|T5EP}isqj(T{8 zL2zp*36sR(S~8LZd>ZFMNdU8J|I zVZR~h^>^x0ZFayH2+j)o0xjzhkX|P`)q!BU*C$;HQX4gs7icB;KAuBsHA3x8wLz`3 zGwN38ot&Q?mctfy`9gY!PuGH&W3IPVtLO?EYpw4H>LIN@6!wNR#4MLRbIEc5FE>Wp z7zWG~w|z_91j_w-yVPk2>TPXWkQX)(RvifQYRyscT2asxivpHf6shuuw4m2GB69)r zg5HibdJC_h!5eJTLMA}7x5N9WiAO57QGoqE*M=$g&PNF`c6y7d*Q9 zudipSd*Hkee-Lc%)=NMB;U1$_!r5bDd2fF5(vjS;>P2AIxcRF#<(-<8rS2FU9hcQH z@%;AhDzenvAy~0VUVeN<*60ga>Nmiw36n)vQGVIklz#p>llyY9=RNMq{h)AdV|K;% zoxQm?BA)b9-A8!ih?)W?CXCh2)jU7#_yxzlL)*n?MRg*>-5|zHP8F5Y(!@shUC^-i zUA*8f5|fMX63g8g;``}ohpxMqI201=r#z!1iEm4qMB$W-yZNB3M3~G?6~o;V#W;7G z*ir198^J#-QTyjcSD9supE_A-TcW=u!vE+*%FdoSGXqoRwDTz%Zvqjg8gm=vA(@v$ z9*%V{aQL!W6~Rsb*67zmJ#+kRx?d}3tST@rLVnDB5L-%WL}Bqr@$S@-TvAw8d1Vb}m8+Z11W}O6Q7-ab$vP`11kfA03$;^h-To}YoB(QUyNCR zje$V}$OlpkWnULvxwTT9*#b%I!KOMR?sMYI2}ojBj%ptYdMd@-0Tc@c>SG6)cV9d2 z{0C{~2S729*ExWALG#1guZ?7wCjb@9fQo6&^WWWnP(zkk1E>O~&?})@>!iLM^9`UF zOrc!C_1>#4a?Ays3=B)4nq!W|%1PakW0v4TsAHLY)j?bKLFIa&8b}y0)CYvhyYx<3 zsPVPIf$wD5!O8ZHfs>n@r6w56k$r4TmlMgttOjdA~*_`5(!^Frq q`JziZP%_dresY4l03*}nLU(x}IniBu@(y>0$qmjDn|VCmumS)g?t?1; diff --git a/Assets/Scene/main.unity b/Assets/Scene/main.unity index cf93e1678025181184a95766cc3ca2e30bc0e447..7a199540dffe6dc3c325b630f26eb8d716c2c5be 100644 GIT binary patch literal 18472 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 bL<{3lWmawY^fU1XOPM=U!@t5#T*H3@n!Cb> diff --git a/Assets/Script/UI/GuideWindow/GuideWindow.cs b/Assets/Script/UI/GuideWindow/GuideWindow.cs index bbfe2ef6..8a83a1cf 100644 --- a/Assets/Script/UI/GuideWindow/GuideWindow.cs +++ b/Assets/Script/UI/GuideWindow/GuideWindow.cs @@ -4,6 +4,17 @@ public class GuideWindow : GuideWindowBase { + + public override void OnInit() + { + AddOnClickListener("mask", OnClickMask); + } + + void OnClickMask(InputUIOnClickEvent e) + { + + } + public override void ShowTips(string content, Vector3 pos) { if(content != null && content != "") From 184b0e3dd19957a1c8fdad110ae5c196b8f393ed Mon Sep 17 00:00:00 2001 From: GaoKai Date: Wed, 18 Apr 2018 16:13:56 +0800 Subject: [PATCH 051/108] SDKManager --- .../Core/SDKManager/SDKInterfaceDefine.cs | 2 + .../Script/Core/SDKManager/SDKManagerNew.cs | 51 ++++++++++++++++--- Assets/Script/Core/Utils/SystemInfoTool.cs | 2 +- 3 files changed, 48 insertions(+), 7 deletions(-) diff --git a/Assets/Script/Core/SDKManager/SDKInterfaceDefine.cs b/Assets/Script/Core/SDKManager/SDKInterfaceDefine.cs index 79edb197..0f1f5934 100644 --- a/Assets/Script/Core/SDKManager/SDKInterfaceDefine.cs +++ b/Assets/Script/Core/SDKManager/SDKInterfaceDefine.cs @@ -39,6 +39,8 @@ public class SDKInterfaceDefine //Login相关参数 public const string FunctionName_Logout = "Logout"; + public const string Login_ParameterName_Device = "Device"; + //Pay相关参数 public const string Pay_ParameterName_GoodsID = "GoodsID"; public const string Pay_ParameterName_GoodsType = "GoodsType"; diff --git a/Assets/Script/Core/SDKManager/SDKManagerNew.cs b/Assets/Script/Core/SDKManager/SDKManagerNew.cs index 5f25ebc8..babf5bac 100644 --- a/Assets/Script/Core/SDKManager/SDKManagerNew.cs +++ b/Assets/Script/Core/SDKManager/SDKManagerNew.cs @@ -60,7 +60,11 @@ public static void Dispose() /// public static void Login() { + Dictionary data = new Dictionary(); + data.Add(SDKInterfaceDefine.ModuleName, SDKInterfaceDefine.ModuleName_Login); + data.Add(SDKInterfaceDefine.Login_ParameterName_Device, Application.identifier); + Call(data); } /// public class JsonMessageProcessingController { + public const string ErrorCodeMessage = "ErrorCodeMessage"; public static void Init() { InputManager.AddAllEventListener(MessageReceiveCallBack); @@ -20,7 +21,8 @@ public static void Init() private static void MessageReceiveCallBack(InputNetworkMessageEvent inputEvent) { - Debug.Log("MessageReceiveCallBack ;" + JsonUtils.ToJson(inputEvent)); + if (ApplicationManager.Instance.m_AppMode != AppMode.Release) + Debug.Log("MessageReceiveCallBack ;" + JsonUtils.ToJson(inputEvent)); Type type = Type.GetType(inputEvent.m_MessgaeType); @@ -30,10 +32,17 @@ private static void MessageReceiveCallBack(InputNetworkMessageEvent inputEvent) return; } - object dataObj = JsonUtils.JsonToClassOrStruct( inputEvent.Data["Content"].ToString(),type);// deserializer.Deserialize(type, inputEvent.Data["Content"].ToString()); + object dataObj = JsonUtils.FromJson(type, inputEvent.Data["Content"].ToString());// deserializer.Deserialize(type, inputEvent.Data["Content"].ToString()); + MessageClassInterface msgInterface = (MessageClassInterface)dataObj; + msgInterface.DispatchMessage(); + + if(msgInterface is CodeMessageBase) + { + CodeMessageBase codeMsg = (CodeMessageBase)msgInterface; + + GlobalEvent.DispatchEvent(ErrorCodeMessage, codeMsg); + } - MethodInfo method= type.GetMethod("DispatchMessage"); - method.Invoke(dataObj, null); } static Dictionary mesDic = new Dictionary(); public static void SendMessage(T data) @@ -45,5 +54,6 @@ public static void SendMessage(T data) mesDic.Add("Content", content); NetworkManager.SendMessage(mt, mesDic); } + } diff --git a/Assets/Script/Core/Network/NetworkManager.cs b/Assets/Script/Core/Network/NetworkManager.cs index da03c9bb..b152c916 100644 --- a/Assets/Script/Core/Network/NetworkManager.cs +++ b/Assets/Script/Core/Network/NetworkManager.cs @@ -21,6 +21,8 @@ public static bool IsConnect } } + + /// /// 对旧代码的兼容 /// @@ -46,39 +48,31 @@ public static void Init(string networkInterfaceName) /// 通讯协议 public static void Init(ProtocolType protocolType = ProtocolType.Tcp) where TProtocol : INetworkInterface,new () where TSocket : SocketBase,new() { - //提前加载网络事件派发器,避免异步冲突 - InputManager.LoadDispatcher(); - InputManager.LoadDispatcher(); - + s_network = new TProtocol(); s_network.m_socketService = new TSocket(); - s_network.m_socketService.m_byteCallBack = s_network.SpiltMessage; - s_network.m_socketService.m_connectStatusCallback = ConnectStatusChange; - s_network.m_socketService.m_protocolType = protocolType; - s_network.m_socketService.Init(); - - s_network.Init(); - s_network.m_messageCallBack = ReceviceMeaasge; - - ApplicationManager.s_OnApplicationUpdate += Update; - ApplicationManager.s_OnApplicationQuit += DisConnect; //ApplicationManager.s_OnApplicationOnGUI += GUI; + NetInit(); } public static void Init(string networkInterfaceName,string socketName) { - //提前加载网络事件派发器,避免异步冲突 - InputManager.LoadDispatcher(); - InputManager.LoadDispatcher(); - Type type = Type.GetType(networkInterfaceName); s_network = Activator.CreateInstance(type) as INetworkInterface; Type socketType = Type.GetType(networkInterfaceName); - s_network.m_socketService = Activator.CreateInstance(socketType) as SocketBase; + + NetInit(); + } + + private static void NetInit() + { + //提前加载网络事件派发器,避免异步冲突 + InputManager.LoadDispatcher(); + InputManager.LoadDispatcher(); s_network.m_socketService.m_byteCallBack = s_network.SpiltMessage; s_network.m_socketService.m_connectStatusCallback = ConnectStatusChange; s_network.m_socketService.Init(); @@ -88,8 +82,50 @@ public static void Init(string networkInterfaceName,string socketName) ApplicationManager.s_OnApplicationUpdate += Update; ApplicationManager.s_OnApplicationQuit += DisConnect; + + HeatBeatInit(); } + private static byte[] heatBeatMsg; + private static void HeatBeatInit() + { + heatBeatMsg = System.Text.Encoding.UTF8.GetBytes("&"); + } + #region 心跳包操作 HeatBeat + private static float heatBeatDelayTime = 3f; + /// + /// 设置心跳包发送间隔时间 + /// + public static float HeatBeatDelayTime + { + get + { + return heatBeatDelayTime; + } + + set + { + heatBeatDelayTime =Mathf.Clamp( value,2f,100); + } + } + private static float tempHeatBeatTimer; + private static bool startSendHeatBeat = false; + private static void StartSendHeatBeatMsg() + { + if (startSendHeatBeat) + { + if(tempHeatBeatTimer<=0) + { + tempHeatBeatTimer = HeatBeatDelayTime; + SendMessage(heatBeatMsg); + } + else + { + tempHeatBeatTimer -= Time.unscaledDeltaTime; + } + } + } + #endregion public static void Dispose() { InputManager.UnLoadDispatcher(); @@ -117,6 +153,10 @@ public static void DisConnect() s_network.Close(); } + public static void SendMessage(byte[] msg) + { + s_network.m_socketService.Send(msg); + } public static void SendMessage(string messageType ,Dictionary data) { if(IsConnect) @@ -194,6 +234,15 @@ static void ConnectStatusChange(NetworkState status) static void Dispatch(NetworkState status) { InputNetworkEventProxy.DispatchStatusEvent(status); + + if(status == NetworkState.Connected) + { + startSendHeatBeat = true; + } + else + { + startSendHeatBeat = false; + } } #region Update @@ -238,7 +287,9 @@ static void Update() { s_network.Update(); } - + + StartSendHeatBeatMsg(); + } //static float msgCountTimer = 0; //static int count = 0; @@ -255,7 +306,7 @@ static void Update() // } //} - + #endregion } diff --git a/Assets/Script/Core/UI/Style/LanguageManager.cs b/Assets/Script/Core/UI/Style/LanguageManager.cs index c1203d12..0affcb89 100644 --- a/Assets/Script/Core/UI/Style/LanguageManager.cs +++ b/Assets/Script/Core/UI/Style/LanguageManager.cs @@ -117,7 +117,34 @@ public static string GetContent(string moduleName,string contentID, List { return GetContent(moduleName, contentID, contentParams.ToArray()); } - + /// + /// moduleName_key : MiniGame/title_0 + /// + /// + /// + /// + public static string GetContentByKey(string moduleName_key, params object[] contentParams) + { + string[] ss = moduleName_key.Split('/'); + string moduleName=""; + string contentID = ""; + if (ss.Length>2) + { + for (int i = 0; i < ss.Length-1; i++) + { + moduleName += ss[i]; + if (i != ss.Length - 2) + moduleName += "_"; + } + contentID = ss[2]; + } + else + { + moduleName = ss[0]; + contentID = ss[1]; + } + return GetContent(moduleName, contentID, contentParams); + } public static string GetContent(string moduleName, string contentID, params object[] contentParams) { Init(); From b12f8f4973af92a5a9dda6908a7ba55597caa4cc Mon Sep 17 00:00:00 2001 From: GaoKai Date: Thu, 12 Jul 2018 11:14:33 +0800 Subject: [PATCH 071/108] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E5=8F=B0=E7=9A=84=E4=B8=80=E4=B8=AAbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/Config/ConfigManager.cs | 28 +------------------ .../Core/ResourceLoad/ResourceManager.cs | 5 ++++ 2 files changed, 6 insertions(+), 27 deletions(-) diff --git a/Assets/Script/Core/Config/ConfigManager.cs b/Assets/Script/Core/Config/ConfigManager.cs index e61ae002..845eeda5 100644 --- a/Assets/Script/Core/Config/ConfigManager.cs +++ b/Assets/Script/Core/Config/ConfigManager.cs @@ -21,33 +21,7 @@ public static class ConfigManager public static bool GetIsExistConfig(string ConfigName) { - string dataJson = ""; - - #if UNITY_EDITOR - if(!Application.isPlaying) - { - dataJson = ResourceIOTool.ReadStringByResource( - PathTool.GetRelativelyPath(c_directoryName, - ConfigName, - c_expandName)); - } - else - { - dataJson = ResourceManager.ReadTextFile(ConfigName); - } - - #else - dataJson = ResourceManager.ReadTextFile(ConfigName); - #endif - - if (dataJson == "") - { - return false; - } - else - { - return true; - } + return ResourceManager.GetResourceIsExist(ConfigName); } public static Dictionary GetData(string ConfigName) diff --git a/Assets/Script/Core/ResourceLoad/ResourceManager.cs b/Assets/Script/Core/ResourceLoad/ResourceManager.cs index df78bd06..3b594af1 100644 --- a/Assets/Script/Core/ResourceLoad/ResourceManager.cs +++ b/Assets/Script/Core/ResourceLoad/ResourceManager.cs @@ -24,6 +24,11 @@ public static ResLoadLocation GetLoadType(ResLoadLocation loadType) return loadType; } + public static bool GetResourceIsExist(string name) + { + return ResourcesConfigManager.GetIsExitRes(name); + } + //读取一个文本 public static string ReadTextFile(string textName) { From b3c39dad3a8b6c0ae7337de4c4481a61c82dc4f1 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Wed, 1 Aug 2018 14:53:02 +0800 Subject: [PATCH 072/108] =?UTF-8?q?=E5=A2=9E=E5=BC=BA=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/Application/ApplicationManager.cs | 17 +- .../Script/Core/AudioManager/Audio2DPlayer.cs | 204 ++- .../Script/Core/AudioManager/Audio3DPlayer.cs | 418 +++-- Assets/Script/Core/AudioManager/AudioAsset.cs | 68 +- .../Core/AudioManager/AudioPlayManager.cs | 161 +- .../Core/AudioManager/AudioPlayerBase.cs | 375 ++++- Assets/Script/Core/Data/DataFieldAssetType.cs | 30 + .../Core/Data/DataFieldAssetType.cs.meta | 11 + .../Script/Core/Data/DataGenerateManager.cs | 1 + Assets/Script/Core/Data/DataTable.cs | 39 +- .../ApplicationManagerComponentEditor.cs | 1 + .../ApplicationStatusCreater.cs.meta | 4 +- Assets/Script/Core/Editor/AudioManager.meta | 8 + .../Editor/AudioManager/AudioManagerWindow.cs | 111 ++ .../AudioManager/AudioManagerWindow.cs.meta | 11 + .../Core/Editor/Data/DataConfigUtils.cs | 172 +++ .../Core/Editor/Data/DataConfigUtils.cs.meta | 11 + .../Core/Editor/Data/DataEditorWindow.cs | 1360 +++++++++++------ Assets/Script/Core/Editor/General.meta | 8 + .../General/GeneralDataModificationWindow.cs | 96 ++ .../GeneralDataModificationWindow.cs.meta | 13 + .../Editor/General/ObjectSelectorWindow.cs | 279 ++++ .../General/ObjectSelectorWindow.cs.meta | 11 + .../Language/LanguageDataEditorUtils.cs | 51 + .../Language/LanguageDataEditorUtils.cs.meta | 11 + .../Language/LanguageDataEditorWindow.cs | 554 ++++--- .../Package/PackageConfigEditorWindow.cs | 25 +- Assets/Script/Core/Editor/Resource.meta | 8 + .../Resource/PeojectAssetChangeEvent.cs | 76 + .../Resource/PeojectAssetChangeEvent.cs.meta | 11 + .../PeojectAssetWillModificationEvent.cs | 160 ++ .../PeojectAssetWillModificationEvent.cs.meta | 11 + .../UI/componment/LanguageComponmentEditor.cs | 47 +- .../Core/Editor/Utils/EditorDrawGUIUtil.cs | 1193 +++++++++++++++ .../Editor/Utils/EditorDrawGUIUtil.cs.meta | 13 + .../Core/Editor/Utils/EditorDrawGUIUtility.cs | 186 +++ .../Editor/Utils/EditorDrawGUIUtility.cs.meta | 11 + .../res/ApplicationStatusTemplate.txt.meta | 4 +- .../Core/GameObject/GameObjectManager.cs | 62 +- Assets/Script/Core/GlobalEvent/GlobalEvent.cs | 5 + .../InputOperationEventProxy.cs | 10 + Assets/Script/Core/Lua/LuaManager.cs | 2 +- Assets/Script/Core/Lua/ToLua/Core/ToLua.cs | 2 +- Assets/Script/Core/Lua/ToLua/Plugins.meta | 4 +- Assets/Script/Core/Lua/ToLua/Plugins/iOS.meta | 4 +- Assets/Script/Core/Lua/ToLua/PluginsRes.meta | 4 +- .../JsonMessageProcessingController.cs | 3 +- .../Core/ResourceLoad/ResourceManager.cs | 1 + .../ResourceLoad/ResourcesConfigManager.cs | 6 + .../SDKManager/SDKInterfaceDefine.cs.meta | 4 +- .../Core/SDKManager/SDKManagerNew.cs.meta | 4 +- Assets/Script/Core/UI/Components/EmptyUI.meta | 10 + .../UI/Components/EmptyUI/Empty4Raycast.cs | 19 + .../Components/EmptyUI/Empty4Raycast.cs.meta | 13 + .../LanguageComponent/LanguageComponent.cs | 7 +- Assets/Script/Core/UI/Control/UIManager.cs | 7 +- Assets/Script/Core/UI/Model/UIBase.cs | 19 + .../Script/Core/UI/Style/LanguageManager.cs | 51 +- Assets/Script/Core/Utils/ParseTool.cs | 2 +- Assets/Script/Core/Utils/ReflectionUtils.cs | 457 ++++++ .../Script/Core/Utils/ReflectionUtils.cs.meta | 13 + Assets/Script/Core/Utils/TextureScale.cs | 158 ++ Assets/Script/Core/Utils/TextureScale.cs.meta | 11 + 63 files changed, 5386 insertions(+), 1262 deletions(-) create mode 100644 Assets/Script/Core/Data/DataFieldAssetType.cs create mode 100644 Assets/Script/Core/Data/DataFieldAssetType.cs.meta create mode 100644 Assets/Script/Core/Editor/AudioManager.meta create mode 100644 Assets/Script/Core/Editor/AudioManager/AudioManagerWindow.cs create mode 100644 Assets/Script/Core/Editor/AudioManager/AudioManagerWindow.cs.meta create mode 100644 Assets/Script/Core/Editor/Data/DataConfigUtils.cs create mode 100644 Assets/Script/Core/Editor/Data/DataConfigUtils.cs.meta create mode 100644 Assets/Script/Core/Editor/General.meta create mode 100644 Assets/Script/Core/Editor/General/GeneralDataModificationWindow.cs create mode 100644 Assets/Script/Core/Editor/General/GeneralDataModificationWindow.cs.meta create mode 100644 Assets/Script/Core/Editor/General/ObjectSelectorWindow.cs create mode 100644 Assets/Script/Core/Editor/General/ObjectSelectorWindow.cs.meta create mode 100644 Assets/Script/Core/Editor/Language/LanguageDataEditorUtils.cs create mode 100644 Assets/Script/Core/Editor/Language/LanguageDataEditorUtils.cs.meta create mode 100644 Assets/Script/Core/Editor/Resource.meta create mode 100644 Assets/Script/Core/Editor/Resource/PeojectAssetChangeEvent.cs create mode 100644 Assets/Script/Core/Editor/Resource/PeojectAssetChangeEvent.cs.meta create mode 100644 Assets/Script/Core/Editor/Resource/PeojectAssetWillModificationEvent.cs create mode 100644 Assets/Script/Core/Editor/Resource/PeojectAssetWillModificationEvent.cs.meta create mode 100644 Assets/Script/Core/Editor/Utils/EditorDrawGUIUtil.cs create mode 100644 Assets/Script/Core/Editor/Utils/EditorDrawGUIUtil.cs.meta create mode 100644 Assets/Script/Core/Editor/Utils/EditorDrawGUIUtility.cs create mode 100644 Assets/Script/Core/Editor/Utils/EditorDrawGUIUtility.cs.meta create mode 100644 Assets/Script/Core/UI/Components/EmptyUI.meta create mode 100644 Assets/Script/Core/UI/Components/EmptyUI/Empty4Raycast.cs create mode 100644 Assets/Script/Core/UI/Components/EmptyUI/Empty4Raycast.cs.meta create mode 100644 Assets/Script/Core/Utils/ReflectionUtils.cs create mode 100644 Assets/Script/Core/Utils/ReflectionUtils.cs.meta create mode 100644 Assets/Script/Core/Utils/TextureScale.cs create mode 100644 Assets/Script/Core/Utils/TextureScale.cs.meta diff --git a/Assets/Script/Core/Application/ApplicationManager.cs b/Assets/Script/Core/Application/ApplicationManager.cs index 4ec6e53e..66c379bb 100644 --- a/Assets/Script/Core/Application/ApplicationManager.cs +++ b/Assets/Script/Core/Application/ApplicationManager.cs @@ -9,7 +9,12 @@ public class ApplicationManager : MonoBehaviour public static ApplicationManager Instance { - get { return ApplicationManager.instance; } + get { + if (instance == null) + { + instance = FindObjectOfType(); + } + return ApplicationManager.instance; } set { ApplicationManager.instance = value; } } @@ -58,12 +63,22 @@ public bool UseAssetsBundle public List m_globalLogic; [HideInInspector] public string currentStatus; + /// + /// 显示括号标识多语言转换的字段 + /// + public bool showLanguageValue = false; public void Awake() { instance = this; AppLaunch(); } + private void OnEnable() + { + instance = this; + Debug.Log(this.name + " : OnEnable"); + } + /// /// 程序启动 /// diff --git a/Assets/Script/Core/AudioManager/Audio2DPlayer.cs b/Assets/Script/Core/AudioManager/Audio2DPlayer.cs index 1fa9037a..4bdb54f4 100644 --- a/Assets/Script/Core/AudioManager/Audio2DPlayer.cs +++ b/Assets/Script/Core/AudioManager/Audio2DPlayer.cs @@ -3,167 +3,151 @@ using UnityEngine; - public class Audio2DPlayer: AudioPlayerBase - { - private Dictionary bgMusicDic = new Dictionary(); - private List sfxList = new List(); +public class Audio2DPlayer : AudioPlayerBase +{ + public Dictionary bgMusicDic = new Dictionary(); + public List sfxList = new List(); - public Audio2DPlayer(MonoBehaviour mono) : base(mono) { } + public Audio2DPlayer(MonoBehaviour mono) : base(mono) { } public override void SetMusicVolume(float volume) { + base.SetMusicVolume(volume); foreach (var item in bgMusicDic.Values) { item.TotleVolume = volume; } - musicVolume = volume; } public override void SetSFXVolume(float volume) { + base.SetSFXVolume(volume); for (int i = 0; i < sfxList.Count; i++) { sfxList[i].TotleVolume = volume; } - sfxVolume = volume; } - public void PlayMusic(int channel, string audioName, bool isLoop = true, float volumeScale = 1, float delay = 0f, float fadeTime = 0.5f) - { - AudioAsset au; + public void PlayMusic(int channel, string audioName, bool isLoop = true, float volumeScale = 1, float delay = 0f, float fadeTime = 0.5f) + { + AudioAsset au; - if (bgMusicDic.ContainsKey(channel)) - { - au = bgMusicDic[channel]; - } - else - { - au = CreateAudioAsset(mono.gameObject, false,true); - bgMusicDic.Add(channel, au); - } - if (au.assetName == audioName) - { - if (au.PlayState != AudioPlayState.Playing) - au.Play(delay); - } - else - { - au.assetName = audioName; - au.SetPlaying(); - mono.StartCoroutine(EaseToChangeVolume(au, audioName, isLoop, volumeScale, delay, fadeTime)); - } + if (bgMusicDic.ContainsKey(channel)) + { + au = bgMusicDic[channel]; } - public void PauseMusic(int channel, bool isPause) + else { - if (bgMusicDic.ContainsKey(channel)) - { - if (isPause) - { - if (bgMusicDic[channel].PlayState == AudioPlayState.Playing) - bgMusicDic[channel].Pause(); - } - else - { - if (bgMusicDic[channel].PlayState == AudioPlayState.Pause) - bgMusicDic[channel].Play(); - } + au = CreateAudioAsset(mono.gameObject, false, true); + bgMusicDic.Add(channel, au); + } + PlayMusicControl(au, audioName, isLoop, volumeScale, delay, fadeTime); + } + public void PauseMusic(int channel, bool isPause, float fadeTime = 0.5f) + { + if (bgMusicDic.ContainsKey(channel)) + { + AudioAsset au = bgMusicDic[channel]; + PauseMusicControl(au, isPause, fadeTime); - } } - public void PauseMusicAll(bool isPause) + } + public void PauseMusicAll(bool isPause, float fadeTime = 0.5f) + { + foreach (int i in bgMusicDic.Keys) { - foreach (int i in bgMusicDic.Keys) - { - PauseMusic(i, isPause); - } + PauseMusic(i, isPause, fadeTime); } + } - public void StopMusic(int channel) + public void StopMusic(int channel, float fadeTime = 0.5f) + { + if (bgMusicDic.ContainsKey(channel)) { - if (bgMusicDic.ContainsKey(channel)) - { - bgMusicDic[channel].Stop(); - } + StopMusicControl(bgMusicDic[channel], fadeTime); + } + + } + public void StopMusicAll() + { + foreach (int i in bgMusicDic.Keys) + { + StopMusic(i); } + } - public void StopMusicAll() + public void PlaySFX(string name, float volumeScale = 1f, float delay = 0f) + { + AudioAsset au = GetEmptyAudioAssetFromSFXList(); + PlayClip(au, name, false, volumeScale, delay); + + } + public void PauseSFXAll(bool isPause) + { + for (int i = 0; i < sfxList.Count; i++) { - foreach (int i in bgMusicDic.Keys) + if (isPause) { - StopMusic(i); + if (sfxList[i].PlayState == AudioPlayState.Playing) + sfxList[i].Pause(); + } + else + { + if (sfxList[i].PlayState == AudioPlayState.Pause) + sfxList[i].Play(); } } + } - public void PlaySFX(string name, float volumeScale = 1f, float delay = 0f) - { - AudioClip ac = GetAudioClip(name); - AudioAsset aa = GetEmptyAudioAssetFromSFXList(); - aa.audioSource.clip = ac; - aa.Play(delay); - aa.VolumeScale = volumeScale; - - } - public void PauseSFXAll(bool isPause) + private AudioAsset GetEmptyAudioAssetFromSFXList() + { + AudioAsset au = null; + if (sfxList.Count > 0) { for (int i = 0; i < sfxList.Count; i++) { - if (isPause) - { - if (sfxList[i].PlayState == AudioPlayState.Playing) - sfxList[i].Pause(); - } - else + sfxList[i].CheckState(); + if (sfxList[i].PlayState == AudioPlayState.Stop) { - if (sfxList[i].PlayState == AudioPlayState.Pause) - sfxList[i].Play(); + au = sfxList[i]; + break; } } } - - private AudioAsset GetEmptyAudioAssetFromSFXList() + if (au == null) { - AudioAsset au = null; - if (sfxList.Count > 0) - { - for (int i = 0; i < sfxList.Count; i++) - { - if (sfxList[i].PlayState == AudioPlayState.Stop) - au = sfxList[i]; - } - } - if (au == null) - { - au = CreateAudioAsset(mono.gameObject, false,false); - sfxList.Add(au); - } - return au; + au = CreateAudioAsset(mono.gameObject, false, false); + sfxList.Add(au); } + return au; + } - private List clearList = new List(); - public void ClearMoreAudioAsset() + private List clearList = new List(); + public void ClearMoreAudioAsset() + { + if (sfxList.Count > maxSFXAudioAssetNum) { - if (sfxList.Count > maxSFXAudioAssetNum) + + for (int i = 0; i < sfxList.Count; i++) { - - for (int i = 0; i < sfxList.Count; i++) + sfxList[i].CheckState(); + if (sfxList[i].PlayState == AudioPlayState.Stop) { - if (sfxList[i].PlayState == AudioPlayState.Stop) - { - clearList.Add(sfxList[i]); - } + clearList.Add(sfxList[i]); } + } - for (int i = 0; i < clearList.Count; i++) - { - if (sfxList.Count <= maxSFXAudioAssetNum) - break; - Object.Destroy(clearList[i].audioSource); - sfxList.Remove(clearList[i]); - } - clearList.Clear(); + for (int i = 0; i < clearList.Count; i++) + { + if (sfxList.Count <= maxSFXAudioAssetNum) + break; + Object.Destroy(clearList[i].audioSource); + sfxList.Remove(clearList[i]); } + clearList.Clear(); } + } +} - } diff --git a/Assets/Script/Core/AudioManager/Audio3DPlayer.cs b/Assets/Script/Core/AudioManager/Audio3DPlayer.cs index 76287938..2acf4985 100644 --- a/Assets/Script/Core/AudioManager/Audio3DPlayer.cs +++ b/Assets/Script/Core/AudioManager/Audio3DPlayer.cs @@ -2,16 +2,17 @@ using System.Collections.Generic; using UnityEngine; - public class Audio3DPlayer: AudioPlayerBase - { +public class Audio3DPlayer : AudioPlayerBase +{ - private Dictionary> bgMusicDic = new Dictionary>(); - private Dictionary> sfxDic = new Dictionary>(); + public Dictionary> bgMusicDic = new Dictionary>(); + public Dictionary> sfxDic = new Dictionary>(); - public Audio3DPlayer(MonoBehaviour mono) : base(mono) { } + public Audio3DPlayer(MonoBehaviour mono) : base(mono) { } public override void SetMusicVolume(float volume) { + base.SetMusicVolume(volume); foreach (var dics in bgMusicDic.Values) { foreach (var item in dics.Values) @@ -20,10 +21,11 @@ public override void SetMusicVolume(float volume) } } - musicVolume = volume; } public override void SetSFXVolume(float volume) { + base.SetSFXVolume(volume); + foreach (var item in sfxDic.Values) { for (int i = 0; i < item.Count; i++) @@ -31,290 +33,272 @@ public override void SetSFXVolume(float volume) item[i].TotleVolume = volume; } } - sfxVolume = volume; } - public void PlayMusic(GameObject owner, string audioName, int channel = 0, bool isLoop = true, float volumeScale = 1, float delay = 0f, float fadeTime = 0.5f) + public void PlayMusic(GameObject owner, string audioName, int channel = 0, bool isLoop = true, float volumeScale = 1, float delay = 0f, float fadeTime = 0.5f) + { + if (owner == null) { - if (owner == null) - { - Debug.LogError("can not play 3d player, owner is null"); - return; - } - AudioAsset au; - Dictionary tempDic; - if (bgMusicDic.ContainsKey(owner)) - { - tempDic = bgMusicDic[owner]; - } - else - { - tempDic = new Dictionary(); - bgMusicDic.Add(owner, tempDic); - } - if (tempDic.ContainsKey(channel)) - { - au = tempDic[channel]; - } - else - { - au = CreateAudioAsset(owner, true,true); - tempDic.Add(channel, au); - } - - if (au.assetName == audioName) - { - if (au.PlayState != AudioPlayState.Playing) - au.Play(delay); - } - else - { - au.assetName = audioName; - au.SetPlaying(); - mono.StartCoroutine(EaseToChangeVolume(au, audioName, isLoop, volumeScale, delay, fadeTime)); - } + Debug.LogError("can not play 3d player, owner is null"); + return; } - public void PauseMusic(GameObject owner, int channel, bool isPause) + AudioAsset au; + Dictionary tempDic; + if (bgMusicDic.ContainsKey(owner)) { - if (owner == null) - { - Debug.LogError("can not Pause , owner is null"); - return; - } - if (bgMusicDic.ContainsKey(owner)) - { - Dictionary tempDic = bgMusicDic[owner]; - if (tempDic.ContainsKey(channel)) - { - if (isPause) - { - if (tempDic[channel].PlayState == AudioPlayState.Playing) - tempDic[channel].Pause(); - } - else - { - if (tempDic[channel].PlayState == AudioPlayState.Pause) - tempDic[channel].Play(); - } - } - - } + tempDic = bgMusicDic[owner]; } - public void PauseMusicAll(bool isPause) + else { - foreach (GameObject i in bgMusicDic.Keys) - { - foreach (int t in bgMusicDic[i].Keys) - PauseMusic(i, t, isPause); - } + tempDic = new Dictionary(); + bgMusicDic.Add(owner, tempDic); } - - public void StopMusic(GameObject owner, int channel) + if (tempDic.ContainsKey(channel)) { - if (bgMusicDic.ContainsKey(owner)) - { - Dictionary tempDic = bgMusicDic[owner]; - if (tempDic.ContainsKey(channel)) - { - tempDic[channel].Stop(); - } - } + au = tempDic[channel]; + } + else + { + au = CreateAudioAsset(owner, true, true); + tempDic.Add(channel, au); + } + PlayMusicControl(au, audioName, isLoop, volumeScale, delay, fadeTime); + } + public void PauseMusic(GameObject owner, int channel, bool isPause, float fadeTime = 0.5f) + { + if (owner == null) + { + Debug.LogError("can not Pause , owner is null"); + return; } - public void StopMusicOneAll(GameObject owner) + if (bgMusicDic.ContainsKey(owner)) { - if (bgMusicDic.ContainsKey(owner)) + Dictionary tempDic = bgMusicDic[owner]; + if (tempDic.ContainsKey(channel)) { - List list = new List(bgMusicDic[owner].Keys); - for (int i = 0; i < list.Count; i++) - { - StopMusic(owner, list[i]); - } + AudioAsset au = tempDic[channel]; + PauseMusicControl(au, isPause, fadeTime); } } - public void StopMusicAll() + } + public void PauseMusicAll(bool isPause, float fadeTime = 0.5f) + { + foreach (GameObject i in bgMusicDic.Keys) { - List list = new List(bgMusicDic.Keys); - for (int i = 0; i < list.Count; i++) - { - StopMusicOneAll(list[i]); - } + foreach (int t in bgMusicDic[i].Keys) + PauseMusic(i, t, isPause, fadeTime); } - public void ReleaseMusic(GameObject owner) + } + + public void StopMusic(GameObject owner, int channel, float fadeTime = 0.5f) + { + if (bgMusicDic.ContainsKey(owner)) { - if (bgMusicDic.ContainsKey(owner)) + Dictionary tempDic = bgMusicDic[owner]; + if (tempDic.ContainsKey(channel)) { - StopMusicOneAll(owner); - List list = new List(bgMusicDic[owner].Values); - for (int i = 0; i < list.Count; i++) - { - Object.Destroy(list[i].audioSource); - } - list.Clear(); + StopMusicControl(tempDic[channel], fadeTime); } - bgMusicDic.Remove(owner); } - public void ReleaseMusicAll() + + } + public void StopMusicOneAll(GameObject owner) + { + if (bgMusicDic.ContainsKey(owner)) { - List list = new List(sfxDic.Keys); + List list = new List(bgMusicDic[owner].Keys); for (int i = 0; i < list.Count; i++) { - ReleaseMusic(list[i]); + StopMusic(owner, list[i]); } - bgMusicDic.Clear(); } - public void PlaySFX(GameObject owner, string name, float volumeScale = 1f, float delay = 0f) + } + public void StopMusicAll() + { + List list = new List(bgMusicDic.Keys); + for (int i = 0; i < list.Count; i++) { - AudioClip ac = GetAudioClip(name); - AudioAsset aa = GetEmptyAudioAssetFromSFXList(owner); - aa.audioSource.clip = ac; - aa.assetName = name; - aa.Play(delay); - aa.VolumeScale = volumeScale; - ClearMoreAudioAsset(owner); + StopMusicOneAll(list[i]); } - public void PlaySFX(Vector3 position, string name, float volumeScale = 1f, float delay = 0f) + } + public void ReleaseMusic(GameObject owner) + { + if (bgMusicDic.ContainsKey(owner)) { - AudioClip ac = GetAudioClip(name); - if (ac) - mono.StartCoroutine(PlaySFXIEnumerator(position, ac, AudioPlayManager.TotleVolume* AudioPlayManager.SFXVolume * volumeScale, delay)); + StopMusicOneAll(owner); + List list = new List(bgMusicDic[owner].Values); + for (int i = 0; i < list.Count; i++) + { + Object.Destroy(list[i].audioSource); + } + list.Clear(); } - private IEnumerator PlaySFXIEnumerator(Vector3 position, AudioClip ac, float volume, float delay) + bgMusicDic.Remove(owner); + } + public void ReleaseMusicAll() + { + List list = new List(sfxDic.Keys); + for (int i = 0; i < list.Count; i++) { - yield return new WaitForSeconds(delay); - AudioSource.PlayClipAtPoint(ac, position, volume); + ReleaseMusic(list[i]); } - public void PauseSFXAll(bool isPause) + bgMusicDic.Clear(); + } + + public void PlaySFX(GameObject owner, string name, float volumeScale = 1f, float delay = 0f) + { + AudioAsset au = GetEmptyAudioAssetFromSFXList(owner); + PlayClip(au, name, false, volumeScale, delay); + ClearMoreAudioAsset(owner); + } + public void PlaySFX(Vector3 position, string name, float volumeScale = 1f, float delay = 0f) + { + AudioClip ac = GetAudioClip(name); + if (ac) + mono.StartCoroutine(PlaySFXIEnumerator(position, ac, AudioPlayManager.TotleVolume * AudioPlayManager.SFXVolume * volumeScale, delay)); + } + private IEnumerator PlaySFXIEnumerator(Vector3 position, AudioClip ac, float volume, float delay) + { + yield return new WaitForSeconds(delay); + AudioSource.PlayClipAtPoint(ac, position, volume); + } + public void PauseSFXAll(bool isPause) + { + List list = new List(sfxDic.Keys); + for (int j = 0; j < list.Count; j++) { - List list = new List(sfxDic.Keys); - for (int j = 0; j < list.Count; j++) + List sfxList = sfxDic[list[j]]; + for (int i = 0; i < sfxList.Count; i++) { - List sfxList = sfxDic[list[j]]; - for (int i = 0; i < sfxList.Count; i++) + if (isPause) { - if (isPause) - { - if (sfxList[i].PlayState == AudioPlayState.Playing) - sfxList[i].Pause(); - } - else - { - if (sfxList[i].PlayState == AudioPlayState.Pause) - sfxList[i].Play(); - } + if (sfxList[i].PlayState == AudioPlayState.Playing) + sfxList[i].Pause(); } - } - } - public void ReleaseSFX(GameObject owner) - { - if (owner && sfxDic.ContainsKey(owner)) - { - List sfxList = sfxDic[owner]; - for (int i = 0; i < sfxList.Count; i++) + else { - Object.Destroy(sfxList[i].audioSource); + if (sfxList[i].PlayState == AudioPlayState.Pause) + sfxList[i].Play(); } - sfxList.Clear(); - sfxDic.Remove(owner); } } - public void ReleaseSFXAll() + } + public void ReleaseSFX(GameObject owner) + { + if (owner && sfxDic.ContainsKey(owner)) { - List list = new List(sfxDic.Keys); - for (int i = 0; i < list.Count; i++) + List sfxList = sfxDic[owner]; + for (int i = 0; i < sfxList.Count; i++) { - ReleaseSFX(list[i]); + Object.Destroy(sfxList[i].audioSource); } - sfxDic.Clear(); + sfxList.Clear(); + sfxDic.Remove(owner); } - private AudioAsset GetEmptyAudioAssetFromSFXList(GameObject owner) + } + public void ReleaseSFXAll() + { + List list = new List(sfxDic.Keys); + for (int i = 0; i < list.Count; i++) { - AudioAsset au = null; - List sfxList = null; - if (sfxDic.ContainsKey(owner)) + ReleaseSFX(list[i]); + } + sfxDic.Clear(); + } + private AudioAsset GetEmptyAudioAssetFromSFXList(GameObject owner) + { + AudioAsset au = null; + List sfxList = null; + if (sfxDic.ContainsKey(owner)) + { + sfxList = sfxDic[owner]; + if (sfxList.Count > 0) { - sfxList = sfxDic[owner]; - if (sfxList.Count > 0) + for (int i = 0; i < sfxList.Count; i++) { - for (int i = 0; i < sfxList.Count; i++) + sfxList[i].CheckState(); + if (sfxList[i].PlayState == AudioPlayState.Stop) { - if (sfxList[i].PlayState == AudioPlayState.Stop) - au = sfxList[i]; + au = sfxList[i]; + break; } - } } - else - { - sfxList = new List(); - sfxDic.Add(owner, sfxList); - } - if (au == null) - { - au = CreateAudioAsset(owner, true,false); - sfxList.Add(au); - } + } + else + { + sfxList = new List(); + sfxDic.Add(owner, sfxList); - return au; } + if (au == null) + { + au = CreateAudioAsset(owner, true, false); + sfxList.Add(au); + } + + return au; + } - private List tempClearList = new List(); - private void ClearMoreAudioAsset(GameObject owner) + private List tempClearList = new List(); + private void ClearMoreAudioAsset(GameObject owner) + { + if (sfxDic.ContainsKey(owner)) { - if (sfxDic.ContainsKey(owner)) + List sfxList = sfxDic[owner]; + if (sfxList.Count > maxSFXAudioAssetNum) { - List sfxList = sfxDic[owner]; - if (sfxList.Count > maxSFXAudioAssetNum) + for (int i = 0; i < sfxList.Count; i++) { - for (int i = 0; i < sfxList.Count; i++) + sfxList[i].CheckState(); + if (sfxList[i].PlayState == AudioPlayState.Stop) { - if (sfxList[i].PlayState == AudioPlayState.Stop) - { - tempClearList.Add(sfxList[i]); - } + tempClearList.Add(sfxList[i]); } + } - for (int i = 0; i < tempClearList.Count; i++) - { - if (sfxList.Count <= maxSFXAudioAssetNum) - break; - Object.Destroy(tempClearList[i].audioSource); - sfxList.Remove(tempClearList[i]); - } - tempClearList.Clear(); + for (int i = 0; i < tempClearList.Count; i++) + { + if (sfxList.Count <= maxSFXAudioAssetNum) + break; + Object.Destroy(tempClearList[i].audioSource); + sfxList.Remove(tempClearList[i]); } + tempClearList.Clear(); } } + } - private List clearList = new List(); - public void ClearDestroyObjectData() + private List clearList = new List(); + public void ClearDestroyObjectData() + { + if (bgMusicDic.Count > 0) { - if (bgMusicDic.Count > 0) - { - clearList.Clear(); - clearList.AddRange(bgMusicDic.Keys); + clearList.Clear(); + clearList.AddRange(bgMusicDic.Keys); - for (int i = 0; i < clearList.Count; i++) - { - if (clearList[i] == null) - bgMusicDic.Remove(clearList[i]); - } + for (int i = 0; i < clearList.Count; i++) + { + if (clearList[i] == null) + bgMusicDic.Remove(clearList[i]); } - if (sfxDic.Count > 0) + } + if (sfxDic.Count > 0) + { + clearList.Clear(); + clearList.AddRange(sfxDic.Keys); + for (int i = 0; i < clearList.Count; i++) { - clearList.Clear(); - clearList.AddRange(sfxDic.Keys); - for (int i = 0; i < clearList.Count; i++) - { - if (clearList[i] == null) - sfxDic.Remove(clearList[i]); - } + if (clearList[i] == null) + sfxDic.Remove(clearList[i]); } } - } +} + diff --git a/Assets/Script/Core/AudioManager/AudioAsset.cs b/Assets/Script/Core/AudioManager/AudioAsset.cs index 41644a9b..b4a14b67 100644 --- a/Assets/Script/Core/AudioManager/AudioAsset.cs +++ b/Assets/Script/Core/AudioManager/AudioAsset.cs @@ -1,6 +1,7 @@ using UnityEngine; using System.Collections; using System.Collections.Generic; + public enum AudioPlayState { Playing, @@ -25,6 +26,7 @@ public float TotleVolume set { + totleVolume = value; Volume = TotleVolume * volumeScale; } @@ -38,6 +40,17 @@ public float Volume set { audioSource.volume = value; } } /// + /// 实际音量恢复到当前的最大 + /// + public void ResetVolume() + { + Volume = TotleVolume * volumeScale; + } + public float GetMaxRealVolume() + { + return TotleVolume * volumeScale; + } + /// /// 相对于总音量当前当前AudioSource的音量缩放 Volume=TotleVolume * volumeScale /// private float volumeScale = 1f; @@ -47,7 +60,7 @@ public float VolumeScale set { volumeScale = Mathf.Clamp01(value); - Volume = TotleVolume * volumeScale; + ResetVolume(); } } public bool IsPlay @@ -60,22 +73,28 @@ public AudioPlayState PlayState { get { - if (audioSource==null ||( !audioSource.isPlaying && playState != AudioPlayState.Pause)) - playState = AudioPlayState.Stop; + //if (audioSource == null || (!audioSource.isPlaying && playState != AudioPlayState.Pause)) + // playState = AudioPlayState.Stop; return playState; } } - - public void SetPlaying() + + public void SetPlayState(AudioPlayState state) { - playState = AudioPlayState.Playing; + playState = state; } + public void CheckState() + { + if (audioSource == null || (!audioSource.isPlaying && playState != AudioPlayState.Pause)) + playState = AudioPlayState.Stop; + + } - public void Play(float delay = 0f) + public void Play(float delay = 0f) { if (audioSource != null && audioSource.clip != null) { @@ -98,6 +117,41 @@ public void Stop() audioSource.Stop(); playState = AudioPlayState.Stop; } + } + + public class VolumeFadeData + { + public AudioAsset au; + public float fadeTime; + /// + /// 记录临时音量 + /// + public float tempVolume; + /// + /// 延迟播放music + /// + public float delayTime; + public VolumeFadeType fadeType; + public VolumeFadeStateType fadeState; + public CallBack fadeCompleteCallBack; + /// + /// 用于VolumeFadeType.FadeOut2In 当fade out完成时回调 + /// + public CallBack fadeOutCompleteCallBack; + } + public enum VolumeFadeType + { + FadeIn, + FadeOut, + FadeOut2In, } + public enum VolumeFadeStateType + { + FadeIn, + FadeOut, + Delay, + Complete, + } + diff --git a/Assets/Script/Core/AudioManager/AudioPlayManager.cs b/Assets/Script/Core/AudioManager/AudioPlayManager.cs index 3cf169f6..ef8f4932 100644 --- a/Assets/Script/Core/AudioManager/AudioPlayManager.cs +++ b/Assets/Script/Core/AudioManager/AudioPlayManager.cs @@ -5,105 +5,105 @@ public class AudioPlayManager : MonoBehaviour { - static Audio2DPlayer a2DPlayer; - static Audio3DPlayer a3DPlayer; + public static Audio2DPlayer a2DPlayer; + public static Audio3DPlayer a3DPlayer; - [RuntimeInitializeOnLoadMethod] - private static void Init() - { - GameObject obj = new GameObject("[AudioManager]"); - AudioPlayManager audioManager = obj.AddComponent(); - DontDestroyOnLoad(obj); - - a2DPlayer = new Audio2DPlayer(audioManager); - a3DPlayer = new Audio3DPlayer(audioManager); - TotleVolume = RecordManager.GetFloatRecord("GameSettingData", "TotleVolume", 1f); - MusicVolume = RecordManager.GetFloatRecord("GameSettingData", "MusicVolume", 1f); - SFXVolume = RecordManager.GetFloatRecord("GameSettingData", "SFXVolume", 1f); - } - #region Volume - private static float totleVolume = 1f; - public static float TotleVolume - { - get { return totleVolume; } - set + [RuntimeInitializeOnLoadMethod] + private static void Init() { - totleVolume = Mathf.Clamp01(value); - SetMusicVolume(); - SetSFXVolume(); + GameObject obj = new GameObject("[AudioManager]"); + AudioPlayManager audioManager = obj.AddComponent(); + DontDestroyOnLoad(obj); + a2DPlayer = new Audio2DPlayer(audioManager); + a3DPlayer = new Audio3DPlayer(audioManager); + TotleVolume = RecordManager.GetFloatRecord("GameSettingData", "TotleVolume", 1f); + MusicVolume = RecordManager.GetFloatRecord("GameSettingData", "MusicVolume", 1f); + SFXVolume = RecordManager.GetFloatRecord("GameSettingData", "SFXVolume", 1f); } - } - - public static float MusicVolume - { - get + #region Volume + private static float totleVolume = 1f; + public static float TotleVolume { - return musicVolume; - } + get { return totleVolume; } + set + { + totleVolume = Mathf.Clamp01(value); + SetMusicVolume(); + SetSFXVolume(); - set - { - musicVolume = Mathf.Clamp01(value); - SetMusicVolume(); + } } - } - public static float SFXVolume - { - get + public static float MusicVolume { - return sfxVolume; + get + { + return musicVolume; + } + + set + { + musicVolume = Mathf.Clamp01(value); + SetMusicVolume(); + } } - set + public static float SFXVolume { - sfxVolume = Mathf.Clamp01(value); - SetSFXVolume(); + get + { + return sfxVolume; + } + + set + { + sfxVolume = Mathf.Clamp01(value); + SetSFXVolume(); + } } - } - private static float musicVolume = 1f; + private static float musicVolume = 1f; - private static float sfxVolume = 1f; + private static float sfxVolume = 1f; - private static void SetMusicVolume() - { - a2DPlayer.SetMusicVolume(totleVolume * musicVolume); - a3DPlayer.SetMusicVolume(totleVolume * musicVolume); - } - private static void SetSFXVolume() - { - a2DPlayer.SetSFXVolume(totleVolume * sfxVolume); - a3DPlayer.SetSFXVolume(totleVolume * sfxVolume); - } + private static void SetMusicVolume() + { + a2DPlayer.SetMusicVolume(totleVolume * musicVolume); + a3DPlayer.SetMusicVolume(totleVolume * musicVolume); + } + private static void SetSFXVolume() + { + a2DPlayer.SetSFXVolume(totleVolume * sfxVolume); + a3DPlayer.SetSFXVolume(totleVolume * sfxVolume); + } - public static void SaveVolume() - { - RecordManager.SaveRecord("GameSettingData", "TotleVolume", TotleVolume); - RecordManager.SaveRecord("GameSettingData", "MusicVolume", MusicVolume); - RecordManager.SaveRecord("GameSettingData", "SFXVolume", SFXVolume); - } - #endregion + public static void SaveVolume() + { + RecordManager.SaveRecord("GameSettingData", "TotleVolume", TotleVolume); + RecordManager.SaveRecord("GameSettingData", "MusicVolume", MusicVolume); + RecordManager.SaveRecord("GameSettingData", "SFXVolume", SFXVolume); + } + #endregion - public static void PlayMusic2D(string name, int channel, float volumeScale = 1, bool isLoop = true, float fadeTime = 0.5f) + public static void PlayMusic2D(string name, int channel, float volumeScale = 1, bool isLoop = true, float fadeTime = 0.5f, float delay = 0f) { - a2DPlayer.PlayMusic(channel, name, isLoop, volumeScale, fadeTime); + a2DPlayer.PlayMusic(channel, name, isLoop, volumeScale, delay, fadeTime); } - public static void PauseMusic2D(int channel, bool isPause) + public static void PauseMusic2D(int channel, bool isPause, float fadeTime = 0.5f) { - a2DPlayer.PauseMusic(channel, isPause); + a2DPlayer.PauseMusic(channel, isPause, fadeTime); } - public static void PauseMusicAll2D(bool isPause) + public static void PauseMusicAll2D(bool isPause, float fadeTime = 0.5f) { - a2DPlayer.PauseMusicAll(isPause); + a2DPlayer.PauseMusicAll(isPause, fadeTime); } - public static void StopMusic2D(int channel) + public static void StopMusic2D(int channel, float fadeTime = 0.5f) { - a2DPlayer.StopMusic(channel); + a2DPlayer.StopMusic(channel, fadeTime); } public static void StopMusicAll2D() @@ -121,22 +121,22 @@ public static void PauseSFXAll2D(bool isPause) } - public static void PlayMusic3D(GameObject owner, string audioName, int channel = 0, float delay = 0f, float volumeScale = 1, bool isLoop = true, float fadeTime = 0.5f) + public static void PlayMusic3D(GameObject owner, string audioName, int channel = 0, float volumeScale = 1, bool isLoop = true, float fadeTime = 0.5f, float delay = 0f) { a3DPlayer.PlayMusic(owner, audioName, channel, isLoop, volumeScale, delay, fadeTime); } - public static void PauseMusic3D(GameObject owner, int channel, bool isPause) + public static void PauseMusic3D(GameObject owner, int channel, bool isPause, float fadeTime = 0.5f) { - a3DPlayer.PauseMusic(owner, channel, isPause); + a3DPlayer.PauseMusic(owner, channel, isPause, fadeTime); } - public static void PauseMusicAll3D(bool isPause) + public static void PauseMusicAll3D(bool isPause, float fadeTime = 0.5f) { - a3DPlayer.PauseMusicAll(isPause); + a3DPlayer.PauseMusicAll(isPause, fadeTime); } - public static void StopMusic3D(GameObject owner, int channel) + public static void StopMusic3D(GameObject owner, int channel, float fadeTime = 0.5f) { - a3DPlayer.StopMusic(owner, channel); + a3DPlayer.StopMusic(owner, channel, fadeTime); } public static void StopMusicOneAll3D(GameObject owner) @@ -177,6 +177,8 @@ public static void ReleaseSFXAll3D() { a3DPlayer.ReleaseSFXAll(); } + + float runTimeCount = 0; void Update() { @@ -190,6 +192,9 @@ void Update() { runTimeCount -= Time.unscaledDeltaTime; } + + a2DPlayer.UpdateFade(); + a3DPlayer.UpdateFade(); } } diff --git a/Assets/Script/Core/AudioManager/AudioPlayerBase.cs b/Assets/Script/Core/AudioManager/AudioPlayerBase.cs index d9c1cb47..d3237b53 100644 --- a/Assets/Script/Core/AudioManager/AudioPlayerBase.cs +++ b/Assets/Script/Core/AudioManager/AudioPlayerBase.cs @@ -1,38 +1,61 @@  using System; using System.Collections; +using System.Collections.Generic; using UnityEngine; - public abstract class AudioPlayerBase - { - protected MonoBehaviour mono; - protected int maxSFXAudioAssetNum = 10; - protected float musicVolume = 1f; - protected float sfxVolume = 1f; - public AudioPlayerBase(MonoBehaviour mono) +public class AudioPlayerBase +{ + protected MonoBehaviour mono; + protected int maxSFXAudioAssetNum = 10; + private float musicVolume = 1f; + public float MusicVolume + { + get { - this.mono = mono; + return musicVolume; } - public void SetMaxSFXAudioAssetNum(int max) + } + + private float sfxVolume = 1f; + public float SFXVolume + { + get { - maxSFXAudioAssetNum = Mathf.Clamp(max, 5, 100); + return sfxVolume; } - public abstract void SetMusicVolume(float volume); - public abstract void SetSFXVolume(float volume); + } + public AudioPlayerBase(MonoBehaviour mono) + { + this.mono = mono; + } + + public void SetMaxSFXAudioAssetNum(int max) + { + maxSFXAudioAssetNum = Mathf.Clamp(max, 5, 100); + } + public virtual void SetMusicVolume(float volume) + { + musicVolume = volume; + } + public virtual void SetSFXVolume(float volume) + { + sfxVolume = volume; + } - public AudioClip GetAudioClip(string name) + public AudioClip GetAudioClip(string name) + { + AudioClip red = ResourceManager.Load(name); + if (red != null) { - AudioClip red = ResourceManager.Load(name); - if (red != null) - { - return red; - } - Debug.LogError("Can not find AudioClip:" + name); - return null; + return red; } + Debug.LogError("Can not find AudioClip:" + name); + return null; + } public AudioAsset CreateAudioAsset(GameObject gameObject, bool is3D, bool isMusic) { @@ -45,37 +68,301 @@ public AudioAsset CreateAudioAsset(GameObject gameObject, bool is3D, bool isMusi au.TotleVolume = sfxVolume; return au; } + protected void PlayClip(AudioAsset au, string audioName, bool isLoop = true, float volumeScale = 1, float delay = 0f) + { + au.assetName = audioName; + AudioClip ac = GetAudioClip(au.assetName); + au.audioSource.clip = ac; + au.audioSource.loop = isLoop; + au.Play(delay); + au.VolumeScale = volumeScale; + } - public IEnumerator EaseToChangeVolume(AudioAsset au, string name, bool isLoop, float volumeScale, float delay, float fadeTime) + protected void PlayMusicControl(AudioAsset au, string audioName, bool isLoop = true, float volumeScale = 1, float delay = 0f, float fadeTime = 0.5f) + { + if (au.assetName == audioName) { - AudioClip ac = GetAudioClip(name); - float oldVolume = au.Volume; - float target = au.Volume; - if (au.audioSource && au.IsPlay) + if (au.PlayState != AudioPlayState.Playing) { - while (target > 0f) + au.SetPlayState(AudioPlayState.Playing); + AddFade(au, VolumeFadeType.FadeIn, fadeTime, delay, null, null); + au.Play(); + } + } + else + { + AudioPlayState state = au.PlayState; + au.SetPlayState(AudioPlayState.Playing); + if (state == AudioPlayState.Playing) + { + AddFade(au, VolumeFadeType.FadeOut2In, fadeTime, delay, null, (value) => + { + PlayClip(value, audioName, isLoop, volumeScale, delay); + + }); + } + else + { + PlayClip(au, audioName, isLoop, volumeScale, delay); + AddFade(au, VolumeFadeType.FadeIn, fadeTime, delay, null, null); + } + + } + } + protected void PauseMusicControl(AudioAsset au, bool isPause, float fadeTime = 0.5f) + { + if (isPause) + { + //Debug.Log("PauseMusicControl Pause : "+ au.PlayState); + if (au.PlayState == AudioPlayState.Playing) + { + au.SetPlayState(AudioPlayState.Pause); + //Debug.Log("PauseMusicControl Pause"); + AddFade(au, VolumeFadeType.FadeOut, fadeTime, 0, (value) => + { + //Debug.LogWarning("PauseMusicControl Pause fade CallBack"); + value.Pause(); + }, null); + } + } + else + { + //Debug.Log("PauseMusicControl play : "+ au.PlayState); + if (au.PlayState == AudioPlayState.Pause) + { + //Debug.Log("PauseMusicControl play"); + au.SetPlayState(AudioPlayState.Playing); + AddFade(au, VolumeFadeType.FadeIn, fadeTime, 0, null, null); + au.Play(); + + + } + } + } + protected void StopMusicControl(AudioAsset au, float fadeTime = 0.5f) + { + if (au.PlayState != AudioPlayState.Stop) + { + au.SetPlayState(AudioPlayState.Stop); + Debug.Log("StopMusicControl Stop"); + AddFade(au, VolumeFadeType.FadeOut, fadeTime, 0, (value) => + { + Debug.LogWarning("StopMusicControl Stop fade CallBack"); + value.Stop(); + }, null); + } + } + + + protected Dictionary fadeData = new Dictionary(); + private List deleteAssets = new List(); + + private Queue catcheData = new Queue(); + + + + public void UpdateFade() + { + //Debug.LogWarning("UpdateFade Count: " + fadeData.Count); + if (fadeData.Count > 0) + { + foreach (var item in fadeData.Values) + { + bool isComplete = false; + switch (item.fadeType) + { + case VolumeFadeType.FadeIn: + isComplete = FadeIn(item); + break; + case VolumeFadeType.FadeOut: + isComplete = FadeOut(item); + break; + case VolumeFadeType.FadeOut2In: + //Debug.Log("FadeOut2In"); + isComplete = FadeOut2In(item); + break; + } + if (isComplete) { - float speed = oldVolume / fadeTime; - target = target - speed * Time.fixedDeltaTime; - au.Volume = target; - yield return new WaitForFixedUpdate(); + //Debug.Log("isComplete"); + deleteAssets.Add(item.au); } - au.Stop(); } - au.assetName = name; - au.audioSource.clip = ac; - au.audioSource.loop = isLoop; - au.Play(delay); - target = 0; - yield return new WaitForSeconds(delay); - - while (target < oldVolume) + + if (deleteAssets.Count > 0) + { + for (int i = 0; i < deleteAssets.Count; i++) + { + AudioAsset au = deleteAssets[i]; + VolumeFadeData data = fadeData[au]; + if (data.fadeCompleteCallBack != null) + { + data.fadeCompleteCallBack(au); + } + + data.fadeCompleteCallBack = null; + data.fadeOutCompleteCallBack = null; + catcheData.Enqueue(data); + //Debug.Log("Remove"); + fadeData.Remove(au); + } + + deleteAssets.Clear(); + } + } + } + public void AddFade(AudioAsset au, VolumeFadeType fadeType, float fadeTime, float delay, CallBack fadeCompleteCallBack, CallBack fadeOutCompleteCallBack) + { + VolumeFadeData data = null; + + if (fadeData.ContainsKey(au)) + { + data = fadeData[au]; + + } + else + { + if (catcheData.Count > 0) + { + data = catcheData.Dequeue(); + } + else + { + data = new VolumeFadeData(); + } + fadeData.Add(au, data); + //Debug.Log("Add"); + } + if (data.fadeOutCompleteCallBack != null) + data.fadeOutCompleteCallBack(data.au); + if (data.fadeCompleteCallBack != null) + data.fadeCompleteCallBack(data.au); + + data.fadeCompleteCallBack = null; + data.fadeOutCompleteCallBack = null; + data.au = au; + data.fadeType = fadeType; + data.fadeTime = fadeTime; + if (data.fadeTime <= 0) + data.fadeTime = 0.000001f; + data.fadeCompleteCallBack = fadeCompleteCallBack; + data.fadeOutCompleteCallBack = fadeOutCompleteCallBack; + + switch (data.fadeType) + { + case VolumeFadeType.FadeIn: + // data.au.Volume = 0; + data.fadeState = VolumeFadeStateType.FadeIn; + break; + case VolumeFadeType.FadeOut: + data.fadeState = VolumeFadeStateType.FadeOut; + // data.au.ResetVolume(); + break; + case VolumeFadeType.FadeOut2In: + data.fadeState = VolumeFadeStateType.FadeOut; + // data.au.ResetVolume(); + break; + } + data.tempVolume = data.au.Volume; + data.delayTime = delay; + //Debug.Log("AddFade"); + + } + + /// + /// 声音淡入 + /// + /// + /// 返回true,淡入完成 + private bool FadeIn(VolumeFadeData data) + { + //Debug.Log("FadeIn"); + if (string.IsNullOrEmpty(data.au.assetName)) + { + data.au.ResetVolume(); + return true; + } + float oldVolume = data.tempVolume; + + float speed = data.au.GetMaxRealVolume() / data.fadeTime * 2f; + oldVolume = oldVolume + speed * Time.deltaTime; + //Debug.Log("FadeIn:data.au.Volume " + data.au.Volume + " dowm :" + oldVolume); + data.au.Volume = oldVolume; + data.tempVolume = oldVolume; + + if (oldVolume < data.au.GetMaxRealVolume()) + return false; + else + { + data.au.ResetVolume(); + + return true; + } + } + + public bool FadeOut(VolumeFadeData data) + { + //Debug.Log("FadeOut"); + if (string.IsNullOrEmpty(data.au.assetName)) + { + data.au.Volume = 0; + return true; + } + + float oldVolume = data.tempVolume; + + float speed = data.au.GetMaxRealVolume() / data.fadeTime; + oldVolume = oldVolume - speed * Time.deltaTime; + //Debug.Log("FadeOut:data.au.Volume " + data.au.Volume+" dowm :"+ oldVolume); + //Debug.Log(" FadeOut fade State :" + data.fadeState); + data.au.Volume = oldVolume; + data.tempVolume = oldVolume; + + if (oldVolume > 0) + return false; + else + { + data.au.Volume = 0; + + return true; + } + } + + public bool FadeOut2In(VolumeFadeData data) + { + //Debug.Log(" FadeOut2In :" + data.fadeTime); + + if (data.fadeState == VolumeFadeStateType.FadeOut) + { + if (FadeOut(data)) + { + data.fadeState = VolumeFadeStateType.Delay; + + if (data.fadeOutCompleteCallBack != null) + data.fadeOutCompleteCallBack(data.au); + return false; + } + } + else if (data.fadeState == VolumeFadeStateType.Delay) + { + data.delayTime -= Time.deltaTime; + if (data.delayTime <= 0) + { + data.fadeState = VolumeFadeStateType.FadeIn; + return false; + } + } + else if (data.fadeState == VolumeFadeStateType.FadeIn) + { + if (FadeIn(data)) { - float speed = oldVolume / fadeTime * 1.2f; - target = target + speed * Time.fixedDeltaTime; - au.Volume = target; - yield return new WaitForFixedUpdate(); + data.fadeState = VolumeFadeStateType.Complete; + return true; } - au.VolumeScale = volumeScale; } + + return false; } +} + + diff --git a/Assets/Script/Core/Data/DataFieldAssetType.cs b/Assets/Script/Core/Data/DataFieldAssetType.cs new file mode 100644 index 00000000..9cfeec51 --- /dev/null +++ b/Assets/Script/Core/Data/DataFieldAssetType.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; + +/// +/// 字段的用途区分 +/// +public enum DataFieldAssetType +{ + /// + /// 单纯的数据 + /// + Data, + /// + /// 多语言字段 + /// + LocalizedLanguage, + /// + /// 预制 + /// + Prefab, + /// + /// 关联其他表格的key + /// + TableKey, + /// + /// 图片资源 + /// + Texture, +} + diff --git a/Assets/Script/Core/Data/DataFieldAssetType.cs.meta b/Assets/Script/Core/Data/DataFieldAssetType.cs.meta new file mode 100644 index 00000000..f3fdd82a --- /dev/null +++ b/Assets/Script/Core/Data/DataFieldAssetType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e9ece4b66c501454f9d06b99a8e46536 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Data/DataGenerateManager.cs b/Assets/Script/Core/Data/DataGenerateManager.cs index ff940301..0011ec04 100644 --- a/Assets/Script/Core/Data/DataGenerateManager.cs +++ b/Assets/Script/Core/Data/DataGenerateManager.cs @@ -37,6 +37,7 @@ public static T GetData(string key) } } + /// /// 全查表 /// diff --git a/Assets/Script/Core/Data/DataTable.cs b/Assets/Script/Core/Data/DataTable.cs index cee4b84a..8948622a 100644 --- a/Assets/Script/Core/Data/DataTable.cs +++ b/Assets/Script/Core/Data/DataTable.cs @@ -14,6 +14,7 @@ public class DataTable : Dictionary const string c_fieldTypeTableTitle = "type"; const char c_EnumSplit = '|'; + const char c_DataFieldAssetTypeSplit = '&'; public string m_tableName; @@ -47,6 +48,11 @@ public class DataTable : Dictionary /// public List TableIDs = new List(); + /// + /// 字段的用途区分 + /// + public Dictionary m_fieldAssetTypes = new Dictionary(); + /// /// 将文本解析为表单数据 /// @@ -191,21 +197,33 @@ public static void AnalysisFieldType(DataTable l_data, string[] l_lineData) { if (!l_lineData[i].Equals("")) { - string[] content = l_lineData[i].Split(c_EnumSplit); + string field = l_data.TableKeys[i]; + + string[] tempType = l_lineData[i].Split(c_DataFieldAssetTypeSplit); + string[] content = tempType[0].Split(c_EnumSplit); try { - l_data.m_tableTypes.Add(l_data.TableKeys[i], (FieldType)Enum.Parse(typeof(FieldType), content[0])); + l_data.m_tableTypes.Add(field, (FieldType)Enum.Parse(typeof(FieldType), content[0])); if (content.Length > 1) { - l_data.m_tableEnumTypes.Add(l_data.TableKeys[i], content[1]); + l_data.m_tableEnumTypes.Add(field, content[1]); } } catch(Exception e) { throw new Exception("AnalysisFieldType Exception: " + content + "\n" + e.ToString()); } + + if (tempType.Length > 1) + { + l_data.m_fieldAssetTypes.Add(field, (DataFieldAssetType)Enum.Parse(typeof(DataFieldAssetType), tempType[1])); + } + else + { + l_data.m_fieldAssetTypes.Add(field, DataFieldAssetType.Data); + } } } } @@ -254,6 +272,12 @@ public static string Serialize(DataTable data) typeString = FieldType.String.ToString(); } + if (data.m_fieldAssetTypes.ContainsKey(key)) + { + if (data.m_fieldAssetTypes[key] != DataFieldAssetType.Data) + typeString += "&" + data.m_fieldAssetTypes[key]; + } + build.Append(typeString); if (i != data.TableKeys.Count - 1) @@ -341,10 +365,13 @@ public static string Serialize(DataTable data) for (int i = 0; i < data.TableKeys.Count; i++) { string valueTmp = ""; - - if (dataTmp.ContainsKey(data.TableKeys[i])) + string field = data.TableKeys[i]; + string defaultV=""; + if (data.m_defaultValue.ContainsKey(field)) + defaultV = data.m_defaultValue[field]; + if (dataTmp.ContainsKey(field) && dataTmp[field]!= defaultV) { - valueTmp = dataTmp[data.TableKeys[i]]; + valueTmp = dataTmp[field]; } build.Append(valueTmp); diff --git a/Assets/Script/Core/Editor/Application/ApplicationManagerComponentEditor.cs b/Assets/Script/Core/Editor/Application/ApplicationManagerComponentEditor.cs index 0184036d..cd8757ad 100644 --- a/Assets/Script/Core/Editor/Application/ApplicationManagerComponentEditor.cs +++ b/Assets/Script/Core/Editor/Application/ApplicationManagerComponentEditor.cs @@ -21,6 +21,7 @@ public override void OnInspectorGUI() m_statusList = GetStatusList(); m_currentSelectIndex = GetStatusIndex(); + //m_app.showLanguageValue = EditorGUILayout.Toggle("Show Language Value", m_app.showLanguageValue); m_currentSelectIndex = EditorGUILayout.Popup("First Status:", m_currentSelectIndex, m_statusList); diff --git a/Assets/Script/Core/Editor/Application/ApplicationStatusCreater.cs.meta b/Assets/Script/Core/Editor/Application/ApplicationStatusCreater.cs.meta index 4b711615..704c70db 100644 --- a/Assets/Script/Core/Editor/Application/ApplicationStatusCreater.cs.meta +++ b/Assets/Script/Core/Editor/Application/ApplicationStatusCreater.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 655692f65c7348d4b89ce4f50226aee2 -timeCreated: 1524378257 +guid: b830ada5c2f733e4d9d4845863b6ab93 +timeCreated: 1524378118 licenseType: Pro MonoImporter: externalObjects: {} diff --git a/Assets/Script/Core/Editor/AudioManager.meta b/Assets/Script/Core/Editor/AudioManager.meta new file mode 100644 index 00000000..55d15e1c --- /dev/null +++ b/Assets/Script/Core/Editor/AudioManager.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 17d82f7fda74f5a4a98b6f70753b4ef0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/AudioManager/AudioManagerWindow.cs b/Assets/Script/Core/Editor/AudioManager/AudioManagerWindow.cs new file mode 100644 index 00000000..51d871e7 --- /dev/null +++ b/Assets/Script/Core/Editor/AudioManager/AudioManagerWindow.cs @@ -0,0 +1,111 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using System; + +public class AudioManagerWindow : EditorWindow { + + [MenuItem("Window/音频状态管理(1002)",priority =1002)] + private static void OpenWindow() + { + AudioManagerWindow win = GetWindow(); + win.autoRepaintOnSceneChange = true; + win.wantsMouseMove = true; + EditorWindow.FocusWindowIfItsOpen(); + win.Init(); + } + + private void Init() + { + + } + private int toolbarOption = 0; + private string[] toolbarTexts = { "2D Player", "3D Player" }; + private void OnGUI() + { + toolbarOption = GUILayout.Toolbar(toolbarOption, toolbarTexts, GUILayout.Width(Screen.width)); + + if (!Application.isPlaying) + return; + switch (toolbarOption) + { + case 0: + A2DPlayerGUI(); + break; + case 1: + A3DPlayerGUI(); + break; + + } + } + + private void A3DPlayerGUI() + { + + } + + private void A2DPlayerGUI() + { + Dictionary bgMusicDic = AudioPlayManager.a2DPlayer.bgMusicDic; + + EditorGUILayout.Slider("Music Volume : ", AudioPlayManager.a2DPlayer.MusicVolume, 0, 1); + EditorGUILayout.Slider("SFX Volume : ", AudioPlayManager.a2DPlayer.SFXVolume, 0, 1); + + EditorDrawGUIUtil.DrawFoldout(bgMusicDic, "Music Channel Count:"+ bgMusicDic.Count, () => + { + EditorDrawGUIUtil.DrawScrollView(bgMusicDic, () => + { + foreach (var item in bgMusicDic) + { + GUILayout.Label("Channel : " + item.Key); + ShowAudioAssetGUI(item.Value,false); + } + },"box"); + }); + + List sfxList = AudioPlayManager.a2DPlayer.sfxList; + + EditorDrawGUIUtil.DrawFoldout(sfxList, "SFX Count:" + sfxList.Count, () => + { + EditorDrawGUIUtil.DrawScrollView(sfxList, () => + { + for (int i = 0; i < sfxList.Count; i++) + { + AudioAsset au = sfxList[i]; + GUILayout.Label("Item : " + i); + ShowAudioAssetGUI(au,false); + } + + }, "box"); + }); + + } + + private void ShowAudioAssetGUI(AudioAsset au,bool isShowAudioSource) + { + Color color = Color.white; + switch (au.PlayState) + { + case AudioPlayState.Playing: + color = Color.green; + break; + case AudioPlayState.Pause: + color = Color.yellow; + break; + case AudioPlayState.Stop: + break; + + } + GUI.color = color; + GUILayout.BeginVertical("box"); + GUILayout.Label("Asset Name : " + au.assetName); + GUILayout.Label("Play State : " + au.PlayState); + EditorGUILayout.Slider("VolumeScale : ",au.VolumeScale, 0, 1); + EditorGUILayout.Slider("Volume : ", au.Volume, 0, au.GetMaxRealVolume()); + if (isShowAudioSource) + EditorGUILayout.ObjectField("AudioSource : ", au.audioSource, typeof(AudioSource), true); + GUILayout.EndVertical(); + GUI.color = Color.white; + } +} diff --git a/Assets/Script/Core/Editor/AudioManager/AudioManagerWindow.cs.meta b/Assets/Script/Core/Editor/AudioManager/AudioManagerWindow.cs.meta new file mode 100644 index 00000000..624a45af --- /dev/null +++ b/Assets/Script/Core/Editor/AudioManager/AudioManagerWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2089ba2590a9b6b48a34028171de567c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/Data/DataConfigUtils.cs b/Assets/Script/Core/Editor/Data/DataConfigUtils.cs new file mode 100644 index 00000000..c07aa705 --- /dev/null +++ b/Assets/Script/Core/Editor/Data/DataConfigUtils.cs @@ -0,0 +1,172 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using UnityEngine; +using HDJ.Framework.Utils; + + +public static class DataConfigUtils +{ + public static Type ConfigFieldValueType2Type(FieldType fieldValueType,string enumType) + { + Type t = null; + switch (fieldValueType) + { + case FieldType.String: + t = typeof(string); + break; + case FieldType.Bool: + t = typeof(bool); + break; + case FieldType.Int: + t = typeof(int); + break; + case FieldType.Float: + t = typeof(float); + break; + case FieldType.Vector2: + t = typeof(Vector2); + break; + case FieldType.Vector3: + t = typeof(Vector3); + break; + case FieldType.Color: + t = typeof(Color); + break; + case FieldType.Enum: + t = ReflectionUtils.GetTypeByTypeFullName(enumType); + break; + case FieldType.StringArray: + t = typeof(string[]); + break; + case FieldType.IntArray: + t = typeof(int[]); + break; + case FieldType.FloatArray: + t = typeof(float[]); + break; + case FieldType.BoolArray: + t = typeof(bool[]); + break; + case FieldType.Vector2Array: + t = typeof(Vector2[]); + break; + case FieldType.Vector3Array: + t = typeof(Vector3[]); + break; + default: + break; + } + + return t; + } + + public static string ObjectValue2TableString(object value) + { + string res = ""; + if (value == null) + return res; + + Type t = value.GetType(); + if (t.IsArray) + { + PropertyInfo pL= t.GetProperty("Length"); + int length= (int) pL.GetValue(value, null); + MethodInfo mth= t.GetMethod("GetValue", new Type[] { typeof(int) }); + for (int i = 0; i < length; i++) + { + object v = mth.Invoke(value, new object[] { i }); + res += SingleData2String(v); + if (i < length - 1) + res += "|"; + } + + } + else + { + res = SingleData2String(value); + } + + return res; + + } + /// + /// 非数组转换 + /// + /// + /// + private static string SingleData2String(object value) + { + Type t = value.GetType(); + if (t == typeof(Vector2)) + { + Vector2 v2 = (Vector2)value; + return v2.x + "," + v2.y; + } + if (t == typeof(Vector3)) + { + Vector3 v3 = (Vector3)value; + return v3.x + "," + v3.y + "," + v3.z; + } + else + return value.ToString(); + } + public static object TableString2ObjectValue( string v, FieldType fieldValueType, string enumType) + { + object t = null; + switch (fieldValueType) + { + case FieldType.String: + t = v; + break; + case FieldType.Bool: + t = bool.Parse(v); + break; + case FieldType.Int: + t = int.Parse(v); + break; + case FieldType.Float: + t = float.Parse(v); + break; + case FieldType.Vector2: + t = ParseTool.String2Vector2(v); + break; + case FieldType.Vector3: + t = ParseTool.String2Vector3(v); + break; + case FieldType.Color: + t = ParseTool.String2Color(v); + break; + case FieldType.Enum: + Type type = ConfigFieldValueType2Type(fieldValueType,enumType); + t= Enum.Parse(type, v); + break; + case FieldType.StringArray: + t = ParseTool.String2StringArray(v); + break; + case FieldType.IntArray: + t = ParseTool.String2IntArray(v); + break; + case FieldType.FloatArray: + t = ParseTool.String2FloatArray(v); + break; + case FieldType.BoolArray: + t = ParseTool.String2BoolArray(v); + break; + case FieldType.Vector2Array: + t = ParseTool.String2Vector2(v); + break; + case FieldType.Vector3Array: + t = ParseTool.String2Vector3Array(v); + break; + default: + break; + } + + return t; + + } +} + diff --git a/Assets/Script/Core/Editor/Data/DataConfigUtils.cs.meta b/Assets/Script/Core/Editor/Data/DataConfigUtils.cs.meta new file mode 100644 index 00000000..2ea63fb7 --- /dev/null +++ b/Assets/Script/Core/Editor/Data/DataConfigUtils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 90125cf179ea5f047ae02b8e6b660e1d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/Data/DataEditorWindow.cs b/Assets/Script/Core/Editor/Data/DataEditorWindow.cs index 2c3591ac..7d2573fd 100644 --- a/Assets/Script/Core/Editor/Data/DataEditorWindow.cs +++ b/Assets/Script/Core/Editor/Data/DataEditorWindow.cs @@ -8,33 +8,47 @@ using System.IO; using System.Text; using FrameWork; +using HDJ.Framework.Utils; public class DataEditorWindow : EditorWindow { UILayerManager m_UILayerManager; + static DataEditorWindow win; [MenuItem("Window/数据编辑器 &2", priority = 501)] public static void ShowWindow() { - EditorWindow.GetWindow(typeof(DataEditorWindow)); + win = EditorWindow.GetWindow(); + win.autoRepaintOnSceneChange = true; + FocusWindowIfItsOpen(); + win.wantsMouseMove = true; } List m_dataNameList = new List(); - string m_currentDataName; DataTable m_currentData; - Dictionary m_foldList = new Dictionary(); - + //Dictionary m_foldList = new Dictionary(); + private List langKeys; void OnEnable() { - //ConvertUtf8(); - - m_currentSelectIndex = 0; EditorGUIStyleData.Init(); FindAllDataName(); - } + langKeys = LanguageDataEditorUtils.GetLanguageLayersKeyList(); + + if (!string.IsNullOrEmpty(chooseFileName)) + LoadData(chooseFileName); + configFileNames.Clear(); + string m_directoryPath = Application.dataPath + "/Resources/" + DataManager.c_directoryName; + configFileNames.AddRange(PathUtils.GetDirectoryFileNames(m_directoryPath, new string[] { ".txt" }, false, false)); + + } + public static void Refresh() + { + if (win) + win.OnEnable(); + } //当选择改变时 void OnSelectionChange() { @@ -50,11 +64,11 @@ void OnProjectChange() FindAllDataName(); - if (m_currentDataName != null - && m_currentDataName != "" - && m_currentDataName != "None") + if (chooseFileName != null + && chooseFileName != "" + && chooseFileName != "None") { - LoadData(m_currentDataName); + LoadData(chooseFileName); } } } @@ -65,598 +79,1040 @@ void OnGUI() { titleContent.text = "数据编辑器"; - EditorGUILayout.BeginVertical(); - - SelectDataGUI(); - - DataGUI(); - - AddDataGUI(); + EditorDrawGUIUtil.RichTextSupport = true; + GUILayout.Space(8); + ChooseFile(); + GUILayout.Space(5); + DrawTableDataGUI(); + GUILayout.FlexibleSpace(); + SaveDataGUI(); + GenerateDataClassGUI(); GenerateAllDataClassGUI(); CleanCacheGUI(); - - EditorGUILayout.EndVertical(); - } - - #region 数据文件相关 - - int m_currentSelectIndex = 0; - void SelectDataGUI() - { - string[] mask = m_dataNameList.ToArray(); - m_currentSelectIndex = EditorGUILayout.Popup("当前数据:", m_currentSelectIndex, mask); - if (mask.Length !=0 ) - { - LoadData( mask[m_currentSelectIndex]); - } } + private string chooseFileName = ""; - void LoadData(string dataName) + void ChooseFile() { - if (m_currentDataName != dataName) + GUILayout.BeginHorizontal(); + chooseFileName = EditorDrawGUIUtil.DrawPopup("选择文件", chooseFileName, m_dataNameList, LoadData); + if (GUILayout.Button("删除", GUILayout.Width(50))) { - m_currentDataName = dataName; - - if (m_currentDataName != "None") - m_currentData = DataManager.GetData(dataName); + if (EditorUtility.DisplayDialog("警告", "是否删除文件[" + chooseFileName + "]", "确定", "取消")) + { + File.Delete(Application.dataPath + "/Resources/" + DataManager.c_directoryName + "/" + chooseFileName + ".txt"); + AssetDatabase.Refresh(); + m_currentData = null; + return; + } } - } - bool isConfigFold; - string dataName = ""; - string mainKey = ""; - - void AddDataGUI() - { - EditorGUI.indentLevel = 0; - - isConfigFold = EditorGUILayout.Foldout(isConfigFold, "新增数据"); - - if (isConfigFold) + if (GUILayout.Button("添加", GUILayout.Width(50))) { - EditorGUI.indentLevel = 1; - - dataName = EditorGUILayout.TextField("数据名", dataName); - - mainKey = EditorGUILayout.TextField("主键名", mainKey); - - if (!m_dataNameList.Contains(dataName) && dataName != "" && mainKey != "") + GeneralDataModificationWindow.otherParameter = ""; + GeneralDataModificationWindow.OpenWindow(this, "添加新配置文件", "", (value) => { - EditorGUILayout.BeginHorizontal(); - EditorGUILayout.Space(); - if (GUILayout.Button("新增", GUILayout.Width(position.width - 60))) + value = EditorDrawGUIUtil.DrawBaseValue("新建配置文件:", value); + GeneralDataModificationWindow.otherParameter = EditorDrawGUIUtil.DrawBaseValue("主键名:", GeneralDataModificationWindow.otherParameter); + if (string.IsNullOrEmpty(value.ToString()) || string.IsNullOrEmpty(GeneralDataModificationWindow.otherParameter.ToString())) { - DataTable data = new DataTable(); - data.TableKeys.Add(mainKey); - - SaveData(dataName, data); - AssetDatabase.Refresh(); - - LoadData(dataName); - - dataName = ""; + EditorGUILayout.HelpBox("文件名不能为空!!", MessageType.Error); } - - EditorGUILayout.Space(); - EditorGUILayout.EndHorizontal(); - } - else + return value; + }, + (value) => { - if (m_dataNameList.Contains(dataName)) + if (string.IsNullOrEmpty(value.ToString()) || string.IsNullOrEmpty(GeneralDataModificationWindow.otherParameter.ToString())) { - EditorGUILayout.LabelField("已存在该配置"); + return false; } + else + return true; - if (mainKey == "") - { - EditorGUILayout.LabelField("主键不能为空"); - } - } + }, + (value) => + { + DataTable data = new DataTable(); + data.TableKeys.Add(GeneralDataModificationWindow.otherParameter.ToString()); + + SaveData(value.ToString(), data); + AssetDatabase.Refresh(); + + LoadData(chooseFileName); + AssetDatabase.Refresh(); + }); } - EditorGUILayout.Space(); + GUILayout.EndHorizontal(); } - - void DeleteDataGUI() + private void LoadData(string fileName) { - if (m_currentDataName != "None") + if (string.IsNullOrEmpty(fileName)) + return; + + chooseFileName = fileName; + + if (chooseFileName != "None") { - if (GUILayout.Button("删除数据")) - { - if (EditorUtility.DisplayDialog("警告", "确定要删除该数据吗!", "是", "取消")) - { - File.Delete(Application.dataPath + "/Resources/" + DataManager.c_directoryName + "/" + m_currentDataName + ".txt"); - AssetDatabase.Refresh(); - } - } + + m_currentData = DataManager.GetData(fileName); } - } + else + return; - void CleanCacheGUI() - { - if (GUILayout.Button("清除缓存")) + int widthCount = m_currentData.TableKeys.Count; + withItemList.Clear(); + for (int i = 0; i < widthCount; i++) { - DataManager.CleanCache(); + withItemList.Add(wWith); } + heightItemList.Clear(); + //所有的数据行+描述+默认值+空一行 + heightItemList.Add(40); + for (int i = 0; i < m_currentData.Count+2; i++) + { + heightItemList.Add(wHeight); + } + + selectRowIndexs.Clear(); + selectColumnIndexs.Clear(); } - #endregion + private List withItemList = new List(); + private List heightItemList = new List(); + private int minItem = 30; + private const int wHeight = 45; + private const int wWith = 110; + private Vector2 svPos; - #region 记录相关 + private string searchValue = ""; + //标记选择行 + private List selectRowIndexs = new List(); + private List selectColumnIndexs = new List(); - Vector2 pos = Vector3.zero; + private GUIStyle buttonStyle; + private GUIStyle helpBoxStyle; - bool isFoldList = true; - void DataGUI() + private int oldButtonFontSize = 0; + private int nowButtonFontSize = 0; + private int MaxButtonFontSize = 40; + /// + /// 绘制所有格子 + /// + void DrawTableDataGUI() { - if (m_currentData != null - && m_currentDataName != "None") + if (m_currentData == null) + return; + if (buttonStyle == null) { - EditorGUI.indentLevel = 1; - isFoldList = EditorGUILayout.Foldout(isFoldList, "记录列表"); - if (isFoldList) - { - pos = EditorGUILayout.BeginScrollView(pos, GUILayout.ExpandHeight(false)); - - List keys = m_currentData.TableIDs; - - for (int i = 0; i < keys.Count; i++) - { - EditorGUI.indentLevel = 2; - DataItemGUI(m_currentData, keys[i]); - } - - EditorGUILayout.EndScrollView(); - EditorGUILayout.Space(); - } - - EditorGUI.indentLevel = 1; - AddDataGUI(m_currentData); + buttonStyle = "Button"; + helpBoxStyle = "HelpBox"; + } - EditorGUI.indentLevel = 1; - EditorDataGUI(); + GUILayout.BeginHorizontal(); + if (GUILayout.Button("添加一行数据", GUILayout.Width(90))) + { + AddLineDataGUI(); + } + GUILayout.FlexibleSpace(); + if (GUILayout.Button("加载上一次保存", GUILayout.Width(90))) + { + DataManager.CleanCache(); + LoadData(chooseFileName); - GenerateDataClassGUI(); + } + GUILayout.FlexibleSpace(); + if (GUILayout.Button("添加字段", GUILayout.Width(90))) + { + Add2FieldGUI(); + } + GUILayout.FlexibleSpace(); - SaveDataGUI(); + //字体大小调节 + helpBoxStyle.fontSize = helpBoxStyle.font.fontSize; + oldButtonFontSize = helpBoxStyle.fontSize; + if (nowButtonFontSize == 0) + nowButtonFontSize = oldButtonFontSize; + + nowButtonFontSize= EditorGUILayout.IntSlider("字体大小",nowButtonFontSize, oldButtonFontSize / 2, MaxButtonFontSize); + GUILayout.FlexibleSpace(); + searchValue = EditorDrawGUIUtil.DrawSearchField(searchValue); + GUILayout.EndHorizontal(); + GUILayout.Space(5); - DeleteDataGUI(); + Rect r = new Rect(0, 60, Screen.width, 18); - EditorGUILayout.Space(); - } + Rect svPos_temp = new Rect(new Vector2(0, r.y), new Vector2(Screen.width, Screen.height - r.y - 120)); + Vector2 v = GetCententSize(); + svPos = GUI.BeginScrollView(svPos_temp, svPos, new Rect(r.x, r.y, v.x, v.y)); - } + float tempWith = wWith; - bool isFold = false; - string mianKey = ""; - SingleData content = new SingleData(); - Vector2 AddDataPos = Vector2.zero; - void AddDataGUI(DataTable dict) - { - isFold = EditorGUILayout.Foldout(isFold, "新增记录"); - if (isFold) + GUI.Label(new Rect(r.position, new Vector2(wWith, wHeight)), "", "SelectionRect"); + for (int i = 0; i < withItemList.Count; i++) { - EditorGUI.indentLevel++; + Rect dragR = new Rect(tempWith, r.y, withItemList[i], wHeight); + Rect maxR = new Rect(tempWith, r.y, Screen.width * 5, wHeight); + dragR = EditorDrawGUIUtility.DrawCanDragArea(dragR, maxR, null, EditorCanDragAreaSide.Right); + if (dragR.width < minItem) + dragR.width = minItem; + withItemList[i] = dragR.width; - string key = dict.TableKeys[0]; + tempWith += withItemList[i]; - AddDataPos = EditorGUILayout.BeginScrollView(AddDataPos, GUILayout.ExpandHeight(false)); + if (GUI.Button(new Rect(dragR.position,new Vector2(dragR.width, dragR.height/3)), "▼")) + { + if (selectColumnIndexs.Contains(i)) + selectColumnIndexs.Remove(i); + else + selectColumnIndexs.Add(i); + } + if (GUI.Button(new Rect( dragR.x, dragR.y+ dragR.height/3, dragR.width, dragR.height*2/3), i.ToString())) + { + if (i == 0) + continue; - EditorGUILayout.LabelField("<主键>字段名", key); - mianKey = EditorUtilGUI.FieldGUI_TypeValue(FieldType.String, mianKey,null); + List keys = m_currentData.TableKeys; + string key = keys[i]; + if (EditorUtility.DisplayDialog("警告", "是否删除字段[" + key + "]", "确定", "取消")) + { + DeleteField(m_currentData, key); + withItemList.RemoveAt(i); + return; + } + } + + } - if (mianKey == "") + float tempHeight = r.y + wHeight; + for (int i = 0; i < heightItemList.Count; i++) + { + Rect dragR = new Rect(r.x, tempHeight, wWith, heightItemList[i]); + Rect maxR = new Rect(r.x, tempHeight, wWith, position.height); + dragR = EditorDrawGUIUtility.DrawCanDragArea(dragR, maxR, null, EditorCanDragAreaSide.Bottom); + if (dragR.height < minItem) + dragR.height = minItem; + heightItemList[i] = dragR.height; + + tempHeight += heightItemList[i]; + string vStr = ""; + if (i == 0) { - EditorGUILayout.LabelField("主键不能为空!"); + vStr = "D"; + GUI.Label(dragR, vStr, buttonStyle); } - else if (dict.ContainsKey(mianKey)) + else if(i == 1) { - EditorGUILayout.LabelField("重复的主键!", EditorGUIStyleData.WarnMessageLabel); + vStr = "description"; + GUI.Label(dragR, vStr, buttonStyle); } - - EditorGUILayout.Space(); - - EditorDataGUI(dict, content); - - EditorGUILayout.EndScrollView(); - - if (!dict.ContainsKey(mianKey) && mianKey != "") + else if (i == 2) + { + vStr = "default"; + GUI.Label(dragR, vStr, buttonStyle); + } + else { - EditorGUILayout.BeginHorizontal(); - EditorGUILayout.Space(); - if (GUILayout.Button("新增", GUILayout.Width(position.width - 60))) + int num = i - 3; + vStr = num.ToString(); + if (GUI.Button(new Rect(dragR.position, new Vector2(dragR.width/4, dragR.height)), "►")) + { + if (selectRowIndexs.Contains(i)) + selectRowIndexs.Remove(i); + else + selectRowIndexs.Add(i); + } + if (GUI.Button(new Rect(dragR.x+ dragR.width/4, dragR.y , dragR.width*3/4, dragR.height), vStr)) { - content.Add(key, mianKey); + if (EditorUtility.DisplayDialog("警告", "是否删除第[" + num + "]行数据", "确定", "取消")) + { + m_currentData.Remove(m_currentData.TableIDs[num]); + m_currentData.TableIDs.RemoveAt(num); + - m_currentData.AddData(content); - content = new SingleData(); - mianKey = ""; + heightItemList.RemoveAt(i); + return; + } } - EditorGUILayout.Space(); - EditorGUILayout.EndHorizontal(); } - EditorGUILayout.Space(); } + DrawGridItem(r.position + new Vector2(wWith, wHeight)); + GUI.EndScrollView(); } - void DataItemGUI(DataTable table, string key) + private Vector2 GetCententSize() { - if (!m_foldList.ContainsKey(key)) + float tempWith = wWith; + for (int i = 0; i < withItemList.Count; i++) { - m_foldList.Add(key, false); + tempWith += withItemList[i]; } + tempWith += wWith; - EditorGUILayout.BeginHorizontal(); - - m_foldList[key] = EditorGUILayout.Foldout(m_foldList[key], key); - - if (GUILayout.Button("删除记录", GUILayout.Width(EditorGUIStyleData.s_ButtonWidth_small))) + float tempHeight = wHeight; + for (int i = 0; i < heightItemList.Count; i++) { - table.RemoveData(key); - return; + + tempHeight += heightItemList[i]; } + tempHeight += wHeight; + return new Vector2(tempWith, tempHeight); + } + /// + /// 绘制每个数据格子 + /// + /// + private void DrawGridItem(Vector2 startPos) + { + helpBoxStyle.fontSize = nowButtonFontSize; + float tempHeight = 0; + for (int i = 0; i < heightItemList.Count; i++) + { + float h = heightItemList[i]; + float tempWith = 0; - EditorGUILayout.EndHorizontal(); + + for (int j = 0; j < withItemList.Count; j++) + { + float w = withItemList[j]; - EditorGUI.indentLevel ++; + Vector2 size = new Vector2(w, h); + Vector2 pos = startPos + new Vector2(tempWith, tempHeight); - if (m_foldList[key]) - { - SingleData data = table[key]; + object value = null; + string showStr = ""; + + string field = m_currentData.TableKeys[j]; + FieldType fieldValueType = GetFieldType(j, field); + string enumType = GetEnumType(fieldValueType, field); + + string defaultValue = GetDefaultValue(fieldValueType, enumType, field); - List keys = table.TableKeys; - //这里只显示主键 - for (int i = 0; i < keys.Count; i++) - { - string keyTmp = keys[i]; - if (i == 0) { - EditorGUILayout.LabelField("["+ keyTmp+"]"); - - EditorGUI.indentLevel++; - //EditorGUI.indentLevel++; - - EditorGUILayout.LabelField("<主键>字段名", keyTmp); - EditorGUILayout.LabelField("字段值", data[keyTmp]); - - EditorGUI.indentLevel--; - //EditorGUI.indentLevel--; + GUI.color = Color.yellow; + + showStr = EditorDrawGUIUtil.GetFormatName(field, DataConfigUtils.ConfigFieldValueType2Type(fieldValueType, enumType), "red"); } - } - //显示其他键 - EditorDataGUI(table, data); - } - } + else if (i == 1) + { + GUI.color = Color.cyan; - SingleData EditorDataGUI(DataTable table, SingleData data) - { - try - { - List keys = table.TableKeys; - for (int i = 0; i < keys.Count; i++) - { - string keyTmp = keys[i]; - FieldType type = table.GetFieldType(keyTmp); + showStr = GetDescription(field); + } + else if (i == 2) + { + GUI.color = Color.green; - if (i != 0) + showStr = defaultValue; + } + else { - bool cancelDefault = false; - EditorGUILayout.BeginHorizontal(); - - if (data.ContainsKey(keyTmp)) - { - EditorGUILayout.LabelField("[" + keyTmp + "]"); + SingleData data = m_currentData[m_currentData.TableIDs[i - 3]]; - if (GUILayout.Button("使用默认值")) + bool isDefault = false; + if (data.ContainsKey(field) && data[field] != defaultValue) + { + DataFieldAssetType fieldAssetType = GetDataFieldAssetType(field); + if (fieldAssetType == DataFieldAssetType.LocalizedLanguage) { - data.Remove(keyTmp); - EditorGUILayout.EndHorizontal(); - - continue; + string k = data[field]; + if (LanguageManager.HaveKey(k)) + showStr = LanguageManager.GetContentByKey(k); + else + showStr = k; } + else + showStr = data[field]; } else { - EditorGUILayout.LabelField("[" + keyTmp + "] (默认值)"); - if (GUILayout.Button("取消默认值")) - { - cancelDefault = true; - } + showStr = defaultValue; + isDefault = true; } + if (!string.IsNullOrEmpty(searchValue)) + showStr = ShowContainsChar(showStr, searchValue); - EditorGUILayout.EndHorizontal(); - - //EditorGUI.indentLevel++; - EditorGUI.indentLevel++; - - //非默认值情况 - if (data.ContainsKey(keyTmp)) - { - EditorGUILayout.LabelField("字段名", keyTmp); - EditorGUILayout.LabelField("注释", table.GetNote(keyTmp)); - - string newContent = EditorUtilGUI.FieldGUI_TypeValue(type, data[keyTmp], table.GetEnumType(keyTmp)); - - if (newContent != data[keyTmp]) - { - data[keyTmp] = newContent; - } - } - //如果是默认值则走这里 - else + if (isDefault) + showStr = "" + showStr + ""; + } + + if (i == 1 || i == 2) + { + GUI.Button(new Rect(pos, size), showStr, helpBoxStyle); + } + else + { + if (selectColumnIndexs.Contains(j)) + GUI.color = Color.magenta; + if (selectRowIndexs .Contains(i)) + GUI.color = Color.cyan; + if (GUI.Button(new Rect(pos, size), showStr, helpBoxStyle)) { - EditorGUILayout.LabelField("字段名", keyTmp); - EditorGUILayout.LabelField("注释", table.GetNote(keyTmp)); - string newContent = ""; - if (table.m_defaultValue.ContainsKey(keyTmp)) - { - newContent = new SingleField(type, table.GetDefault(keyTmp), table.GetEnumType(keyTmp)).m_content; - } - else - { - newContent = new SingleField(type, null, table.GetEnumType(keyTmp)).m_content; - } - if (type != FieldType.Enum) + modifiIndex = new Vector2Int(i - 2, j); + if (i == 0) { - EditorGUILayout.LabelField("字段类型", type.ToString()); + TableConfigFieldInfo f = new TableConfigFieldInfo(); + f.fieldName = field; + f.description = m_currentData.m_noteValue.ContainsKey(field) ? m_currentData.m_noteValue[field] : ""; + f.fieldValueType = fieldValueType; + f.defultValue = DataConfigUtils.TableString2ObjectValue(defaultValue, fieldValueType, enumType); + f.enumType = enumType; + f.fieldAssetType = GetDataFieldAssetType(field); + value = f; } else { - EditorGUILayout.LabelField("字段类型", type.ToString() + "/" + table.GetEnumType(keyTmp)); - } - - EditorGUILayout.LabelField("(默认)字段内容", new SingleField(type, newContent, table.GetEnumType(keyTmp)).GetShowString()); + SingleData data = m_currentData[m_currentData.TableIDs[i - 3]]; - if (cancelDefault) - { - data.Add(keyTmp, newContent); + if (data.ContainsKey(field)) + defaultValue = data[field]; + value = DataConfigUtils.TableString2ObjectValue(defaultValue, fieldValueType, enumType); } + GeneralDataModificationWindow.OpenWindow(this, "修改数据", value, DrawModifiValueGUI, CheckModifiValueCallBack, ModificationCompleteCallBack); } - - EditorGUI.indentLevel--; - //EditorGUI.indentLevel--; } - - EditorGUILayout.Space(); + + GUI.color = Color.white; + tempWith += w; } + + tempHeight += h; } - catch(Exception e) + helpBoxStyle.fontSize = oldButtonFontSize; + } + private string ShowContainsChar(string value,string searchValue) + { + string res = value; + if (value.Contains(searchValue)) { - EditorGUILayout.TextArea(e.ToString(),EditorGUIStyleData.ErrorMessageLabel); + res= value.Replace(searchValue, "" + searchValue + ""); } - return data; + return res; + } + private DataFieldAssetType GetDataFieldAssetType(string field) + { + DataFieldAssetType type; + if (!m_currentData.m_fieldAssetTypes.TryGetValue(field,out type)) + { + type = DataFieldAssetType.Data; + } + return type; } - #endregion + private FieldType GetFieldType(int index, string field) + { + FieldType fieldValueType = index == 0 ? FieldType.String : m_currentData.m_tableTypes[field]; + return fieldValueType; + } + private string GetEnumType(FieldType fieldValueType, string field) + { + string enumType = fieldValueType == FieldType.Enum ? + (m_currentData.m_tableEnumTypes.ContainsKey(field) ? m_currentData.m_tableEnumTypes[field] : EditorTool.GetAllEnumType()[0]) + : ""; + return enumType; + } - #region 字段相关 + private string GetDefaultValue(FieldType fieldValueType, string enumType, string field) + { + string defaultValue; - bool m_isEditorFold = false; - FieldType m_editorNewType; - int m_editorNewEnumIndex = 0; - string m_editorNoteContent = ""; - Vector2 m_EditorPos = Vector2.zero; - void EditorDataGUI() + if (!m_currentData.m_defaultValue.TryGetValue(field, out defaultValue)) + { + Type t = DataConfigUtils.ConfigFieldValueType2Type(fieldValueType, enumType); + object obj = ReflectionUtils.CreateDefultInstance(t); + defaultValue = DataConfigUtils.ObjectValue2TableString(obj); + m_currentData.m_defaultValue.Add(field, defaultValue); + } + + return defaultValue; + } + private string GetDescription(string field) { - m_isEditorFold = EditorGUILayout.Foldout(m_isEditorFold, "编辑数据"); - EditorGUI.indentLevel ++; + string value; + if (!m_currentData.m_noteValue.TryGetValue(field, out value)) + { + value = ""; + m_currentData.m_noteValue.Add(field, value); + } + return value; + } - if (m_isEditorFold) + /// + /// 绘制数据修改窗口 + /// + /// + /// + private object DrawModifiValueGUI(object t) + { + if (t is TableConfigFieldInfo) { - List keys = m_currentData.TableKeys; - m_EditorPos = EditorGUILayout.BeginScrollView(m_EditorPos, GUILayout.ExpandHeight(false)); - for (int i = 0; i < keys.Count; i++) - { - string key = keys[i]; - FieldType type = m_currentData.GetFieldType(key); - int EnumTypeIndex = EditorTool.GetAllEnumTypeIndex(m_currentData.GetEnumType(key)); + TableConfigFieldInfo info = (TableConfigFieldInfo)t; + DrawTableConfigFieldInfo(info); + string df = DataConfigUtils.ObjectValue2TableString(info.defultValue); + if (string.IsNullOrEmpty(df)) + EditorGUILayout.HelpBox("默认值不能为空!!", MessageType.Error); + if (CheckIsNameRepeat(info)) + EditorGUILayout.HelpBox("字段名不能重复!!", MessageType.Error); + } + else + { + string field = m_currentData.TableKeys[modifiIndex.y]; + SingleData data = m_currentData[m_currentData.TableIDs[modifiIndex.x-1]]; + + EditorDrawGUIUtil.CanEdit = false; + field = EditorDrawGUIUtil.DrawBaseValue("字段名", field).ToString(); + EditorDrawGUIUtil.CanEdit = true; + GUILayout.Space(7); - if (i == 0) - { - EditorGUILayout.LabelField("<主键>字段名", key); - EditorGUILayout.LabelField("字段类型", m_currentData.GetFieldType(keys[i]).ToString()); - } - else - { - EditorGUILayout.BeginHorizontal(); + string description = GetDescription(field); + GUILayout.Label("字段描述:" + description); - EditorGUILayout.LabelField("字段名", key); + FieldType fieldValueType = GetFieldType(modifiIndex.y, field); + string enumType = GetEnumType(fieldValueType, field); - if(GUILayout.Button("删除字段")) - { - if (EditorUtility.DisplayDialog("警告", "确定要删除该字段吗?", "是", "取消")) - { - DeleteField(m_currentData, key); - continue; - } - } + string defaultValue = GetDefaultValue(fieldValueType, enumType, field); + DataFieldAssetType fieldAssetType = GetDataFieldAssetType(field); + GUILayout.BeginHorizontal(); - EditorGUILayout.EndHorizontal(); + GUILayout.Label("默认值 :" + defaultValue); + GUILayout.FlexibleSpace(); - bool isNewType = false; + if (GUILayout.Button("默认值", GUILayout.Width(60))) + { + t = DataConfigUtils.TableString2ObjectValue(defaultValue, fieldValueType, enumType); + } + GUILayout.EndHorizontal(); - m_editorNoteContent = EditorGUILayout.TextField("注释", m_currentData.GetNote(key)); - m_currentData.SetNote(key, m_editorNoteContent); + string text = "值"; + if (fieldAssetType == DataFieldAssetType.LocalizedLanguage) + { + t = DrawLocalizedLanguageField(text, t); - m_editorNewType = (FieldType)EditorGUILayout.EnumPopup("字段类型", type); + } + else if (fieldAssetType == DataFieldAssetType.Prefab) + { + t = DrawPrefabGUI(text, t); + } + else if (fieldAssetType == DataFieldAssetType.Texture) + { + t = DrawTextureGUI(text, t); + } + else if (fieldAssetType == DataFieldAssetType.TableKey) + { + t = DrawTableGUI(text, t); + } + else + { + t = EditorDrawGUIUtil.DrawBaseValue(text, t); + } + } - if (m_editorNewType == FieldType.Enum) - { - m_editorNewEnumIndex = EditorGUILayout.Popup("枚举类型", EnumTypeIndex, EditorTool.GetAllEnumType()); + return t; + } + private bool CheckModifiValueCallBack(object t) + { + if (t is TableConfigFieldInfo) + { + TableConfigFieldInfo info = (TableConfigFieldInfo)t; - if (EnumTypeIndex != m_editorNewEnumIndex) - { - isNewType = true; - } - } + if (string.IsNullOrEmpty(info.fieldName)) + return false; - if (type != m_editorNewType) - { - isNewType = true; - } + if (CheckIsNameRepeat(info)) + return false; - if (isNewType) - { - //弹出警告并重置数据 - if (EditorUtility.DisplayDialog("警告", "改变字段类型会重置该字段的所有数据和默认值\n是否继续?", "是", "取消")) - { - if (m_editorNewEnumIndex == -1) - { - m_editorNewEnumIndex = 0; - } - m_currentData.SetFieldType(key, m_editorNewType, EditorTool.GetAllEnumType()[m_editorNewEnumIndex]); - ResetDataField(m_currentData, key, m_editorNewType, EditorTool.GetAllEnumType()[m_editorNewEnumIndex]); - - type = m_editorNewType; - EnumTypeIndex = m_editorNewEnumIndex; - content = new SingleData(); - } - } + string df = DataConfigUtils.ObjectValue2TableString(info.defultValue); + if (string.IsNullOrEmpty(df)) + return false; - string newContent; - if (type == FieldType.Enum) - { - newContent = EditorUtilGUI.FieldGUI_Type(type, EditorTool.GetAllEnumType()[EnumTypeIndex], m_currentData.GetDefault(key), "默认值"); - } - else - { - newContent = EditorUtilGUI.FieldGUI_Type(type, null, m_currentData.GetDefault(key), "默认值"); - } + } - m_currentData.SetDefault(key, newContent); - } + return true; + } + private bool CheckIsNameRepeat(TableConfigFieldInfo info) + { + string field = m_currentData.TableKeys[modifiIndex.y]; - EditorGUILayout.Space(); + for (int i = 0; i < m_currentData.TableKeys.Count; i++) + { + string f = m_currentData.TableKeys[i]; + if (i == modifiIndex.y) + continue; + else + { + if (f == info.fieldName) + return true; } + } - EditorGUILayout.EndScrollView(); + return false; + } + /// + /// 绘制字段信息 + /// + /// + private void DrawTableConfigFieldInfo(TableConfigFieldInfo temp) + { + Type type = DataConfigUtils.ConfigFieldValueType2Type(temp.fieldValueType,temp.enumType); + if (temp.defultValue == null || type.FullName != temp.defultValue.GetType().FullName) + temp.defultValue = ReflectionUtils.CreateDefultInstance(type); - AddFieldGUI(); - } + //是否使用多语言字段 + + + GUILayout.BeginVertical("box"); + + GUILayout.EndVertical(); + temp = (TableConfigFieldInfo)EditorDrawGUIUtil.DrawClassData("字段信息", temp, new List() { "defultValue", "enumType" }, null, () => + { + if (temp.fieldAssetType == DataFieldAssetType.LocalizedLanguage + || temp.fieldAssetType== DataFieldAssetType.Prefab + || temp.fieldAssetType == DataFieldAssetType.TableKey + || temp.fieldAssetType== DataFieldAssetType.Texture) + { + if (type != typeof(string)) + { + temp.fieldAssetType = DataFieldAssetType.Data; + } + } + string text = "默认值"; + if (temp.fieldAssetType== DataFieldAssetType.LocalizedLanguage) + { + temp.defultValue = DrawLocalizedLanguageField(text, temp.defultValue); + } + else if(temp.fieldAssetType == DataFieldAssetType.Prefab) + { + temp.defultValue= DrawPrefabGUI(text, temp.defultValue); + } + else if(temp.fieldAssetType == DataFieldAssetType.Texture) + { + temp.defultValue = DrawTextureGUI(text, temp.defultValue); + } + else if (temp.fieldAssetType == DataFieldAssetType.TableKey) + { + temp.defultValue = DrawTableGUI(text, temp.defultValue); + } + else + { + temp.defultValue = EditorDrawGUIUtil.DrawBaseValue(text, temp.defultValue); + } + if(temp.fieldValueType== FieldType.Enum) + { + List enumList = new List(EditorTool.GetAllEnumType()); + temp.enumType = EditorDrawGUIUtil.DrawPopup("枚举类型", temp.enumType, enumList); + } + }); } - void DeleteFieldGUI() + private List configFileNames = new List(); + private List fieldNames = new List(); + private List tableKeys = new List(); + private string tableName = ""; + private string fieldName = ""; + private string tableKey = ""; + private object DrawTableGUI(string text, object defultValue) { + string value = defultValue.ToString(); + GUILayout.Label(text + " : " + value); + + if(string.IsNullOrEmpty(tableName) && !string.IsNullOrEmpty(value)) + { + string[] tempStrs = value.Split('/'); + if(tempStrs.Length==3) + { + tableName = tempStrs[0]; + fieldName = tempStrs[1]; + tableKey = tempStrs[2]; + } + } + tableName = EditorDrawGUIUtil.DrawPopup("表格名", tableName, configFileNames, (tName) => + { + if (string.IsNullOrEmpty(tName)) + return; + fieldNames.Clear(); + DataTable d = DataManager.GetData(tName); + fieldNames.AddRange(d.TableKeys); + tableKeys.AddRange(d.TableIDs); + }); + + fieldName = EditorDrawGUIUtil.DrawPopup("字段名", fieldName, fieldNames); + tableKey = EditorDrawGUIUtil.DrawPopup("表格数据key", tableKey, tableKeys); + + defultValue = tableName + "/" + fieldName + "/" + tableKey; + return defultValue; } - void DeleteField(DataTable table,string fieldName) + private object DrawLocalizedLanguageField(string text, object value) { - table.TableKeys.Remove(fieldName); + value = EditorDrawGUIUtil.DrawPopup(text, value.ToString(), langKeys); + GUILayout.Label("多语言字段[" + value + "] : " + LanguageManager.GetContentByKey(value.ToString())); + return value; } - bool m_isAddFoldField = false; - string m_newFieldName = ""; - FieldType m_newAddType = FieldType.String; - string m_newFieldDefaultValue = ""; - int m_newEnumTypeIndex = 0; - string m_addNoteContent = ""; - void AddFieldGUI() + private Editor previewEditor; + private GameObject previewObj; + private object editPrefabValue = null; + private object DrawPrefabGUI(string text, object value) { - EditorGUILayout.Space(); - m_isAddFoldField = EditorGUILayout.Foldout(m_isAddFoldField, "新增字段"); - EditorGUI.indentLevel ++; + if (editPrefabValue != null) + { + value = editPrefabValue; + editPrefabValue = null; + } - if (m_isAddFoldField) + GUILayout.BeginHorizontal(); + value= EditorDrawGUIUtil.DrawBaseValue(text, value); + if (GUILayout.Button("o", GUILayout.Width(20))) { - m_newFieldName = EditorGUILayout.TextField("字段名", m_newFieldName); - FieldType typeTmp = (FieldType)EditorGUILayout.EnumPopup("字段类型", m_newAddType); + ObjectSelectorWindow.Show(GeneralDataModificationWindow.GetInstance(), value.ToString(), + new string[] { "Assets/Resources" }, + typeof(GameObject), + (assetName, obj) => + { + editPrefabValue = assetName; + } + ); + } + GUILayout.EndHorizontal(); + string content = value.ToString(); + bool isHave = false; + try + { + ResourcesConfigManager.Initialize(); + if (ResourcesConfigManager.GetIsExitRes(content)) + { + GameObject obj = ResourceManager.Load(content); + if (obj) + { - bool isNewFieldType = false; + if(obj!= previewObj) + { + previewEditor = Editor.CreateEditor(obj); + previewObj = obj; + } - if (typeTmp != m_newAddType) - { - m_newAddType = typeTmp; - isNewFieldType = true; + previewEditor.OnPreviewGUI(GUILayoutUtility.GetRect(300, 300), EditorStyles.helpBox); + isHave = true; + } } + } + catch { } - m_addNoteContent = EditorGUILayout.TextField("注释", m_addNoteContent); + if (!isHave) + { + EditorGUILayout.HelpBox("没有预制 ["+value+"] !!", MessageType.Error); + } - if (typeTmp == FieldType.Enum) - { - int newEnumTypeIndex = EditorGUILayout.Popup("枚举类型", m_newEnumTypeIndex, EditorTool.GetAllEnumType()); + return value; + } + private Editor previewEditor1; + private Texture2D previewTex; + private object editTextureValue; + private object DrawTextureGUI(string text, object value) + { + if (editTextureValue != null) + { + value = editTextureValue; + editTextureValue = null; + } - if (newEnumTypeIndex != m_newEnumTypeIndex) + GUILayout.BeginHorizontal(); + value = EditorDrawGUIUtil.DrawBaseValue(text, value); + if (GUILayout.Button("o", GUILayout.Width(20))) + { + ObjectSelectorWindow.Show(GeneralDataModificationWindow.GetInstance(), value.ToString(), + new string[] { "Assets/Resources" }, + typeof(GameObject), + (assetName, obj) => { - m_newEnumTypeIndex = newEnumTypeIndex; - isNewFieldType = true; + editTextureValue = assetName; } - } - - //更改字段类型重设初始值 - if (isNewFieldType) + ); + } + GUILayout.EndHorizontal(); + string content = value.ToString(); + bool isHave = false; + try + { + ResourcesConfigManager.Initialize(); + if (ResourcesConfigManager.GetIsExitRes(content)) { - if (typeTmp == FieldType.Enum) + Texture2D obj = ResourceManager.Load(content); + if (obj) { - m_newFieldDefaultValue = new SingleField(m_newAddType, null, EditorTool.GetAllEnumType()[m_newEnumTypeIndex]).m_content; - } - else - { - m_newFieldDefaultValue = new SingleField(m_newAddType, null, null).m_content; + + if (obj != previewTex) + { + previewEditor1 = Editor.CreateEditor(obj); + previewTex = obj; + } + + previewEditor1.OnPreviewGUI(GUILayoutUtility.GetRect(300, 300), EditorStyles.helpBox); + isHave = true; } } + } + catch { } + + if (!isHave) + { + EditorGUILayout.HelpBox("没有图片 [" + value + "] !!", MessageType.Error); + } + + return value; + } + private Vector2Int modifiIndex = new Vector2Int(); + - //是否是一个合理的字段名 - bool isShowButton = true; + /// + /// 修改格子数据完成回调 + /// + /// + private void ModificationCompleteCallBack(object t) + { + if (t is TableConfigFieldInfo) + { + TableConfigFieldInfo temp = (TableConfigFieldInfo)t; - if (m_newFieldName == "") + string field = m_currentData.TableKeys[modifiIndex.y]; + if (field != temp.fieldName) { - isShowButton = false; + RenameField(m_currentData, field, temp.fieldName); + field = temp.fieldName; } + // SingleData data = m_currentData[m_currentData.TableIDs[modifiIndex.y]]; + m_currentData.m_defaultValue[field] = DataConfigUtils.ObjectValue2TableString(temp.defultValue); - if (m_currentData.TableKeys.Contains(m_newFieldName)) + if (m_currentData.m_noteValue.ContainsKey(field)) + m_currentData.m_noteValue[field] = temp.description; + else { - isShowButton = false; - EditorGUILayout.TextField("字段名不能重复!",EditorGUIStyleData.WarnMessageLabel); + if (!string.IsNullOrEmpty(temp.description)) + { + m_currentData.m_noteValue.Add(field, temp.description); + } } - m_newFieldDefaultValue = EditorUtilGUI.FieldGUI_Type(m_newAddType, EditorTool.GetAllEnumType()[m_newEnumTypeIndex], m_newFieldDefaultValue, "默认值"); - - if (isShowButton) + if (m_currentData.m_tableTypes[field] != temp.fieldValueType) { - if (GUILayout.Button("新增字段")) - { - if (m_newAddType == FieldType.Enum) - { - AddField(m_currentData, m_newFieldName, m_newAddType, m_newFieldDefaultValue, EditorTool.GetAllEnumType()[m_newEnumTypeIndex], m_addNoteContent); - } - else - { - AddField(m_currentData, m_newFieldName, m_newAddType, m_newFieldDefaultValue, null, m_addNoteContent); - } + m_currentData.m_tableTypes[field] = temp.fieldValueType; + ResetDataField(m_currentData, field, temp.fieldValueType, temp.enumType,temp.defultValue); + } + if (temp.fieldValueType == FieldType.Enum) + { + if (m_currentData.m_tableEnumTypes.ContainsKey(field)) - m_newFieldName = ""; - m_newFieldDefaultValue = ""; - m_addNoteContent = ""; - m_newAddType = FieldType.String; - m_newEnumTypeIndex = 0; - } + m_currentData.m_tableEnumTypes[field] = temp.enumType; + + else + m_currentData.m_tableEnumTypes.Add(field, temp.enumType); } + m_currentData.m_fieldAssetTypes[field] = temp.fieldAssetType; + } + else + { + string field = m_currentData.TableKeys[modifiIndex.y]; + SingleData data = m_currentData[m_currentData.TableIDs[modifiIndex.x-1]]; + data[field] = DataConfigUtils.ObjectValue2TableString(t); + } + } + + /// + /// 添加一个字段 + /// + private void Add2FieldGUI() + { + GeneralDataModificationWindow.OpenWindow(this, "添加字段", new TableConfigFieldInfo(), (value) => + { + TableConfigFieldInfo info = (TableConfigFieldInfo)value; + DrawTableConfigFieldInfo(info); + + if (string.IsNullOrEmpty(info.fieldName)) + EditorGUILayout.HelpBox("字段名不能为空!!", MessageType.Error); + else if (m_currentData.TableKeys.Contains(info.fieldName)) + EditorGUILayout.HelpBox("字段名重复!!", MessageType.Error); + string df = DataConfigUtils.ObjectValue2TableString(info.defultValue); + if(string.IsNullOrEmpty(df)) + EditorGUILayout.HelpBox("默认值不能为空!!", MessageType.Error); + return value; + }, + (value) => + { + TableConfigFieldInfo info = (TableConfigFieldInfo)value; + if (string.IsNullOrEmpty(info.fieldName) || m_currentData.TableKeys.Contains(info.fieldName)) + return false; + string df = DataConfigUtils.ObjectValue2TableString(info.defultValue); + if (string.IsNullOrEmpty(df)) + return false; + return true; + + }, + (value) => + { + TableConfigFieldInfo info = (TableConfigFieldInfo)value; + AddField(m_currentData, info); + withItemList.Add(wWith); + }); + } + + /// + /// 添加一行数据 + /// + private void AddLineDataGUI() + { + GeneralDataModificationWindow.OpenWindow(this, "插入一行数据", "", (value) => + { + value = EditorDrawGUIUtil.DrawBaseValue("Key:", value); + if (string.IsNullOrEmpty(value.ToString())) + EditorGUILayout.HelpBox("Key不能为空!!", MessageType.Error); + else if (m_currentData.TableKeys.Contains(value.ToString())) + EditorGUILayout.HelpBox("Key重复!!", MessageType.Error); + return value; + }, + (value) => + { + + if (string.IsNullOrEmpty(value.ToString()) || m_currentData.TableKeys.Contains(value.ToString())) + return false; + + return true; + + }, + (value) => + { + heightItemList.Add(30); + SingleData data = new SingleData(); + DataTable table = m_currentData; + List keys = table.TableKeys; + for (int i = 0; i < keys.Count; i++) + { + string keyTmp = keys[i]; + if (i == 0) + { + data.Add(keyTmp, value.ToString()); + } + else + data.Add(keyTmp, table.m_defaultValue[keyTmp]); + } + m_currentData.AddData(data); + }); + + + } + #region 数据文件相关 + + + void CleanCacheGUI() + { + if (GUILayout.Button("清除缓存")) + { + DataManager.CleanCache(); } } - void AddField(DataTable table, string fieldName,FieldType type ,string value,string enumType,string note) + #endregion + + #region 记录相关 + + + #endregion + + #region 字段相关 + + static private void RenameField(DataTable table,string oldFieldName,string newFieldName) { - table.TableKeys.Add(fieldName); - table.SetFieldType(fieldName, type, enumType); - table.SetDefault(fieldName, value); - table.SetNote(fieldName, note); + int indexFiled = table.TableKeys.IndexOf(oldFieldName); + table.TableKeys[indexFiled] = newFieldName; + + table.m_noteValue = RenameDictionaryKey(table.m_noteValue, oldFieldName, newFieldName); + table.m_tableTypes = RenameDictionaryKey(table.m_tableTypes, oldFieldName, newFieldName); + table.m_tableEnumTypes = RenameDictionaryKey(table.m_tableEnumTypes, oldFieldName, newFieldName); + table.m_defaultValue = RenameDictionaryKey(table.m_defaultValue, oldFieldName, newFieldName); + foreach (var item in table.TableIDs) + { + table[item] = (SingleData)RenameDictionaryKey(table[item], oldFieldName, newFieldName); + } } + private static Dictionary RenameDictionaryKey(Dictionary dic , K oldFieldName, K newFieldName) + { + if (!dic.ContainsKey(oldFieldName)) + return dic; + List keys = new List(dic.Keys); + List values = new List(dic.Values); + int indexFiled = keys.IndexOf(oldFieldName); + keys[indexFiled] = newFieldName; + + dic.Clear(); + for (int i = 0; i < keys.Count; i++) + { + dic.Add(keys[i], values[i]); + } - void ResetDataField(DataTable data,string key,FieldType type,string enumType) + return dic; + } + /// + /// 添加字段 + /// + /// + private static void AddField(DataTable table, TableConfigFieldInfo info) { - string newContent = new SingleField(type, null, enumType).m_content; + table.TableKeys.Add(info.fieldName); + table.m_noteValue.Add(info.fieldName, info.description); + table.m_tableTypes.Add(info.fieldName, info.fieldValueType); + table.m_fieldAssetTypes.Add(info.fieldName, info.fieldAssetType); + if (info.fieldValueType == FieldType.Enum) + { + table.m_tableEnumTypes.Add(info.fieldName, info.enumType); + } + table.m_defaultValue.Add(info.fieldName, DataConfigUtils.ObjectValue2TableString(info.defultValue)); + + foreach (var item in table.Values) + { + item.Add(info.fieldName, DataConfigUtils.ObjectValue2TableString(info.defultValue)); + } + } + + static void DeleteField(DataTable table,string fieldName) + { + table.TableKeys.Remove(fieldName); + if (table.m_noteValue.ContainsKey(fieldName)) + { + table.m_noteValue.Remove(fieldName); + } + if (table.m_tableTypes.ContainsKey(fieldName)) + { + table.m_tableTypes.Remove(fieldName); + } + if (table.m_tableEnumTypes.ContainsKey(fieldName)) + { + table.m_tableEnumTypes.Remove(fieldName); + } + if (table.m_defaultValue.ContainsKey(fieldName)) + { + table.m_defaultValue.Remove(fieldName); + } + foreach (var item in table.Values) + { + if (item.ContainsKey(fieldName)) + item.Remove(fieldName); + } + } + + static void ResetDataField(DataTable data,string key,FieldType type,string enumType,object defaultValue) + { + string newContent = DataConfigUtils.ObjectValue2TableString(defaultValue); for (int i = 0; i < data.TableIDs.Count; i++) { @@ -668,16 +1124,23 @@ void ResetDataField(DataTable data,string key,FieldType type,string enumType) } } - data.SetDefault(key,newContent); + if (data.m_defaultValue.ContainsKey(key)) + { + data.m_defaultValue[key] = newContent; + } + else + { + data.m_defaultValue.Add(key, newContent); + } } void SaveDataGUI() { if (GUILayout.Button("保存")) { - SaveData(m_currentDataName, m_currentData); + SaveData(chooseFileName, m_currentData); AssetDatabase.Refresh(); - LoadData(m_currentDataName); + LoadData(chooseFileName); } } @@ -685,7 +1148,7 @@ void GenerateDataClassGUI() { if (GUILayout.Button("生成Data类")) { - CreatDataCSharpFile(m_currentDataName, m_currentData); + CreatDataCSharpFile(chooseFileName, m_currentData); AssetDatabase.Refresh(); } } @@ -993,4 +1456,23 @@ public static void SaveEditorData(string ConfigName, Dictionary #endregion } +/// +/// 字段描述信息 +/// +public class TableConfigFieldInfo +{ + [ShowGUIName("字段名")] + public string fieldName = ""; + [ShowGUIName("描述")] + public string description = ""; + [ShowGUIName("数据类型")] + public FieldType fieldValueType; + [ShowGUIName("数据用途")] + public DataFieldAssetType fieldAssetType; + [ShowGUIName("默认值")] + public object defultValue = null; + public string enumType = ""; + +} + diff --git a/Assets/Script/Core/Editor/General.meta b/Assets/Script/Core/Editor/General.meta new file mode 100644 index 00000000..f871ca5b --- /dev/null +++ b/Assets/Script/Core/Editor/General.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a4490eb093321434da684c1840f8e1b7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/General/GeneralDataModificationWindow.cs b/Assets/Script/Core/Editor/General/GeneralDataModificationWindow.cs new file mode 100644 index 00000000..cd271dd3 --- /dev/null +++ b/Assets/Script/Core/Editor/General/GeneralDataModificationWindow.cs @@ -0,0 +1,96 @@ +using UnityEngine; +using UnityEditor; + +/// +/// 通用数据修改窗体 +/// +public class GeneralDataModificationWindow : EditorWindow +{ + string m_Title; + object value; + object modifi_Value; + CallBackR customDrawGUI; + CallBack modificationCompleteCallBack; + CallBackR checkCanOkButtonCallBack; + + static GeneralDataModificationWindow win; + public static GeneralDataModificationWindow GetInstance() + { + return win; + } + EditorWindow otherWindow; + /// + /// 用于储存其他要使用的参数 + /// + public static object otherParameter; + /// + /// 打开窗口 + /// + /// 标题 + /// 希望修改的数据 + /// 自定义GUI绘制 + /// 检查是否能使用"OK"按钮 + /// 完成修改回调 + public static void OpenWindow(EditorWindow otherWindow, string title,object value,CallBackR customDrawGUI,CallBackR checkCanOkButtonCallBack, CallBack modificationCompleteCallBack) + { + win = GetWindow(); + win.wantsMouseMove = true; + win.autoRepaintOnSceneChange = true; + win.otherWindow = otherWindow; + FocusWindowIfItsOpen(); + + win.m_Title = title; + win.value = value; + win.modifi_Value = value;//.DeepCopySelf(); + + win.customDrawGUI = customDrawGUI; + win.modificationCompleteCallBack = modificationCompleteCallBack; + win.checkCanOkButtonCallBack = checkCanOkButtonCallBack; + } + + private void OnGUI() + { + if (modifi_Value == null) + return; + EditorDrawGUIUtil.DrawHorizontalCenter(() => + { + GUILayout.Label(m_Title); + }); + + EditorDrawGUIUtil.DrawScrollView(modifi_Value, () => + { + if (customDrawGUI != null) + modifi_Value = customDrawGUI(modifi_Value); + else + { + modifi_Value = EditorDrawGUIUtil.DrawBaseValue("Value", modifi_Value); + } + }); + + GUILayout.FlexibleSpace(); + EditorDrawGUIUtil.DrawHorizontalCenter(() => + { + if (GUILayout.Button("OK",GUILayout.Width( position.width/4))) + { + if (checkCanOkButtonCallBack != null) + { + if (!checkCanOkButtonCallBack(modifi_Value)) + return; + } + if(modificationCompleteCallBack != null) + { + modificationCompleteCallBack(modifi_Value); + } + if (otherWindow) + otherWindow.Repaint(); + Close(); + } + + if (GUILayout.Button("Cancel", GUILayout.Width(position.width / 4))) + { + Close(); + } + }); + GUILayout.Space(6); + } +} \ No newline at end of file diff --git a/Assets/Script/Core/Editor/General/GeneralDataModificationWindow.cs.meta b/Assets/Script/Core/Editor/General/GeneralDataModificationWindow.cs.meta new file mode 100644 index 00000000..cee80ff5 --- /dev/null +++ b/Assets/Script/Core/Editor/General/GeneralDataModificationWindow.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 592991956ff69f444b2339a3d05732ea +timeCreated: 1525250660 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/General/ObjectSelectorWindow.cs b/Assets/Script/Core/Editor/General/ObjectSelectorWindow.cs new file mode 100644 index 00000000..c1a4254a --- /dev/null +++ b/Assets/Script/Core/Editor/General/ObjectSelectorWindow.cs @@ -0,0 +1,279 @@ + +using System; +using System.Collections.Generic; +using System.IO; +using UnityEditor; +using UnityEngine; + +/// +/// 资源选择窗口 +/// +public class ObjectSelectorWindow : EditorWindow +{ + private class Styles + { + public GUIStyle smallStatus = "ObjectPickerSmallStatus"; + + public GUIStyle largeStatus = "ObjectPickerLargeStatus"; + + public GUIStyle toolbarBack = "ObjectPickerToolbar"; + + public GUIStyle tab = "ObjectPickerTab"; + + public GUIStyle bottomResize = "WindowBottomResize"; + + public GUIStyle previewBackground = "PopupCurveSwatchBackground"; + + public GUIStyle previewTextureBackground = "ObjectPickerPreviewBackground"; + } + + private Styles m_Styles ; + + private float m_ToolbarHeight = 20f; + private const float minGridSize=40; + private const float maxGridSize=120; + private float selectAreaSizeHeight = 120; + + private static ObjectSelectorWindow win; + private List allFilePath = new List(); + private string assetName; + CallBack selectFileCallBack; + private string searchName; + private ObjectAssets selectAsset; + + private EditorWindow otherWindow; + /// + /// 显示资源选择窗口 + /// + /// 选择了资源后需要刷新的界面 + /// 当前选择的资源名字 + /// 选择当前文件夹下资源(包含子文件夹) + /// 资源类型 + /// 选择后的回调 + public static void Show(EditorWindow otherWindow, string assetName,string[] paths,Type assetType, CallBack selectFileCallBack) + { + if (win == null) + win = GetWindow(); + win.titleContent = new GUIContent("Select "+assetType.Name); + win.Init(otherWindow, assetName, paths,assetType, selectFileCallBack); + + } + + private void Init(EditorWindow otherWindow, string assetName, string[] paths, Type assetType, CallBack selectFileCallBack) + { + this.otherWindow = otherWindow; + this.assetName = assetName; + this.selectFileCallBack = selectFileCallBack; + + allFilePath.Clear(); + + allFilePath.AddRange(paths); + + objectAssets.Clear(); + + string[] tempGIDs= AssetDatabase.FindAssets("t:" + assetType.Name, allFilePath.ToArray()); + + foreach (var id in tempGIDs) + { + string p = AssetDatabase.GUIDToAssetPath(id); + UnityEngine.Object obj= AssetDatabase.LoadAssetAtPath(p, assetType); + ObjectAssets oa = new ObjectAssets(); + oa.name = Path.GetFileNameWithoutExtension(p); + oa.type = assetType; + oa.assetObject = obj; + oa.path = p; + oa.previewIcon = AssetPreview.GetAssetPreview(obj); + oa.miniThumbnailIcon = AssetPreview.GetMiniThumbnail(obj); + if (oa.previewIcon == null) + { + oa.previewIcon = new Texture2D(100, 100); + + for (int i = 0; i < oa.previewIcon.width; i++) + { + for (int j = 0; j < oa.previewIcon.height; j++) + { + oa.previewIcon.SetPixel(i, j, Color.black); + } + } + oa.previewIcon.Apply(); + + } + int w = (int)position.width / 5; + TextureScale.Bilinear(oa.previewIcon, w, w); + + + objectAssets.Add(oa); + + if (oa.name == assetName) + selectAsset = oa; + } + + } + + private List objectAssets = new List(); + private void OnGUI() + { + if (m_Styles == null) + m_Styles = new Styles(); + + + + if (position.width < maxGridSize + 40) + this.minSize = new Vector2(maxGridSize + 40, 100); + SearchArea(); + + List tempAssets = GetSearchResult(searchName); + + DrawGridIcon(tempAssets); + + DrawSelectItem(); + } + + private void DrawSelectItem() + { + GUILayout.BeginArea(new Rect(0,position.height- selectAreaSizeHeight,position.width,selectAreaSizeHeight), m_Styles. previewTextureBackground); + if (selectAsset != null) + { + GUILayout.BeginHorizontal(); + GUILayout.Label(selectAsset.previewIcon,GUILayout.Width(selectAreaSizeHeight-5),GUILayout.Height(selectAreaSizeHeight-5)); + + GUILayout.BeginVertical(); + GUILayout.Label(selectAsset.name, m_Styles.largeStatus); + GUILayout.Label(selectAsset.type.Name, m_Styles.smallStatus); + GUILayout.Label(selectAsset.path, m_Styles.smallStatus); + + GUILayout.EndVertical(); + + GUILayout.BeginVertical(); + GUILayout.FlexibleSpace(); + EditorDrawGUIUtil.DrawHorizontalCenter(() => + { + if (GUILayout.Button("Ok",GUILayout.Width(70),GUILayout.Height(45))) + { + if (selectFileCallBack != null) + selectFileCallBack(selectAsset .name, selectAsset.assetObject); + + if (otherWindow != null) + otherWindow.Repaint(); + Close(); + } + }); + GUILayout.FlexibleSpace(); + GUILayout.EndVertical(); + GUILayout.EndHorizontal(); + } + + GUILayout.EndArea(); + } + + private float gridSize= maxGridSize; + private void SearchArea() + { + searchName = EditorDrawGUIUtil.DrawSearchField(searchName); + + GUILayout.BeginArea(new Rect(0f, 20f, base.position.width, m_ToolbarHeight)); + EditorGUI.BeginChangeCheck(); + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + gridSize = GUILayout.HorizontalSlider(gridSize, minGridSize, maxGridSize,GUILayout.Width(60)); + GUILayout.Space(4); + + GUILayout.EndHorizontal(); + GUILayout.EndArea(); + + + + + } + private Vector2 space = new Vector2(10, 10); + private void DrawGridIcon(List tempAssets) + { + GUILayout.BeginArea(new Rect(0, 44, position.width, position.height - 24f- m_ToolbarHeight - selectAreaSizeHeight)); + + if (gridSize != minGridSize) + { + int rowCount = (int)(position.width / (gridSize + space.x)); + EditorDrawGUIUtil.DrawGrid(tempAssets, rowCount, space, (item) => + { + + GUIContent content = new GUIContent(item.name, item.previewIcon); + GUIStyle style = "TL SelectionButton"; + if (item == selectAsset) + { + style = "TL SelectionButton PreDropGlow"; + } + style.imagePosition = ImagePosition.ImageAbove; + style.stretchHeight = true; + style.stretchWidth = true; + style.alignment = TextAnchor.LowerCenter; + + if (GUILayout.Button(content, style, GUILayout.Width(gridSize), GUILayout.Height(gridSize + 10))) + { + selectAsset = item; + } + + }); + } + else + { + EditorDrawGUIUtil.DrawScrollView(tempAssets, () => + { + foreach (var item in tempAssets) + { + GUIContent content = new GUIContent(item.name, item.miniThumbnailIcon); + GUIStyle style = "TL SelectionButton"; + if (item == selectAsset) + { + style = "TL SelectionButton PreDropGlow"; + } + style.imagePosition = ImagePosition.ImageLeft; + style.alignment = TextAnchor.MiddleLeft; + //style.stretchHeight = true; + //style.stretchWidth = true; + + if (GUILayout.Button(content, style, GUILayout.Height(gridSize / 3 * 2))) + { + selectAsset = item; + } + } + }); + + } + GUILayout.EndArea(); + + } + + List tempGetAssets = new List(); + + + private List GetSearchResult(string name) + { + if (string.IsNullOrEmpty(name)) + { + return objectAssets; + } + else + { + tempGetAssets.Clear(); + + foreach (var o in objectAssets) + { + if (o.name.Contains(name)) + tempGetAssets.Add(o); + } + return tempGetAssets; + } + + + } + + private class ObjectAssets + { + public string name; + public Type type; + public UnityEngine.Object assetObject; + public Texture2D previewIcon; + public Texture2D miniThumbnailIcon; + public string path; + } +} diff --git a/Assets/Script/Core/Editor/General/ObjectSelectorWindow.cs.meta b/Assets/Script/Core/Editor/General/ObjectSelectorWindow.cs.meta new file mode 100644 index 00000000..29f6fae1 --- /dev/null +++ b/Assets/Script/Core/Editor/General/ObjectSelectorWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 055332fad1884704bab6f1a15b73cc8e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/Language/LanguageDataEditorUtils.cs b/Assets/Script/Core/Editor/Language/LanguageDataEditorUtils.cs new file mode 100644 index 00000000..c6701b3b --- /dev/null +++ b/Assets/Script/Core/Editor/Language/LanguageDataEditorUtils.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + + +public class LanguageDataEditorUtils +{ + public static Dictionary> LoadEditorConfig(string c_EditorConfigName, ref List s_languageKeyList) + { + + Dictionary> s_languageKeyDict =new Dictionary>(); + + Dictionary config = ConfigEditorWindow.GetEditorConfigData(c_EditorConfigName); + + if (config == null) + { + config = new Dictionary(); + } + + foreach (var item in config) + { + List list = new List(); + List ObjList = (List)item.Value; + for (int i = 0; i < ObjList.Count; i++) + { + list.Add(ObjList[i].ToString()); + + s_languageKeyList.Add(item.Key + "/" + ObjList[i].ToString()); + } + + s_languageKeyDict.Add(item.Key, list); + } + + return s_languageKeyDict; + } + + public static List GetLanguageLayersKeyList() + { + List list = new List(); + LoadEditorConfig(LanguageDataEditorWindow.c_EditorConfigName, ref list); + for (int i = 0; i < list.Count; i++) + { + string[] ss = list[i].Split('/'); + + list[i] = ss[0].Replace('_', '/') + "/" + ss[1]; + } + return list; + } +} + diff --git a/Assets/Script/Core/Editor/Language/LanguageDataEditorUtils.cs.meta b/Assets/Script/Core/Editor/Language/LanguageDataEditorUtils.cs.meta new file mode 100644 index 00000000..c3ccd4a1 --- /dev/null +++ b/Assets/Script/Core/Editor/Language/LanguageDataEditorUtils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 96b51d2e88c2d9747ba2d5929ca24cf2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs index ffa7b013..95bd7d05 100644 --- a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs +++ b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs @@ -1,4 +1,5 @@ -using System; +using HDJ.Framework.Utils; +using System; using System.Collections; using System.Collections.Generic; using System.IO; @@ -8,7 +9,7 @@ public class LanguageDataEditorWindow : EditorWindow { const string c_DataPath = "Language"; - const string c_EditorConfigName = "LanguageEditorConfig"; + public const string c_EditorConfigName = "LanguageEditorConfig"; static List s_languageList = new List(); @@ -41,6 +42,82 @@ void OnEnable() FindAllDataName(); LoadEditorConfig(); LoadConfig(); + + configFileNames.Clear(); + string m_directoryPath = Application.dataPath + "/Resources/" + DataManager.c_directoryName; + configFileNames.AddRange(PathUtils.GetDirectoryFileNames(m_directoryPath, new string[] { ".txt" }, false, false)); + } + private List configFileNames = new List(); + private List fieldNames = new List(); + private string tableName = ""; + private string fieldName = ""; + private string m_newModelName=""; + void CreateModuleByConfigData() + { + m_newModelName = EditorGUILayout.TextField("模块名", m_newModelName); + tableName = EditorDrawGUIUtil.DrawPopup ("表格名", tableName,configFileNames,(value)=> + { + if (string.IsNullOrEmpty(value)) + return; + fieldNames.Clear(); + DataTable d = DataManager.GetData(value); + List tempList = new List(); + foreach (var item in d.TableKeys) + { + if (d.m_tableTypes.ContainsKey(item) && d.m_tableTypes[item] == FieldType.String) + tempList.Add(item); + } + fieldNames.AddRange(tempList); + }); + fieldName = EditorDrawGUIUtil.DrawPopup("字段名", fieldName,fieldNames); + if (m_newModelName != "" && !s_languageKeyDict.ContainsKey(m_newModelName)&& m_currentLanguage!= "None") + { + if (GUILayout.Button("新增模块")) + { + string modulePath = m_newModelName.Replace("_", "/"); + + DataTable d = DataManager.GetData(tableName); + + s_languageKeyDict.Add(m_newModelName, d.TableIDs); + + DataTable data = new DataTable(); + data.TableKeys.Add(LanguageManager.c_mainKey); + data.TableKeys.Add(LanguageManager.c_valueKey); + data.SetDefault(LanguageManager.c_valueKey, "NoValue"); + + foreach (var item in d.TableIDs) + { + object obj = null; + if (d[item].ContainsKey(fieldName)) + obj = d[item][fieldName]; + else + obj = d.m_defaultValue[fieldName]; + SingleData sd = new SingleData(); + sd.Add(LanguageManager.c_mainKey, item); + sd.Add(LanguageManager.c_valueKey, obj.ToString()); + data.AddData(sd); + d[item][fieldName] = modulePath + "/" + item; + } + + d.m_fieldAssetTypes[fieldName] = DataFieldAssetType.LocalizedLanguage; + + m_langeuageDataDict.Add(m_newModelName, data); + DataEditorWindow.SaveData(tableName, d); + + SaveData(); + + AssetDatabase.Refresh(); + + } + EditorGUILayout.Space(); + } + else + { + if (s_languageKeyDict.ContainsKey(m_newModelName)) + { + EditorGUILayout.LabelField("模块名重复!", EditorGUIStyleData.WarnMessageLabel); + } + } } void OnProjectChange() @@ -49,20 +126,40 @@ void OnProjectChange() LoadEditorConfig(); LoadConfig(); } - + private int toolbarOption = 0; + private string[] toolbarTexts = {"模块文件", "语言内容编辑", "语言设置" }; void OnGUI() { titleContent.text = "多语言编辑器"; if (!Application.isPlaying) { + SelectLanguageGUI(); DefaultLanguageGUI(); - EditorLanguageFieldGUI(); - EditorLanguageGUI(); + SelectEditorModuleGUI(); + toolbarOption = GUILayout.Toolbar(toolbarOption, toolbarTexts, GUILayout.Width(Screen.width)); + switch (toolbarOption) + { + case 0: + EditorLanguageModuleFileGUI(); + break; + case 1: + EditorLanguageFieldGUI(); + break; + case 2: + AddLanguageGUI(); + + SetDefaultLanguageGUI(m_currentLanguage); + DeleteLanguageGUI(); + break; + } + + GUILayout.FlexibleSpace(); SaveDataGUI(); - AddLanguageGUI(); + GenerateLanuageClassGUI(); + CreateModuleByConfigData(); } else { @@ -70,33 +167,15 @@ void OnGUI() } } + + #region 加载/保存编辑器设置 static void LoadEditorConfig() { s_languageKeyList.Clear(); s_languageKeyDict.Clear(); - - Dictionary config = ConfigEditorWindow.GetEditorConfigData(c_EditorConfigName); - - if (config == null) - { - config = new Dictionary(); - } - - foreach (var item in config) - { - List list = new List(); - List ObjList = (List)item.Value; - for (int i = 0; i < ObjList.Count; i++) - { - list.Add(ObjList[i].ToString()); - - s_languageKeyList.Add(item.Key + "/" + ObjList[i].ToString()); - } - - s_languageKeyDict.Add(item.Key, list); - } + s_languageKeyDict = LanguageDataEditorUtils.LoadEditorConfig(c_EditorConfigName, ref s_languageKeyList); } void LoadConfig() @@ -168,6 +247,7 @@ void DefaultLanguageGUI() void SetDefaultLanguageGUI(string languageName) { + if(languageName !="None") if (GUILayout.Button("设为默认语言")) { m_defaultLanguage = (SystemLanguage)Enum.Parse(typeof(SystemLanguage), languageName); @@ -180,6 +260,7 @@ void SetDefaultLanguageGUI(string languageName) void SelectLanguageGUI() { + GUILayout.BeginHorizontal(); string[] mask = s_languageList.ToArray(); m_currentSelectIndex = EditorGUILayout.Popup("当前语言:", m_currentSelectIndex, mask); if (mask.Length != 0 @@ -192,12 +273,24 @@ void SelectLanguageGUI() { Debug.Log("m_currentSelectIndex " + m_currentSelectIndex + " mask.Length " + mask.Length); } + + if(m_currentLanguage != "None" && GUILayout.Button("加载上一次保存")) + { + + DataManager.CleanCache(); + LanguageManager.IsInit = false; + DataEditorWindow.Refresh(); + ConfigManager.CleanCache(); + + LoadLanguage(m_currentLanguage); + GUI.FocusControl(""); + } + GUILayout.EndHorizontal(); } void LoadLanguage(string LanguageName) { - if (m_currentLanguage != LanguageName) - { + m_currentLanguage = LanguageName; if (LanguageName != "None") @@ -215,119 +308,199 @@ void LoadLanguage(string LanguageName) } } } - } + } #endregion #region 编辑语言字段 - Dictionary LanguageFieldFold = new Dictionary(); + private string selectEditorModuleName = ""; + private void SelectEditorModuleGUI() + { + GUILayout.BeginHorizontal(); + GUILayout.Label("选择编辑模块"); + GUILayout.FlexibleSpace(); + EditorGUILayout.SelectableLabel(selectEditorModuleName); + GUILayout.EndHorizontal(); + } + Vector2 pos_editorField = Vector2.zero; - bool isFoldLanguageField = false; - void EditorLanguageFieldGUI() + void EditorLanguageModuleFileGUI() { EditorGUI.indentLevel = 1; - pos_editorField = EditorGUILayout.BeginScrollView(pos_editorField, GUILayout.ExpandHeight(false)); + - isFoldLanguageField = EditorGUILayout.Foldout(isFoldLanguageField, "多语言模块列表"); + GUILayout.BeginHorizontal(); + EditorGUILayout.LabelField("▲多语言模块列表"); + GUILayout.FlexibleSpace(); + if (GUILayout.Button("新增模块", GUILayout.Width(70))) + { + AddLanguageModelGUI(); + } + GUILayout.EndHorizontal(); + GUILayout.Space(5); - if (isFoldLanguageField) + pos_editorField = EditorGUILayout.BeginScrollView(pos_editorField,"box", GUILayout.ExpandHeight(false)); + int index = 0; + foreach (var item in s_languageKeyDict) { - foreach (var item in s_languageKeyDict) - { - EditorGUI.indentLevel = 2; - if (!LanguageFieldFold.ContainsKey(item.Key)) - { - LanguageFieldFold.Add(item.Key, false); - } - EditorGUILayout.BeginHorizontal(); + EditorGUI.indentLevel = 2; - LanguageFieldFold[item.Key] = EditorGUILayout.Foldout(LanguageFieldFold[item.Key], item.Key); + if (item.Key == selectEditorModuleName) + { + GUI.color = Color.red; + } + EditorGUILayout.BeginHorizontal(); - if(GUILayout.Button("删除模块")) - { - s_languageKeyDict.Remove(item.Key); - break; - } + GUILayout.Label(index+". " + item.Key); + GUILayout.FlexibleSpace(); + if (item.Key!=selectEditorModuleName && GUILayout.Button("选择编辑模块")) + { + selectEditorModuleName = item.Key; + toolbarOption = 1; + } + GUILayout.Space(6); + if (GUILayout.Button("删除",GUILayout.Width(40))) + { + if (item.Key == selectEditorModuleName) + selectEditorModuleName = ""; + s_languageKeyDict.Remove(item.Key); + break; + } - EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndHorizontal(); - if (LanguageFieldFold[item.Key]) - { - EditorLanguageFieldGUI(item.Value); - } - } + GUI.color = Color.white; EditorGUILayout.Space(); EditorGUI.indentLevel = 1; - AddLanguageModelGUI(); + + index++; } EditorGUILayout.EndScrollView(); - + } - string m_newModelName = ""; - bool isAddLanguageModelFold = false; + void AddLanguageModelGUI() { - EditorGUI.indentLevel ++; - isAddLanguageModelFold = EditorGUILayout.Foldout(isAddLanguageModelFold, "新增模块"); - - if (isAddLanguageModelFold) + GeneralDataModificationWindow.OpenWindow(this, "新增模块", "", (value) => + { + value = EditorDrawGUIUtil.DrawBaseValue("模块名", value); + + if (string.IsNullOrEmpty(value.ToString())) + EditorGUILayout.HelpBox("名字不能为空", MessageType.Error); + if (s_languageKeyDict.ContainsKey(value.ToString())) + EditorGUILayout.HelpBox("名字重复", MessageType.Error); + return value; + }, (value) => { - EditorGUI.indentLevel++; - m_newModelName = EditorGUILayout.TextField("模块名", m_newModelName); + if (string.IsNullOrEmpty(value.ToString())) + return false; + if (s_languageKeyDict.ContainsKey(value.ToString())) + return false; + return true; + }, (value) => + { + selectEditorModuleName = value.ToString(); + s_languageKeyDict.Add(value.ToString(), new List()); - if (m_newModelName != "" && !s_languageKeyDict.ContainsKey(m_newModelName)) - { - if (GUILayout.Button("新增模块")) - { - s_languageKeyDict.Add(m_newModelName, new List()); - m_newModelName = ""; - } - EditorGUILayout.Space(); - } - else - { - if (s_languageKeyDict.ContainsKey(m_newModelName)) - { - EditorGUILayout.LabelField("模块名重复!", EditorGUIStyleData.WarnMessageLabel); - } - } + DataTable data = new DataTable(); + data.TableKeys.Add(LanguageManager.c_mainKey); + data.TableKeys.Add(LanguageManager.c_valueKey); + data.SetDefault(LanguageManager.c_valueKey, "NoValue"); + + m_langeuageDataDict.Add(selectEditorModuleName, data); + + SaveData(); + + }); - //不再支持新增默认模块 - //if (!s_languageKeyDict.ContainsKey(LanguageManager.c_defaultModuleKey.ToString())) - //{ - // if (GUILayout.Button("新增默认模块")) - // { - // s_languageKeyDict.Add(LanguageManager.c_defaultModuleKey, new List()); - // } - //} - } } - void EditorLanguageFieldGUI(List languageKeyList) + + + void EditorLanguageFieldGUI( ) { - EditorGUI.indentLevel++; - for (int i = 0; i < languageKeyList.Count; i++) - { - EditorGUILayout.BeginHorizontal(); - EditorGUILayout.LabelField("", languageKeyList[i]); + if (string.IsNullOrEmpty(selectEditorModuleName)) + return; + if (m_currentLanguage == "None") + return; - if (GUILayout.Button("删除字段")) - { - languageKeyList.RemoveAt(i); - i--; - } + List languageKeyList = s_languageKeyDict[selectEditorModuleName]; - EditorGUILayout.EndHorizontal(); + DataTable data = null; + if (m_langeuageDataDict.ContainsKey(selectEditorModuleName)) + { + data = m_langeuageDataDict[selectEditorModuleName]; } + EditorGUI.indentLevel++; + AddLangeuageFieldGUI(languageKeyList); EditorGUILayout.Space(); - AddLangeuageFieldGUI(languageKeyList); + + EditorDrawGUIUtil.DrawScrollView(languageKeyList, () => + { + for (int i = 0; i < languageKeyList.Count; i++) + { + GUILayout.Space(5); + GUILayout.BeginVertical("HelpBox"); + EditorGUILayout.BeginHorizontal(); + string key = languageKeyList[i]; + string content = ""; + if(data!=null ) + { + if (!data.ContainsKey(key)) + { + SingleData sd = new SingleData(); + sd.Add(LanguageManager.c_mainKey, key); + sd.Add(LanguageManager.c_valueKey, ""); + data.AddData(sd); + } + content = data[key].GetString(LanguageManager.c_valueKey); + } + + if (GUILayout.Button("X",GUILayout.Width(20))) + { + if (EditorUtility.DisplayDialog("提示","确定删除key","OK","Cancel")) + { + languageKeyList.RemoveAt(i); + i--; + } + + } + + GUILayout.Label(key); + GUILayout.FlexibleSpace(); + if (GUILayout.Button("CopyPath")) + { + string tempContent = selectEditorModuleName.Replace('_', '/'); + tempContent += "/" + key; + TextEditor tx = new TextEditor(); + tx.text = tempContent; + tx.OnFocus(); + tx.Copy(); + ShowNotification(new GUIContent("已复制")); + } + + EditorGUILayout.EndHorizontal(); + + content = EditorGUILayout.TextArea(content); + if (data != null) + { + data[key][LanguageManager.c_valueKey] = content; + } + GUILayout.EndVertical(); + + } + }, "box"); + + + + } string newField = ""; @@ -363,123 +536,20 @@ void AddLangeuageFieldGUI(List languageKeyList) #region 编辑语言 - private bool isFoldList; - private Vector2 pos = Vector2.zero; - - Dictionary m_EditorLanguageGUIFoldDict = new Dictionary(); - void DeleteLanguageGUI() - { - if(GUILayout.Button("删除语言")) - { - if (EditorUtility.DisplayDialog("警告", "确定要删除该语言吗!", "是", "取消")) - { - m_currentSelectIndex = 0; - s_languageKeyDict.Remove(m_currentLanguage); - Directory.Delete(Application.dataPath + "/Resources/" + DataManager.c_directoryName + "/" + c_DataPath + "/" + m_currentLanguage,true); - AssetDatabase.Refresh(); - } - } - } - - void EditorLanguageGUI() { if (m_currentLanguage != "None") - { - EditorGUI.indentLevel = 1; - isFoldList = EditorGUILayout.Foldout(isFoldList, "语言数据:"); - if (isFoldList) - { - pos = EditorGUILayout.BeginScrollView(pos, GUILayout.ExpandHeight(false)); - - foreach (var item in s_languageKeyDict) - { - EditorGUI.indentLevel = 2; - if (!m_langeuageDataDict.ContainsKey(item.Key)) - { - DataTable data = new DataTable(); - data.TableKeys.Add(LanguageManager.c_mainKey); - data.TableKeys.Add(LanguageManager.c_valueKey); - data.SetDefault(LanguageManager.c_valueKey, "NoValue"); - - m_langeuageDataDict.Add(item.Key, data); - } - - if (!m_EditorLanguageGUIFoldDict.ContainsKey(item.Key)) - { - m_EditorLanguageGUIFoldDict.Add(item.Key, false); - } - - m_EditorLanguageGUIFoldDict[item.Key] = EditorGUILayout.Foldout(m_EditorLanguageGUIFoldDict[item.Key], item.Key); - if (m_EditorLanguageGUIFoldDict[item.Key]) - { - EditorLanguageGUI(item.Key, m_langeuageDataDict[item.Key]); - } - } - - EditorGUILayout.EndScrollView(); - EditorGUILayout.Space(); - - } - - SetDefaultLanguageGUI(m_currentLanguage); - DeleteLanguageGUI(); - } - } - - void EditorLanguageGUI(string modelName, DataTable languageData) - { - EditorGUI.indentLevel ++; - for (int i = 0; i < s_languageKeyDict[modelName].Count; i++) - { - LanguageItemGUI(languageData, s_languageKeyDict[modelName][i]); - } - } - - void LanguageItemGUI(DataTable data, string key) - { - if (data.ContainsKey(key)) - { - GUILayout.BeginHorizontal(); - try + if (GUILayout.Button("删除语言")) { - string contentTmp = null; - - if (data[key].ContainsKey((LanguageManager.c_valueKey))) - { - contentTmp = EditorGUILayout.TextField(key, data[key].GetString(LanguageManager.c_valueKey)); - } - else - { - contentTmp = EditorGUILayout.TextField(key, ""); - } - - if(contentTmp != "") + if (EditorUtility.DisplayDialog("警告", "确定要删除该语言吗!", "是", "取消")) { - data[key][LanguageManager.c_valueKey] = contentTmp; + m_currentSelectIndex = 0; + s_languageKeyDict.Remove(m_currentLanguage); + Directory.Delete(Application.dataPath + "/Resources/" + DataManager.c_directoryName + "/" + c_DataPath + "/" + m_currentLanguage, true); + AssetDatabase.Refresh(); } } - catch (Exception e) - { - EditorGUILayout.TextArea("Error: " + e.ToString(), EditorGUIStyleData.ErrorMessageLabel); - EditorGUILayout.Space(); - } - - GUILayout.EndHorizontal(); - } - else - { - EditorGUILayout.BeginHorizontal(); - - EditorGUILayout.LabelField("缺少 " + key + " 字段", EditorGUIStyleData.WarnMessageLabel); - - AddMissLanguageGUI(data, key); - - EditorGUILayout.EndHorizontal(); - } - } - void AddMissLanguageGUI(DataTable data,string key) { @@ -497,17 +567,29 @@ void SaveDataGUI() { if (GUILayout.Button("保存")) { - SaveEditorConfig(); - SaveConfig(); + SaveData(); + } + } + + void SaveData() + { + SaveEditorConfig(); + SaveConfig(); - if (m_currentLanguage != "None") + if (m_currentLanguage != "None") + { + if(m_langeuageDataDict.ContainsKey(selectEditorModuleName)) { - foreach (var item in m_langeuageDataDict) - { - SaveData(GetLanguageSavePath(m_currentLanguage,item.Key) ,item.Value); - } + SaveData(GetLanguageSavePath(m_currentLanguage, selectEditorModuleName), m_langeuageDataDict[selectEditorModuleName]); } + //foreach (var item in m_langeuageDataDict) + //{ + // SaveData(GetLanguageSavePath(m_currentLanguage, item.Key), item.Value); + //} } + LanguageManager.IsInit = false; + DataEditorWindow.Refresh(); + ConfigManager.CleanCache(); } #endregion @@ -619,43 +701,11 @@ void FindAllDataName() public void FindConfigName(string path) { - //string[] allUIPrefabName = Directory.GetFiles(path); - //foreach (var item in allUIPrefabName) - //{ - // if (item.EndsWith(".txt")) - // { - // //string configName = FileTool.RemoveExpandName(FileTool.GetFileNameByPath(item)); - // s_dataNameList.Add(FileTool.RemoveExpandName(PathTool.GetDirectoryRelativePath(m_directoryPath + "/", item))); - // } - //} - string[] dires = Directory.GetDirectories(path); for (int i = 0; i < dires.Length; i++) { s_languageList.Add(FileTool.RemoveExpandName(PathTool.GetDirectoryRelativePath(m_directoryPath + "/", dires[i]))); - - //FindConfigName(dires[i]); - } - } - - public static List GetLanguageKeyList() - { - if(s_languageKeyList != null) - { - LoadEditorConfig(); - } - return s_languageKeyList; - } - public static List GetLanguageLayersKeyList() - { - List list = GetLanguageKeyList(); - for (int i = 0; i < list.Count; i++) - { - string[] ss = list[i].Split('/'); - - list[i] = ss[0].Replace('_', '/') + "/" + ss[1]; } - return list; } #endregion diff --git a/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs b/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs index 7327850f..4b5b1336 100644 --- a/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs +++ b/Assets/Script/Core/Editor/Package/PackageConfigEditorWindow.cs @@ -28,6 +28,7 @@ public class BundleConfigEditorWindow : EditorWindow #region 初始化 + void OnEnable() { EditorGUIStyleData.Init(); @@ -376,16 +377,7 @@ void BundlesView() if (GUILayout.Button("自动添加 Resource 目录下的资源并保存")) { - bundles.Clear(); - ArrangeBundlesByLayer(); - - AddAllResourceBundle(); //添加资源文件 - ArrangeBundlesByLayer(); //整理资源路径 - - CreatePackageFile(); //保存编辑器文件 - CheckAndCreatBundelPackageConfig(); //生成资源路径文件 - - ResourcesConfigManager.ClearConfig(); + AddResEndSave(); } if (GUILayout.Button("增加选中资源")) @@ -418,6 +410,19 @@ void BundlesView() //EditorGUILayout.EndHorizontal(); } + public void AddResEndSave() + { + bundles.Clear(); + ArrangeBundlesByLayer(); + + AddAllResourceBundle(); //添加资源文件 + ArrangeBundlesByLayer(); //整理资源路径 + + CreatePackageFile(); //保存编辑器文件 + CheckAndCreatBundelPackageConfig(); //生成资源路径文件 + + ResourcesConfigManager.ClearConfig(); + } void LogView() { EditorGUI.indentLevel = 1; diff --git a/Assets/Script/Core/Editor/Resource.meta b/Assets/Script/Core/Editor/Resource.meta new file mode 100644 index 00000000..d2f6bad3 --- /dev/null +++ b/Assets/Script/Core/Editor/Resource.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 953b4cad0189bb04b8df348657a72065 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/Resource/PeojectAssetChangeEvent.cs b/Assets/Script/Core/Editor/Resource/PeojectAssetChangeEvent.cs new file mode 100644 index 00000000..aa178f84 --- /dev/null +++ b/Assets/Script/Core/Editor/Resource/PeojectAssetChangeEvent.cs @@ -0,0 +1,76 @@ + +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; +/// +/// 资源文件变化事件 +/// +public class PeojectAssetChangeEvent { + + [InitializeOnLoadMethod] + static void EventFileChange() + { + PeojectAssetWillModificationEvent.OnCreateAssetCallBack += OnCreateAssetCallBack; + PeojectAssetWillModificationEvent.OnDeleteAssetCallBack += OnDeleteAssetCallBack; + PeojectAssetWillModificationEvent.OnMoveAssetCallBack += OnMoveAssetCallBack; + PeojectAssetWillModificationEvent.OnSaveAssetsCallBack += OnSaveAssetsCallBack; + } + + private static void OnSaveAssetsCallBack(string[] t) + { + //List paths = new List(); + //paths.AddRange(t); + //UpdateAsset(paths); + Debug.Log("OnSaveAssetsCallBack"); + //GlobalEvent.DispatchEvent(EditorGlobalEventEnum.OnSaveAssets, t); + } + + private static void OnMoveAssetCallBack(AssetMoveResult t, string t1, string t2) + { + List paths = new List(); + paths.Add(t1); + paths.Add(t2); + UpdateAsset(paths); + Debug.Log("OnMoveAssetCallBack"); + //GlobalEvent.DispatchEvent(EditorGlobalEventEnum.OnMoveAsset, t,t1,t2); + } + + private static void OnDeleteAssetCallBack(AssetDeleteResult t, string t1, RemoveAssetOptions t2) + { + List paths = new List(); + paths.Add(t1); + UpdateAsset(paths); + Debug.Log("OnDeleteAssetCallBack"); + //GlobalEvent.DispatchEvent(EditorGlobalEventEnum.OnDeleteAsset, t, t1, t2); + } + + private static void OnCreateAssetCallBack(string t) + { + List paths = new List(); + paths.Add(t); + UpdateAsset(paths); + Debug.Log("OnCreateAssetCallBack"); + //GlobalEvent.DispatchEvent(EditorGlobalEventEnum.OnCreateAsset, t); + } + + private static void UpdateAsset(List paths) + { + bool isUpdate = false; + foreach (var item in paths) + { + if (item.Contains("Assets/Resources")) + { + isUpdate = true; + break; + } + } + if (isUpdate) + { + BundleConfigEditorWindow win= EditorWindow.GetWindow(); + win.AddResEndSave(); + win.Close(); + Debug.Log("创建资源路径文件"); + } + } +} diff --git a/Assets/Script/Core/Editor/Resource/PeojectAssetChangeEvent.cs.meta b/Assets/Script/Core/Editor/Resource/PeojectAssetChangeEvent.cs.meta new file mode 100644 index 00000000..49472886 --- /dev/null +++ b/Assets/Script/Core/Editor/Resource/PeojectAssetChangeEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5a255d5a078f033439cb6b2367588d78 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/Resource/PeojectAssetWillModificationEvent.cs b/Assets/Script/Core/Editor/Resource/PeojectAssetWillModificationEvent.cs new file mode 100644 index 00000000..6f02dc8a --- /dev/null +++ b/Assets/Script/Core/Editor/Resource/PeojectAssetWillModificationEvent.cs @@ -0,0 +1,160 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using UnityEditor; +using UnityEngine; + +/// +/// Peoject 文件发生变化事件 +/// +public class PeojectAssetWillModificationEvent : UnityEditor.AssetModificationProcessor +{ + [InitializeOnLoadMethod] + private static void Add() + { + EditorApplication.update += ProjectWindowChanged; + } + + private static void ProjectWindowChanged() + { + //Debug.Log("ProjectWindowChanged" + " :" + EditorApplication.timeSinceStartup); + if (OnCreateAssetP != null) + { + if (OnCreateAssetCallBack != null) + OnCreateAssetCallBack((string)OnCreateAssetP[0]); + OnCreateAssetP = null; + } + + if (OnSaveAssetsP != null) + { + if (OnSaveAssetsCallBack != null) + OnSaveAssetsCallBack((string[])OnSaveAssetsP[0]); + OnSaveAssetsP = null; + } + + if (OnMoveAssetP != null) + { + if (OnMoveAssetCallBack != null) + OnMoveAssetCallBack((AssetMoveResult)OnMoveAssetP[0], (string)OnMoveAssetP[1], (string)OnMoveAssetP[2]); + OnMoveAssetP = null; + } + + if (OnDeleteAssetP != null) + { + if (OnDeleteAssetCallBack != null) + OnDeleteAssetCallBack((AssetDeleteResult)OnDeleteAssetP[0], (string)OnDeleteAssetP[1], (RemoveAssetOptions)OnDeleteAssetP[2]); + OnDeleteAssetP = null; + } + + } + + public static CallBack OnWillCreateAssetCallBack; + public static CallBack OnCreateAssetCallBack; + private static object[] OnCreateAssetP; + private static void OnWillCreateAsset(string path) + { + //Debug.Log("OnWillCreateAsset " + path +" :"+ EditorApplication.timeSinceStartup); + if (OnWillCreateAssetCallBack != null) + OnWillCreateAssetCallBack(path); + + OnCreateAssetP = new object[] {path }; + } + public static CallBackR OnWillSaveAssetsCallBack; + public static CallBack< string[]> OnSaveAssetsCallBack; + private static object[] OnSaveAssetsP; + private static string[] OnWillSaveAssets(string[] paths) + { + if (OnWillSaveAssetsCallBack != null) + OnWillSaveAssetsCallBack(paths); + List result = new List(); + foreach (var path in paths) + { + if (IsUnlocked(path)) + { + result.Add(path); + } + else + Debug.LogError(path + " is read-only."); + //Debug.Log("OnWillSaveAssets:" + path); + } + OnSaveAssetsP = new object[] { result .ToArray()}; + //Debug.Log("OnWillSaveAssets" + " :" + EditorApplication.timeSinceStartup); + + return result.ToArray(); + } + + public static CallBackR OnWillMoveAssetCallBack; + public static CallBack OnMoveAssetCallBack; + private static object[] OnMoveAssetP; + private static AssetMoveResult OnWillMoveAsset(string oldPath, string newPath) + { + if (OnWillMoveAssetCallBack != null) + OnWillMoveAssetCallBack(oldPath, newPath); + AssetMoveResult result = AssetMoveResult.DidNotMove; + if (IsLocked(oldPath)) + { + Debug.LogError(string.Format("Could not move {0} to {1} because {0} is locked!", oldPath, newPath)); + return AssetMoveResult.FailedMove; + } + else if (IsLocked(newPath)) + { + Debug.LogError(string.Format("Could not move {0} to {1} because {1} is locked!", oldPath, newPath)); + return AssetMoveResult.FailedMove; + } + + OnMoveAssetP = new object[] { result, oldPath, newPath }; + + return result; + } + public static CallBackR OnWillDeleteAssetCallBack; + public static CallBack OnDeleteAssetCallBack; + private static object[] OnDeleteAssetP; + private static AssetDeleteResult OnWillDeleteAsset(string assetPath, RemoveAssetOptions option) + { + if (OnWillDeleteAssetCallBack != null) + OnWillDeleteAssetCallBack(assetPath, option); + + AssetDeleteResult res = AssetDeleteResult.DidDelete; + if (IsLocked(assetPath)) + { + Debug.LogError(string.Format("Could not delete {0} because it is locked!", assetPath)); + res= AssetDeleteResult.FailedDelete; + } + OnDeleteAssetP = new object[] { res, assetPath, option }; + Debug.Log("OnWillDeleteAsset:" + assetPath + " :" + EditorApplication.timeSinceStartup); + + return AssetDeleteResult.DidNotDelete; + } + + public static CallBack OnOpenAssetForEditCallBack; + private static bool IsOpenForEdit(string assetPath, out string message) + { + // Debug.Log("IsOpenForEdit: " + assetPath); + if (IsLocked(assetPath)) + { + message = "File is locked for editing!"; + return false; + } + else + { + message = null; + if (OnOpenAssetForEditCallBack != null) + OnOpenAssetForEditCallBack(assetPath); + return true; + } + } + + static bool IsUnlocked(string path) + { + return !IsLocked(path); + } + + static bool IsLocked(string path) + { + if (!File.Exists(path)) + return false; + FileInfo fi = new FileInfo(path); + return fi.IsReadOnly; + } +} diff --git a/Assets/Script/Core/Editor/Resource/PeojectAssetWillModificationEvent.cs.meta b/Assets/Script/Core/Editor/Resource/PeojectAssetWillModificationEvent.cs.meta new file mode 100644 index 00000000..a9dbdd3d --- /dev/null +++ b/Assets/Script/Core/Editor/Resource/PeojectAssetWillModificationEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2eecaa1d01ff76443a87b89fb160ec9f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/UI/componment/LanguageComponmentEditor.cs b/Assets/Script/Core/Editor/UI/componment/LanguageComponmentEditor.cs index 7e8d0253..03cbc36d 100644 --- a/Assets/Script/Core/Editor/UI/componment/LanguageComponmentEditor.cs +++ b/Assets/Script/Core/Editor/UI/componment/LanguageComponmentEditor.cs @@ -10,8 +10,8 @@ public class LanguageComponmentEditor : Editor { LanguageComponent m_lc; - string[] m_languageList; - int m_currentSelectIndex = 0; + List m_languageList; + public override void OnInspectorGUI() { @@ -26,42 +26,21 @@ public override void OnInspectorGUI() if (m_lc.m_text == null) { EditorGUILayout.LabelField("没有找到Text组件!", EditorGUIStyleData.ErrorMessageLabel); + return; } } - - m_languageList = LanguageDataEditorWindow.GetLanguageKeyList().ToArray(); - - if (m_currentSelectIndex == 0) + if (m_languageList == null) + m_languageList = LanguageDataEditorUtils.GetLanguageLayersKeyList(); + + GUILayout.Space(6); + m_lc.languageKey = EditorDrawGUIUtil.DrawPopup("多语言key", m_lc.languageKey, m_languageList); + m_lc.ResetLanguage(); + GUILayout.Space(8); + if (GUILayout.Button("刷新多语言key")) { - m_currentSelectIndex = GetIndex(m_lc.m_moduleName,m_lc.m_languageID); + m_languageList = LanguageDataEditorUtils.GetLanguageLayersKeyList(); } - - m_currentSelectIndex = EditorGUILayout.Popup("当前内容:", m_currentSelectIndex, m_languageList); - - string content = m_languageList[m_currentSelectIndex]; - - string[] tmp = content.Split('/'); - - string moduleName = tmp[0]; - string contentID = tmp[1]; - - m_lc.m_moduleName = moduleName; - m_lc.m_languageID = contentID; - m_lc.m_text.text = LanguageManager.GetContent(moduleName, contentID); - base.OnInspectorGUI(); - } - - public int GetIndex(string mouleName,string content) - { - for (int i = 0; i < m_languageList.Length; i++) - { - if (m_languageList[i].Equals(mouleName + "/" + content)) - { - return i; - } - } - - return 0; + } } diff --git a/Assets/Script/Core/Editor/Utils/EditorDrawGUIUtil.cs b/Assets/Script/Core/Editor/Utils/EditorDrawGUIUtil.cs new file mode 100644 index 00000000..e69389be --- /dev/null +++ b/Assets/Script/Core/Editor/Utils/EditorDrawGUIUtil.cs @@ -0,0 +1,1193 @@ +using UnityEngine; +using System.Collections; +using System; +using System.Reflection; +using UnityEditor; +using System.IO; +using System.Collections.Generic; +using HDJ.Framework.Utils; +using System.Net; + +public class EditorDrawGUIUtil +{ + /// + /// 全局控制EditorDrawGUIUtil绘制类时是否绘制属性 + /// + public static bool IsDrawPropertyInClass = true; + /// + /// 全局控制EditorDrawGUIUtil绘制时是否可编辑 + /// + public static bool CanEdit = true; + + private static bool richTextSupport =false; + /// + /// 控件文本是否支持富文本 + /// + public static bool RichTextSupport + { + get { return richTextSupport; } + set + { + if (richTextSupport != value) + { + SetRichText(GUI.skin.GetType(), GUI.skin, value); + Type st = typeof(EditorStyles); + object v = st.GetField("s_Current", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null); + SetRichText(st, v, value); + richTextSupport = value; + } + } + } + + + private static void SetRichText(Type type,object data, bool isOn) + { + FieldInfo[] fs= type.GetFields(BindingFlags.Static | BindingFlags.Public| BindingFlags.NonPublic); + foreach (var f in fs) + { + if(f.FieldType== typeof(GUIStyle)) + { + GUIStyle style = (GUIStyle)f.GetValue(null); + style.richText = isOn; + f.SetValue(null, style); + } + } + PropertyInfo[] ps = type.GetProperties(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); + foreach (var p in ps) + { + if (p.CanRead && p.CanWrite&& p.PropertyType == typeof(GUIStyle)) + { + GUIStyle style = (GUIStyle)p.GetValue(null,null); + style.richText = isOn; + p.SetValue(null, style,null); + } + } + if (data != null) + { + fs = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + foreach (var f in fs) + { + if (f.FieldType == typeof(GUIStyle)) + { + GUIStyle style = (GUIStyle)f.GetValue(data); + style.richText = isOn; + f.SetValue(data, style); + } + } + ps = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + foreach (var p in ps) + { + if (p.CanRead && p.CanWrite && p.PropertyType == typeof(GUIStyle)) + { + GUIStyle style = (GUIStyle)p.GetValue(data,null); + style.richText = isOn; + p.SetValue(data, style,null); + } + } + } + } + /// + /// 绘制object + /// + /// + /// + /// + public static object DrawBaseValue(string name, object data) + { + if (data == null) + return data; + + Type type = data.GetType(); + string showName = richTextSupport? GetFormatName(name, type, "yellow", data): GetFormatName(name, type, "", data); + + object obj = data; + if (CanEdit) + { + if (type == typeof(int)) + { + obj = EditorGUILayout.IntField(new GUIContent(showName), (int)data); + } + else if (type == typeof(short)) + { + obj = EditorGUILayout.IntField(new GUIContent(showName), (short)data); + } + else if (type == typeof(long)) + { + obj = EditorGUILayout.LongField(new GUIContent(showName), (long)data); + } + else if (type == typeof(double)) + { + obj = EditorGUILayout.DoubleField(new GUIContent(showName), (double)data); + } + else if (type == typeof(float)) + { + obj = EditorGUILayout.FloatField(new GUIContent(showName), (float)data); + } + else if (type == typeof(bool)) + { + obj = EditorGUILayout.Toggle(new GUIContent(showName), (bool)data); + } + else if (type == typeof(string)) + { + GUILayout.BeginHorizontal(); + GUILayout.Label(showName, GUILayout.MaxWidth(Screen.width / 2)); + obj = EditorGUILayout.TextArea(data.ToString(), GUILayout.MaxWidth(Screen.width / 2)); + GUILayout.EndHorizontal(); + } + else if (type.BaseType.FullName == typeof(UnityEngine.Object).FullName || type.BaseType.FullName == typeof(Component).FullName || type.BaseType.FullName == typeof(MonoBehaviour).FullName) + { + obj = EditorGUILayout.ObjectField(showName, (UnityEngine.Object)data, type, true); + } + else if (type.BaseType == typeof(Enum)) + { + obj = EditorGUILayout.EnumPopup(new GUIContent(showName), (Enum)Enum.Parse(type, data.ToString())); + } + else if (type == typeof(Vector3)) + { + obj = EditorGUILayout.Vector3Field(new GUIContent(showName), (Vector3)data); + } + else if (type == typeof(Vector2)) + { + obj = EditorGUILayout.Vector2Field(new GUIContent(showName), (Vector2)data); + } + else if (type == typeof(Vector3Int)) + { + obj = EditorGUILayout.Vector3IntField(new GUIContent(showName), (Vector3Int)data); + } + else if (type == typeof(Vector2Int)) + { + obj = EditorGUILayout.Vector2IntField(new GUIContent(showName), (Vector2Int)data); + } + else if (type == typeof(Vector4)) + { + obj = EditorGUILayout.Vector4Field(new GUIContent(showName), (Vector4)data); + } + else if (type == typeof(Color)) + { + obj = EditorGUILayout.ColorField(new GUIContent(showName), (Color)data); + } + else if (type.Name == typeof(List<>).Name) + { + DrawFoldout(data, showName, () => + { + obj = DrawList("", data, null, null); + }); + + } + else if (type.Name == typeof(Dictionary<,>).Name) + { + DrawFoldout(data, showName, () => + { + obj = DrawDictionary("", data); + }); + } + else if (type.IsArray) + { + obj = DrawArray(showName, data, null, null); + } + else if ((type.IsClass && type != typeof(string)) || type.IsValueType) + { + DrawFoldout(data, showName, () => + { + obj = DrawClassData("", type.FullName, data); + }); + } + + } + else + { + if (type.IsPrimitive + || type == typeof(string) + || type.IsEnum + || type == typeof(Vector2) + || type == typeof(Vector3) + || type == typeof(Vector2Int) + || type == typeof(Vector3Int) + || type == typeof(Vector4) + || type.FullName == typeof(Color).FullName) + { + string showStr = data.ToString(); + + DrawLableString(showName, showStr); + + } + else if (type.BaseType == typeof(UnityEngine.Object) || type.BaseType == typeof(Component) || type.BaseType == typeof(MonoBehaviour)) + { + EditorGUILayout.ObjectField(showName, (UnityEngine.Object)data, type, true); + } + else if (type.Name == typeof(List<>).Name) + { + DrawFoldout(data, showName, () => + { + obj = DrawList("", data, null, null); + }); + } + else if (type.Name == typeof(Dictionary<,>).Name) + { + DrawFoldout(data, showName, () => + { + obj = DrawDictionary("", data); + }); + } + else if (type.IsArray) + { + DrawArray(showName, data, null, null); + } + else if (type.IsClass && type != typeof(string) || type.IsValueType) + { + DrawFoldout(data, showName, () => + { + obj = DrawClassData("", type.FullName, data); + }); + } + + } + return obj; + } + private static void DrawLableString(string name, string data) + { + GUILayout.BeginHorizontal("dockarea"); + EditorGUILayout.LabelField(name, GUILayout.MaxWidth(Screen.width / 2)); + EditorGUILayout.LabelField(data, GUILayout.MaxWidth(Screen.width / 2)); + GUILayout.EndHorizontal(); + } + /// + /// 绘制字段 + /// + /// + /// + /// + public static object DrawBaseValue(object data, FieldInfo field) + { + if (data == null || field == null) + return null; + object value = field.GetValue(data); + if (value == null) + { + if (CanEdit) + value = ReflectionUtils.CreateDefultInstance(field.FieldType); + } + string tempName = CheckShowGUINameAttribute(field); + if (value != null) + { + object d = DrawBaseValue(tempName, value); + field.SetValue(data, d); + } + else + { + string name = GetFormatName(tempName, field.FieldType); + DrawLableString(name, "Null"); + } + return data; + } + /// + /// 绘制属性 + /// + /// + /// + /// + public static object DrawBaseValue(object data, PropertyInfo property) + { + if (data == null || property == null) + return null; + if (property.CanRead) + { + object value = property.GetValue(data, null); + + if (value == null) + { + if (CanEdit) + value = ReflectionUtils.CreateDefultInstance(property.PropertyType); + } + string tempName = CheckShowGUINameAttribute(property); + if (value != null) + { + object d = DrawBaseValue(tempName, value); + if (property.CanWrite) + { + property.SetValue(data, d, null); + } + } + else + { + string name = GetFormatName(tempName, property.PropertyType); + DrawLableString(name, "Null"); + } + } + + return data; + } + + + /// + /// 绘制类 + /// + /// + /// + /// + /// + public static object DrawClassData(string name, string classFullName, object obj) + { + + Type t = ReflectionUtils.GetTypeByTypeFullName(classFullName); + + if (obj == null) + obj = ReflectionUtils.CreateDefultInstance(t); + else + { + if (t.FullName != obj.GetType().FullName) + { + Debug.Log("fullName : " + t.FullName + " :" + obj.GetType().FullName); + obj = ReflectionUtils.CreateDefultInstance(t); + } + } + return DrawClassData(name, obj, null, null); + } + /// + /// 绘制类或结构体 + /// + /// + /// 隐藏某些字段不绘制 + /// 每绘制一个字段后调用 + /// + public static object DrawClassData(string name, object data, List hideFieldPropertyNames = null, CallBack callAffterDrawField = null, CallBack callEndClassDraw = null) + { + if (data == null) + { + DrawLableString(name, "Null"); + return null; + } + + Type t = data.GetType(); + if (!string.IsNullOrEmpty(name)) + GUILayout.Label(name); + + if (SpecialClassDeal(name, data)) + return data; + + FieldInfo[] fs = t.GetFields(BindingFlags.Instance | BindingFlags.Public); + PropertyInfo[] propertys = t.GetProperties(BindingFlags.Instance | BindingFlags.Public); + + if (fs.Length > 0) + { + List tempF = new List(); + foreach (var f in fs) + { + if (hideFieldPropertyNames != null) + { + if (hideFieldPropertyNames.Contains(f.Name)) + continue; + } + if (!CheckNoShowInEditorAttribute(f)) + { + continue; + } + tempF.Add(f); + } + fs = tempF.ToArray(); + + } + if (propertys.Length > 0) + { + List tempF = new List(); + foreach (var f in propertys) + { + if (hideFieldPropertyNames != null) + { + if (hideFieldPropertyNames.Contains(f.Name)) + continue; + } + if (!CheckNoShowInEditorAttribute(f)) + { + continue; + } + tempF.Add(f); + } + propertys = tempF.ToArray(); + } + + GUILayout.Space(1); + + GUILayout.BeginVertical("box"); + if (fs.Length > 0) + GUILayout.Box("FieldInfo:"); + foreach (var f in fs) + { + DrawBaseValue(data, f); + if (callAffterDrawField != null) + callAffterDrawField(f); + } + if (propertys.Length > 0 && IsDrawPropertyInClass) + { + GUILayout.Space(2); + GUILayout.Box("PropertyInfo:"); + foreach (var f in propertys) + { + DrawBaseValue(data, f); + if (callAffterDrawField != null) + callAffterDrawField(f); + } + } + + if (callEndClassDraw != null) + { + callEndClassDraw(); + } + GUILayout.EndVertical(); + + return data; + } + /// + /// 绘制弹出菜单 + /// + /// + /// + /// + /// + /// + public static string DrawPopup(string name, string selectedStr, List displayedOptions, CallBack selectChangeCallBack = null) + { + int selectedIndex = -1; + if (displayedOptions.Contains(selectedStr)) + { + selectedIndex = displayedOptions.IndexOf(selectedStr); + } + int recode = selectedIndex; + if (selectedIndex == -1) + selectedIndex = 0; + GUIStyle style = new GUIStyle("Popup"); + style.richText = true; + selectedIndex = EditorGUILayout.Popup(name, selectedIndex, displayedOptions.ToArray(), style); + + if (displayedOptions.Count == 0) + return ""; + else + selectedStr = displayedOptions[selectedIndex]; + if (selectedIndex != recode) + { + if (selectChangeCallBack != null) + selectChangeCallBack(selectedStr); + } + return selectedStr; + } + /// + /// List的 弹出菜单 + /// + /// + /// + /// + /// + public static object DrawStringPopupList(string name, object obj, List displayedOptions) + { + if (obj == null) + return null; + Type type = obj.GetType(); + + MethodInfo methodInfo = type.GetMethod("get_Item", BindingFlags.Instance | BindingFlags.Public); + MethodInfo methodInfo1 = type.GetMethod("Item", BindingFlags.Instance | BindingFlags.Public); + MethodInfo methodInfo2 = type.GetMethod("RemoveAt", BindingFlags.Instance | BindingFlags.Public); + MethodInfo methodInfo3 = type.GetMethod("Add", BindingFlags.Instance | BindingFlags.Public); + GUILayout.BeginHorizontal(); + GUILayout.Label(name); + GUILayout.FlexibleSpace(); + if (GUILayout.Button("+", GUILayout.Width(50))) + { + object temp = ""; + methodInfo3.Invoke(obj, new object[] { temp }); + } + GUILayout.EndHorizontal(); + PropertyInfo pro = type.GetProperty("Count"); + int cout = (int)pro.GetValue(obj, null); + GUILayout.BeginVertical("box"); + for (int i = 0; i < cout; i++) + { + object da = methodInfo.Invoke(obj, new object[] { i }); + GUILayout.BeginHorizontal(); + da = DrawPopup("", da.ToString(), displayedOptions); + methodInfo1.Invoke(obj, new object[] { i, da }); + + if (GUILayout.Button("-", GUILayout.Width(50))) + { + methodInfo2.Invoke(obj, new object[] { i }); + break; + } + GUILayout.EndHorizontal(); + } + GUILayout.EndVertical(); + return obj; + } + /// + /// 绘制List泛型 + /// + /// + /// + /// + public static object DrawList(string name, object data, CallBackR addCustomData = null, CallBack ItemChnageCallBack = null + ,CallBackR DrawItem =null) + { + if (data == null) + { + DrawLableString(name, "Null"); + return null; + } + + Type type = data.GetType(); + Type t = type.GetGenericArguments()[0]; + + int count = (int)type.GetProperty("Count").GetValue(data, null); + //Debug.Log(name + " count :" + count); + + MethodInfo methodInfo = type.GetMethod("get_Item", BindingFlags.Instance | BindingFlags.Public); + MethodInfo methodInfo1 = type.GetMethod("set_Item", BindingFlags.Instance | BindingFlags.Public); + MethodInfo methodInfo2 = type.GetMethod("RemoveAt", BindingFlags.Instance | BindingFlags.Public); + MethodInfo methodInfo3 = type.GetMethod("Add", BindingFlags.Instance | BindingFlags.Public); + MethodInfo methodInfo4 = type.GetMethod("Reverse", new Type[] { typeof(int), typeof(int) }); + GUILayout.BeginVertical("box"); + GUILayout.BeginHorizontal(); + GUILayout.Label(name); + GUILayout.FlexibleSpace(); + if (CanEdit && GUILayout.Button("+", GUILayout.Width(50))) + { + object temp = null; + if (addCustomData != null) + { + object tempVV = addCustomData(); + if (tempVV == null || tempVV.GetType().FullName != t.FullName) + temp = ReflectionUtils.CreateDefultInstance(t); + else + temp = tempVV; + } + else + temp = ReflectionUtils.CreateDefultInstance(t); + methodInfo3.Invoke(data, new object[] { temp }); + if (ItemChnageCallBack != null) + ItemChnageCallBack(true, temp); + } + GUILayout.EndHorizontal(); + + + if (count > 0) + { + GUILayout.BeginVertical("box"); + + for (int i = 0; i < count; i++) + { + object da = methodInfo.Invoke(data, new object[] { i }); + GUILayout.BeginHorizontal(); + if (DrawItem != null) + { + da = DrawItem(da); + } + else + { + da = DrawBaseValue("" + i, da); + } + methodInfo1.Invoke(data, new object[] { i, da }); + if (CanEdit && GUILayout.Button("↑", GUILayout.Width(15))) + { + if (i != 0) + { + methodInfo4.Invoke(data, new object[] { i - 1, 2 }); + } + break; + } + if (CanEdit && GUILayout.Button("↓", GUILayout.Width(15))) + { + if (i != (count - 1)) + { + methodInfo4.Invoke(data, new object[] { i, 2 }); + } + break; + } + if (CanEdit && GUILayout.Button("-", GUILayout.Width(30))) + { + methodInfo2.Invoke(data, new object[] { i }); + if (ItemChnageCallBack != null) + ItemChnageCallBack(false, da); + break; + } + GUILayout.EndHorizontal(); + + } + + GUILayout.EndVertical(); + } + GUILayout.EndVertical(); + + return data; + } + /// + /// 绘制数组 + /// + /// + /// + /// + public static object DrawArray(string name, object data, CallBackR addCustomData = null, CallBack ItemChnageCallBack = null) + { + if (data == null) + { + DrawLableString(name, "Null"); + return null; + } + + Type type = data.GetType(); + string ts = type.FullName.Replace("[]", ""); + + type = ReflectionUtils.GetTypeByTypeFullName(ts); + var typeList = typeof(List<>); + Type typeDataList = typeList.MakeGenericType(type); + object instance = Activator.CreateInstance(typeDataList); + + MethodInfo AddRange = typeDataList.GetMethod("AddRange"); + AddRange.Invoke(instance, new object[] { data }); + instance = DrawList(name, instance, addCustomData, ItemChnageCallBack); + + MethodInfo ToArray = typeDataList.GetMethod("ToArray"); + return ToArray.Invoke(instance, null); + + } + /// + /// 绘制字典类型 + /// + /// + /// + /// + public static object DrawDictionary(string name, object data) + { + + if (data == null) + { + DrawLableString(name, "Null"); + return null; + } + + Type type = data.GetType(); + PropertyInfo p = type.GetProperty("Count"); + int count = (int)p.GetValue(data, null); + + MethodInfo clearMe = type.GetMethod("Clear"); + p = type.GetProperty("Keys"); + object keys = p.GetValue(data, null); + List tempListKeys = new List(); + MethodInfo GetEnumeratorMe = keys.GetType().GetMethod("GetEnumerator"); + PropertyInfo current = GetEnumeratorMe.ReturnParameter.ParameterType.GetProperty("Current"); + MethodInfo moveNext = GetEnumeratorMe.ReturnParameter.ParameterType.GetMethod("MoveNext"); + + object enumerator = GetEnumeratorMe.Invoke(keys, null); + for (int i = 0; i < count; i++) + { + moveNext.Invoke(enumerator, null); + object v = current.GetValue(enumerator, null); + tempListKeys.Add(v); + } + + p = type.GetProperty("Values"); + object values = p.GetValue(data, null); + List tempListValues = new List(); + GetEnumeratorMe = values.GetType().GetMethod("GetEnumerator"); + current = GetEnumeratorMe.ReturnParameter.ParameterType.GetProperty("Current"); + moveNext = GetEnumeratorMe.ReturnParameter.ParameterType.GetMethod("MoveNext"); + enumerator = GetEnumeratorMe.Invoke(values, null); + for (int i = 0; i < count; i++) + { + moveNext.Invoke(enumerator, null); + object v = current.GetValue(enumerator, null); + tempListValues.Add(v); + } + + MethodInfo addDicMe = type.GetMethod("Add", BindingFlags.Instance | BindingFlags.Public); + + if (tempListKeys.Count > 0) + { + GUILayout.BeginVertical("box"); + for (int i = 0; i < tempListKeys.Count; i++) + { + GUILayout.BeginHorizontal(); + GUILayout.Label(name); + GUILayout.FlexibleSpace(); + if (CanEdit && GUILayout.Button("-", GUILayout.Width(40))) + { + tempListKeys.RemoveAt(i); + tempListValues.RemoveAt(i); + break; + } + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal("box"); + GUILayout.BeginVertical("box"); + + tempListKeys[i] = DrawBaseValue(i + ": key", tempListKeys[i]); + GUILayout.EndVertical(); + + GUILayout.BeginVertical("box"); + + tempListValues[i] = DrawBaseValue("value", tempListValues[i]); + GUILayout.EndVertical(); + GUILayout.EndHorizontal(); + + GUILayout.Space(2); + } + GUILayout.EndVertical(); + + clearMe.Invoke(data, null); + for (int i = 0; i < tempListKeys.Count; i++) + { + addDicMe.Invoke(data, new object[] { tempListKeys[i], tempListValues[i] }); + } + } + return data; + } + + private static MethodInfo searchMethod= typeof(EditorGUILayout).GetMethod("ToolbarSearchField", BindingFlags.NonPublic | BindingFlags.Static, null, new System.Type[] { typeof(string), typeof(GUILayoutOption[]) }, null); + /// + /// 绘制搜索框 + /// + /// + /// + /// + public static string DrawSearchField(string value, params GUILayoutOption[] options) + { + if (searchMethod != null) + { + value = (string)searchMethod.Invoke(null, new object[] { value, options }); + } + return value; + } + /// + /// 根据Type 和name 组合显示数据类型描述 如 : frame(List) Count:10 + /// + /// + /// + /// 给类型添上颜色 如 :List + /// 用于获取List Array等的数量 + /// + public static string GetFormatName(string name, Type t,string color="", object data = null) + { + if (t == null && data == null) + return name; + string typeName = t.Name; + if (t.IsClass || t.IsValueType) + { + + if (t.IsGenericType) + { + typeName = typeName.Remove(typeName.IndexOf('`')); + Type[] gTypes = t.GetGenericArguments(); + string temp = ""; + for (int i = 0; i < gTypes.Length; i++) + { + Type tempType = gTypes[i]; + temp += tempType.Name; + if (i < gTypes.Length - 1) + { + temp += ","; + } + } + typeName = typeName + "<" + temp + ">"; + } + + typeName = "" + typeName + ""; + + } + else if (t.IsEnum) + { + typeName = " Enum : " + typeName + ""; + } + if (!string.IsNullOrEmpty(color)) + { + typeName = "(" + typeName + ")"; + } + else + typeName = "(" + typeName + ")"; + + if (t.IsArray) + { + if (data != null) + { + PropertyInfo f = t.GetProperty("Length"); + int count = (int)f.GetValue(data, null); + typeName += "\tLength : " + count; + } + } + if (t == typeof(List<>) || t == typeof(Dictionary<,>)) + { + if (data != null) + { + int count = (int)t.GetProperty("Count").GetValue(data, null); + typeName += "\tCount : " + count; + } + + } + return name + typeName; + + } + /// + /// 绘制特殊的类,DateTime.IPAddress..... + /// + /// + /// + /// + private static bool SpecialClassDeal(string name, object data) + { + Type t = data.GetType(); + if (t == typeof(DateTime)) + { + DateTime dt = (DateTime)data; + DrawLableString(name, dt.ToString() + ":" + dt.Millisecond); + return true; + } + else if (t == typeof(IPAddress)) + { + DrawLableString(name, data.ToString()); + return true; + } + + return false; + } + /// + /// 绘制折页 + /// + /// + /// + /// + public static void DrawFoldout(object taget, string name, CallBack drawGUI) + { + bool isFolder = EditorGUILayout.Foldout(EditorGUIState.GetState(taget), name); + if (isFolder) + { + if (drawGUI != null) + drawGUI(); + } + EditorGUIState.SetState(taget, isFolder); + + + } + /// + /// 绘制滚动视图 + /// + /// 状态储存的目标object + /// + /// + public static void DrawScrollView(object taget, CallBack drawGUI, string style = "") + { + Vector2 pos = EditorGUIState.GetVector2(taget); + if (string.IsNullOrEmpty(style)) + { + pos = GUILayout.BeginScrollView(pos); + } + else + { + pos = GUILayout.BeginScrollView(pos, style); + } + + if (drawGUI != null) + drawGUI(); + GUILayout.EndScrollView(); + EditorGUIState.SetVector2(taget, pos); + } + /// + /// 横向居中布局 + /// + /// + /// + public static void DrawHorizontalCenter(CallBack drawGUI, string style = "") + { + if (string.IsNullOrEmpty(style)) + GUILayout.BeginHorizontal(); + else + GUILayout.BeginHorizontal(style); + GUILayout.FlexibleSpace(); + if (drawGUI != null) + { + drawGUI(); + } + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + } + private const string SearchFieldSelect_NameOfFocusedControl = "SearchFieldSelect_TextField"; + /// + /// 输入搜索选择框,输入文本可出现 displayedOptions 里相近的选择,选择了按钮触发selectCallback回调 + /// + /// + /// + /// + /// + /// + public static string DrawSearchFieldSelect(string name, string selectStr, string[] displayedOptions, CallBack selectCallback) + { + string res = ""; + + GUILayout.BeginHorizontal(); + + GUILayout.Label(name, GUILayout.MaxWidth(160)); + + + GUILayout.BeginVertical(); + GUI.SetNextControlName(SearchFieldSelect_NameOfFocusedControl); + res = EditorGUILayout.TextField(selectStr); + + bool isFocuseTextField = GUI.GetNameOfFocusedControl() == SearchFieldSelect_NameOfFocusedControl; + + Rect r = GUILayoutUtility.GetLastRect(); + List list = new List(); + if (!string.IsNullOrEmpty(res) && isFocuseTextField) + { + foreach (var item in displayedOptions) + { + if (null == item) + continue; + if (item.Contains(res)) + list.Add(new GUIContent(item)); + } + + r.y = r.y + r.height; + r.height = list.Count > 3 ? list.Count * 21 : 21 * 2; + r = GUILayoutUtility.GetRect(r.width, r.height); + EditorGUI.DrawRect(r, Color.grey); + } + GUILayout.EndVertical(); + + GUILayout.EndHorizontal(); + + if (!isFocuseTextField) return res; + + for (int i = 0; i < list.Count; i++) + { + Rect rect = new Rect(r.x, r.y + i * 20 + 1, r.width, 20); + if (GUI.Button(rect, list[i])) + { + res = list[i].text; + selectCallback(res); + //去掉文本输入的焦点 + EditorGUI.FocusTextInControl(""); + break; + } + } + return res; + } + /// + /// 绘制格子布局 + /// + /// + /// 数据 + /// 一行个数 + /// item间的间隔 + /// 绘制每个Item回调 + public static void DrawGrid(List data,int rowCount,Vector2 spacing, CallBack drawItemCallBack) + { + if (data == null) + return; + + int columnCount = data.Count / rowCount; + int exraNumber = data.Count % rowCount; + if (exraNumber > 0) + columnCount++; + + int index = 0; + DrawScrollView(data, () => + { + for (int i = 0; i < columnCount; i++) + { + GUILayout.BeginHorizontal(); + int count = rowCount; + if (exraNumber > 0 && i == (columnCount - 1)) + count = exraNumber; + GUILayout.Space(spacing.x); + + for (int j = 0; j < count; j++) + { + if (drawItemCallBack != null) + drawItemCallBack(data[index]); + GUILayout.Space(spacing.x); + index++; + } + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + GUILayout.Space(spacing.y); + } + }); + + } + + #region 特性处理只在绘制类,结构体时有用 + /// + /// 检查是否有NoShowInEditorAttribute特性 + /// + /// + /// 返回是否显示 + private static bool CheckNoShowInEditorAttribute(MemberInfo member) + { + object[] attrs = member.GetCustomAttributes(false); + bool isShow = true; + foreach (var att in attrs) + { + if (att.GetType() == ReflectionUtils.GetTypeByTypeFullName("NoShowInEditorAttribute")) + { + isShow = false; + break; + } + } + return isShow; + } + /// + /// 为DrawClass字段或属性改变为特定的名字 + /// + /// + /// 有ShowGUINameAttribute,则使用它赋予的名字,否则使用默认字段或属性名 + private static string CheckShowGUINameAttribute(MemberInfo member) + { + object[] attrs = member.GetCustomAttributes(false); + string name = member.Name; + foreach (var att in attrs) + { + Type t = att.GetType(); + if (t == ReflectionUtils.GetTypeByTypeFullName("ShowGUINameAttribute")) + { + PropertyInfo p = t.GetProperty("Name"); + object obj = p.GetValue(att, null); + name = (obj == null ? "" : obj.ToString()); + break; + } + } + return name; + } + + #endregion +} +/// +/// 保存object的UI状态,使得可以保存折叠状态, +/// +public static class EditorGUIState +{ + static int count = 0; + private static Dictionary objectHasherDic = new Dictionary(); + private static Dictionary hasherDic = new Dictionary(); + private static Dictionary hasherPosDic = new Dictionary(); + public static bool GetState(object obj) + { + AddObject(obj); + int h= objectHasherDic[obj].GetHashCode(); + return hasherDic[h]; + } + + public static void SetState(object obj,bool state) + { + AddObject(obj); + int h = objectHasherDic[obj].GetHashCode(); + hasherDic[h] = state; + + } + public static Vector2 GetVector2(object obj) + { + AddObject(obj); + int h = objectHasherDic[obj].GetHashCode(); + return hasherPosDic[h]; + } + + public static void SetVector2(object obj, Vector2 pos) + { + AddObject(obj); + int h = objectHasherDic[obj].GetHashCode(); + hasherPosDic[h] = pos; + + } + private static void AddObject(object obj) + { + if (!objectHasherDic.ContainsKey(obj)) + { + Hasher hasher = new Hasher(count).Hash(obj); + objectHasherDic.Add(obj, hasher); + int hashCode = hasher.GetHashCode(); + hasherDic.Add(hashCode, false); + hasherPosDic.Add(hashCode, Vector2.zero); + count++; + if (count >= int.MaxValue) + count = 0; + } + } + + + + internal class Hasher + { + // private fields + private int _hashCode; + + // constructors + public Hasher() + { + _hashCode = 17; + } + + public Hasher(int seed) + { + _hashCode = seed; + } + + // public methods + public override int GetHashCode() + { + return _hashCode; + } + + // this overload added to avoid boxing + public Hasher Hash(bool obj) + { + _hashCode = 37 * _hashCode + obj.GetHashCode(); + return this; + } + + // this overload added to avoid boxing + public Hasher Hash(int obj) + { + _hashCode = 37 * _hashCode + obj.GetHashCode(); + return this; + } + + // this overload added to avoid boxing + public Hasher Hash(long obj) + { + _hashCode = 37 * _hashCode + obj.GetHashCode(); + return this; + } + + // this overload added to avoid boxing + public Hasher Hash(Nullable obj) where T : struct + { + _hashCode = 37 * _hashCode + ((obj == null) ? -1 : obj.Value.GetHashCode()); + return this; + } + + public Hasher Hash(object obj) + { + _hashCode = 37 * _hashCode + ((obj == null) ? -1 : obj.GetHashCode()); + return this; + } + + public Hasher HashElements(IEnumerable sequence) + { + if (sequence == null) + { + _hashCode = 37 * _hashCode + -1; + } + else + { + foreach (var value in sequence) + { + _hashCode = 37 * _hashCode + ((value == null) ? -1 : value.GetHashCode()); + } + } + return this; + } + + public Hasher HashStructElements(IEnumerable sequence) where T : struct + { + foreach (var value in sequence) + { + _hashCode = 37 * _hashCode + value.GetHashCode(); + } + return this; + } + } +} + + diff --git a/Assets/Script/Core/Editor/Utils/EditorDrawGUIUtil.cs.meta b/Assets/Script/Core/Editor/Utils/EditorDrawGUIUtil.cs.meta new file mode 100644 index 00000000..e0850253 --- /dev/null +++ b/Assets/Script/Core/Editor/Utils/EditorDrawGUIUtil.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 3707d9d6933f3b44d9c2f36c2060b75f +timeCreated: 1525245037 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/Utils/EditorDrawGUIUtility.cs b/Assets/Script/Core/Editor/Utils/EditorDrawGUIUtility.cs new file mode 100644 index 00000000..6eb5e29c --- /dev/null +++ b/Assets/Script/Core/Editor/Utils/EditorDrawGUIUtility.cs @@ -0,0 +1,186 @@ +using HDJ.Framework.Utils; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEditor; +using UnityEngine; + +public enum EditorCanDragAreaSide +{ + Top =1, + Bottom=2, + Left=4, + Right=8, +} + +public static class EditorDrawGUIUtility +{ + /// + /// 绘制可拖拽改变区域 + /// + /// 拖拽区域 + /// 最大区域 + /// 在区域内绘制GUI + /// 哪条边可拖拽,默认全部可拖拽 + /// + public static Rect DrawCanDragArea(Rect dragScreenRect, Rect maxScreenRect, CallBack drawCallBack, EditorCanDragAreaSide canDragAreaSide= EditorCanDragAreaSide.Top| EditorCanDragAreaSide.Bottom| EditorCanDragAreaSide.Left| EditorCanDragAreaSide.Right,string style ="") + { + dragScreenRect.xMin = Mathf.Clamp(dragScreenRect.xMin, maxScreenRect.xMin, dragScreenRect.xMax - 5); + dragScreenRect.xMax = Mathf.Clamp(dragScreenRect.xMax, maxScreenRect.xMin+1, maxScreenRect.xMax ); + dragScreenRect.yMin = Mathf.Clamp(dragScreenRect.yMin, maxScreenRect.yMin, dragScreenRect.yMax-5); + dragScreenRect.yMax = Mathf.Clamp(dragScreenRect.yMax, maxScreenRect.yMin+1, maxScreenRect.yMax); + + if ((canDragAreaSide & EditorCanDragAreaSide.Left) > 0) + dragScreenRect.xMin = EditorDrawGUIUtility.DrawHorizontalDragSplitter(dragScreenRect.xMin, maxScreenRect.xMin, dragScreenRect.yMin, 0, 5, maxScreenRect.width, dragScreenRect.height); + else + dragScreenRect.xMin = maxScreenRect.xMin; + + if ((canDragAreaSide & EditorCanDragAreaSide.Right) > 0) + dragScreenRect.xMax = EditorDrawGUIUtility.DrawHorizontalDragSplitter(dragScreenRect.xMax, dragScreenRect.xMin, dragScreenRect.yMin, 5, 0, maxScreenRect.width, dragScreenRect.height); + else + dragScreenRect.xMax = maxScreenRect.xMax; + + if ((canDragAreaSide & EditorCanDragAreaSide.Top) > 0) + dragScreenRect.yMin = EditorDrawGUIUtility.DrawVerticalDragSplitter(dragScreenRect.yMin, maxScreenRect.yMin, dragScreenRect.xMin, 0, 5, maxScreenRect.height, dragScreenRect.width); + else + dragScreenRect.yMin = maxScreenRect.yMin; + + if ((canDragAreaSide & EditorCanDragAreaSide.Bottom) > 0) + dragScreenRect.yMax = EditorDrawGUIUtility.DrawVerticalDragSplitter(dragScreenRect.yMax, dragScreenRect.yMin, dragScreenRect.xMin, 5, 0, maxScreenRect.height, dragScreenRect.width); + else + dragScreenRect.yMax = maxScreenRect.yMax; + + if (string.IsNullOrEmpty(style)) + GUILayout.BeginArea(dragScreenRect, ""); + else + GUILayout.BeginArea(dragScreenRect, "", style); + if (drawCallBack != null) + { + drawCallBack(); + } + GUILayout.EndArea(); + + return dragScreenRect; + } + public static float DrawHorizontalDragSplitter(float dragX,float minX, float pos_Y, float minLeftSide, float minRightSide, float width, float splitterHeight) + { + Rect dragRect = new Rect(dragX, pos_Y, 5f, splitterHeight); + dragRect = HandleHorizontalSplitter(dragRect, minX, width, minLeftSide, minRightSide); + + DrawHorizontalSplitter(dragRect); + return dragRect.x; + } + /// + /// 绘制可上下拖拽的线 + /// + /// 拖拽的变化Y坐标 + /// 拖拽的最小Y坐标 + /// 线从X坐标开始绘制 + /// 总高度范围内可拖拽的最小范围,距离上边界多少 + /// 总高度范围内可拖拽的最大范围,距离下边界多少 + /// 可拖拽总高度 + /// 绘制线的宽度 + /// + public static float DrawVerticalDragSplitter(float dragY,float minY, float pos_X, float minTopSide, float minBottomSide, float height, float splitterWidth) + { + Rect dragRect = new Rect(pos_X, dragY, splitterWidth,5f ); + dragRect = HandleVerticalSplitter(dragRect, minY, height, minTopSide, minBottomSide); + + DrawVerticalSplitter(dragRect); + return dragRect.y; + } + public static void DrawHorizontalSplitter(Rect dragRect) + { + if (Event.current.type == EventType.Repaint) + { + Color color = GUI.color; + Color b = (!EditorGUIUtility.isProSkin) ? new Color(0.6f, 0.6f, 0.6f, 1.333f) : new Color(0.12f, 0.12f, 0.12f, 1.333f); + GUI.color *= b; + Rect position = new Rect(dragRect.x - 1f, dragRect.y, 1f, dragRect.height); + GUI.DrawTexture(position, EditorGUIUtility.whiteTexture); + GUI.color = color; + } + } + public static void DrawVerticalSplitter(Rect dragRect) + { + if (Event.current.type == EventType.Repaint) + { + Color color = GUI.color; + Color b = (!EditorGUIUtility.isProSkin) ? new Color(0.6f, 0.6f, 0.6f, 1.333f) : new Color(0.12f, 0.12f, 0.12f, 1.333f); + GUI.color *= b; + Rect position = new Rect(dragRect.x, dragRect.y-1f, dragRect.width, 1f); + GUI.DrawTexture(position, EditorGUIUtility.whiteTexture); + GUI.color = color; + } + } + public static Rect HandleHorizontalSplitter(Rect dragRect,float minX, float width, float minLeftSide, float minRightSide) + { + if (Event.current.type == EventType.Repaint) + { + EditorGUIUtility.AddCursorRect(dragRect, MouseCursor.SplitResizeLeftRight); + } + float num = 0f; + + object[] par = new object[] { dragRect, true }; + Vector2 delta = (Vector2)ReflectionUtils.InvokMethod(typeof(EditorGUI), null, "MouseDeltaReader", ref par); + float x = delta.x; + float max = minX + width - minRightSide; + if (x != 0f) + { + dragRect.x += x; + num = Mathf.Clamp(dragRect.x, minX+ minLeftSide, max); + } + if (dragRect.x > max) + { + num = max; + } + if (num > 0f) + { + dragRect.x = num; + } + return dragRect; + } + public static Rect HandleVerticalSplitter(Rect dragRect,float minY, float height, float minTopSide, float minBottomSide) + { + if (Event.current.type == EventType.Repaint) + { + EditorGUIUtility.AddCursorRect(dragRect, MouseCursor.SplitResizeUpDown); + } + float num = 0f; + + object[] par = new object[] { dragRect, true }; + Vector2 delta = (Vector2)ReflectionUtils.InvokMethod(typeof(EditorGUI), null, "MouseDeltaReader", ref par); + float y = delta.y; + float max = minY + height - minBottomSide; + if (y != 0f) + { + dragRect.y += y; + num = Mathf.Clamp(dragRect.y, minY+ minTopSide, max); + } + if (dragRect.y > max) + { + num = max; + } + if (num > 0f) + { + dragRect.y = num; + } + return dragRect; + } + + public static Rect HandleDragObject(Rect dragRect) + { + Event e = Event.current; + + //if (e.button == 0 && e.type == EventType.MouseDrag) + { + object[] par = new object[] { dragRect, true }; + Vector2 delta = (Vector2)ReflectionUtils.InvokMethod(typeof(EditorGUI), null, "MouseDeltaReader", ref par); + dragRect.position = dragRect.position + delta; + //e.Use(); + } + return dragRect; + } +} + diff --git a/Assets/Script/Core/Editor/Utils/EditorDrawGUIUtility.cs.meta b/Assets/Script/Core/Editor/Utils/EditorDrawGUIUtility.cs.meta new file mode 100644 index 00000000..cab59f35 --- /dev/null +++ b/Assets/Script/Core/Editor/Utils/EditorDrawGUIUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a042c3e0b005c32499c94425f2d3cc76 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/res/ApplicationStatusTemplate.txt.meta b/Assets/Script/Core/Editor/res/ApplicationStatusTemplate.txt.meta index e687e5fd..968a92bd 100644 --- a/Assets/Script/Core/Editor/res/ApplicationStatusTemplate.txt.meta +++ b/Assets/Script/Core/Editor/res/ApplicationStatusTemplate.txt.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: a9e6c97bd48928c418bf343ccf7ed03d -timeCreated: 1524378268 +guid: 668d2044105a38d44821da322eae765b +timeCreated: 1524378131 licenseType: Pro TextScriptImporter: externalObjects: {} diff --git a/Assets/Script/Core/GameObject/GameObjectManager.cs b/Assets/Script/Core/GameObject/GameObjectManager.cs index f07636b7..2830fe3f 100644 --- a/Assets/Script/Core/GameObject/GameObjectManager.cs +++ b/Assets/Script/Core/GameObject/GameObjectManager.cs @@ -89,57 +89,61 @@ public static bool IsExist(string objectName) /// 返回这个对象 public static GameObject CreateGameObjectByPool(string name,GameObject parent = null,bool isSetActive = true) { + GameObject go = null; if (IsExist(name)) { - GameObject go = s_objectPool[name][0]; + go = s_objectPool[name][0]; s_objectPool[name].RemoveAt(0); - if(isSetActive) - go.SetActive(true); - - if (parent == null) - { - go.transform.SetParent(null); - } - else - { - go.transform.SetParent(parent.transform); - } - - //go.transform.localScale = Vector3.one; + + } + else + { + go = CreateGameObject(name, parent); + } + if (isSetActive) + go.SetActive(true); - return go; + if (parent == null) + { + go.transform.SetParent(null); } else { - return CreateGameObject(name, parent); + go.transform.SetParent(parent.transform); } + + //go.transform.localScale = Vector3.one; + + return go; } public static GameObject CreateGameObjectByPool(GameObject prefab, GameObject parent = null, bool isSetActive = true) { + GameObject go = null; if (IsExist(prefab.name)) { - GameObject go = s_objectPool[prefab.name][0]; + go = s_objectPool[prefab.name][0]; s_objectPool[prefab.name].RemoveAt(0); - if (isSetActive) - go.SetActive(true); + + } + else + { + go= CreateGameObject(prefab, parent); + } + if (isSetActive) + go.SetActive(true); - if (parent == null) - { - go.transform.SetParent(null); - } - else - { - go.transform.SetParent(parent.transform); - } - return go; + if (parent == null) + { + go.transform.SetParent(null); } else { - return CreateGameObject(prefab, parent); + go.transform.SetParent(parent.transform); } + return go; } /// diff --git a/Assets/Script/Core/GlobalEvent/GlobalEvent.cs b/Assets/Script/Core/GlobalEvent/GlobalEvent.cs index 7028628a..9390bca0 100644 --- a/Assets/Script/Core/GlobalEvent/GlobalEvent.cs +++ b/Assets/Script/Core/GlobalEvent/GlobalEvent.cs @@ -75,6 +75,11 @@ public static void RemoveEvent(Enum type, EventHandle handle) } } + internal static void AddTypeEvent() + { + throw new NotImplementedException(); + } + /// /// 移除某类事件 /// diff --git a/Assets/Script/Core/Input/InputEventProxy/InputOperationEventProxy.cs b/Assets/Script/Core/Input/InputEventProxy/InputOperationEventProxy.cs index 4d28178e..88a491a7 100644 --- a/Assets/Script/Core/Input/InputEventProxy/InputOperationEventProxy.cs +++ b/Assets/Script/Core/Input/InputEventProxy/InputOperationEventProxy.cs @@ -58,5 +58,15 @@ public static void Update() } } + public static void DispatchInputOperationEvent(IInputOperationEventBase inputOperationEventBase,string eventName) + { + //只有允许输入时才派发事件 + if (IsActive) + { + InputManager.Dispatch(eventName, inputOperationEventBase); + } + } + + } diff --git a/Assets/Script/Core/Lua/LuaManager.cs b/Assets/Script/Core/Lua/LuaManager.cs index 9b8c6de0..c1d98093 100644 --- a/Assets/Script/Core/Lua/LuaManager.cs +++ b/Assets/Script/Core/Lua/LuaManager.cs @@ -35,7 +35,7 @@ public static void Init() Debug.LogError("Lua Init Execption " + e.ToString()); } #else - throw new Exception("USE_LUA not Define ! "); + // throw new Exception("USE_LUA not Define ! "); #endif } diff --git a/Assets/Script/Core/Lua/ToLua/Core/ToLua.cs b/Assets/Script/Core/Lua/ToLua/Core/ToLua.cs index 16a9e86e..da723c55 100644 --- a/Assets/Script/Core/Lua/ToLua/Core/ToLua.cs +++ b/Assets/Script/Core/Lua/ToLua/Core/ToLua.cs @@ -179,7 +179,7 @@ static int Print(IntPtr L) } } - Debugger.Log(StringBuilderCache.GetStringAndRelease(sb)); + //Debugger.Log(StringBuilderCache.GetStringAndRelease(sb)); return 0; } catch (Exception e) diff --git a/Assets/Script/Core/Lua/ToLua/Plugins.meta b/Assets/Script/Core/Lua/ToLua/Plugins.meta index 3d3bb7ca..5275f6e8 100644 --- a/Assets/Script/Core/Lua/ToLua/Plugins.meta +++ b/Assets/Script/Core/Lua/ToLua/Plugins.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 -guid: c605199a37db9d647a4f91ed63c58494 +guid: 77c394cfb39bc7d408341d807969892f folderAsset: yes -timeCreated: 1524378253 +timeCreated: 1524378112 licenseType: Pro DefaultImporter: externalObjects: {} diff --git a/Assets/Script/Core/Lua/ToLua/Plugins/iOS.meta b/Assets/Script/Core/Lua/ToLua/Plugins/iOS.meta index 731e09fa..7c094803 100644 --- a/Assets/Script/Core/Lua/ToLua/Plugins/iOS.meta +++ b/Assets/Script/Core/Lua/ToLua/Plugins/iOS.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 -guid: a37926ddd3db3b24d841849d171ea877 +guid: 5fb8ed91c19c8a5458a8eb28f93084a0 folderAsset: yes -timeCreated: 1524378253 +timeCreated: 1524378112 licenseType: Pro DefaultImporter: externalObjects: {} diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes.meta index 4e95e214..710d1d3c 100644 --- a/Assets/Script/Core/Lua/ToLua/PluginsRes.meta +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 -guid: 06df1c68b8baa13429112547e49f84ac +guid: 76fd670b1d0e273498e8b42794b72fd6 folderAsset: yes -timeCreated: 1524378253 +timeCreated: 1524378112 licenseType: Pro DefaultImporter: externalObjects: {} diff --git a/Assets/Script/Core/Network/MessageClass4Json/JsonMessageProcessingController.cs b/Assets/Script/Core/Network/MessageClass4Json/JsonMessageProcessingController.cs index ab37f146..97c3bc22 100644 --- a/Assets/Script/Core/Network/MessageClass4Json/JsonMessageProcessingController.cs +++ b/Assets/Script/Core/Network/MessageClass4Json/JsonMessageProcessingController.cs @@ -42,8 +42,8 @@ private static void MessageReceiveCallBack(InputNetworkMessageEvent inputEvent) GlobalEvent.DispatchEvent(ErrorCodeMessage, codeMsg); } - } + static Dictionary mesDic = new Dictionary(); public static void SendMessage(T data) { @@ -54,6 +54,5 @@ public static void SendMessage(T data) mesDic.Add("Content", content); NetworkManager.SendMessage(mt, mesDic); } - } diff --git a/Assets/Script/Core/ResourceLoad/ResourceManager.cs b/Assets/Script/Core/ResourceLoad/ResourceManager.cs index 3b594af1..32d2d864 100644 --- a/Assets/Script/Core/ResourceLoad/ResourceManager.cs +++ b/Assets/Script/Core/ResourceLoad/ResourceManager.cs @@ -2,6 +2,7 @@ using System.Collections; using System.Text; using System; + /* * gameLoadType 为 Resource 时 ,所有资源从Resource读取 * gameLoadType 不为 Resource时,资源读取方式从配置中读取 diff --git a/Assets/Script/Core/ResourceLoad/ResourcesConfigManager.cs b/Assets/Script/Core/ResourceLoad/ResourcesConfigManager.cs index 54ad808f..bb9b92d6 100644 --- a/Assets/Script/Core/ResourceLoad/ResourcesConfigManager.cs +++ b/Assets/Script/Core/ResourceLoad/ResourcesConfigManager.cs @@ -33,6 +33,12 @@ public static void ClearConfig() public static bool GetIsExitRes(string resName) { + +#if UNITY_EDITOR + + Initialize(); +#endif + if (m_bundleConfigs == null) { throw new Exception("RecourcesConfigManager GetBundleConfig : bundleConfigs is null do you Initialize?"); diff --git a/Assets/Script/Core/SDKManager/SDKInterfaceDefine.cs.meta b/Assets/Script/Core/SDKManager/SDKInterfaceDefine.cs.meta index 73d5468e..312a5173 100644 --- a/Assets/Script/Core/SDKManager/SDKInterfaceDefine.cs.meta +++ b/Assets/Script/Core/SDKManager/SDKInterfaceDefine.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 76d047bca098e4845a2b1f9b67a0c58b -timeCreated: 1524378257 +guid: 1261cfd1fe821584fbb4a77539ae4a6a +timeCreated: 1524378116 licenseType: Pro MonoImporter: externalObjects: {} diff --git a/Assets/Script/Core/SDKManager/SDKManagerNew.cs.meta b/Assets/Script/Core/SDKManager/SDKManagerNew.cs.meta index 1ec89822..5c094265 100644 --- a/Assets/Script/Core/SDKManager/SDKManagerNew.cs.meta +++ b/Assets/Script/Core/SDKManager/SDKManagerNew.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 2b9da08723c61f447a7d3c1102ab44b2 -timeCreated: 1524378256 +guid: c3c3ff631218bb9418d20defe39b2ab7 +timeCreated: 1524378118 licenseType: Pro MonoImporter: externalObjects: {} diff --git a/Assets/Script/Core/UI/Components/EmptyUI.meta b/Assets/Script/Core/UI/Components/EmptyUI.meta new file mode 100644 index 00000000..8160e75b --- /dev/null +++ b/Assets/Script/Core/UI/Components/EmptyUI.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4a695bddbd2a57747a6c145c836da002 +folderAsset: yes +timeCreated: 1532080725 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/UI/Components/EmptyUI/Empty4Raycast.cs b/Assets/Script/Core/UI/Components/EmptyUI/Empty4Raycast.cs new file mode 100644 index 00000000..7b997644 --- /dev/null +++ b/Assets/Script/Core/UI/Components/EmptyUI/Empty4Raycast.cs @@ -0,0 +1,19 @@ + +using UnityEngine; +using System.Collections; + +namespace UnityEngine.UI +{ + public class Empty4Raycast : MaskableGraphic + { + protected Empty4Raycast() + { + useLegacyMeshGeneration = false; + } + + protected override void OnPopulateMesh(VertexHelper toFill) + { + toFill.Clear(); + } + } +} diff --git a/Assets/Script/Core/UI/Components/EmptyUI/Empty4Raycast.cs.meta b/Assets/Script/Core/UI/Components/EmptyUI/Empty4Raycast.cs.meta new file mode 100644 index 00000000..4a2cc74a --- /dev/null +++ b/Assets/Script/Core/UI/Components/EmptyUI/Empty4Raycast.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ea4ab67afa6c5aa4c83aa037b7b39da6 +timeCreated: 1532080744 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/UI/Components/LanguageComponent/LanguageComponent.cs b/Assets/Script/Core/UI/Components/LanguageComponent/LanguageComponent.cs index a0777966..334ea981 100644 --- a/Assets/Script/Core/UI/Components/LanguageComponent/LanguageComponent.cs +++ b/Assets/Script/Core/UI/Components/LanguageComponent/LanguageComponent.cs @@ -5,8 +5,7 @@ public class LanguageComponent : MonoBehaviour { - public string m_moduleName = LanguageManager.c_defaultModuleKey; - public string m_languageID = ""; + public string languageKey = ""; public Text m_text; @@ -27,7 +26,9 @@ public void Init() public void ResetLanguage() { - m_text.text = LanguageManager.GetContent(m_moduleName,m_languageID); + if (string.IsNullOrEmpty(languageKey)) + return; + m_text.text = LanguageManager.GetContentByKey(languageKey); } void ReceviceLanguageChange(params object[] objs) diff --git a/Assets/Script/Core/UI/Control/UIManager.cs b/Assets/Script/Core/UI/Control/UIManager.cs index 7af918f0..8c0bfedf 100644 --- a/Assets/Script/Core/UI/Control/UIManager.cs +++ b/Assets/Script/Core/UI/Control/UIManager.cs @@ -36,6 +36,7 @@ public static void Init() s_UIStackManager = instance.GetComponent(); s_UIcamera = instance.GetComponentInChildren(); + DontDestroyOnLoad(instance); } @@ -118,6 +119,9 @@ public static UIWindowBase OpenUIWindow(string UIName, UICallBack callback = nul RemoveHideUI(UIbase); AddUI(UIbase); + s_UIStackManager.OnUIOpen(UIbase); + s_UILayerManager.SetLayer(UIbase); //设置层级 + UISystemEvent.Dispatch(UIbase, UIEvent.OnOpen); //派发OnOpen事件 try { @@ -128,8 +132,7 @@ public static UIWindowBase OpenUIWindow(string UIName, UICallBack callback = nul Debug.LogError(UIName + " OnOpen Exception: " + e.ToString()); } - s_UIStackManager.OnUIOpen(UIbase); - s_UILayerManager.SetLayer(UIbase); //设置层级 + s_UIAnimManager.StartEnterAnim(UIbase, callback, objs); //播放动画 return UIbase; } diff --git a/Assets/Script/Core/UI/Model/UIBase.cs b/Assets/Script/Core/UI/Model/UIBase.cs index ad845f97..fbece74c 100644 --- a/Assets/Script/Core/UI/Model/UIBase.cs +++ b/Assets/Script/Core/UI/Model/UIBase.cs @@ -715,6 +715,25 @@ public UIBase CreateItem(string itemName, string prantName, bool isActive) return UIItem; } + public UIBase CreateItem(GameObject itemObj, GameObject parent, bool isActive) + { + GameObject item = GameObjectManager.CreateGameObjectByPool(itemObj, parent, isActive); + + item.transform.localScale = Vector3.one; + UIBase UIItem = item.GetComponent(); + + if (UIItem == null) + { + throw new Exception("CreateItem Error : ->" + itemObj.name + "<- don't have UIBase Component!"); + } + + UIItem.Init(m_childUIIndex++); + UIItem.UIName = UIEventKey + "_" + UIItem.UIName; + + m_ChildList.Add(UIItem); + + return UIItem; + } public UIBase CreateItem(string itemName, string prantName) { diff --git a/Assets/Script/Core/UI/Style/LanguageManager.cs b/Assets/Script/Core/UI/Style/LanguageManager.cs index 0affcb89..94ffa675 100644 --- a/Assets/Script/Core/UI/Style/LanguageManager.cs +++ b/Assets/Script/Core/UI/Style/LanguageManager.cs @@ -16,6 +16,8 @@ public class LanguageManager public const string c_mainKey = "key"; public const string c_valueKey = "value"; + + static public List s_LanguageList = new List(); //语言列表 static public List s_modelList = new List(); //模块列表 static public SystemLanguage s_defaultlanguage = SystemLanguage.ChineseSimplified; //默认语言 @@ -28,6 +30,7 @@ public class LanguageManager public static bool IsInit { get { return LanguageManager.isInit; } + set { isInit = value; } } public static void Init() @@ -124,26 +127,53 @@ public static string GetContent(string moduleName,string contentID, List /// /// public static string GetContentByKey(string moduleName_key, params object[] contentParams) + { + string[] res = ChangeKey2ModuleID(moduleName_key); + return GetContent(res[0], res[1], contentParams); + } + public static bool HaveKey(string moduleName_key) + { + Init(); + string[] res = ChangeKey2ModuleID(moduleName_key); + string moduleName = res[0]; + string contentID = res[1]; + + if (!s_languageDataDict.ContainsKey(moduleName)) + { + return false; + } + + DataTable data = s_languageDataDict[moduleName]; + + if (!data.ContainsKey(contentID)) + { + return false; + } + + return true; + } + private static string[] ChangeKey2ModuleID(string moduleName_key) { string[] ss = moduleName_key.Split('/'); - string moduleName=""; + string moduleName = ""; string contentID = ""; - if (ss.Length>2) + if (ss.Length > 2) { - for (int i = 0; i < ss.Length-1; i++) + for (int i = 0; i < ss.Length - 1; i++) { moduleName += ss[i]; if (i != ss.Length - 2) moduleName += "_"; } - contentID = ss[2]; + contentID = ss[ss.Length - 1]; } else { moduleName = ss[0]; contentID = ss[1]; } - return GetContent(moduleName, contentID, contentParams); + string[] data = new string[] { moduleName, contentID }; + return data; } public static string GetContent(string moduleName, string contentID, params object[] contentParams) { @@ -169,18 +199,17 @@ public static string GetContent(string moduleName, string contentID, params obje return "Dont find language : ->" + contentID + "<-"; } - if (contentParams == null || contentParams.Length == 0) - return content; - else + if (contentParams != null && contentParams.Length > 0) { for (int i = 0; i < contentParams.Length; i++) { string replaceTmp = "{" + i + "}"; content = content.Replace(replaceTmp, contentParams[i].ToString()); - } - - return content; + } } + if ( ApplicationManager.Instance.showLanguageValue && ApplicationManager.Instance.m_AppMode == AppMode.Developing) + content = "[" + content + "]"; + return content; } public static string GetLanguageDataSaveName(string langeuageName, string modelName) diff --git a/Assets/Script/Core/Utils/ParseTool.cs b/Assets/Script/Core/Utils/ParseTool.cs index 50e57fae..305bcc86 100644 --- a/Assets/Script/Core/Utils/ParseTool.cs +++ b/Assets/Script/Core/Utils/ParseTool.cs @@ -2,7 +2,7 @@ using System.Collections; using System; -public class ParseTool : MonoBehaviour +public static class ParseTool { public static float[] String2FloatArray(string value) diff --git a/Assets/Script/Core/Utils/ReflectionUtils.cs b/Assets/Script/Core/Utils/ReflectionUtils.cs new file mode 100644 index 00000000..6dbb9461 --- /dev/null +++ b/Assets/Script/Core/Utils/ReflectionUtils.cs @@ -0,0 +1,457 @@ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using UnityEngine; + +namespace HDJ.Framework.Utils +{ + public static class ReflectionUtils + { + public static Dictionary GetClassOrStructData(object data, bool containsPropertyInfo = false) + { + Type type = data.GetType(); + FieldInfo[] fields = type.GetFields(); + Dictionary dic = new Dictionary(); + for (int i = 0; i < fields.Length; i++) + { + object v = fields[i].GetValue(data); + string name = fields[i].Name; + if (v == null) + continue; + dic.Add(name, v); + } + if (!containsPropertyInfo) + return dic; + PropertyInfo[] propertyInfos = type.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); + for (int i = 0; i < propertyInfos.Length; i++) + { + PropertyInfo property = propertyInfos[i]; + if (!property.CanRead) continue; + + try + { + + string name = property.Name; + object v = property.GetValue(data, null); + dic.Add(name, v); + } + catch (Exception e) + { + Debug.LogError(e.ToString()); + continue; + } + } + return dic; + } + public static object SetClassOrStructData(Dictionary dic, Type type, bool containsPropertyInfo = false,object instance=null) + { + object classObj = instance; + if(classObj==null) + classObj=Activator.CreateInstance(type); + + FieldInfo[] fields = type.GetFields(); + + for (int i = 0; i < fields.Length; i++) + { + string name = fields[i].Name; + if (dic.ContainsKey(name)) + { + fields[i].SetValue(classObj, dic[name]); + } + } + if (!containsPropertyInfo) + return classObj; + PropertyInfo[] propertyInfos = type.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); + for (int i = 0; i < propertyInfos.Length; i++) + { + PropertyInfo property = propertyInfos[i]; + if (!property.CanWrite) continue; + try + { + string name = propertyInfos[i].Name; + if (dic.ContainsKey(name)) + propertyInfos[i].SetValue(classObj, dic[name], null); + } + catch (Exception e) + { + Debug.LogError(e.ToString()); + continue; + } + } + return classObj; + } + + /// + /// 获取父类的所有子类 + /// + /// 父类Type + /// + public static Type[] GetChildTypes(Type parentType, bool isContainsAllChild = true) + { + List lstType = new List(); + Assembly assem = Assembly.GetAssembly(parentType); + Type[] types = assem.GetTypes(); + //Debug.Log() + foreach (Type tChild in types) + { + if (tChild.BaseType == parentType) + { + lstType.Add(tChild); + if (isContainsAllChild) + { + Type[] temp = GetChildTypes(tChild, isContainsAllChild); + if (temp.Length > 0) + lstType.AddRange(temp); + } + } + } + return lstType.ToArray(); + } +//#if UNITY + public readonly static Assembly Assembly_CSharp = Assembly.Load("Assembly-CSharp"); + + public readonly static Assembly Assembly_UnityEngine = Assembly.Load("UnityEngine"); +//#endif +#if UNITY_EDITOR + public readonly static Assembly Assembly_CSharp_Editor = Assembly.Load("Assembly-CSharp-Editor"); + public readonly static Assembly Assembly_UnityEditor = Assembly.Load("UnityEditor"); +#endif + /// + /// 获取Type类 + /// + /// type的全名 + /// + public static Type GetTypeByTypeFullName(string typeFullName,bool isShowErrorLog=true) + { + Type type = Type.GetType(typeFullName); + Assembly ass = Assembly.GetExecutingAssembly(); + type = ass.GetType(typeFullName); +//#if UNITY + if (type == null && Assembly_CSharp!=null && ass != Assembly_CSharp) + { + type = Assembly_CSharp.GetType (typeFullName); + } + if (type == null && Assembly_UnityEngine!=null&& ass != Assembly_UnityEngine) + { + type = Assembly_UnityEngine.GetType ( typeFullName); + } +//#endif +#if UNITY_EDITOR + if (type == null && Assembly_CSharp_Editor!=null&& ass != Assembly_CSharp_Editor) + { + type = Assembly_CSharp_Editor.GetType (typeFullName); + } + if (type == null && Assembly_UnityEditor!=null&& ass != Assembly_UnityEditor) + { + type = Assembly_UnityEditor.GetType(typeFullName); + } +#endif + if (type == null) + { + Assembly[] assemblys = AppDomain.CurrentDomain.GetAssemblies(); + for (int i = 0; i < assemblys.Length; i++) + { + Assembly assembly = assemblys[i]; + if (assembly == ass) continue; +//#if UNITY + if (assembly == Assembly_CSharp) continue; + if (assembly == Assembly_UnityEngine) continue; +//#endif +#if UNITY_EDITOR + if (assembly == Assembly_CSharp_Editor) continue; + if (assembly == Assembly_UnityEditor) continue; +#endif + type = assemblys[i].GetType(typeFullName); + if (type != null) + break; + } + } + if (type == null && isShowErrorLog) + Debug.LogError("无法找到类型:" + typeFullName); + return type; + } + public static Type GetTypefromAssemblyFullName(string AssemblyName, string fullName) + { + + Assembly tmp = Assembly.Load(AssemblyName); + return tmp.GetType(fullName); + } + + + private const BindingFlags flagsInstance = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; + private const BindingFlags flagsStatic = BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic; + + /// + /// 创建默认实例 + /// + /// + /// true:给构造方法传默认值,false:给构造方法传 + /// + public static object CreateDefultInstanceAll(Type type,bool isDeepParameters =false) + { + object instance = null; + string error = ""; + if (type.IsArray) + { + instance = Activator.CreateInstance(type,new object[] {0 }); + + } + else if (type.IsValueType) + { + instance = Activator.CreateInstance(type); + } + else + { + ConstructorInfo[] construArrs = type.GetConstructors(flagsInstance); + for (int i = 0; i < construArrs.Length; i++) + { + ConstructorInfo cInfo = construArrs[i]; + + ParameterInfo[] pArr = cInfo.GetParameters(); + object[] parmsArr = new object[pArr.Length]; + for (int j = 0; j < parmsArr.Length; j++) + { + ParameterInfo pf = pArr[j]; + if (isDeepParameters) + { + parmsArr[j] = CreateDefultInstance(pf.ParameterType); + } + else + parmsArr[j] = null; + } + try + { + instance = Activator.CreateInstance(type, flagsInstance, null, parmsArr, null); + if (instance == null) + continue; + else + break; + } + catch (Exception e) + { + error += e.ToString() + "\n"; + continue; + } + } + } + if(instance==null) + Debug.LogError(error); + return instance; + } + public static object CreateDefultInstance(Type type) + { + if(type ==null) + { + Debug.LogError("Type不可为:null"); + return null; + } + object instance = CreateDefultInstanceAll(type, false); ; + if (instance == null) + instance = CreateDefultInstanceAll(type, true); + if (instance == null) + Debug.LogError("创建默认实例失败!Type:"+type.FullName); + return instance; + } + + public static void SetFieldInfo(Type t,object instance,string fieldName,object value) + { + BindingFlags flags = instance ==null? flagsStatic : flagsInstance; + FieldInfo f = t.GetField(fieldName, flags); + if (f == null) + { + Debug.LogError("获取失败:type:" + t + " fieldName: " + fieldName); + return; + } + try + { + f.SetValue(instance, value); + } + catch (Exception e) + { + Debug.LogError(e); + } + } + public static object GetFieldInfo(Type t, object instance, string fieldName) + { + BindingFlags flags = instance == null ? flagsStatic : flagsInstance; + FieldInfo f = t.GetField(fieldName, flags); + if (f == null) + { + Debug.LogError("获取失败:type:" + t + " fieldName: " + fieldName); + return null; + } + try + { + return f.GetValue(instance); + } + catch (Exception e) + { + Debug.LogError(e); + } + return null; + } + public static void SetPropertyInfo(Type t, object instance, string propertyName, object value) + { + BindingFlags flags = instance == null ? flagsStatic : flagsInstance; + PropertyInfo f = t.GetProperty (propertyName, flags); + if (f == null) + { + Debug.LogError("获取失败:type:" + t + " fieldName: " + propertyName); + return; + } + if (!f.CanWrite) + { + Debug.LogError("属性不能写入:type:" + t + " fieldName: " + propertyName); + return; + } + try + { + f.SetValue(instance, value, null); + } + catch (Exception e) + { + Debug.LogError(e); + } + } + public static object GetPropertyInfo(Type t, object instance, string propertyName) + { + BindingFlags flags = instance == null ? flagsStatic : flagsInstance; + PropertyInfo f = t.GetProperty(propertyName, flags); + + if (f == null) + { + Debug.LogError("获取失败:type:" + t + " fieldName: " + propertyName); + return null; + } + if (!f.CanRead) + { + Debug.LogError("属性不能读取:type:" + t + " fieldName: " + propertyName); + return null; + } + try + { + return f.GetValue(instance, null); + } + + catch (Exception e) + { + Debug.LogError(e); + } + return null; + } + public static object InvokMethod(Type t ,object instance, string methodName,ref object[] paras) + { + BindingFlags flags = instance == null ? flagsStatic : flagsInstance; + MethodInfo temp = t.GetMethod(methodName,flags); + if(temp==null) + { + Debug.LogError("获取方法失败:type:" + t + " methodName: " + methodName); + return null; + } + try + { + return temp.Invoke(instance, paras); + }catch(Exception e) + { + Debug.LogError(e); + } + return null; + } + + /// + /// 返回Type Name ,泛型返回: List + /// + /// + /// + public static string GetTypeName4CodeFormat(Type t) + { + string typeName = t.Name; + if (t.IsGenericType) + { + typeName = typeName.Remove(typeName.IndexOf('`')); + Type[] gTypes = t.GetGenericArguments(); + string temp = ""; + for (int i = 0; i < gTypes.Length; i++) + { + Type tempType = gTypes[i]; + + temp += GetTypeName4CodeFormat(tempType); + if (i < gTypes.Length - 1) + { + temp += ","; + } + } + typeName = typeName + "<" + temp + ">"; + } + + return typeName; + } + /// + /// 是否是代理类型 + /// + /// + /// + public static bool IsDelegate(Type type) + { + return type.BaseType == typeof(MulticastDelegate); + } + + public static object DeepCopySelf(this object obj) + { + if (obj == null) + return null; + Type targetType = obj.GetType(); + if (targetType.IsValueType) + return obj; + if (obj is string) + return obj; + + object targetDeepCopyObj; + + targetDeepCopyObj =CreateDefultInstance(targetType); //创建引用对象 + MemberInfo[] memberCollection = obj.GetType().GetMembers( BindingFlags.Instance| BindingFlags.Public); + + for (int i = 0; i < memberCollection.Length; i++) + { + MemberInfo member = memberCollection[i]; + //拷贝字段 + if (member.MemberType == MemberTypes.Field) + { + FieldInfo field = (FieldInfo)member; + object fieldValue = field.GetValue(obj); + if (fieldValue is ICloneable) + { + field.SetValue(targetDeepCopyObj, (fieldValue as ICloneable).Clone()); + } + else + { + field.SetValue(targetDeepCopyObj, fieldValue.DeepCopySelf()); + } + + }//拷贝属性 + else if (member.MemberType == MemberTypes.Property) + { + PropertyInfo myProperty = (PropertyInfo)member; + if (myProperty.CanRead && myProperty.CanWrite) + { + + object propertyValue = myProperty.GetValue(obj, null); + if (propertyValue is ICloneable) + { + myProperty.SetValue(targetDeepCopyObj, (propertyValue as ICloneable).Clone(), null); + } + else + { + myProperty.SetValue(targetDeepCopyObj, propertyValue.DeepCopySelf(), null); + } + + } + } + } + + return targetDeepCopyObj; + } + } +} diff --git a/Assets/Script/Core/Utils/ReflectionUtils.cs.meta b/Assets/Script/Core/Utils/ReflectionUtils.cs.meta new file mode 100644 index 00000000..1ebc3e05 --- /dev/null +++ b/Assets/Script/Core/Utils/ReflectionUtils.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: e9d8169e8f9866046ad9734c09b6a081 +timeCreated: 1525244996 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/TextureScale.cs b/Assets/Script/Core/Utils/TextureScale.cs new file mode 100644 index 00000000..f4799960 --- /dev/null +++ b/Assets/Script/Core/Utils/TextureScale.cs @@ -0,0 +1,158 @@ +// Only works on ARGB32, RGB24 and Alpha8 textures that are marked readable + +using System.Threading; +using UnityEngine; + +public class TextureScale +{ + public class ThreadData + { + public int start; + public int end; + public ThreadData(int s, int e) + { + start = s; + end = e; + } + } + + private static Color[] texColors; + private static Color[] newColors; + private static int w; + private static float ratioX; + private static float ratioY; + private static int w2; + private static int finishCount; + private static Mutex mutex; + + public static void Point(Texture2D tex, int newWidth, int newHeight) + { + ThreadedScale(tex, newWidth, newHeight, false); + } + + public static void Bilinear(Texture2D tex, int newWidth, int newHeight) + { + ThreadedScale(tex, newWidth, newHeight, true); + } + + private static void ThreadedScale(Texture2D tex, int newWidth, int newHeight, bool useBilinear) + { + texColors = tex.GetPixels(); + newColors = new Color[newWidth * newHeight]; + if (useBilinear) + { + ratioX = 1.0f / ((float)newWidth / (tex.width - 1)); + ratioY = 1.0f / ((float)newHeight / (tex.height - 1)); + } + else + { + ratioX = ((float)tex.width) / newWidth; + ratioY = ((float)tex.height) / newHeight; + } + w = tex.width; + w2 = newWidth; + var cores = Mathf.Min(SystemInfo.processorCount, newHeight); + var slice = newHeight / cores; + + finishCount = 0; + if (mutex == null) + { + mutex = new Mutex(false); + } + if (cores > 1) + { + int i = 0; + ThreadData threadData; + for (i = 0; i < cores - 1; i++) + { + threadData = new ThreadData(slice * i, slice * (i + 1)); + ParameterizedThreadStart ts = useBilinear ? new ParameterizedThreadStart(BilinearScale) : new ParameterizedThreadStart(PointScale); + Thread thread = new Thread(ts); + thread.Start(threadData); + } + threadData = new ThreadData(slice * i, newHeight); + if (useBilinear) + { + BilinearScale(threadData); + } + else + { + PointScale(threadData); + } + while (finishCount < cores) + { + Thread.Sleep(1); + } + } + else + { + ThreadData threadData = new ThreadData(0, newHeight); + if (useBilinear) + { + BilinearScale(threadData); + } + else + { + PointScale(threadData); + } + } + + tex.Resize(newWidth, newHeight); + tex.SetPixels(newColors); + tex.Apply(); + + texColors = null; + newColors = null; + } + + public static void BilinearScale(System.Object obj) + { + ThreadData threadData = (ThreadData)obj; + for (var y = threadData.start; y < threadData.end; y++) + { + int yFloor = (int)Mathf.Floor(y * ratioY); + var y1 = yFloor * w; + var y2 = (yFloor + 1) * w; + var yw = y * w2; + + for (var x = 0; x < w2; x++) + { + int xFloor = (int)Mathf.Floor(x * ratioX); + var xLerp = x * ratioX - xFloor; + newColors[yw + x] = ColorLerpUnclamped(ColorLerpUnclamped(texColors[y1 + xFloor], texColors[y1 + xFloor + 1], xLerp), + ColorLerpUnclamped(texColors[y2 + xFloor], texColors[y2 + xFloor + 1], xLerp), + y * ratioY - yFloor); + } + } + + mutex.WaitOne(); + finishCount++; + mutex.ReleaseMutex(); + } + + public static void PointScale(System.Object obj) + { + ThreadData threadData = (ThreadData)obj; + for (var y = threadData.start; y < threadData.end; y++) + { + var thisY = (int)(ratioY * y) * w; + var yw = y * w2; + for (var x = 0; x < w2; x++) + { + newColors[yw + x] = texColors[(int)(thisY + ratioX * x)]; + } + } + + mutex.WaitOne(); + finishCount++; + mutex.ReleaseMutex(); + } + + private static Color ColorLerpUnclamped(Color c1, Color c2, float value) + { + return new Color(c1.r + (c2.r - c1.r) * value, + c1.g + (c2.g - c1.g) * value, + c1.b + (c2.b - c1.b) * value, + c1.a + (c2.a - c1.a) * value); + } +} \ No newline at end of file diff --git a/Assets/Script/Core/Utils/TextureScale.cs.meta b/Assets/Script/Core/Utils/TextureScale.cs.meta new file mode 100644 index 00000000..e9b42758 --- /dev/null +++ b/Assets/Script/Core/Utils/TextureScale.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb8f3b40a64a519469815fde00dee979 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 7495f8cf0f362bb4897b908cbda8cbc185189165 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Fri, 24 Aug 2018 17:43:24 +0800 Subject: [PATCH 073/108] =?UTF-8?q?=E8=A1=A5=E5=85=A8=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/Data/DataManager.cs | 1 - .../Core/Develop/DevelopReplayManager.cs | 3 +- .../Core/Editor/Data/DataEditorWindow.cs | 277 ++++++++++++------ .../General/GeneralDataModificationWindow.cs | 1 + .../Editor/General/ObjectSelectorWindow.cs | 9 +- .../Language/LanguageDataEditorWindow.cs | 202 ++++++------- .../Core/Editor/Utils/EditorDrawGUIUtil.cs | 247 +++++++++------- .../Core/GameObject/GameObjectManager.cs | 13 + Assets/Script/Core/Input/InputDispatcher.cs | 2 - Assets/Script/Core/Network/NetworkManager.cs | 2 - Assets/Script/Core/UI/Extensions.meta | 8 + Assets/Script/Core/UI/Extensions/TextPro.cs | 248 ++++++++++++++++ .../Script/Core/UI/Extensions/TextPro.cs.meta | 11 + .../Script/Core/UI/Style/LanguageManager.cs | 21 +- Assets/Script/Core/Utils/ParseTool.cs | 6 +- Assets/Script/Core/Utils/ReflectionUtils.cs | 2 +- Assets/Script/Core/Utils/StringExtends.cs | 41 +++ .../Script/Core/Utils/StringExtends.cs.meta | 11 + 18 files changed, 787 insertions(+), 318 deletions(-) create mode 100644 Assets/Script/Core/UI/Extensions.meta create mode 100644 Assets/Script/Core/UI/Extensions/TextPro.cs create mode 100644 Assets/Script/Core/UI/Extensions/TextPro.cs.meta create mode 100644 Assets/Script/Core/Utils/StringExtends.cs create mode 100644 Assets/Script/Core/Utils/StringExtends.cs.meta diff --git a/Assets/Script/Core/Data/DataManager.cs b/Assets/Script/Core/Data/DataManager.cs index 871a8120..6d29a88b 100644 --- a/Assets/Script/Core/Data/DataManager.cs +++ b/Assets/Script/Core/Data/DataManager.cs @@ -55,7 +55,6 @@ public static DataTable GetData(string DataName) { throw new Exception("Dont Find ->" + DataName + "<-"); } - data = DataTable.Analysis(dataJson); data.m_tableName = DataName; diff --git a/Assets/Script/Core/Develop/DevelopReplayManager.cs b/Assets/Script/Core/Develop/DevelopReplayManager.cs index 9f193522..d5bbe5c2 100644 --- a/Assets/Script/Core/Develop/DevelopReplayManager.cs +++ b/Assets/Script/Core/Develop/DevelopReplayManager.cs @@ -88,8 +88,9 @@ static void ChoseReplayMode(bool isReplay,string replayFileName = null) RandomService.SetRandomList(s_randomList); //关闭正常输入,保证回放数据准确 - InputUIEventProxy.IsActive = false; IInputProxyBase.IsActive = false; + InputUIEventProxy.IsActive = false; + InputOperationEventProxy.IsActive = false; InputNetworkEventProxy.IsActive = false; } else diff --git a/Assets/Script/Core/Editor/Data/DataEditorWindow.cs b/Assets/Script/Core/Editor/Data/DataEditorWindow.cs index 7d2573fd..14a2d3a3 100644 --- a/Assets/Script/Core/Editor/Data/DataEditorWindow.cs +++ b/Assets/Script/Core/Editor/Data/DataEditorWindow.cs @@ -31,8 +31,8 @@ public static void ShowWindow() private List langKeys; void OnEnable() { - EditorGUIStyleData.Init(); - + //EditorGUIStyleData.Init(); + win = this; FindAllDataName(); langKeys = LanguageDataEditorUtils.GetLanguageLayersKeyList(); @@ -49,29 +49,29 @@ public static void Refresh() if (win) win.OnEnable(); } - //当选择改变时 - void OnSelectionChange() - { - - } - - //当工程改变时 - void OnProjectChange() - { - if (!Application.isPlaying) - { - //ConvertUtf8(); - - FindAllDataName(); - - if (chooseFileName != null - && chooseFileName != "" - && chooseFileName != "None") - { - LoadData(chooseFileName); - } - } - } + ////当选择改变时 + //void OnSelectionChange() + //{ + + //} + + ////当工程改变时 + //void OnProjectChange() + //{ + // if (!Application.isPlaying) + // { + // //ConvertUtf8(); + + // FindAllDataName(); + + // if (chooseFileName != null + // && chooseFileName != "" + // && chooseFileName != "None") + // { + // LoadData(chooseFileName); + // } + // } + //} #region GUI @@ -162,14 +162,26 @@ private void LoadData(string fileName) return; int widthCount = m_currentData.TableKeys.Count; - withItemList.Clear(); - for (int i = 0; i < widthCount; i++) + //Debug.Log(" m_currentData.TableKeys.Count :" + m_currentData.TableKeys.Count + " withItemList.Count :" + withItemList.Count); + if (widthCount > withItemList.Count) { + int num = widthCount - withItemList.Count; + for (int i = 0; i < num; i++) + { withItemList.Add(wWith); + } + } + else if (widthCount < withItemList.Count) + { + while(widthCount < withItemList.Count) + { + withItemList.RemoveAt(withItemList.Count - 1); + } } + //Debug.Log(" m_currentData.TableKeys.Count :" + m_currentData.TableKeys.Count + " withItemList.Count :" + withItemList.Count); heightItemList.Clear(); //所有的数据行+描述+默认值+空一行 - heightItemList.Add(40); + heightItemList.Add(wHeight); for (int i = 0; i < m_currentData.Count+2; i++) { heightItemList.Add(wHeight); @@ -186,7 +198,6 @@ private void LoadData(string fileName) private const int wWith = 110; private Vector2 svPos; - private string searchValue = ""; //标记选择行 private List selectRowIndexs = new List(); private List selectColumnIndexs = new List(); @@ -194,9 +205,9 @@ private void LoadData(string fileName) private GUIStyle buttonStyle; private GUIStyle helpBoxStyle; - private int oldButtonFontSize = 0; - private int nowButtonFontSize = 0; - private int MaxButtonFontSize = 40; + private Vector2 topGridSVPos; + private Vector2 leftGridSVPos; + /// /// 绘制所有格子 /// @@ -204,53 +215,38 @@ void DrawTableDataGUI() { if (m_currentData == null) return; - if (buttonStyle == null) + if (buttonStyle == null || helpBoxStyle==null) { buttonStyle = "Button"; helpBoxStyle = "HelpBox"; } + Debug.unityLogger.logEnabled = false; + GridTopFunctionGUI(); + GUILayout.Space(5); - GUILayout.BeginHorizontal(); - if (GUILayout.Button("添加一行数据", GUILayout.Width(90))) - { - AddLineDataGUI(); - } - GUILayout.FlexibleSpace(); - if (GUILayout.Button("加载上一次保存", GUILayout.Width(90))) - { - DataManager.CleanCache(); - LoadData(chooseFileName); - - } - GUILayout.FlexibleSpace(); - if (GUILayout.Button("添加字段", GUILayout.Width(90))) + Rect r = new Rect(0, 60, Screen.width, 18); + float detaH = wHeight; + if (heightItemList.Count > 3) { - Add2FieldGUI(); + detaH = heightItemList[0] + heightItemList[1] + heightItemList[2]; } - GUILayout.FlexibleSpace(); + Rect svPos_temp = new Rect(new Vector2(0, r.y), new Vector2(Screen.width-wWith, Screen.height - r.y - 120- detaH)); + Vector2 v = GetCententSize(); - //字体大小调节 - helpBoxStyle.fontSize = helpBoxStyle.font.fontSize; - oldButtonFontSize = helpBoxStyle.fontSize; - if (nowButtonFontSize == 0) - nowButtonFontSize = oldButtonFontSize; - - nowButtonFontSize= EditorGUILayout.IntSlider("字体大小",nowButtonFontSize, oldButtonFontSize / 2, MaxButtonFontSize); - GUILayout.FlexibleSpace(); - searchValue = EditorDrawGUIUtil.DrawSearchField(searchValue); - GUILayout.EndHorizontal(); - GUILayout.Space(5); - Rect r = new Rect(0, 60, Screen.width, 18); + svPos = GUI.BeginScrollView(new Rect(svPos_temp.x + wWith, svPos_temp.y + detaH, svPos_temp.width, svPos_temp.height), svPos, new Rect(r.x + wWith, r.y + detaH, v.x, v.y)); - Rect svPos_temp = new Rect(new Vector2(0, r.y), new Vector2(Screen.width, Screen.height - r.y - 120)); - Vector2 v = GetCententSize(); - svPos = GUI.BeginScrollView(svPos_temp, svPos, new Rect(r.x, r.y, v.x, v.y)); + DrawGridItem(r.position + new Vector2(wWith, wHeight),2, heightItemList.Count); + GUI.EndScrollView(); - float tempWith = wWith; + //顶部格子 + topGridSVPos = GUI.BeginScrollView(new Rect(svPos_temp.x, svPos_temp.y, svPos_temp.width+ wWith, detaH), topGridSVPos, new Rect(r.x, r.y, v.x+wWith, detaH),false,false,"Label","Label"); + topGridSVPos = new Vector2(svPos.x, topGridSVPos.y); + DrawGridItem(r.position + new Vector2(wWith, wHeight), 0, 2); + float tempWith = wWith; GUI.Label(new Rect(r.position, new Vector2(wWith, wHeight)), "", "SelectionRect"); for (int i = 0; i < withItemList.Count; i++) { @@ -263,14 +259,14 @@ void DrawTableDataGUI() tempWith += withItemList[i]; - if (GUI.Button(new Rect(dragR.position,new Vector2(dragR.width, dragR.height/3)), "▼")) + if (GUI.Button(new Rect(dragR.position, new Vector2(dragR.width, dragR.height / 3)), "▼")) { if (selectColumnIndexs.Contains(i)) selectColumnIndexs.Remove(i); else selectColumnIndexs.Add(i); } - if (GUI.Button(new Rect( dragR.x, dragR.y+ dragR.height/3, dragR.width, dragR.height*2/3), i.ToString())) + if (GUI.Button(new Rect(dragR.x, dragR.y + dragR.height / 3, dragR.width, dragR.height * 2 / 3), i.ToString())) { if (i == 0) continue; @@ -284,11 +280,13 @@ void DrawTableDataGUI() return; } } - + } + GUI.EndScrollView(); + //左边格子 float tempHeight = r.y + wHeight; - for (int i = 0; i < heightItemList.Count; i++) + for (int i = 0; i < 2; i++) { Rect dragR = new Rect(r.x, tempHeight, wWith, heightItemList[i]); Rect maxR = new Rect(r.x, tempHeight, wWith, position.height); @@ -304,12 +302,35 @@ void DrawTableDataGUI() vStr = "D"; GUI.Label(dragR, vStr, buttonStyle); } - else if(i == 1) + else if (i == 1) { vStr = "description"; GUI.Label(dragR, vStr, buttonStyle); } - else if (i == 2) + + + } + + + leftGridSVPos = GUI.BeginScrollView(new Rect(svPos_temp.x, tempHeight, wWith, svPos_temp.height), leftGridSVPos, new Rect(r.x, tempHeight, wWith, v.y), false, false, "Label", "Label"); + leftGridSVPos = new Vector2(leftGridSVPos.x, svPos.y); + + for (int i = 2; i < heightItemList.Count; i++) + { + Rect dragR = new Rect(r.x, tempHeight, wWith, heightItemList[i]); + Rect maxR = new Rect(r.x, tempHeight, wWith, position.height); + dragR = EditorDrawGUIUtility.DrawCanDragArea(dragR, maxR, null, EditorCanDragAreaSide.Bottom); + if (dragR.height < minItem) + dragR.height = minItem; + heightItemList[i] = dragR.height; + + tempHeight += heightItemList[i]; + string vStr = ""; + + if(selectRowIndexs.Contains(i)) + GUI.color = Color.cyan; + + if (i == 2) { vStr = "default"; GUI.Label(dragR, vStr, buttonStyle); @@ -318,14 +339,14 @@ void DrawTableDataGUI() { int num = i - 3; vStr = num.ToString(); - if (GUI.Button(new Rect(dragR.position, new Vector2(dragR.width/4, dragR.height)), "►")) + if (GUI.Button(new Rect(dragR.position, new Vector2(dragR.width / 4, dragR.height)), "►")) { if (selectRowIndexs.Contains(i)) selectRowIndexs.Remove(i); else selectRowIndexs.Add(i); } - if (GUI.Button(new Rect(dragR.x+ dragR.width/4, dragR.y , dragR.width*3/4, dragR.height), vStr)) + if (GUI.Button(new Rect(dragR.x + dragR.width / 4, dragR.y, dragR.width * 3 / 4, dragR.height), vStr)) { if (EditorUtility.DisplayDialog("警告", "是否删除第[" + num + "]行数据", "确定", "取消")) { @@ -338,25 +359,25 @@ void DrawTableDataGUI() } } } + GUI.color = Color.white; } - DrawGridItem(r.position + new Vector2(wWith, wHeight)); - GUI.EndScrollView(); + Debug.unityLogger.logEnabled = true; } private Vector2 GetCententSize() { - float tempWith = wWith; + float tempWith = 0; for (int i = 0; i < withItemList.Count; i++) { tempWith += withItemList[i]; } tempWith += wWith; - float tempHeight = wHeight; - for (int i = 0; i < heightItemList.Count; i++) + float tempHeight = 0; + for (int i = 2; i < heightItemList.Count; i++) { tempHeight += heightItemList[i]; @@ -364,15 +385,57 @@ private Vector2 GetCententSize() tempHeight += wHeight; return new Vector2(tempWith, tempHeight); } + + private int oldButtonFontSize = 0; + private int nowButtonFontSize = 0; + private int MaxButtonFontSize = 40; + + private string searchValue = ""; + private void GridTopFunctionGUI() + { + GUILayout.BeginHorizontal(); + if (GUILayout.Button("添加一行数据", GUILayout.Width(90))) + { + AddLineDataGUI(); + } + GUILayout.FlexibleSpace(); + if (GUILayout.Button("加载上一次保存", GUILayout.Width(90))) + { + DataManager.CleanCache(); + LoadData(chooseFileName); + + } + GUILayout.FlexibleSpace(); + if (GUILayout.Button("添加字段", GUILayout.Width(90))) + { + Add2FieldGUI(); + } + GUILayout.FlexibleSpace(); + + //字体大小调节 + helpBoxStyle.fontSize = helpBoxStyle.font.fontSize; + oldButtonFontSize = helpBoxStyle.fontSize; + if (nowButtonFontSize == 0) + nowButtonFontSize = oldButtonFontSize; + + nowButtonFontSize = EditorGUILayout.IntSlider("字体大小", nowButtonFontSize, oldButtonFontSize / 2, MaxButtonFontSize); + GUILayout.FlexibleSpace(); + searchValue = EditorDrawGUIUtil.DrawSearchField(searchValue); + GUILayout.EndHorizontal(); + } /// /// 绘制每个数据格子 /// /// - private void DrawGridItem(Vector2 startPos) + private void DrawGridItem(Vector2 startPos,int heightStartIndex,int heightEndIndex) { helpBoxStyle.fontSize = nowButtonFontSize; float tempHeight = 0; - for (int i = 0; i < heightItemList.Count; i++) + for (int i = 0; i < heightStartIndex; i++) + { + tempHeight += heightItemList[i]; + } + for (int i = heightStartIndex; i < heightEndIndex; i++) { float h = heightItemList[i]; float tempWith = 0; @@ -418,25 +481,32 @@ private void DrawGridItem(Vector2 startPos) SingleData data = m_currentData[m_currentData.TableIDs[i - 3]]; bool isDefault = false; - if (data.ContainsKey(field) && data[field] != defaultValue) + if (data.ContainsKey(field)) { - DataFieldAssetType fieldAssetType = GetDataFieldAssetType(field); - if (fieldAssetType == DataFieldAssetType.LocalizedLanguage) + if (data[field] != defaultValue) { - string k = data[field]; - if (LanguageManager.HaveKey(k)) - showStr = LanguageManager.GetContentByKey(k); - else - showStr = k; + showStr = data[field]; } else - showStr = data[field]; + { + showStr = defaultValue; + isDefault = true; + } } else { showStr = defaultValue; isDefault = true; } + DataFieldAssetType fieldAssetType = GetDataFieldAssetType(field); + if (fieldAssetType == DataFieldAssetType.LocalizedLanguage) + { + string k = showStr; + if (LanguageManager.HaveKey(k)) + { + showStr = LanguageManager.GetContentByKey(k); + } + } if (!string.IsNullOrEmpty(searchValue)) showStr = ShowContainsChar(showStr, searchValue); @@ -756,7 +826,15 @@ private object DrawTableGUI(string text, object defultValue) private object DrawLocalizedLanguageField(string text, object value) { value = EditorDrawGUIUtil.DrawPopup(text, value.ToString(), langKeys); + GUILayout.Space(6); GUILayout.Label("多语言字段[" + value + "] : " + LanguageManager.GetContentByKey(value.ToString())); + GUILayout.Space(8); + if (GUILayout.Button("打开编辑当前多语言字段")) + { + LanguageDataEditorWindow w = LanguageDataEditorWindow.ShowWindow(); + w.searchValue = value.ToString(); + w.toolbarOption = 1; + } return value; } @@ -833,7 +911,7 @@ private object DrawTextureGUI(string text, object value) { ObjectSelectorWindow.Show(GeneralDataModificationWindow.GetInstance(), value.ToString(), new string[] { "Assets/Resources" }, - typeof(GameObject), + typeof(Texture), (assetName, obj) => { editTextureValue = assetName; @@ -857,7 +935,6 @@ private object DrawTextureGUI(string text, object value) previewEditor1 = Editor.CreateEditor(obj); previewTex = obj; } - previewEditor1.OnPreviewGUI(GUILayoutUtility.GetRect(300, 300), EditorStyles.helpBox); isHave = true; } @@ -1018,6 +1095,7 @@ void CleanCacheGUI() { if (GUILayout.Button("清除缓存")) { + LanguageManager.IsInit = false; DataManager.CleanCache(); } } @@ -1136,11 +1214,26 @@ static void ResetDataField(DataTable data,string key,FieldType type,string enumT void SaveDataGUI() { + //if (GUILayout.Button("Change")) + //{ + // foreach (var sd in m_currentData.Values) + // { + // foreach (var item in sd) + // { + // if(item.Key== "DescribeKey") + // { + // sd[item.Key]= "{[0,4][" + item.Value + "]}"; + // Debug.Log(m_currentData.Count + " " + item.Key); + // break; + // } + // } + // } + //} if (GUILayout.Button("保存")) { SaveData(chooseFileName, m_currentData); AssetDatabase.Refresh(); - LoadData(chooseFileName); + //LoadData(chooseFileName); } } diff --git a/Assets/Script/Core/Editor/General/GeneralDataModificationWindow.cs b/Assets/Script/Core/Editor/General/GeneralDataModificationWindow.cs index cd271dd3..a6cdafbd 100644 --- a/Assets/Script/Core/Editor/General/GeneralDataModificationWindow.cs +++ b/Assets/Script/Core/Editor/General/GeneralDataModificationWindow.cs @@ -65,6 +65,7 @@ private void OnGUI() { modifi_Value = EditorDrawGUIUtil.DrawBaseValue("Value", modifi_Value); } + GUILayout.FlexibleSpace(); }); GUILayout.FlexibleSpace(); diff --git a/Assets/Script/Core/Editor/General/ObjectSelectorWindow.cs b/Assets/Script/Core/Editor/General/ObjectSelectorWindow.cs index c1a4254a..60d4d09b 100644 --- a/Assets/Script/Core/Editor/General/ObjectSelectorWindow.cs +++ b/Assets/Script/Core/Editor/General/ObjectSelectorWindow.cs @@ -82,11 +82,14 @@ private void Init(EditorWindow otherWindow, string assetName, string[] paths, Ty oa.type = assetType; oa.assetObject = obj; oa.path = p; - oa.previewIcon = AssetPreview.GetAssetPreview(obj); + oa.previewEditor = Editor.CreateEditor(obj); + oa.previewIcon = oa.previewEditor.RenderStaticPreview(p, null, (int)maxGridSize, (int)maxGridSize); //AssetPreview.GetAssetPreview(obj); oa.miniThumbnailIcon = AssetPreview.GetMiniThumbnail(obj); + if (oa.previewIcon == null) { - oa.previewIcon = new Texture2D(100, 100); + Debug.Log("Path ;" + p); + oa.previewIcon = new Texture2D((int)maxGridSize, (int)maxGridSize); for (int i = 0; i < oa.previewIcon.width; i++) { @@ -206,7 +209,6 @@ private void DrawGridIcon(List tempAssets) style.stretchHeight = true; style.stretchWidth = true; style.alignment = TextAnchor.LowerCenter; - if (GUILayout.Button(content, style, GUILayout.Width(gridSize), GUILayout.Height(gridSize + 10))) { selectAsset = item; @@ -275,5 +277,6 @@ private class ObjectAssets public Texture2D previewIcon; public Texture2D miniThumbnailIcon; public string path; + public Editor previewEditor; } } diff --git a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs index 95bd7d05..f595366a 100644 --- a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs +++ b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs @@ -26,14 +26,18 @@ public class LanguageDataEditorWindow : EditorWindow SystemLanguage m_defaultLanguage = SystemLanguage.ChineseSimplified; + static LanguageDataEditorWindow win =null; + [MenuItem("Window/多语言编辑器 &5", priority = 600)] - public static void ShowWindow() + public static LanguageDataEditorWindow ShowWindow() { - EditorWindow.GetWindow(typeof(LanguageDataEditorWindow)); + win= EditorWindow.GetWindow(); + return win; } void OnEnable() { + win = this; ResourcesConfigManager.Initialize(); m_currentSelectIndex = 0; @@ -42,82 +46,6 @@ void OnEnable() FindAllDataName(); LoadEditorConfig(); LoadConfig(); - - configFileNames.Clear(); - string m_directoryPath = Application.dataPath + "/Resources/" + DataManager.c_directoryName; - configFileNames.AddRange(PathUtils.GetDirectoryFileNames(m_directoryPath, new string[] { ".txt" }, false, false)); - } - private List configFileNames = new List(); - private List fieldNames = new List(); - private string tableName = ""; - private string fieldName = ""; - private string m_newModelName=""; - void CreateModuleByConfigData() - { - m_newModelName = EditorGUILayout.TextField("模块名", m_newModelName); - tableName = EditorDrawGUIUtil.DrawPopup ("表格名", tableName,configFileNames,(value)=> - { - if (string.IsNullOrEmpty(value)) - return; - fieldNames.Clear(); - DataTable d = DataManager.GetData(value); - List tempList = new List(); - foreach (var item in d.TableKeys) - { - if (d.m_tableTypes.ContainsKey(item) && d.m_tableTypes[item] == FieldType.String) - tempList.Add(item); - } - fieldNames.AddRange(tempList); - }); - fieldName = EditorDrawGUIUtil.DrawPopup("字段名", fieldName,fieldNames); - if (m_newModelName != "" && !s_languageKeyDict.ContainsKey(m_newModelName)&& m_currentLanguage!= "None") - { - if (GUILayout.Button("新增模块")) - { - string modulePath = m_newModelName.Replace("_", "/"); - - DataTable d = DataManager.GetData(tableName); - - s_languageKeyDict.Add(m_newModelName, d.TableIDs); - - DataTable data = new DataTable(); - data.TableKeys.Add(LanguageManager.c_mainKey); - data.TableKeys.Add(LanguageManager.c_valueKey); - data.SetDefault(LanguageManager.c_valueKey, "NoValue"); - - foreach (var item in d.TableIDs) - { - object obj = null; - if (d[item].ContainsKey(fieldName)) - obj = d[item][fieldName]; - else - obj = d.m_defaultValue[fieldName]; - SingleData sd = new SingleData(); - sd.Add(LanguageManager.c_mainKey, item); - sd.Add(LanguageManager.c_valueKey, obj.ToString()); - data.AddData(sd); - d[item][fieldName] = modulePath + "/" + item; - } - - d.m_fieldAssetTypes[fieldName] = DataFieldAssetType.LocalizedLanguage; - - m_langeuageDataDict.Add(m_newModelName, data); - DataEditorWindow.SaveData(tableName, d); - - SaveData(); - - AssetDatabase.Refresh(); - - } - EditorGUILayout.Space(); - } - else - { - if (s_languageKeyDict.ContainsKey(m_newModelName)) - { - EditorGUILayout.LabelField("模块名重复!", EditorGUIStyleData.WarnMessageLabel); - } - } } void OnProjectChange() @@ -126,18 +54,19 @@ void OnProjectChange() LoadEditorConfig(); LoadConfig(); } - private int toolbarOption = 0; + public int toolbarOption = 0; private string[] toolbarTexts = {"模块文件", "语言内容编辑", "语言设置" }; void OnGUI() { titleContent.text = "多语言编辑器"; - + //GUI.skin.label.fontSize = 11; if (!Application.isPlaying) { SelectLanguageGUI(); DefaultLanguageGUI(); SelectEditorModuleGUI(); + SearchValueGUI(); toolbarOption = GUILayout.Toolbar(toolbarOption, toolbarTexts, GUILayout.Width(Screen.width)); switch (toolbarOption) { @@ -159,15 +88,48 @@ void OnGUI() SaveDataGUI(); GenerateLanuageClassGUI(); - CreateModuleByConfigData(); + //CreateModuleByConfigData(); } else { EditorGUILayout.LabelField("功能目前不可用"); } } + public string searchValue; + private string searchModuleKey = ""; + private void SearchValueGUI() + { + searchValue = EditorDrawGUIUtil.DrawSearchField(searchValue); + + if(!string.IsNullOrEmpty( searchValue)) + { + if (searchValue.Contains("/")) + { + string[] tempV = searchValue.Split('/'); + string key = tempV[tempV.Length - 1]; + string moduleName = searchValue.Replace('/', '_').Replace("_" + key, ""); + if (s_languageKeyDict.ContainsKey(moduleName)) + { + selectEditorModuleName = moduleName; + searchModuleKey = key; + } + else + { + selectEditorModuleName = ""; + searchModuleKey = ""; + } + + } + else + searchModuleKey = searchValue; + } + else + { + searchModuleKey = ""; + } + } + - #region 加载/保存编辑器设置 @@ -214,10 +176,9 @@ void SaveConfig() List languageList = new List(); foreach (var item in s_languageList) { - if (item != "None") - { + languageList.Add(item); - } + } config.Add(LanguageManager.c_languageListKey, new SingleField(languageList)); @@ -247,7 +208,7 @@ void DefaultLanguageGUI() void SetDefaultLanguageGUI(string languageName) { - if(languageName !="None") + if (!string.IsNullOrEmpty(languageName ) ) if (GUILayout.Button("设为默认语言")) { m_defaultLanguage = (SystemLanguage)Enum.Parse(typeof(SystemLanguage), languageName); @@ -274,7 +235,7 @@ void SelectLanguageGUI() Debug.Log("m_currentSelectIndex " + m_currentSelectIndex + " mask.Length " + mask.Length); } - if(m_currentLanguage != "None" && GUILayout.Button("加载上一次保存")) + if(!string.IsNullOrEmpty( m_currentLanguage) && GUILayout.Button("加载上一次保存")) { DataManager.CleanCache(); @@ -293,7 +254,7 @@ void LoadLanguage(string LanguageName) m_currentLanguage = LanguageName; - if (LanguageName != "None") + if (!string.IsNullOrEmpty( LanguageName)) { m_langeuageDataDict.Clear(); @@ -329,6 +290,8 @@ private void SelectEditorModuleGUI() void EditorLanguageModuleFileGUI() { + if (string.IsNullOrEmpty(m_currentLanguage)) + return; EditorGUI.indentLevel = 1; @@ -348,26 +311,42 @@ void EditorLanguageModuleFileGUI() { EditorGUI.indentLevel = 2; + GUIStyle style = "box"; if (item.Key == selectEditorModuleName) { - GUI.color = Color.red; + //GUI.color = Color.red; + style = "U2D.createRect"; } - EditorGUILayout.BeginHorizontal(); - - GUILayout.Label(index+". " + item.Key); - GUILayout.FlexibleSpace(); - if (item.Key!=selectEditorModuleName && GUILayout.Button("选择编辑模块")) + + EditorGUILayout.BeginHorizontal(style); + if (item.Key != selectEditorModuleName && GUILayout.Button("o",GUILayout.Width(20))) { selectEditorModuleName = item.Key; toolbarOption = 1; } + GUILayout.Label(index+". " + item.Key); + GUILayout.FlexibleSpace(); + GUILayout.Space(6); if (GUILayout.Button("删除",GUILayout.Width(40))) { - if (item.Key == selectEditorModuleName) - selectEditorModuleName = ""; - s_languageKeyDict.Remove(item.Key); - break; + + if (EditorUtility.DisplayDialog("提示", "确定删除 :"+ item.Key, "OK", "Cancel")) + { + if (item.Key == selectEditorModuleName) + selectEditorModuleName = ""; + s_languageKeyDict.Remove(item.Key); + + foreach (var lan in s_languageList) + { + string moduleName= LanguageManager.GetLanguageDataName(lan, item.Key) + ".txt"; + FileUtils.DeleteFile(Application.dataPath + "/Resources/" + DataManager.c_directoryName + "/" + c_DataPath + "/" + lan + "/" + moduleName); + } + SaveData(); + AssetDatabase.Refresh(); + break; + } + } EditorGUILayout.EndHorizontal(); @@ -427,7 +406,7 @@ void EditorLanguageFieldGUI( ) { if (string.IsNullOrEmpty(selectEditorModuleName)) return; - if (m_currentLanguage == "None") + if (string.IsNullOrEmpty( m_currentLanguage)) return; List languageKeyList = s_languageKeyDict[selectEditorModuleName]; @@ -446,10 +425,15 @@ void EditorLanguageFieldGUI( ) { for (int i = 0; i < languageKeyList.Count; i++) { + string key = languageKeyList[i]; + if (!string.IsNullOrEmpty(searchModuleKey)) + if (!key.Contains(searchModuleKey)) + continue; + GUILayout.Space(5); GUILayout.BeginVertical("HelpBox"); EditorGUILayout.BeginHorizontal(); - string key = languageKeyList[i]; + string content = ""; if(data!=null ) { @@ -468,7 +452,8 @@ void EditorLanguageFieldGUI( ) if (EditorUtility.DisplayDialog("提示","确定删除key","OK","Cancel")) { languageKeyList.RemoveAt(i); - i--; + data.Remove(key); + return; } } @@ -538,7 +523,8 @@ void AddLangeuageFieldGUI(List languageKeyList) void DeleteLanguageGUI() { - if (m_currentLanguage != "None") + if (string.IsNullOrEmpty(m_currentLanguage)) + return; if (GUILayout.Button("删除语言")) { if (EditorUtility.DisplayDialog("警告", "确定要删除该语言吗!", "是", "取消")) @@ -582,14 +568,10 @@ void SaveData() { SaveData(GetLanguageSavePath(m_currentLanguage, selectEditorModuleName), m_langeuageDataDict[selectEditorModuleName]); } - //foreach (var item in m_langeuageDataDict) - //{ - // SaveData(GetLanguageSavePath(m_currentLanguage, item.Key), item.Value); - //} } - LanguageManager.IsInit = false; + LanguageManager.IsInit = false; + ConfigManager.CleanCache(); DataEditorWindow.Refresh(); - ConfigManager.CleanCache(); } #endregion @@ -685,12 +667,14 @@ string StringFilter(string content) #region FindLanguageData private string m_directoryPath; + + void FindAllDataName() { AssetDatabase.Refresh(); s_languageList = new List(); - s_languageList.Add("None"); + //s_languageList.Add("None"); m_directoryPath = Application.dataPath + "/Resources/" + DataManager.c_directoryName + "/" + c_DataPath; diff --git a/Assets/Script/Core/Editor/Utils/EditorDrawGUIUtil.cs b/Assets/Script/Core/Editor/Utils/EditorDrawGUIUtil.cs index e69389be..7eccc084 100644 --- a/Assets/Script/Core/Editor/Utils/EditorDrawGUIUtil.cs +++ b/Assets/Script/Core/Editor/Utils/EditorDrawGUIUtil.cs @@ -19,7 +19,7 @@ public class EditorDrawGUIUtil /// public static bool CanEdit = true; - private static bool richTextSupport =false; + private static bool richTextSupport = false; /// /// 控件文本是否支持富文本 /// @@ -40,12 +40,12 @@ public static bool RichTextSupport } - private static void SetRichText(Type type,object data, bool isOn) + private static void SetRichText(Type type, object data, bool isOn) { - FieldInfo[] fs= type.GetFields(BindingFlags.Static | BindingFlags.Public| BindingFlags.NonPublic); + FieldInfo[] fs = type.GetFields(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); foreach (var f in fs) { - if(f.FieldType== typeof(GUIStyle)) + if (f.FieldType == typeof(GUIStyle)) { GUIStyle style = (GUIStyle)f.GetValue(null); style.richText = isOn; @@ -55,11 +55,11 @@ private static void SetRichText(Type type,object data, bool isOn) PropertyInfo[] ps = type.GetProperties(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); foreach (var p in ps) { - if (p.CanRead && p.CanWrite&& p.PropertyType == typeof(GUIStyle)) + if (p.CanRead && p.CanWrite && p.PropertyType == typeof(GUIStyle)) { - GUIStyle style = (GUIStyle)p.GetValue(null,null); + GUIStyle style = (GUIStyle)p.GetValue(null, null); style.richText = isOn; - p.SetValue(null, style,null); + p.SetValue(null, style, null); } } if (data != null) @@ -79,96 +79,104 @@ private static void SetRichText(Type type,object data, bool isOn) { if (p.CanRead && p.CanWrite && p.PropertyType == typeof(GUIStyle)) { - GUIStyle style = (GUIStyle)p.GetValue(data,null); + GUIStyle style = (GUIStyle)p.GetValue(data, null); style.richText = isOn; - p.SetValue(data, style,null); + p.SetValue(data, style, null); } } } } + + public static object DrawBaseValue(string content, object data) + { + return DrawBaseValue(new GUIContent(content), data); + } /// /// 绘制object /// /// /// /// - public static object DrawBaseValue(string name, object data) + public static object DrawBaseValue(GUIContent content, object data) { if (data == null) return data; - - Type type = data.GetType(); - string showName = richTextSupport? GetFormatName(name, type, "yellow", data): GetFormatName(name, type, "", data); + + Type type = data.GetType(); + content.text = richTextSupport ? GetFormatName(content.text, type, "yellow", data) : GetFormatName(content.text, type, "", data); object obj = data; if (CanEdit) { if (type == typeof(int)) { - obj = EditorGUILayout.IntField(new GUIContent(showName), (int)data); + obj = EditorGUILayout.IntField(content, (int)data); } else if (type == typeof(short)) { - obj = EditorGUILayout.IntField(new GUIContent(showName), (short)data); + obj = EditorGUILayout.IntField(content, (short)data); } else if (type == typeof(long)) { - obj = EditorGUILayout.LongField(new GUIContent(showName), (long)data); + obj = EditorGUILayout.LongField(content, (long)data); } else if (type == typeof(double)) { - obj = EditorGUILayout.DoubleField(new GUIContent(showName), (double)data); + obj = EditorGUILayout.DoubleField(content, (double)data); } else if (type == typeof(float)) { - obj = EditorGUILayout.FloatField(new GUIContent(showName), (float)data); + obj = EditorGUILayout.FloatField(content, (float)data); } else if (type == typeof(bool)) { - obj = EditorGUILayout.Toggle(new GUIContent(showName), (bool)data); + obj = EditorGUILayout.Toggle(content, (bool)data); } else if (type == typeof(string)) { + GUIStyle style = "TextArea"; + style.wordWrap = true; GUILayout.BeginHorizontal(); - GUILayout.Label(showName, GUILayout.MaxWidth(Screen.width / 2)); - obj = EditorGUILayout.TextArea(data.ToString(), GUILayout.MaxWidth(Screen.width / 2)); + GUILayout.Label(content, GUILayout.MaxWidth(Screen.width / 2)); + + obj = EditorGUILayout.TextArea(data.ToString(), style, GUILayout.MaxWidth(Screen.width / 2)); GUILayout.EndHorizontal(); } else if (type.BaseType.FullName == typeof(UnityEngine.Object).FullName || type.BaseType.FullName == typeof(Component).FullName || type.BaseType.FullName == typeof(MonoBehaviour).FullName) { - obj = EditorGUILayout.ObjectField(showName, (UnityEngine.Object)data, type, true); + obj = EditorGUILayout.ObjectField(content, (UnityEngine.Object)data, type, true); } else if (type.BaseType == typeof(Enum)) { - obj = EditorGUILayout.EnumPopup(new GUIContent(showName), (Enum)Enum.Parse(type, data.ToString())); + obj = EditorGUILayout.EnumPopup(content, (Enum)Enum.Parse(type, data.ToString())); } else if (type == typeof(Vector3)) { - obj = EditorGUILayout.Vector3Field(new GUIContent(showName), (Vector3)data); + obj = EditorGUILayout.Vector3Field(content, (Vector3)data); } else if (type == typeof(Vector2)) { - obj = EditorGUILayout.Vector2Field(new GUIContent(showName), (Vector2)data); + obj = EditorGUILayout.Vector2Field(content, (Vector2)data); } else if (type == typeof(Vector3Int)) { - obj = EditorGUILayout.Vector3IntField(new GUIContent(showName), (Vector3Int)data); + obj = EditorGUILayout.Vector3IntField(content, (Vector3Int)data); } else if (type == typeof(Vector2Int)) { - obj = EditorGUILayout.Vector2IntField(new GUIContent(showName), (Vector2Int)data); + obj = EditorGUILayout.Vector2IntField(content, (Vector2Int)data); } else if (type == typeof(Vector4)) { - obj = EditorGUILayout.Vector4Field(new GUIContent(showName), (Vector4)data); + obj = EditorGUILayout.Vector4Field(content, (Vector4)data); } else if (type == typeof(Color)) { - obj = EditorGUILayout.ColorField(new GUIContent(showName), (Color)data); + obj = EditorGUILayout.ColorField(content, (Color)data); } else if (type.Name == typeof(List<>).Name) { - DrawFoldout(data, showName, () => + DrawFoldout(data, content, () => { obj = DrawList("", data, null, null); }); @@ -176,18 +184,18 @@ public static object DrawBaseValue(string name, object data) } else if (type.Name == typeof(Dictionary<,>).Name) { - DrawFoldout(data, showName, () => + DrawFoldout(data, content, () => { obj = DrawDictionary("", data); }); } else if (type.IsArray) { - obj = DrawArray(showName, data, null, null); + obj = DrawArray(content, data, null, null); } else if ((type.IsClass && type != typeof(string)) || type.IsValueType) { - DrawFoldout(data, showName, () => + DrawFoldout(data, content, () => { obj = DrawClassData("", type.FullName, data); }); @@ -196,9 +204,9 @@ public static object DrawBaseValue(string name, object data) } else { - if (type.IsPrimitive - || type == typeof(string) - || type.IsEnum + if (type.IsPrimitive + || type == typeof(string) + || type.IsEnum || type == typeof(Vector2) || type == typeof(Vector3) || type == typeof(Vector2Int) @@ -208,43 +216,43 @@ public static object DrawBaseValue(string name, object data) { string showStr = data.ToString(); - DrawLableString(showName, showStr); - + DrawLableString(content, showStr); + } else if (type.BaseType == typeof(UnityEngine.Object) || type.BaseType == typeof(Component) || type.BaseType == typeof(MonoBehaviour)) { - EditorGUILayout.ObjectField(showName, (UnityEngine.Object)data, type, true); + EditorGUILayout.ObjectField(content, (UnityEngine.Object)data, type, true); } else if (type.Name == typeof(List<>).Name) { - DrawFoldout(data, showName, () => + DrawFoldout(data, content, () => { obj = DrawList("", data, null, null); }); } else if (type.Name == typeof(Dictionary<,>).Name) { - DrawFoldout(data, showName, () => + DrawFoldout(data, content, () => { obj = DrawDictionary("", data); }); } else if (type.IsArray) { - DrawArray(showName, data, null, null); + DrawArray(content, data, null, null); } else if (type.IsClass && type != typeof(string) || type.IsValueType) { - DrawFoldout(data, showName, () => + DrawFoldout(data, content, () => { obj = DrawClassData("", type.FullName, data); }); } - + } return obj; } - private static void DrawLableString(string name, string data) + private static void DrawLableString(GUIContent name, string data) { GUILayout.BeginHorizontal("dockarea"); EditorGUILayout.LabelField(name, GUILayout.MaxWidth(Screen.width / 2)); @@ -276,7 +284,7 @@ public static object DrawBaseValue(object data, FieldInfo field) else { string name = GetFormatName(tempName, field.FieldType); - DrawLableString(name, "Null"); + DrawLableString(new GUIContent(name), "Null"); } return data; } @@ -311,14 +319,17 @@ public static object DrawBaseValue(object data, PropertyInfo property) else { string name = GetFormatName(tempName, property.PropertyType); - DrawLableString(name, "Null"); + DrawLableString(new GUIContent(name), "Null"); } } return data; } - + public static object DrawClassData(string name, string classFullName, object obj) + { + return DrawClassData(new GUIContent(name), classFullName, obj); + } /// /// 绘制类 /// @@ -326,7 +337,7 @@ public static object DrawBaseValue(object data, PropertyInfo property) /// /// /// - public static object DrawClassData(string name, string classFullName, object obj) + public static object DrawClassData(GUIContent name, string classFullName, object obj) { Type t = ReflectionUtils.GetTypeByTypeFullName(classFullName); @@ -343,6 +354,10 @@ public static object DrawClassData(string name, string classFullName, object obj } return DrawClassData(name, obj, null, null); } + public static object DrawClassData(string name, object data, List hideFieldPropertyNames = null, CallBack callAffterDrawField = null, CallBack callEndClassDraw = null) + { + return DrawClassData(new GUIContent(name), data, hideFieldPropertyNames, callAffterDrawField, callEndClassDraw); + } /// /// 绘制类或结构体 /// @@ -350,7 +365,7 @@ public static object DrawClassData(string name, string classFullName, object obj /// 隐藏某些字段不绘制 /// 每绘制一个字段后调用 /// - public static object DrawClassData(string name, object data, List hideFieldPropertyNames = null, CallBack callAffterDrawField = null, CallBack callEndClassDraw = null) + public static object DrawClassData(GUIContent name, object data, List hideFieldPropertyNames = null, CallBack callAffterDrawField = null, CallBack callEndClassDraw = null) { if (data == null) { @@ -359,7 +374,7 @@ public static object DrawClassData(string name, object data, List hideFi } Type t = data.GetType(); - if (!string.IsNullOrEmpty(name)) + if (!string.IsNullOrEmpty(name.text)) GUILayout.Label(name); if (SpecialClassDeal(name, data)) @@ -406,7 +421,7 @@ public static object DrawClassData(string name, object data, List hideFi propertys = tempF.ToArray(); } - GUILayout.Space(1); + GUILayout.Space(10); GUILayout.BeginVertical("box"); if (fs.Length > 0) @@ -516,14 +531,20 @@ public static object DrawStringPopupList(string name, object obj, List d GUILayout.EndVertical(); return obj; } + public static object DrawList(string name, object data, CallBackR addCustomData = null, CallBack ItemChnageCallBack = null, CallBackR customDrawItem = null) + { + return DrawList(new GUIContent(name), data, addCustomData, ItemChnageCallBack, customDrawItem); + } /// /// 绘制List泛型 /// /// /// + /// 自定义添加新的Item + /// 当Item添加或删除时回调 + /// 自定义绘制Item /// - public static object DrawList(string name, object data, CallBackR addCustomData = null, CallBack ItemChnageCallBack = null - ,CallBackR DrawItem =null) + public static object DrawList(GUIContent name, object data, CallBackR addCustomData = null, CallBack ItemChnageCallBack = null, CallBackR customDrawItem = null) { if (data == null) { @@ -574,14 +595,16 @@ public static object DrawList(string name, object data, CallBackR addCus { object da = methodInfo.Invoke(data, new object[] { i }); GUILayout.BeginHorizontal(); - if (DrawItem != null) + GUILayout.BeginVertical(); + if (customDrawItem != null) { - da = DrawItem(da); + da = customDrawItem(da); } else { da = DrawBaseValue("" + i, da); } + GUILayout.EndVertical(); methodInfo1.Invoke(data, new object[] { i, da }); if (CanEdit && GUILayout.Button("↑", GUILayout.Width(15))) { @@ -616,13 +639,21 @@ public static object DrawList(string name, object data, CallBackR addCus return data; } + + public static object DrawArray(string name, object data, CallBackR addCustomData = null, CallBack ItemChnageCallBack = null, CallBackR customDrawItem = null) + { + return DrawArray(new GUIContent(name), data, addCustomData, ItemChnageCallBack, customDrawItem); + } /// /// 绘制数组 - /// + /// /// /// + /// 自定义添加新的Item + /// 当Item添加或删除时回调 + /// 自定义绘制Item /// - public static object DrawArray(string name, object data, CallBackR addCustomData = null, CallBack ItemChnageCallBack = null) + public static object DrawArray(GUIContent name, object data, CallBackR addCustomData = null, CallBack ItemChnageCallBack = null, CallBackR customDrawItem = null) { if (data == null) { @@ -640,19 +671,23 @@ public static object DrawArray(string name, object data, CallBackR addCu MethodInfo AddRange = typeDataList.GetMethod("AddRange"); AddRange.Invoke(instance, new object[] { data }); - instance = DrawList(name, instance, addCustomData, ItemChnageCallBack); + instance = DrawList(name, instance, addCustomData, ItemChnageCallBack, customDrawItem); MethodInfo ToArray = typeDataList.GetMethod("ToArray"); return ToArray.Invoke(instance, null); } + public static object DrawDictionary(string name, object data) + { + return DrawDictionary(new GUIContent(name), data); + } /// /// 绘制字典类型 /// /// /// /// - public static object DrawDictionary(string name, object data) + public static object DrawDictionary(GUIContent name, object data) { if (data == null) @@ -737,7 +772,6 @@ public static object DrawDictionary(string name, object data) return data; } - private static MethodInfo searchMethod= typeof(EditorGUILayout).GetMethod("ToolbarSearchField", BindingFlags.NonPublic | BindingFlags.Static, null, new System.Type[] { typeof(string), typeof(GUILayoutOption[]) }, null); /// /// 绘制搜索框 /// @@ -746,9 +780,10 @@ public static object DrawDictionary(string name, object data) /// public static string DrawSearchField(string value, params GUILayoutOption[] options) { - if (searchMethod != null) + MethodInfo info = typeof(EditorGUILayout).GetMethod("ToolbarSearchField", BindingFlags.NonPublic | BindingFlags.Static, null, new System.Type[] { typeof(string), typeof(GUILayoutOption[]) }, null); + if (info != null) { - value = (string)searchMethod.Invoke(null, new object[] { value, options }); + value = (string)info.Invoke(null, new object[] { value, options }); } return value; } @@ -760,7 +795,7 @@ public static string DrawSearchField(string value, params GUILayoutOption[] opti /// 给类型添上颜色 如 :List /// 用于获取List Array等的数量 /// - public static string GetFormatName(string name, Type t,string color="", object data = null) + public static string GetFormatName(string name, Type t, string color = "", object data = null) { if (t == null && data == null) return name; @@ -794,11 +829,11 @@ public static string GetFormatName(string name, Type t,string color="", object d } if (!string.IsNullOrEmpty(color)) { - typeName = "(" + typeName + ")"; + typeName = "(" + typeName + ")"; } else - typeName = "(" + typeName + ")"; - + typeName = "(" + typeName + ")"; + if (t.IsArray) { if (data != null) @@ -826,7 +861,7 @@ public static string GetFormatName(string name, Type t,string color="", object d /// /// /// - private static bool SpecialClassDeal(string name, object data) + private static bool SpecialClassDeal(GUIContent name, object data) { Type t = data.GetType(); if (t == typeof(DateTime)) @@ -843,15 +878,19 @@ private static bool SpecialClassDeal(string name, object data) return false; } + public static void DrawFoldout(object taget, string content, CallBack drawGUI) + { + DrawFoldout(taget, new GUIContent(content), drawGUI); + } /// /// 绘制折页 /// /// /// /// - public static void DrawFoldout(object taget, string name, CallBack drawGUI) + public static void DrawFoldout(object taget, GUIContent content, CallBack drawGUI) { - bool isFolder = EditorGUILayout.Foldout(EditorGUIState.GetState(taget), name); + bool isFolder = EditorGUILayout.Foldout(EditorGUIState.GetState(taget), content); if (isFolder) { if (drawGUI != null) @@ -904,6 +943,10 @@ public static void DrawHorizontalCenter(CallBack drawGUI, string style = "") GUILayout.EndHorizontal(); } private const string SearchFieldSelect_NameOfFocusedControl = "SearchFieldSelect_TextField"; + public static string DrawSearchFieldSelect(string name, string selectStr, string[] displayedOptions, CallBack selectCallback) + { + return DrawSearchFieldSelect(new GUIContent(name), selectStr, displayedOptions, selectCallback); + } /// /// 输入搜索选择框,输入文本可出现 displayedOptions 里相近的选择,选择了按钮触发selectCallback回调 /// @@ -912,7 +955,7 @@ public static void DrawHorizontalCenter(CallBack drawGUI, string style = "") /// /// /// - public static string DrawSearchFieldSelect(string name, string selectStr, string[] displayedOptions, CallBack selectCallback) + public static string DrawSearchFieldSelect(GUIContent name, string selectStr, string[] displayedOptions, CallBack selectCallback) { string res = ""; @@ -972,7 +1015,7 @@ public static string DrawSearchFieldSelect(string name, string selectStr, string /// 一行个数 /// item间的间隔 /// 绘制每个Item回调 - public static void DrawGrid(List data,int rowCount,Vector2 spacing, CallBack drawItemCallBack) + public static void DrawGrid(List data, int rowCount, Vector2 spacing, CallBack drawItemCallBack) { if (data == null) return; @@ -984,28 +1027,28 @@ public static void DrawGrid(List data,int rowCount,Vector2 spacing, CallBa int index = 0; DrawScrollView(data, () => - { - for (int i = 0; i < columnCount; i++) - { - GUILayout.BeginHorizontal(); - int count = rowCount; - if (exraNumber > 0 && i == (columnCount - 1)) - count = exraNumber; - GUILayout.Space(spacing.x); - - for (int j = 0; j < count; j++) - { - if (drawItemCallBack != null) - drawItemCallBack(data[index]); - GUILayout.Space(spacing.x); - index++; - } - GUILayout.FlexibleSpace(); - GUILayout.EndHorizontal(); - GUILayout.Space(spacing.y); - } - }); - + { + for (int i = 0; i < columnCount; i++) + { + GUILayout.BeginHorizontal(); + int count = rowCount; + if (exraNumber > 0 && i == (columnCount - 1)) + count = exraNumber; + GUILayout.Space(spacing.x); + + for (int j = 0; j < count; j++) + { + if (drawItemCallBack != null) + drawItemCallBack(data[index]); + GUILayout.Space(spacing.x); + index++; + } + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + GUILayout.Space(spacing.y); + } + }); + } #region 特性处理只在绘制类,结构体时有用 @@ -1063,18 +1106,18 @@ public static class EditorGUIState private static Dictionary hasherDic = new Dictionary(); private static Dictionary hasherPosDic = new Dictionary(); public static bool GetState(object obj) - { + { AddObject(obj); - int h= objectHasherDic[obj].GetHashCode(); + int h = objectHasherDic[obj].GetHashCode(); return hasherDic[h]; } - public static void SetState(object obj,bool state) + public static void SetState(object obj, bool state) { - AddObject(obj); - int h = objectHasherDic[obj].GetHashCode(); - hasherDic[h] = state; - + AddObject(obj); + int h = objectHasherDic[obj].GetHashCode(); + hasherDic[h] = state; + } public static Vector2 GetVector2(object obj) { @@ -1105,7 +1148,7 @@ private static void AddObject(object obj) } } - + internal class Hasher { diff --git a/Assets/Script/Core/GameObject/GameObjectManager.cs b/Assets/Script/Core/GameObject/GameObjectManager.cs index 2830fe3f..2b723619 100644 --- a/Assets/Script/Core/GameObject/GameObjectManager.cs +++ b/Assets/Script/Core/GameObject/GameObjectManager.cs @@ -81,6 +81,19 @@ public static bool IsExist(string objectName) return false; } + //判断是否在对象池中 + public static bool IsExist(GameObject go) + { + if (s_objectPool.ContainsKey(go.name) && s_objectPool[go.name].Count > 0) + { + return s_objectPool[go.name].Contains(go); + } + else + { + return false; + } + } + /// /// 从对象池取出一个对象,如果没有,则直接创建它 /// diff --git a/Assets/Script/Core/Input/InputDispatcher.cs b/Assets/Script/Core/Input/InputDispatcher.cs index 8edcb4b4..ec3852d3 100644 --- a/Assets/Script/Core/Input/InputDispatcher.cs +++ b/Assets/Script/Core/Input/InputDispatcher.cs @@ -91,8 +91,6 @@ public void Dispatch(Event inputEvent) void DispatchSingleEvent(Event inputEvent, InputEventHandle callBack) { - //Debug.Log("DispatchSingleEvent"); - if (callBack != null) { try diff --git a/Assets/Script/Core/Network/NetworkManager.cs b/Assets/Script/Core/Network/NetworkManager.cs index b152c916..b390442e 100644 --- a/Assets/Script/Core/Network/NetworkManager.cs +++ b/Assets/Script/Core/Network/NetworkManager.cs @@ -21,8 +21,6 @@ public static bool IsConnect } } - - /// /// 对旧代码的兼容 /// diff --git a/Assets/Script/Core/UI/Extensions.meta b/Assets/Script/Core/UI/Extensions.meta new file mode 100644 index 00000000..c147e99f --- /dev/null +++ b/Assets/Script/Core/UI/Extensions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f5d6b2f7e474fd44f99edda6a385d556 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/UI/Extensions/TextPro.cs b/Assets/Script/Core/UI/Extensions/TextPro.cs new file mode 100644 index 00000000..1733df15 --- /dev/null +++ b/Assets/Script/Core/UI/Extensions/TextPro.cs @@ -0,0 +1,248 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +[AddComponentMenu("UI/Extensions/TextPro")] +/// +/// 扩展Text +/// 1.增强RichText 支持Right Center Left +/// +public class TextPro : Text +{ + + protected override void OnPopulateMesh(VertexHelper toFill) + { + RichTextAlignDataSupport(toFill); + } + + private void RichTextAlignDataSupport(VertexHelper toFill) + { + if (!supportRichText) + { + base.OnPopulateMesh(toFill); + return; + } + + string changedText = ""; + var orignText = m_Text; + m_Text = DealWithTextContent(m_Text); + changedText = m_Text; + base.OnPopulateMesh(toFill); + m_Text = orignText; + + IList lines = cachedTextGenerator.lines; + IList characters = cachedTextGenerator.characters; + Rect rectExtents = cachedTextGenerator.rectExtents; + //Debug.Log("cachedTextGenerator.characterCountVisible :"+cachedTextGenerator.characterCountVisible); + List stream = new List(); + toFill.GetUIVertexStream(stream); + + List removeAlignDatas = new List(); + + for (int i = 0; i < alignDatas.Count; i++) + { + AlignData alignData = alignDatas[i]; + + + for (int j = 0; j < lines.Count; j++) + { + UILineInfo lInfo = lines[j]; + if (lInfo.startCharIdx <= alignData.startCharIndex) + { + alignData.lineIndex = j; + alignData.lineStartCharIndex = lInfo.startCharIdx; + if (j == lines.Count - 1) + { + if (alignData.startCharIndex > cachedTextGenerator.characterCountVisible) + { + removeAlignDatas.Add(alignData); + } + else + alignData.lineEndCharIndex = cachedTextGenerator.characterCountVisible; + } + } + else + { + alignData.lineEndCharIndex = lInfo.startCharIdx - 1; + break; + } + } + + alignDatas[i] = alignData; + + } + List lineList = new List(); + + for (int i = 0; i < alignDatas.Count; i++) + { + AlignData alignData = alignDatas[i]; + //Debug.Log("alignData.lineIndex :" + alignData.lineIndex); + if (lineList.Contains(alignData.lineIndex)) + { + removeAlignDatas.Add(alignData); + continue; + } + else + { + lineList.Add(alignData.lineIndex); + } + } + for (int i = 0; i < removeAlignDatas.Count; i++) + { + alignDatas.Remove(removeAlignDatas[i]); + } + //Debug.Log("alignDatas :" + alignDatas.Count); + + for (int i = 0; i < alignDatas.Count; i++) + { + AlignData alignData = alignDatas[i]; + //Debug.Log("characters.Count :" + characters.Count + " stream.Count:" + stream.Count + " alignData.lineEndCharIndex:" + alignData.lineEndCharIndex); + if (alignData.lineEndCharIndex >= characters.Count) + continue; + if (alignData.lineStartCharIndex >= characters.Count) + continue; + if ((alignData.lineEndCharIndex * 6) > stream.Count) + continue; + if (alignData.lineStartCharIndex * 6 >= stream.Count) + continue; + if (alignData.alignType == AlignType.Right) + { + UICharInfo uiChar = characters[alignData.lineEndCharIndex]; + float detaMove = rectExtents.width / 2 - uiChar.cursorPos.x - uiChar.charWidth; + + for (int v = alignData.lineStartCharIndex * 6; v < alignData.lineEndCharIndex * 6; v++) + { + UIVertex ver = stream[v]; + ver.position += new Vector3(detaMove, 0, 0); + //ver.color = Color.red; + stream[v] = ver; + } + } + else if (alignData.alignType == AlignType.Left) + { + UICharInfo uiChar = characters[alignData.lineStartCharIndex]; + float detaMove = (-rectExtents.width / 2) - uiChar.cursorPos.x; + //Debug.Log("LLeft alignData.lineStartCharIndex:" + alignData.lineStartCharIndex + " alignData.lineEndCharIndex:" + alignData.lineEndCharIndex); + for (int v = alignData.lineStartCharIndex * 6; v < alignData.lineEndCharIndex * 6; v++) + { + UIVertex ver = stream[v]; + ver.position += new Vector3(detaMove, 0, 0); + //ver.color = Color.green; + stream[v] = ver; + } + } + else if (alignData.alignType == AlignType.Center) + { + float lineCharLenth = 0; + for (int j = alignData.lineStartCharIndex; j < alignData.lineEndCharIndex; j++) + { + lineCharLenth += characters[j].charWidth; + } + + + float detaMove = -lineCharLenth / 2 - characters[alignData.lineStartCharIndex].cursorPos.x; + + for (int v = alignData.lineStartCharIndex * 6; v < alignData.lineEndCharIndex * 6; v++) + { + UIVertex ver = stream[v]; + ver.position += new Vector3(detaMove, 0, 0); + //ver.color = Color.blue; + stream[v] = ver; + } + } + } + toFill.AddUIVertexTriangleStream(stream); + } + List alignDatas = new List(); + private string DealWithTextContent(string content) + { + alignDatas.Clear(); + + var temp = content; + while (true) + { + for (int i = 0; i < temp.Length; i++) + { + if (temp[i] == '<') + { + int surplusLenth = temp.Length - i - 1; + string testStr = ""; + bool isResult = false; + if (surplusLenth >= alignRightString.Length) + { + testStr = temp.Substring(i, alignRightString.Length); + if (testStr == alignRightString) + { + isResult = true; + AlignData align = new AlignData(); + align.alignType = AlignType.Right; + align.startCharIndex = i; + alignDatas.Add(align); + } + } + + if (!isResult) + { + if (surplusLenth >= alignLeftString.Length) + { + testStr = temp.Substring(i, alignLeftString.Length); + if (testStr == alignLeftString) + { + isResult = true; + AlignData align = new AlignData(); + align.alignType = AlignType.Left; + align.startCharIndex = i; + alignDatas.Add(align); + } + } + } + if (!isResult) + { + if (surplusLenth >= alignCenterString.Length) + { + testStr = temp.Substring(i, alignCenterString.Length); + if (testStr == alignCenterString) + { + isResult = true; + AlignData align = new AlignData(); + align.alignType = AlignType.Center; + align.startCharIndex = i; + alignDatas.Add(align); + } + } + } + + if (isResult) + { + temp = temp.Remove(i, testStr.Length); + i = 0; + } + } + } + break; + } + + //Debug.Log("alignDatas :" + alignDatas.Count); + return temp; + } + + private const string alignRightString = ""; + private const string alignLeftString = ""; + private const string alignCenterString = ""; +} +public struct AlignData +{ + public AlignType alignType; + public int startCharIndex; + public int lineEndCharIndex; + public int lineStartCharIndex; + public int lineIndex; +} +public enum AlignType +{ + Right, + Left, + Center, +} \ No newline at end of file diff --git a/Assets/Script/Core/UI/Extensions/TextPro.cs.meta b/Assets/Script/Core/UI/Extensions/TextPro.cs.meta new file mode 100644 index 00000000..fe87b61f --- /dev/null +++ b/Assets/Script/Core/UI/Extensions/TextPro.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1f5c09c60fb0b2e4c8cd515faa3961f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/UI/Style/LanguageManager.cs b/Assets/Script/Core/UI/Style/LanguageManager.cs index 94ffa675..3f6e57bc 100644 --- a/Assets/Script/Core/UI/Style/LanguageManager.cs +++ b/Assets/Script/Core/UI/Style/LanguageManager.cs @@ -35,11 +35,13 @@ public static bool IsInit public static void Init() { + //Debug.Log("1 当前语言: " + Application.systemLanguage + " isInit " + isInit); + if (!isInit) { isInit = true; - //Debug.Log("当前语言: " + Application.systemLanguage); + Debug.Log("当前语言: " + Application.systemLanguage); LoadConfig(); SetLanguage(Application.systemLanguage); } @@ -128,18 +130,27 @@ public static string GetContent(string moduleName,string contentID, List /// public static string GetContentByKey(string moduleName_key, params object[] contentParams) { + if (string.IsNullOrEmpty(moduleName_key)) + return "Error : key is null"; string[] res = ChangeKey2ModuleID(moduleName_key); + if (res == null) + return "Error : format is error!"; return GetContent(res[0], res[1], contentParams); } public static bool HaveKey(string moduleName_key) { Init(); + if (string.IsNullOrEmpty(moduleName_key)) + return false; string[] res = ChangeKey2ModuleID(moduleName_key); + if (res == null) + return false; string moduleName = res[0]; string contentID = res[1]; if (!s_languageDataDict.ContainsKey(moduleName)) { + //Debug.Log("s_languageDataDict.ContainsKey》》》 moduleName :" + moduleName + " contentID :" + contentID); return false; } @@ -147,6 +158,7 @@ public static bool HaveKey(string moduleName_key) if (!data.ContainsKey(contentID)) { + //Debug.Log("data.ContainsKeyy》》》 moduleName :" + moduleName + " contentID :" + contentID); return false; } @@ -154,6 +166,11 @@ public static bool HaveKey(string moduleName_key) } private static string[] ChangeKey2ModuleID(string moduleName_key) { + if (!moduleName_key.Contains("/")) + { + Debug.LogError("多语言key格式错误 :" + moduleName_key); + return null; + } string[] ss = moduleName_key.Split('/'); string moduleName = ""; string contentID = ""; @@ -207,7 +224,7 @@ public static string GetContent(string moduleName, string contentID, params obje content = content.Replace(replaceTmp, contentParams[i].ToString()); } } - if ( ApplicationManager.Instance.showLanguageValue && ApplicationManager.Instance.m_AppMode == AppMode.Developing) + if (ApplicationManager.Instance!=null && ApplicationManager.Instance.showLanguageValue && ApplicationManager.Instance.m_AppMode == AppMode.Developing) content = "[" + content + "]"; return content; } diff --git a/Assets/Script/Core/Utils/ParseTool.cs b/Assets/Script/Core/Utils/ParseTool.cs index 305bcc86..7231e4da 100644 --- a/Assets/Script/Core/Utils/ParseTool.cs +++ b/Assets/Script/Core/Utils/ParseTool.cs @@ -40,7 +40,7 @@ public static Vector2 String2Vector2(string value) { try { - string[] values = value.Split('|'); + string[] values = value.Split(','); float x = float.Parse(values[0]); float y = float.Parse(values[1]); @@ -73,7 +73,7 @@ public static Vector3 String2Vector3(string value) { try { - string[] values = value.Split('|'); + string[] values = value.Split(','); float x = float.Parse(values[0]); float y = float.Parse(values[1]); float z = float.Parse(values[2]); @@ -109,7 +109,7 @@ public static Color String2Color(string value) { try { - string[] values = value.Split('|'); + string[] values = value.Split(','); float r = float.Parse(values[0]); float g = float.Parse(values[1]); float b = float.Parse(values[2]); diff --git a/Assets/Script/Core/Utils/ReflectionUtils.cs b/Assets/Script/Core/Utils/ReflectionUtils.cs index 6dbb9461..e89774de 100644 --- a/Assets/Script/Core/Utils/ReflectionUtils.cs +++ b/Assets/Script/Core/Utils/ReflectionUtils.cs @@ -237,7 +237,7 @@ public static object CreateDefultInstanceAll(Type type,bool isDeepParameters =fa } } if(instance==null) - Debug.LogError(error); + Debug.LogError("Type :"+type+"\n"+ error); return instance; } public static object CreateDefultInstance(Type type) diff --git a/Assets/Script/Core/Utils/StringExtends.cs b/Assets/Script/Core/Utils/StringExtends.cs new file mode 100644 index 00000000..a6b04072 --- /dev/null +++ b/Assets/Script/Core/Utils/StringExtends.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + + +public static class StringExtends +{ + /// + /// 分割特定开始字符串和结束字符串包裹的字符串 + /// + /// + /// + /// + /// + public static string[] SplitExtend(this string value,string startSign,string endSign) + { + List results = new List(); + + string content = value; + int startIndex = content.IndexOf(startSign); + while (startIndex != -1) + { + int tempInt = startIndex + startSign.Length; + + int endIndex = content.IndexOf(endSign, tempInt); + + if (endIndex == -1) + break; + else + { + results.Add(content.Substring(tempInt, endIndex - tempInt)); + content = content.Remove(0, endIndex + endSign.Length); + startIndex = content.IndexOf(startSign); + } + } + + return results.ToArray(); + } +} + diff --git a/Assets/Script/Core/Utils/StringExtends.cs.meta b/Assets/Script/Core/Utils/StringExtends.cs.meta new file mode 100644 index 00000000..157a7e65 --- /dev/null +++ b/Assets/Script/Core/Utils/StringExtends.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4feb97c2db5c7974fb8e7408183c8173 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 265e0f8ca0f3b1c09efffd3d3958bddcca84fe56 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Fri, 24 Aug 2018 17:45:08 +0800 Subject: [PATCH 074/108] =?UTF-8?q?=E8=A1=A5=E5=85=A8=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/UI/Model/UIBase.cs | 2 +- Assets/Script/Core/Utils/JsonUtils.cs | 474 ++++++++++ Assets/Script/Core/Utils/JsonUtils.cs.meta | 13 + Assets/Script/Core/Utils/PathUtils.cs | 290 ++++++ Assets/Script/Core/Utils/PathUtils.cs.meta | 13 + Assets/Script/Core/Utils/SimpleJson.meta | 10 + .../SimpleJson/IJsonSerializerStrategy.cs | 13 + .../IJsonSerializerStrategy.cs.meta | 12 + .../Script/Core/Utils/SimpleJson/JsonArray.cs | 24 + .../Core/Utils/SimpleJson/JsonArray.cs.meta | 12 + .../Core/Utils/SimpleJson/JsonObject.cs | 172 ++++ .../Core/Utils/SimpleJson/JsonObject.cs.meta | 12 + .../SimpleJson/PocoJsonSerializerStrategy.cs | 343 +++++++ .../PocoJsonSerializerStrategy.cs.meta | 12 + .../SimpleJson/SimpleJson.Reflection.meta | 9 + .../SimpleJson.Reflection/ReflectionUtils.cs | 404 ++++++++ .../ReflectionUtils.cs.meta | 12 + .../Core/Utils/SimpleJson/SimpleJson.cs | 875 ++++++++++++++++++ .../Core/Utils/SimpleJson/SimpleJson.cs.meta | 12 + .../Core/Utils/SimpleJson/SimpleJson.meta | 9 + 20 files changed, 2722 insertions(+), 1 deletion(-) create mode 100644 Assets/Script/Core/Utils/JsonUtils.cs create mode 100644 Assets/Script/Core/Utils/JsonUtils.cs.meta create mode 100644 Assets/Script/Core/Utils/PathUtils.cs create mode 100644 Assets/Script/Core/Utils/PathUtils.cs.meta create mode 100644 Assets/Script/Core/Utils/SimpleJson.meta create mode 100644 Assets/Script/Core/Utils/SimpleJson/IJsonSerializerStrategy.cs create mode 100644 Assets/Script/Core/Utils/SimpleJson/IJsonSerializerStrategy.cs.meta create mode 100644 Assets/Script/Core/Utils/SimpleJson/JsonArray.cs create mode 100644 Assets/Script/Core/Utils/SimpleJson/JsonArray.cs.meta create mode 100644 Assets/Script/Core/Utils/SimpleJson/JsonObject.cs create mode 100644 Assets/Script/Core/Utils/SimpleJson/JsonObject.cs.meta create mode 100644 Assets/Script/Core/Utils/SimpleJson/PocoJsonSerializerStrategy.cs create mode 100644 Assets/Script/Core/Utils/SimpleJson/PocoJsonSerializerStrategy.cs.meta create mode 100644 Assets/Script/Core/Utils/SimpleJson/SimpleJson.Reflection.meta create mode 100644 Assets/Script/Core/Utils/SimpleJson/SimpleJson.Reflection/ReflectionUtils.cs create mode 100644 Assets/Script/Core/Utils/SimpleJson/SimpleJson.Reflection/ReflectionUtils.cs.meta create mode 100644 Assets/Script/Core/Utils/SimpleJson/SimpleJson.cs create mode 100644 Assets/Script/Core/Utils/SimpleJson/SimpleJson.cs.meta create mode 100644 Assets/Script/Core/Utils/SimpleJson/SimpleJson.meta diff --git a/Assets/Script/Core/UI/Model/UIBase.cs b/Assets/Script/Core/UI/Model/UIBase.cs index fbece74c..af20baba 100644 --- a/Assets/Script/Core/UI/Model/UIBase.cs +++ b/Assets/Script/Core/UI/Model/UIBase.cs @@ -956,7 +956,7 @@ public bool GetItemIsExist(string itemName) public void SetText(string TextID, string content) { - GetText(TextID).text = content.Replace("//n", "/n"); + GetText(TextID).text = content.Replace("\\n", "\n"); } public void SetImageColor(string ImageID, Color color) diff --git a/Assets/Script/Core/Utils/JsonUtils.cs b/Assets/Script/Core/Utils/JsonUtils.cs new file mode 100644 index 00000000..5225f143 --- /dev/null +++ b/Assets/Script/Core/Utils/JsonUtils.cs @@ -0,0 +1,474 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System; +using System.Reflection; +using HDJ.Framework.Tools; + +namespace HDJ.Framework.Utils +{ + /// + /// Json处理工具类 + /// + public static class JsonUtils + { + private static Type list_Type = typeof(List<>); + private static Type dictionary_Type = typeof(Dictionary<,>); + private static BindingFlags flags = BindingFlags.Instance | BindingFlags.Public; + private static Type notJsonSerialized_Type = typeof(NotJsonSerializedAttribute); + public static string ToJson(object data) + { + object temp = ChangeObjectToJsonObject(data); + if (null == temp) + return ""; + return SimpleJsonTool.SerializeObject(temp); + } + public static T FromJson(string json) + { + object obj = FromJson(typeof(T), json); + return obj == null ? default(T) : (T)obj; + } + public static object FromJson(Type type, string json) + { + object jsonObj = SimpleJsonTool.DeserializeObject(json); + return ChangeJsonDataToObjectByType(type, jsonObj); + } + + #region List + /// + /// Json转换List + /// + /// + /// T的type + /// + private static object JsonToList(string json, Type itemType) + { + if (string.IsNullOrEmpty(json)) + return null; + object obj = SimpleJsonTool.DeserializeObject(json); + object res = JsonObjectToList(obj, itemType); + return res; + } + private static object JsonObjectToList(object obj, Type itemType) + { + IList listData = obj as IList; + Type listType = list_Type.MakeGenericType(itemType); + object list = ReflectionUtils.CreateDefultInstance(listType); + if (listData == null || listData.Count == 0) + return list; + + MethodInfo addMethod = listType.GetMethod("Add"); + for (int i = 0; i < listData.Count; i++) + { + object obj0 = listData[i]; + obj0 = ChangeJsonDataToObjectByType(itemType, obj0); + if (obj0 == null) + continue; + addMethod.Invoke(list, new object[] { obj0 }); + } + return list; + } + + + /// + /// List转换为Json + /// + /// List + /// json + private static string ListToJson(object datas) + { + object temp = ListArrayToJsonObject(datas, true); + return SimpleJsonTool.SerializeObject(temp); + + } + private static object ListArrayToJsonObject(object datas, bool isList) + { + Type type = datas.GetType(); + PropertyInfo pro = null; + if (isList) + { + pro = type.GetProperty("Count"); + } + else + { + pro = type.GetProperty("Length"); + } + + int count = (int)pro.GetValue(datas, null); + MethodInfo methodInfo = null; + if (isList) + methodInfo = type.GetMethod("get_Item", flags); + else + methodInfo = type.GetMethod("GetValue", new Type[] { typeof(int) }); + List temp = new List(); + for (int i = 0; i < count; i++) + { + object da = methodInfo.Invoke(datas, new object[] { i }); + da = ChangeObjectToJsonObject(da); + if (null == da) + continue; + temp.Add(da); + } + return temp; + } + #endregion + + #region Array + + /// + /// Json转换为Array + /// + /// + /// 数组的类型T[]的T类型 + /// + private static object JsonToArray(string json, Type itemType) + { + object obj = SimpleJsonTool.DeserializeObject(json); + return JsonObjectToArray(obj, itemType); + } + private static object JsonObjectToArray(object data, Type itemType) + { + object result = JsonObjectToList(data, itemType); + MethodInfo method = result.GetType().GetMethod("ToArray"); + //Debug.Log("JsonObjectToArray : result:" + result.GetType().FullName); + return method.Invoke(result, null); + } + /// + /// Array转换为Json + /// + /// + /// + private static string ArrayToJson(object datas) + { + object temp = ListArrayToJsonObject(datas, false); + return SimpleJsonTool.SerializeObject(temp); + } + #endregion + #region class或struct + /// + /// class或struct转换为json + /// + /// + /// + private static string ClassOrStructToJson(object data) + { + object jsonObject = ClassOrStructToJsonObject(data); + return SimpleJsonTool.SerializeObject(jsonObject); + } + private static object ClassOrStructToJsonObject(object data) + { + Dictionary dic = new Dictionary(); + Type type = data.GetType(); + + FieldInfo[] fields = type.GetFields(flags); + + for (int i = 0; i < fields.Length; i++) + { + FieldInfo f = fields[i]; + + if (ReflectionUtils.IsDelegate(f.FieldType)) + continue; + + + if (CheckHaveNotJsonSerializedAttribute(f)) + continue; + try + { + + object v = f.GetValue(data); + string name = f.Name; + if (v == null) + continue; + v = ChangeObjectToJsonObject(v); + dic.Add(name, v); + } + catch + { + continue; + } + } + + PropertyInfo[] propertys = type.GetProperties(flags); + for (int i = 0; i < propertys.Length; i++) + { + PropertyInfo p = propertys[i]; + if (p.CanRead && p.CanWrite) + { + if (ReflectionUtils.IsDelegate(p.PropertyType)) + continue; + if (CheckHaveNotJsonSerializedAttribute(p)) + continue; + try + { + + object v = p.GetValue(data, null); + if (v == null) + continue; + v = ChangeObjectToJsonObject(v); + dic.Add(p.Name, v); + } + catch + { + continue; + } + } + } + return dic; + } + + /// + /// json转换为class或struct + /// + /// + /// class或struct的type + /// + private static object JsonToClassOrStruct(string json, Type type) + { + if (string.IsNullOrEmpty(json)) + return null; + object obj = SimpleJsonTool.DeserializeObject(json); + return JsonObjectToClassOrStruct(obj, type); + } + private static object JsonObjectToClassOrStruct(object jsonObj, Type type) + { + IDictionary dic = (IDictionary)jsonObj; + object instance = ReflectionUtils.CreateDefultInstance(type); + if (dic == null || instance == null) + { + return null; + } + foreach (var item in dic) + { + string key = item.Key; + object value = item.Value; + FieldInfo f = type.GetField(key, flags); + if (f != null) + { + value = ChangeJsonDataToObjectByType(f.FieldType, value); + f.SetValue(instance, value); + } + else + { + PropertyInfo property = type.GetProperty(key, flags); + if (property != null && property.CanRead && property.CanWrite) + { + value = ChangeJsonDataToObjectByType(property.PropertyType, value); + property.SetValue(instance, value, null); + } + } + } + return instance; + } + #endregion + #region Dictionary + /// + /// Dictionary转换为json + /// + /// + /// + private static string DictionaryToJson(object data) + { + object obj = DictionaryToJsonObject(data); + return SimpleJsonTool.SerializeObject(obj); + } + + private static object DictionaryToJsonObject(object data) + { + Type type = data.GetType(); + PropertyInfo p = type.GetProperty("Count"); + int count = (int)p.GetValue(data, null); + + MethodInfo GetEnumeratorMe = type.GetMethod("GetEnumerator"); + PropertyInfo current = GetEnumeratorMe.ReturnParameter.ParameterType.GetProperty("Current"); + MethodInfo moveNext = GetEnumeratorMe.ReturnParameter.ParameterType.GetMethod("MoveNext"); + + Type[] typeArguments = type.GetGenericArguments(); + Type KeyValuePairType = typeof(KeyValuePair<,>).MakeGenericType(typeArguments); + PropertyInfo keyProperty = KeyValuePairType.GetProperty("Key"); + PropertyInfo valueProperty = KeyValuePairType.GetProperty("Value"); + + object enumerator = GetEnumeratorMe.Invoke(data, null); + + Dictionary dataDic = new Dictionary(); + for (int i = 0; i < count; i++) + { + moveNext.Invoke(enumerator, null); + object kv = current.GetValue(enumerator, null); + object key = keyProperty.GetValue(kv, null); + object value = valueProperty.GetValue(kv, null); + key = ChangeObjectToJsonObject(key); + value = ChangeObjectToJsonObject(value); + if (key == null || value == null) + continue; + dataDic.Add(key, value); + } + + return dataDic; + } + /// + /// json转换为Dictionary + /// + /// + /// key的type + /// value的type + /// + private static object JsonToDictionary(string json, Type keyType, Type valueType) + { + object obj = SimpleJsonTool.DeserializeObject(json); + return JsonObjectToDictionary(obj, keyType, valueType); + } + private static object JsonObjectToDictionary(object data, Type keyType, Type valueType) + { + IList iList = data as IList; + //Debug.Log(iList.Count); + Type dicType = dictionary_Type.MakeGenericType(keyType, valueType); + object tempDic = Activator.CreateInstance(dicType); + MethodInfo addDicMe = dicType.GetMethod("Add", flags); + + if (iList != null) + { + for (int i = 0; i < iList.Count; i++) + { + //Debug.Log(iList[i].GetType().FullName); + IDictionary iDatasDic = iList[i] as IDictionary; + object key = iDatasDic["Key"]; + object value = iDatasDic["Value"]; + key = ChangeJsonDataToObjectByType(keyType, key); + value = ChangeJsonDataToObjectByType(valueType, value); + //Debug.Log("keyType :" + keyType + " valueType:" + valueType + " key:" + key.GetType() + " value:" + value.GetType()); + addDicMe.Invoke(tempDic, new object[] { key, value }); + } + } + return tempDic; + } + #endregion + + #region Other + private static bool IsSupportBaseValueParseJson(Type t) + { + if (t.IsPrimitive || t == typeof(string) || t.IsEnum) + return true; + return false; + } + private static object ChangeJsonDataToObjectByType(Type type, object data) + { + object value = null; + if (data == null) + return value; + if (type.IsPrimitive || type == typeof(string)) + { + value = data; + } + else if (type.IsEnum) + { + value = Enum.Parse(type, data.ToString()); + // value = Enum.ToObject(type, data); + } + else if (type.IsArray) + { + try + { + value = JsonObjectToArray(data, type.GetElementType()); + } + catch (Exception e) + { + Debug.LogError("Array无法转换类型, data:" + data.GetType().FullName + " type.GetElementType(): " + type.GetElementType().FullName); + Debug.LogError(e); + } + } + else if (type.IsGenericType) + { + if (list_Type.Name == type.Name) + { + value = JsonObjectToList(data, type.GetGenericArguments()[0]); + } + else if (dictionary_Type.Name == type.Name) + { + Type[] ts = type.GetGenericArguments(); + value = JsonObjectToDictionary(data, ts[0], ts[1]); + } + else + { + value = JsonObjectToClassOrStruct(data, type); + } + } + else + { + if (type.IsClass || type.IsValueType) + { + value = JsonObjectToClassOrStruct(data, type); + } + } + if (value == null) + return value; + try + { + if (!type.Equals(value.GetType())) + value = Convert.ChangeType(value, type); + } + catch (Exception e) + { + Debug.LogError("无法转换类型, type:" + type.FullName + " valueType: " + value.GetType().FullName + "\n " + e); + } + return value; + } + /// + /// 检测是否字段或属性添加了 NotJsonSerializedAttribute 特性 + /// + /// + /// + private static bool CheckHaveNotJsonSerializedAttribute(MemberInfo member) + { + object[] attrs = member.GetCustomAttributes(false); + bool isSerialized = false; + foreach (var att in attrs) + { + if (att.GetType() == notJsonSerialized_Type) + { + isSerialized = true; + break; + } + } + return isSerialized; + } + private static object ChangeObjectToJsonObject(object data) + { + if (null == data) + return data; + Type t = data.GetType(); + if (ReflectionUtils.IsDelegate(t)) + return null; + object value = data; + if (!IsSupportBaseValueParseJson(t)) + { + if (t.IsArray) + value = ListArrayToJsonObject(data, false); + else if (t.IsClass || t.IsGenericType) + { + if (list_Type.Name == t.Name) + value = ListArrayToJsonObject(data, true); + else if (dictionary_Type.Name == t.Name) + value = DictionaryToJsonObject(data); + else + value = ClassOrStructToJsonObject(data); + } + else + { + if (t.IsClass || t.IsValueType) + value = ClassOrStructToJsonObject(data); + } + } + return value; + } + #endregion + } + + + + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] + public class NotJsonSerializedAttribute : Attribute + { + + } +} \ No newline at end of file diff --git a/Assets/Script/Core/Utils/JsonUtils.cs.meta b/Assets/Script/Core/Utils/JsonUtils.cs.meta new file mode 100644 index 00000000..aae8e2ea --- /dev/null +++ b/Assets/Script/Core/Utils/JsonUtils.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: c12222fefba53ac43be1b8a16ba99f2c +timeCreated: 1525244962 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/PathUtils.cs b/Assets/Script/Core/Utils/PathUtils.cs new file mode 100644 index 00000000..b403578d --- /dev/null +++ b/Assets/Script/Core/Utils/PathUtils.cs @@ -0,0 +1,290 @@ +using UnityEngine; +using System.Collections; +using System.IO; +using System.Collections.Generic; +using System; + +namespace HDJ.Framework.Utils +{ + public class PathUtils + { + + /// + /// 根据平台转换路径连接符 + /// + /// 带“/”分割的路径 + /// + public static string CreatePlatformPath(string path) + { + string[] temps = path.Split(new char[] { '/' }); + string str = ""; + if (temps.Length > 0) + str = temps[0]; + + for (int i = 1; i < temps.Length; i++) + { + if (temps[i] != "") + { + str = Path.Combine(str, temps[i]); + } + } + + return str; + } + /// + /// 切割路径 + /// + /// 路径 + /// 要切割的文件夹名 + /// 是否返回后半部分 + /// 是否包含切割的文件夹名 + /// + public static string CutPath(string fullPath, string cutFolderName, bool returnLatterPart = true, bool includeCutFolderName = false) + { + fullPath = fullPath.Replace("\\", "/"); + if (!fullPath.Contains(cutFolderName)) return fullPath; + if (fullPath.Contains(cutFolderName + "/")) + { + if (returnLatterPart) + { + + if (includeCutFolderName) + { + return cutFolderName + fullPath.Split(new string[] { cutFolderName }, StringSplitOptions.None)[1]; + } + else + { + return fullPath.Split(new string[] { cutFolderName + "/" }, StringSplitOptions.None)[1]; + } + } + else + { + if (includeCutFolderName) + { + return fullPath.Split(new string[] { cutFolderName }, StringSplitOptions.None)[0] + cutFolderName; + } + else + { + return fullPath.Split(new string[] { cutFolderName + "/" }, StringSplitOptions.None)[0]; + } + } + } + else + { + if (returnLatterPart) + { + + if (includeCutFolderName) + { + return cutFolderName + fullPath.Split(new string[] { cutFolderName }, StringSplitOptions.None)[1]; + } + else + { + return fullPath.Split(new string[] { cutFolderName }, StringSplitOptions.None)[1]; + } + } + else + { + if (includeCutFolderName) + { + return fullPath.Split(new string[] { cutFolderName }, StringSplitOptions.None)[0] + cutFolderName; + } + else + { + return fullPath.Split(new string[] { cutFolderName }, StringSplitOptions.None)[0]; + } + } + } + } + + /// + /// 根据方式获取对应的路径 + /// + /// 相对路径 + /// 加载方式 + /// + public static string GetSpecialPath(string assetPath, SpecialPathType type) + { + string path = assetPath; + + switch (type) + { + case SpecialPathType.Resources: +//#if !UNITY +// path= Environment.CurrentDirectory + "/Resources/"+path; +// break; +//#else + path = Application.dataPath + "/Resources/" + path; + break; + case SpecialPathType.Persistent: + path = Application.persistentDataPath + "/" + path; + break; + case SpecialPathType.StreamingAssets: + path = Application.streamingAssetsPath + "/" + path; + break; +//#endif + } + return path; + } + + public static string RemoveExtension(string path) + { + string ss = path; + if (Path.HasExtension(path)) + ss = Path.ChangeExtension(path, null); + return ss; + } + /// + /// 移除规定后缀名的路径 + /// + /// + /// + /// + public static string[] RemovePathWithEnds(string[] paths, string[] endsWith) + { + if (endsWith == null && endsWith.Length == 0) + return paths; + List resPath = new List(); + List temp = new List(endsWith); + + for (int i = 0; i < paths.Length; i++) + { + string s = Path.GetExtension(paths[i]); + if (temp.Contains(s)) + continue; + else + resPath.Add(paths[i]); + } + return resPath.ToArray(); + } + /// + /// 获取指定目录下的所有文件路径 + /// + /// 目录 + /// 文件后缀名如“.txt” + /// 返回所有文件的全路径 + public static string[] GetDirectoryFilePath(string path, string[] endsWith = null, bool isIncludeChildFolder = true) + { + + List pathList = new List(); + + if (isIncludeChildFolder) + { + string[] directorys = Directory.GetDirectories(path); + //所有目录继续遍历 + for (int i = 0; i < directorys.Length; i++) + { + string pathTmp = directorys[i]; + + + string[] tempArray = GetDirectoryFilePath(pathTmp, endsWith); + pathList.AddRange(tempArray); + + } + } + + string[] files = Directory.GetFiles(path); + for (int i = 0; i < files.Length; i++) + { + string pathTmp = files[i]; + pathTmp = pathTmp.Replace("\\", "/"); + string ends = Path.GetExtension(pathTmp); + if (endsWith != null && endsWith.Length > 0) + { + for (int j = 0; j < endsWith.Length; j++) + { + if (ends.Equals(endsWith[j])) + { + pathList.Add(pathTmp); + break; + } + } + } + else + { + pathList.Add(pathTmp); + } + } + return pathList.ToArray(); + } + /// + /// 获取指定目录下的所有文件名字 + /// + /// + /// + /// 是否需要文件后缀名 + /// + public static string[] GetDirectoryFileNames(string path, string[] endsWith, bool isNeedExtension = false, bool isIncludeChildFolder = true) + { + string[] temps = GetDirectoryFilePath(path, endsWith, isIncludeChildFolder); + List names = new List(); + for (int i = 0; i < temps.Length; i++) + { + if (isNeedExtension) + { + names.Add(Path.GetFileName(temps[i])); + } + else + names.Add(Path.GetFileNameWithoutExtension(temps[i])); + } + return names.ToArray(); + } + public static string[] GetDirectorys(string path, bool isIncludeChildFolder = true) + { + + List pathList = new List(); + + if (Directory.Exists(path)) + { + string[] directorys = Directory.GetDirectories(path); + pathList.AddRange(directorys); + + if (isIncludeChildFolder) + { + + //所有目录继续遍历 + for (int i = 0; i < directorys.Length; i++) + { + string pathTmp = directorys[i]; + + string[] tempArray = GetDirectorys(pathTmp); + pathList.AddRange(tempArray); + + } + } + } + + return pathList.ToArray(); + } + public static string GetFileName(string path) + { + string name = ""; + try + { + name = Path.GetFileName(path); + } + catch //(Exception e) + { + path = path.Replace("\\", "/"); + if (!path.Contains("/")) + { + return path; + } + + string[] ss = path.Split(new string[] { "/" }, StringSplitOptions.None); + if (ss.Length > 0) + return ss[ss.Length - 1]; + + } + return name; + } + } +} +public enum SpecialPathType +{ + Resources, +//#if UNITY + Persistent, + StreamingAssets, +//#endif +} diff --git a/Assets/Script/Core/Utils/PathUtils.cs.meta b/Assets/Script/Core/Utils/PathUtils.cs.meta new file mode 100644 index 00000000..0fdaf690 --- /dev/null +++ b/Assets/Script/Core/Utils/PathUtils.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 97aaa5232ce36ab4bb06a78d3b4c6a7c +timeCreated: 1525244981 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/SimpleJson.meta b/Assets/Script/Core/Utils/SimpleJson.meta new file mode 100644 index 00000000..421b04cb --- /dev/null +++ b/Assets/Script/Core/Utils/SimpleJson.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9e262948bd0eaae4e9ed3daa20c1b343 +folderAsset: yes +timeCreated: 1525244965 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/SimpleJson/IJsonSerializerStrategy.cs b/Assets/Script/Core/Utils/SimpleJson/IJsonSerializerStrategy.cs new file mode 100644 index 00000000..2d0d8cc4 --- /dev/null +++ b/Assets/Script/Core/Utils/SimpleJson/IJsonSerializerStrategy.cs @@ -0,0 +1,13 @@ +using System; +using System.CodeDom.Compiler; + +namespace HDJ.Framework.Tools +{ + [GeneratedCode("simple-json", "1.0.0")] + public interface IJsonSerializerStrategy + { + bool TrySerializeNonPrimitiveObject(object input, out object output); + + object DeserializeObject(object value, Type type); + } +} diff --git a/Assets/Script/Core/Utils/SimpleJson/IJsonSerializerStrategy.cs.meta b/Assets/Script/Core/Utils/SimpleJson/IJsonSerializerStrategy.cs.meta new file mode 100644 index 00000000..112242c5 --- /dev/null +++ b/Assets/Script/Core/Utils/SimpleJson/IJsonSerializerStrategy.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 147613703caa18a4c8f0a70714fd2fe4 +timeCreated: 1496386937 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/SimpleJson/JsonArray.cs b/Assets/Script/Core/Utils/SimpleJson/JsonArray.cs new file mode 100644 index 00000000..b39b93ca --- /dev/null +++ b/Assets/Script/Core/Utils/SimpleJson/JsonArray.cs @@ -0,0 +1,24 @@ +using System; +using System.CodeDom.Compiler; +using System.Collections.Generic; +using System.ComponentModel; + +namespace HDJ.Framework.Tools +{ + [GeneratedCode("simple-json", "1.0.0"), EditorBrowsable(EditorBrowsableState.Never)] + internal class JsonArray : List + { + public JsonArray() + { + } + + public JsonArray(int capacity) : base(capacity) + { + } + + public override string ToString() + { + return SimpleJsonTool.SerializeObject(this) ?? string.Empty; + } + } +} diff --git a/Assets/Script/Core/Utils/SimpleJson/JsonArray.cs.meta b/Assets/Script/Core/Utils/SimpleJson/JsonArray.cs.meta new file mode 100644 index 00000000..6e76c72c --- /dev/null +++ b/Assets/Script/Core/Utils/SimpleJson/JsonArray.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7d2a7b2cd3297754088824b494b9c8bf +timeCreated: 1496386938 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/SimpleJson/JsonObject.cs b/Assets/Script/Core/Utils/SimpleJson/JsonObject.cs new file mode 100644 index 00000000..612e44b6 --- /dev/null +++ b/Assets/Script/Core/Utils/SimpleJson/JsonObject.cs @@ -0,0 +1,172 @@ +using System; +using System.CodeDom.Compiler; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; + +namespace HDJ.Framework.Tools +{ + [GeneratedCode("simple-json", "1.0.0"), EditorBrowsable(EditorBrowsableState.Never)] + internal class JsonObject : IDictionary, ICollection>, IEnumerable>, IEnumerable + { + private readonly Dictionary _members; + + public object this[int index] + { + get + { + return JsonObject.GetAtIndex(this._members, index); + } + } + + public ICollection Keys + { + get + { + return this._members.Keys; + } + } + + public ICollection Values + { + get + { + return this._members.Values; + } + } + + public object this[string key] + { + get + { + return this._members[key]; + } + set + { + this._members[key] = value; + } + } + + public int Count + { + get + { + return this._members.Count; + } + } + + public bool IsReadOnly + { + get + { + return false; + } + } + + public JsonObject() + { + this._members = new Dictionary(); + } + + public JsonObject(IEqualityComparer comparer) + { + this._members = new Dictionary(comparer); + } + + internal static object GetAtIndex(IDictionary obj, int index) + { + if (obj == null) + { + throw new ArgumentNullException("obj"); + } + if (index >= obj.Count) + { + throw new ArgumentOutOfRangeException("index"); + } + int num = 0; + object result; + foreach (KeyValuePair current in obj) + { + if (num++ == index) + { + result = current.Value; + return result; + } + } + result = null; + return result; + } + + public void Add(string key, object value) + { + this._members.Add(key, value); + } + + public bool ContainsKey(string key) + { + return this._members.ContainsKey(key); + } + + public bool Remove(string key) + { + return this._members.Remove(key); + } + + public bool TryGetValue(string key, out object value) + { + return this._members.TryGetValue(key, out value); + } + + public void Add(KeyValuePair item) + { + this._members.Add(item.Key, item.Value); + } + + public void Clear() + { + this._members.Clear(); + } + + public bool Contains(KeyValuePair item) + { + return this._members.ContainsKey(item.Key) && this._members[item.Key] == item.Value; + } + + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + if (array == null) + { + throw new ArgumentNullException("array"); + } + int num = this.Count; + foreach (KeyValuePair current in this) + { + array[arrayIndex++] = current; + if (--num <= 0) + { + break; + } + } + } + + public bool Remove(KeyValuePair item) + { + return this._members.Remove(item.Key); + } + + public IEnumerator> GetEnumerator() + { + return this._members.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return this._members.GetEnumerator(); + } + + public override string ToString() + { + return SimpleJsonTool.SerializeObject(this); + } + } +} diff --git a/Assets/Script/Core/Utils/SimpleJson/JsonObject.cs.meta b/Assets/Script/Core/Utils/SimpleJson/JsonObject.cs.meta new file mode 100644 index 00000000..a957bc35 --- /dev/null +++ b/Assets/Script/Core/Utils/SimpleJson/JsonObject.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b0a5a3f96daf329429ef7af605749aa2 +timeCreated: 1496386938 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/SimpleJson/PocoJsonSerializerStrategy.cs b/Assets/Script/Core/Utils/SimpleJson/PocoJsonSerializerStrategy.cs new file mode 100644 index 00000000..8f85bd7f --- /dev/null +++ b/Assets/Script/Core/Utils/SimpleJson/PocoJsonSerializerStrategy.cs @@ -0,0 +1,343 @@ +using System; +using System.CodeDom.Compiler; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Reflection; + +namespace HDJ.Framework.Tools +{ + [GeneratedCode("simple-json", "1.0.0")] + public class PocoJsonSerializerStrategy : IJsonSerializerStrategy + { + internal IDictionary ConstructorCache; + + internal IDictionary> GetCache; + + internal IDictionary>> SetCache; + + internal static readonly Type[] EmptyTypes = new Type[0]; + + internal static readonly Type[] ArrayConstructorParameterTypes = new Type[] + { + typeof(int) + }; + + private static readonly string[] Iso8601Format = new string[] + { + "yyyy-MM-dd\\THH:mm:ss.FFFFFFF\\Z", + "yyyy-MM-dd\\THH:mm:ss\\Z", + "yyyy-MM-dd\\THH:mm:ssK" + }; + + public PocoJsonSerializerStrategy() + { + this.ConstructorCache = new ReflectionsUtils.ThreadSafeDictionary(new ReflectionsUtils.ThreadSafeDictionaryValueFactory(this.ContructorDelegateFactory)); + this.GetCache = new ReflectionsUtils.ThreadSafeDictionary>(new ReflectionsUtils.ThreadSafeDictionaryValueFactory>(this.GetterValueFactory)); + this.SetCache = new ReflectionsUtils.ThreadSafeDictionary>>(new ReflectionsUtils.ThreadSafeDictionaryValueFactory>>(this.SetterValueFactory)); + } + + protected virtual string MapClrMemberNameToJsonFieldName(string clrPropertyName) + { + return clrPropertyName; + } + + internal virtual ReflectionsUtils.ConstructorDelegate ContructorDelegateFactory(Type key) + { + return ReflectionsUtils.GetContructor(key, (!key.IsArray) ? PocoJsonSerializerStrategy.EmptyTypes : PocoJsonSerializerStrategy.ArrayConstructorParameterTypes); + } + + internal virtual IDictionary GetterValueFactory(Type type) + { + IDictionary dictionary = new Dictionary(); + foreach (PropertyInfo current in ReflectionsUtils.GetProperties(type)) + { + if (current.CanRead) + { + MethodInfo getterMethodInfo = ReflectionsUtils.GetGetterMethodInfo(current); + if (!getterMethodInfo.IsStatic && getterMethodInfo.IsPublic) + { + dictionary[this.MapClrMemberNameToJsonFieldName(current.Name)] = ReflectionsUtils.GetGetMethod(current); + } + } + } + foreach (FieldInfo current2 in ReflectionsUtils.GetFields(type)) + { + if (!current2.IsStatic && current2.IsPublic) + { + dictionary[this.MapClrMemberNameToJsonFieldName(current2.Name)] = ReflectionsUtils.GetGetMethod(current2); + } + } + return dictionary; + } + + internal virtual IDictionary> SetterValueFactory(Type type) + { + IDictionary> dictionary = new Dictionary>(); + foreach (PropertyInfo current in ReflectionsUtils.GetProperties(type)) + { + if (current.CanWrite) + { + MethodInfo setterMethodInfo = ReflectionsUtils.GetSetterMethodInfo(current); + if (!setterMethodInfo.IsStatic && setterMethodInfo.IsPublic) + { + dictionary[this.MapClrMemberNameToJsonFieldName(current.Name)] = new KeyValuePair(current.PropertyType, ReflectionsUtils.GetSetMethod(current)); + } + } + } + foreach (FieldInfo current2 in ReflectionsUtils.GetFields(type)) + { + if (!current2.IsInitOnly && !current2.IsStatic && current2.IsPublic) + { + dictionary[this.MapClrMemberNameToJsonFieldName(current2.Name)] = new KeyValuePair(current2.FieldType, ReflectionsUtils.GetSetMethod(current2)); + } + } + return dictionary; + } + + public virtual bool TrySerializeNonPrimitiveObject(object input, out object output) + { + return this.TrySerializeKnownTypes(input, out output) || this.TrySerializeUnknownTypes(input, out output); + } + + public virtual object DeserializeObject(object value, Type type) + { + if (type == null) + { + throw new ArgumentNullException("type"); + } + string text = value as string; + object result; + if (type == typeof(Guid) && string.IsNullOrEmpty(text)) + { + result = default(Guid); + } + else if (value == null) + { + result = null; + } + else + { + object obj = null; + if (text != null) + { + if (text.Length != 0) + { + if (type == typeof(DateTime) || (ReflectionsUtils.IsNullableType(type) && Nullable.GetUnderlyingType(type) == typeof(DateTime))) + { + result = DateTime.ParseExact(text, PocoJsonSerializerStrategy.Iso8601Format, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal); + return result; + } + if (type == typeof(DateTimeOffset) || (ReflectionsUtils.IsNullableType(type) && Nullable.GetUnderlyingType(type) == typeof(DateTimeOffset))) + { + result = DateTimeOffset.ParseExact(text, PocoJsonSerializerStrategy.Iso8601Format, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal); + return result; + } + if (type == typeof(Guid) || (ReflectionsUtils.IsNullableType(type) && Nullable.GetUnderlyingType(type) == typeof(Guid))) + { + result = new Guid(text); + return result; + } + result = text; + return result; + } + else + { + if (type == typeof(Guid)) + { + obj = default(Guid); + } + else if (ReflectionsUtils.IsNullableType(type) && Nullable.GetUnderlyingType(type) == typeof(Guid)) + { + obj = null; + } + else + { + obj = text; + } + if (!ReflectionsUtils.IsNullableType(type) && Nullable.GetUnderlyingType(type) == typeof(Guid)) + { + result = text; + return result; + } + } + } + else if (value is bool) + { + result = value; + return result; + } + bool flag = value is long; + bool flag2 = value is double; + if ((flag && type == typeof(long)) || (flag2 && type == typeof(double))) + { + result = value; + } + else if ((flag2 && type != typeof(double)) || (flag && type != typeof(long))) + { + obj = ((!typeof(IConvertible).IsAssignableFrom(type)) ? value : Convert.ChangeType(value, type, CultureInfo.InvariantCulture)); + if (ReflectionsUtils.IsNullableType(type)) + { + result = ReflectionsUtils.ToNullableType(obj, type); + } + else + { + result = obj; + } + } + else + { + IDictionary dictionary = value as IDictionary; + if (dictionary != null) + { + IDictionary dictionary2 = dictionary; + if (ReflectionsUtils.IsTypeDictionary(type)) + { + Type[] genericTypeArguments = ReflectionsUtils.GetGenericTypeArguments(type); + Type type2 = genericTypeArguments[0]; + Type type3 = genericTypeArguments[1]; + Type key = typeof(Dictionary<, >).MakeGenericType(new Type[] + { + type2, + type3 + }); + IDictionary dictionary3 = (IDictionary)this.ConstructorCache[key](null); + foreach (KeyValuePair current in dictionary2) + { + dictionary3.Add(current.Key, this.DeserializeObject(current.Value, type3)); + } + obj = dictionary3; + } + else if (type == typeof(object)) + { + obj = value; + } + else + { + obj = this.ConstructorCache[type](null); + foreach (KeyValuePair> current2 in this.SetCache[type]) + { + object value2; + if (dictionary2.TryGetValue(current2.Key, out value2)) + { + value2 = this.DeserializeObject(value2, current2.Value.Key); + current2.Value.Value(obj, value2); + } + } + } + } + else + { + IList list = value as IList; + if (list != null) + { + IList list2 = list; + IList list3 = null; + if (type.IsArray) + { + list3 = (IList)this.ConstructorCache[type](new object[] + { + list2.Count + }); + int num = 0; + foreach (object current3 in list2) + { + list3[num++] = this.DeserializeObject(current3, type.GetElementType()); + } + } + else if (ReflectionsUtils.IsTypeGenericeCollectionInterface(type) || ReflectionsUtils.IsAssignableFrom(typeof(IList), type)) + { + Type type4 = ReflectionsUtils.GetGenericTypeArguments(type)[0]; + Type key2 = typeof(List<>).MakeGenericType(new Type[] + { + type4 + }); + list3 = (IList)this.ConstructorCache[key2](new object[] + { + list2.Count + }); + foreach (object current4 in list2) + { + list3.Add(this.DeserializeObject(current4, type4)); + } + } + obj = list3; + } + } + result = obj; + } + } + return result; + } + + protected virtual object SerializeEnum(Enum p) + { + return Convert.ToString(p, CultureInfo.InvariantCulture); + } + + protected virtual bool TrySerializeKnownTypes(object input, out object output) + { + bool result = true; + if (input is DateTime) + { + output = ((DateTime)input).ToUniversalTime().ToString(PocoJsonSerializerStrategy.Iso8601Format[0], CultureInfo.InvariantCulture); + } + else if (input is DateTimeOffset) + { + output = ((DateTimeOffset)input).ToUniversalTime().ToString(PocoJsonSerializerStrategy.Iso8601Format[0], CultureInfo.InvariantCulture); + } + else if (input is Guid) + { + output = ((Guid)input).ToString("D"); + } + else if (input is Uri) + { + output = input.ToString(); + } + else + { + Enum @enum = input as Enum; + if (@enum != null) + { + output = this.SerializeEnum(@enum); + } + else + { + result = false; + output = null; + } + } + return result; + } + + protected virtual bool TrySerializeUnknownTypes(object input, out object output) + { + if (input == null) + { + throw new ArgumentNullException("input"); + } + output = null; + Type type = input.GetType(); + bool result; + if (type.FullName == null) + { + result = false; + } + else + { + IDictionary dictionary = new JsonObject(); + IDictionary dictionary2 = this.GetCache[type]; + foreach (KeyValuePair current in dictionary2) + { + if (current.Value != null) + { + dictionary.Add(this.MapClrMemberNameToJsonFieldName(current.Key), current.Value(input)); + } + } + output = dictionary; + result = true; + } + return result; + } + } +} diff --git a/Assets/Script/Core/Utils/SimpleJson/PocoJsonSerializerStrategy.cs.meta b/Assets/Script/Core/Utils/SimpleJson/PocoJsonSerializerStrategy.cs.meta new file mode 100644 index 00000000..2110ce1b --- /dev/null +++ b/Assets/Script/Core/Utils/SimpleJson/PocoJsonSerializerStrategy.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 436a98130e3164348b76191e30e40706 +timeCreated: 1496386938 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/SimpleJson/SimpleJson.Reflection.meta b/Assets/Script/Core/Utils/SimpleJson/SimpleJson.Reflection.meta new file mode 100644 index 00000000..83a65fc6 --- /dev/null +++ b/Assets/Script/Core/Utils/SimpleJson/SimpleJson.Reflection.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 12212fd07056cbd4a91fecf023ab97ab +folderAsset: yes +timeCreated: 1496386937 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/SimpleJson/SimpleJson.Reflection/ReflectionUtils.cs b/Assets/Script/Core/Utils/SimpleJson/SimpleJson.Reflection/ReflectionUtils.cs new file mode 100644 index 00000000..4a022216 --- /dev/null +++ b/Assets/Script/Core/Utils/SimpleJson/SimpleJson.Reflection/ReflectionUtils.cs @@ -0,0 +1,404 @@ +using System; +using System.CodeDom.Compiler; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Reflection; +using UnityEngine; + +namespace HDJ.Framework.Tools +{ + [GeneratedCode("reflection-utils", "1.0.0")] + internal class ReflectionsUtils + { + public delegate object GetDelegate(object source); + + public delegate void SetDelegate(object source, object value); + + public delegate object ConstructorDelegate(params object[] args); + + public delegate TValue ThreadSafeDictionaryValueFactory(TKey key); + + public sealed class ThreadSafeDictionary : IDictionary, ICollection>, IEnumerable>, IEnumerable + { + private readonly object _lock = new object(); + + private readonly ReflectionsUtils.ThreadSafeDictionaryValueFactory _valueFactory; + + private Dictionary _dictionary; + + public ICollection Keys + { + get + { + return this._dictionary.Keys; + } + } + + public ICollection Values + { + get + { + return this._dictionary.Values; + } + } + + public TValue this[TKey key] + { + get + { + return this.Get(key); + } + set + { + throw new NotImplementedException(); + } + } + + public int Count + { + get + { + return this._dictionary.Count; + } + } + + public bool IsReadOnly + { + get + { + throw new NotImplementedException(); + } + } + + public ThreadSafeDictionary(ReflectionsUtils.ThreadSafeDictionaryValueFactory valueFactory) + { + this._valueFactory = valueFactory; + } + + private TValue Get(TKey key) + { + TValue result; + TValue tValue; + if (this._dictionary == null) + { + result = this.AddValue(key); + } + else if (!this._dictionary.TryGetValue(key, out tValue)) + { + result = this.AddValue(key); + } + else + { + result = tValue; + } + return result; + } + + private TValue AddValue(TKey key) + { + TValue tValue = this._valueFactory(key); + object @lock = this._lock; + TValue result; + lock (@lock) + { + if (this._dictionary == null) + { + this._dictionary = new Dictionary(); + this._dictionary[key] = tValue; + } + else + { + TValue tValue2; + if (this._dictionary.TryGetValue(key, out tValue2)) + { + result = tValue2; + return result; + } + Dictionary dictionary = new Dictionary(this._dictionary); + dictionary[key] = tValue; + this._dictionary = dictionary; + } + } + result = tValue; + return result; + } + + public void Add(TKey key, TValue value) + { + throw new NotImplementedException(); + } + + public bool ContainsKey(TKey key) + { + return this._dictionary.ContainsKey(key); + } + + public bool Remove(TKey key) + { + throw new NotImplementedException(); + } + + public bool TryGetValue(TKey key, out TValue value) + { + value = this[key]; + return true; + } + + public void Add(KeyValuePair item) + { + throw new NotImplementedException(); + } + + public void Clear() + { + throw new NotImplementedException(); + } + + public bool Contains(KeyValuePair item) + { + throw new NotImplementedException(); + } + + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + throw new NotImplementedException(); + } + + public bool Remove(KeyValuePair item) + { + throw new NotImplementedException(); + } + + public IEnumerator> GetEnumerator() + { + return this._dictionary.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return this._dictionary.GetEnumerator(); + } + } + + private static readonly object[] EmptyObjects = new object[0]; + + public static Attribute GetAttribute(MemberInfo info, Type type) + { + Attribute result; + if (info == null || type == null || !Attribute.IsDefined(info, type)) + { + result = null; + } + else + { + result = Attribute.GetCustomAttribute(info, type); + } + return result; + } + + public static Attribute GetAttribute(Type objectType, Type attributeType) + { + Attribute result; + if (objectType == null || attributeType == null || !Attribute.IsDefined(objectType, attributeType)) + { + result = null; + } + else + { + result = Attribute.GetCustomAttribute(objectType, attributeType); + } + return result; + } + + public static Type[] GetGenericTypeArguments(Type type) + { + return type.GetGenericArguments(); + } + + public static bool IsTypeGenericeCollectionInterface(Type type) + { + bool result; + if (!type.IsGenericType) + { + result = false; + } + else + { + Type genericTypeDefinition = type.GetGenericTypeDefinition(); + result = (genericTypeDefinition == typeof(IList<>) || genericTypeDefinition == typeof(ICollection<>) || genericTypeDefinition == typeof(IEnumerable<>)); + } + return result; + } + + public static bool IsAssignableFrom(Type type1, Type type2) + { + return type1.IsAssignableFrom(type2); + } + + public static bool IsTypeDictionary(Type type) + { + bool result; + if (typeof(IDictionary).IsAssignableFrom(type)) + { + result = true; + } + else if (!type.IsGenericType) + { + result = false; + } + else + { + Type genericTypeDefinition = type.GetGenericTypeDefinition(); + result = (genericTypeDefinition == typeof(IDictionary<, >)); + } + return result; + } + + public static bool IsNullableType(Type type) + { + return type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>); + } + + public static object ToNullableType(object obj, Type nullableType) + { + return (obj != null) ? Convert.ChangeType(obj, Nullable.GetUnderlyingType(nullableType), CultureInfo.InvariantCulture) : null; + } + + public static bool IsValueType(Type type) + { + return type.IsValueType; + } + + public static IEnumerable GetConstructors(Type type) + { + return type.GetConstructors(); + } + + public static ConstructorInfo GetConstructorInfo(Type type, params Type[] argsType) + { + IEnumerable constructors = ReflectionsUtils.GetConstructors(type); + ConstructorInfo result; + foreach (ConstructorInfo current in constructors) + { + ParameterInfo[] parameters = current.GetParameters(); + if (argsType.Length == parameters.Length) + { + int num = 0; + bool flag = true; + ParameterInfo[] parameters2 = current.GetParameters(); + for (int i = 0; i < parameters2.Length; i++) + { + ParameterInfo parameterInfo = parameters2[i]; + if (parameterInfo.ParameterType != argsType[num]) + { + flag = false; + break; + } + } + if (flag) + { + result = current; + return result; + } + } + } + result = null; + return result; + } + + public static IEnumerable GetProperties(Type type) + { + return type.GetProperties(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); + } + + public static IEnumerable GetFields(Type type) + { + return type.GetFields(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); + } + + public static MethodInfo GetGetterMethodInfo(PropertyInfo propertyInfo) + { + return propertyInfo.GetGetMethod(true); + } + + public static MethodInfo GetSetterMethodInfo(PropertyInfo propertyInfo) + { + return propertyInfo.GetSetMethod(true); + } + + public static ReflectionsUtils.ConstructorDelegate GetContructor(ConstructorInfo constructorInfo) + { + return ReflectionsUtils.GetConstructorByReflection(constructorInfo); + } + + public static ReflectionsUtils.ConstructorDelegate GetContructor(Type type, params Type[] argsType) + { + return ReflectionsUtils.GetConstructorByReflection(type, argsType); + } + + public static ReflectionsUtils.ConstructorDelegate GetConstructorByReflection(ConstructorInfo constructorInfo) + { + return (object[] args) => constructorInfo.Invoke(args); + } + + public static ReflectionsUtils.ConstructorDelegate GetConstructorByReflection(Type type, params Type[] argsType) + { + ConstructorInfo constructorInfo = ReflectionsUtils.GetConstructorInfo(type, argsType); + return (constructorInfo != null) ? ReflectionsUtils.GetConstructorByReflection(constructorInfo) : null; + } + + public static ReflectionsUtils.GetDelegate GetGetMethod(PropertyInfo propertyInfo) + { + return ReflectionsUtils.GetGetMethodByReflection(propertyInfo); + } + + public static ReflectionsUtils.GetDelegate GetGetMethod(FieldInfo fieldInfo) + { + return ReflectionsUtils.GetGetMethodByReflection(fieldInfo); + } + + public static ReflectionsUtils.GetDelegate GetGetMethodByReflection(PropertyInfo propertyInfo) + { + MethodInfo methodInfo = ReflectionsUtils.GetGetterMethodInfo(propertyInfo); + //Debug.Log("propertyInfo :" + propertyInfo.Name); + //Debug.Log("methodInfo :"+ methodInfo.Name); + return (object source) => methodInfo.Invoke(source, ReflectionsUtils.EmptyObjects); + } + + public static ReflectionsUtils.GetDelegate GetGetMethodByReflection(FieldInfo fieldInfo) + { + return (object source) => fieldInfo.GetValue(source); + } + + public static ReflectionsUtils.SetDelegate GetSetMethod(PropertyInfo propertyInfo) + { + return ReflectionsUtils.GetSetMethodByReflection(propertyInfo); + } + + public static ReflectionsUtils.SetDelegate GetSetMethod(FieldInfo fieldInfo) + { + return ReflectionsUtils.GetSetMethodByReflection(fieldInfo); + } + + public static ReflectionsUtils.SetDelegate GetSetMethodByReflection(PropertyInfo propertyInfo) + { + MethodInfo methodInfo = ReflectionsUtils.GetSetterMethodInfo(propertyInfo); + return delegate(object source, object value) + { + methodInfo.Invoke(source, new object[] + { + value + }); + }; + } + + public static ReflectionsUtils.SetDelegate GetSetMethodByReflection(FieldInfo fieldInfo) + { + return delegate(object source, object value) + { + fieldInfo.SetValue(source, value); + }; + } + } +} diff --git a/Assets/Script/Core/Utils/SimpleJson/SimpleJson.Reflection/ReflectionUtils.cs.meta b/Assets/Script/Core/Utils/SimpleJson/SimpleJson.Reflection/ReflectionUtils.cs.meta new file mode 100644 index 00000000..debaca67 --- /dev/null +++ b/Assets/Script/Core/Utils/SimpleJson/SimpleJson.Reflection/ReflectionUtils.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 58f79ec94897a1d4fa77522cf54cca32 +timeCreated: 1496386938 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/SimpleJson/SimpleJson.cs b/Assets/Script/Core/Utils/SimpleJson/SimpleJson.cs new file mode 100644 index 00000000..94af3de7 --- /dev/null +++ b/Assets/Script/Core/Utils/SimpleJson/SimpleJson.cs @@ -0,0 +1,875 @@ +using System; +using System.CodeDom.Compiler; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Globalization; +using System.Runtime.Serialization; +using System.Text; + +namespace HDJ.Framework.Tools +{ + [GeneratedCode("simple-json", "1.0.0")] + public static class SimpleJsonTool + { + private const int TOKEN_NONE = 0; + + private const int TOKEN_CURLY_OPEN = 1; + + private const int TOKEN_CURLY_CLOSE = 2; + + private const int TOKEN_SQUARED_OPEN = 3; + + private const int TOKEN_SQUARED_CLOSE = 4; + + private const int TOKEN_COLON = 5; + + private const int TOKEN_COMMA = 6; + + private const int TOKEN_STRING = 7; + + private const int TOKEN_NUMBER = 8; + + private const int TOKEN_TRUE = 9; + + private const int TOKEN_FALSE = 10; + + private const int TOKEN_NULL = 11; + + private const int BUILDER_CAPACITY = 2000; + + private static IJsonSerializerStrategy _currentJsonSerializerStrategy; + + private static PocoJsonSerializerStrategy _pocoJsonSerializerStrategy; + + public static IJsonSerializerStrategy CurrentJsonSerializerStrategy + { + get + { + IJsonSerializerStrategy arg_18_0; + if ((arg_18_0 = SimpleJsonTool._currentJsonSerializerStrategy) == null) + { + arg_18_0 = (SimpleJsonTool._currentJsonSerializerStrategy = SimpleJsonTool.PocoJsonSerializerStrategy); + } + return arg_18_0; + } + set + { + SimpleJsonTool._currentJsonSerializerStrategy = value; + } + } + + [EditorBrowsable(EditorBrowsableState.Advanced)] + public static PocoJsonSerializerStrategy PocoJsonSerializerStrategy + { + get + { + PocoJsonSerializerStrategy arg_18_0; + if ((arg_18_0 = SimpleJsonTool._pocoJsonSerializerStrategy) == null) + { + arg_18_0 = (SimpleJsonTool._pocoJsonSerializerStrategy = new PocoJsonSerializerStrategy()); + } + return arg_18_0; + } + } + + public static object DeserializeObject(string json) + { + object result; + if (SimpleJsonTool.TryDeserializeObject(json, out result)) + { + return result; + } + throw new SerializationException("Invalid JSON string"); + } + + public static bool TryDeserializeObject(string json, out object obj) + { + bool result = true; + if (json != null) + { + char[] json2 = json.ToCharArray(); + int num = 0; + obj = SimpleJsonTool.ParseValue(json2, ref num, ref result); + } + else + { + obj = null; + } + return result; + } + + public static object DeserializeObject(string json, Type type, IJsonSerializerStrategy jsonSerializerStrategy) + { + object obj = SimpleJsonTool.DeserializeObject(json); + return (type != null && (obj == null || !ReflectionsUtils.IsAssignableFrom(obj.GetType(), type))) ? (jsonSerializerStrategy ?? SimpleJsonTool.CurrentJsonSerializerStrategy).DeserializeObject(obj, type) : obj; + } + + public static object DeserializeObject(string json, Type type) + { + return SimpleJsonTool.DeserializeObject(json, type, null); + } + + public static T DeserializeObject(string json, IJsonSerializerStrategy jsonSerializerStrategy) + { + return (T)((object)SimpleJsonTool.DeserializeObject(json, typeof(T), jsonSerializerStrategy)); + } + + public static T DeserializeObject(string json) + { + return (T)((object)SimpleJsonTool.DeserializeObject(json, typeof(T), null)); + } + + public static string SerializeObject(object json, IJsonSerializerStrategy jsonSerializerStrategy) + { + StringBuilder stringBuilder = GetStringBuilder(); + bool flag = SimpleJsonTool.SerializeValue(jsonSerializerStrategy, json, stringBuilder); + + string res= (!flag) ? null : stringBuilder.ToString(); + RecycleStringBuilder(stringBuilder); + return res; + } + + public static string SerializeObject(object json) + { + return SimpleJsonTool.SerializeObject(json, SimpleJsonTool.CurrentJsonSerializerStrategy); + } + + public static string EscapeToJavascriptString(string jsonString) + { + string result; + if (string.IsNullOrEmpty(jsonString)) + { + result = jsonString; + } + else + { + StringBuilder stringBuilder = GetStringBuilder(); + int i = 0; + while (i < jsonString.Length) + { + char c = jsonString[i++]; + if (c == '\\') + { + int num = jsonString.Length - i; + if (num >= 2) + { + char c2 = jsonString[i]; + if (c2 == '\\') + { + stringBuilder.Append('\\'); + i++; + } + else if (c2 == '"') + { + stringBuilder.Append("\""); + i++; + } + else if (c2 == 't') + { + stringBuilder.Append('\t'); + i++; + } + else if (c2 == 'b') + { + stringBuilder.Append('\b'); + i++; + } + else if (c2 == 'n') + { + stringBuilder.Append('\n'); + i++; + } + else if (c2 == 'r') + { + stringBuilder.Append('\r'); + i++; + } + } + } + else + { + stringBuilder.Append(c); + } + } + result = stringBuilder.ToString(); + + RecycleStringBuilder(stringBuilder); + } + return result; + } + + private static IDictionary ParseObject(char[] json, ref int index, ref bool success) + { + IDictionary dictionary = new JsonObject(); + SimpleJsonTool.NextToken(json, ref index); + bool flag = false; + IDictionary result; + while (!flag) + { + int num = SimpleJsonTool.LookAhead(json, index); + if (num != 0) + { + if (num == 6) + { + SimpleJsonTool.NextToken(json, ref index); + } + else + { + if (num == 2) + { + SimpleJsonTool.NextToken(json, ref index); + result = dictionary; + return result; + } + string key = SimpleJsonTool.ParseString(json, ref index, ref success); + if (!success) + { + success = false; + result = null; + return result; + } + num = SimpleJsonTool.NextToken(json, ref index); + if (num != 5) + { + success = false; + result = null; + return result; + } + object value = SimpleJsonTool.ParseValue(json, ref index, ref success); + if (!success) + { + success = false; + result = null; + return result; + } + dictionary[key] = value; + } + continue; + } + success = false; + result = null; + return result; + } + result = dictionary; + return result; + } + + private static JsonArray ParseArray(char[] json, ref int index, ref bool success) + { + JsonArray jsonArray = new JsonArray(); + SimpleJsonTool.NextToken(json, ref index); + bool flag = false; + JsonArray result; + while (!flag) + { + int num = SimpleJsonTool.LookAhead(json, index); + if (num != 0) + { + if (num == 6) + { + SimpleJsonTool.NextToken(json, ref index); + } + else + { + if (num == 4) + { + SimpleJsonTool.NextToken(json, ref index); + break; + } + object item = SimpleJsonTool.ParseValue(json, ref index, ref success); + if (!success) + { + result = null; + return result; + } + jsonArray.Add(item); + } + continue; + } + success = false; + result = null; + return result; + } + result = jsonArray; + return result; + } + + private static object ParseValue(char[] json, ref int index, ref bool success) + { + object result; + switch (SimpleJsonTool.LookAhead(json, index)) + { + case 1: + result = SimpleJsonTool.ParseObject(json, ref index, ref success); + return result; + case 3: + result = SimpleJsonTool.ParseArray(json, ref index, ref success); + return result; + case 7: + result = SimpleJsonTool.ParseString(json, ref index, ref success); + return result; + case 8: + result = SimpleJsonTool.ParseNumber(json, ref index, ref success); + return result; + case 9: + SimpleJsonTool.NextToken(json, ref index); + result = true; + return result; + case 10: + SimpleJsonTool.NextToken(json, ref index); + result = false; + return result; + case 11: + SimpleJsonTool.NextToken(json, ref index); + result = null; + return result; + } + success = false; + result = null; + return result; + } + private static string ParseString(char[] json, ref int index, ref bool success) + { + StringBuilder stringBuilder = GetStringBuilder(); //new StringBuilder(2000); + + SimpleJsonTool.EatWhitespace(json, ref index); + char c = json[index++]; + bool flag = false; + string result; + while (!flag) + { + if (index == json.Length) + { + break; + } + c = json[index++]; + if (c == '"') + { + flag = true; + break; + } + if (c == '\\') + { + if (index == json.Length) + { + break; + } + c = json[index++]; + if (c == '"') + { + stringBuilder.Append('"'); + } + else if (c == '\\') + { + stringBuilder.Append('\\'); + } + else if (c == '/') + { + stringBuilder.Append('/'); + } + else if (c == 'b') + { + stringBuilder.Append('\b'); + } + else if (c == 'f') + { + stringBuilder.Append('\f'); + } + else if (c == 'n') + { + stringBuilder.Append('\n'); + } + else if (c == 'r') + { + stringBuilder.Append('\r'); + } + else if (c == 't') + { + stringBuilder.Append('\t'); + } + else if (c == 'u') + { + int num = json.Length - index; + if (num >= 4) + { + uint num2; + if (!(success = uint.TryParse(new string(json, index, 4), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out num2))) + { + result = ""; + } + else + { + if (55296u > num2 || num2 > 56319u) + { + stringBuilder.Append(SimpleJsonTool.ConvertFromUtf32((int)num2)); + index += 4; + continue; + } + index += 4; + num = json.Length - index; + if (num >= 6) + { + uint num3; + if (new string(json, index, 2) == "\\u" && uint.TryParse(new string(json, index + 2, 4), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out num3)) + { + if (56320u <= num3 && num3 <= 57343u) + { + stringBuilder.Append((char)num2); + stringBuilder.Append((char)num3); + index += 6; + continue; + } + } + } + success = false; + result = ""; + } + return result; + } + break; + } + } + else + { + stringBuilder.Append(c); + } + } + if (!flag) + { + success = false; + result = null; + return result; + } + result = stringBuilder.ToString(); + + RecycleStringBuilder(stringBuilder); + + return result; + } + + private static string ConvertFromUtf32(int utf32) + { + if (utf32 < 0 || utf32 > 1114111) + { + throw new ArgumentOutOfRangeException("utf32", "The argument must be from 0 to 0x10FFFF."); + } + if (55296 <= utf32 && utf32 <= 57343) + { + throw new ArgumentOutOfRangeException("utf32", "The argument must not be in surrogate pair range."); + } + string result; + if (utf32 < 65536) + { + result = new string((char)utf32, 1); + } + else + { + utf32 -= 65536; + result = new string(new char[] + { + (char)((utf32 >> 10) + 55296), + (char)(utf32 % 1024 + 56320) + }); + } + return result; + } + + private static object ParseNumber(char[] json, ref int index, ref bool success) + { + SimpleJsonTool.EatWhitespace(json, ref index); + int lastIndexOfNumber = SimpleJsonTool.GetLastIndexOfNumber(json, index); + int length = lastIndexOfNumber - index + 1; + string text = new string(json, index, length); + object result; + if (text.IndexOf(".", StringComparison.OrdinalIgnoreCase) != -1 || text.IndexOf("e", StringComparison.OrdinalIgnoreCase) != -1) + { + double num; + success = double.TryParse(new string(json, index, length), NumberStyles.Any, CultureInfo.InvariantCulture, out num); + result = num; + } + else + { + long num2; + success = long.TryParse(new string(json, index, length), NumberStyles.Any, CultureInfo.InvariantCulture, out num2); + result = num2; + } + index = lastIndexOfNumber + 1; + return result; + } + + private static int GetLastIndexOfNumber(char[] json, int index) + { + int i; + for (i = index; i < json.Length; i++) + { + if ("0123456789+-.eE".IndexOf(json[i]) == -1) + { + break; + } + } + return i - 1; + } + + private static void EatWhitespace(char[] json, ref int index) + { + while (index < json.Length) + { + if (" \t\n\r\b\f".IndexOf(json[index]) == -1) + { + break; + } + index++; + } + } + + private static int LookAhead(char[] json, int index) + { + int num = index; + return SimpleJsonTool.NextToken(json, ref num); + } + + private static int NextToken(char[] json, ref int index) + { + SimpleJsonTool.EatWhitespace(json, ref index); + int result; + if (index != json.Length) + { + char c = json[index]; + index++; + switch (c) + { + case ',': + result = 6; + return result; + case '-': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + result = 8; + return result; + case '.': + case '/': + IL_69: + switch (c) + { + case '[': + result = 3; + return result; + case '\\': + IL_7E: + switch (c) + { + case '{': + result = 1; + return result; + case '|': + IL_93: + if (c != '"') + { + index--; + int num = json.Length - index; + if (num >= 5) + { + if (json[index] == 'f' && json[index + 1] == 'a' && json[index + 2] == 'l' && json[index + 3] == 's' && json[index + 4] == 'e') + { + index += 5; + result = 10; + return result; + } + } + if (num >= 4) + { + if (json[index] == 't' && json[index + 1] == 'r' && json[index + 2] == 'u' && json[index + 3] == 'e') + { + index += 4; + result = 9; + return result; + } + } + if (num >= 4) + { + if (json[index] == 'n' && json[index + 1] == 'u' && json[index + 2] == 'l' && json[index + 3] == 'l') + { + index += 4; + result = 11; + return result; + } + } + result = 0; + return result; + } + result = 7; + + return result; + + case '}': + result = 2; + return result; + default: + goto IL_93; + } + + + case ']': + result = 4; + return result; + default: + goto IL_7E; + } + + case ':': + result = 5; + return result; + default: + goto IL_69; + } + + } + result = 0; + return result; + } + + private static bool SerializeValue(IJsonSerializerStrategy jsonSerializerStrategy, object value, StringBuilder builder) + { + bool flag = true; + string text = value as string; + if (text != null) + { + flag = SimpleJsonTool.SerializeString(text, builder); + } + else + { + IDictionary dictionary = value as IDictionary; + if (dictionary != null) + { + flag = SimpleJsonTool.SerializeObject(jsonSerializerStrategy, dictionary.Keys, dictionary.Values, builder); + } + else + { + IDictionary dictionary2 = value as IDictionary; + if (dictionary2 != null) + { + flag = SimpleJsonTool.SerializeObject(jsonSerializerStrategy, dictionary2.Keys, dictionary2.Values, builder); + } + else + { + IEnumerable enumerable = value as IEnumerable; + if (enumerable != null) + { + flag = SimpleJsonTool.SerializeArray(jsonSerializerStrategy, enumerable, builder); + } + else if (SimpleJsonTool.IsNumeric(value)) + { + flag = SimpleJsonTool.SerializeNumber(value, builder); + } + else if (value is bool) + { + builder.Append((!(bool)value) ? "false" : "true"); + } + else if (value == null) + { + builder.Append("null"); + } + else + { + object value2; + flag = jsonSerializerStrategy.TrySerializeNonPrimitiveObject(value, out value2); + if (flag) + { + SimpleJsonTool.SerializeValue(jsonSerializerStrategy, value2, builder); + } + } + } + } + } + return flag; + } + + private static bool SerializeObject(IJsonSerializerStrategy jsonSerializerStrategy, IEnumerable keys, IEnumerable values, StringBuilder builder) + { + builder.Append("{"); + IEnumerator enumerator = keys.GetEnumerator(); + IEnumerator enumerator2 = values.GetEnumerator(); + bool flag = true; + bool result; + while (enumerator.MoveNext() && enumerator2.MoveNext()) + { + object current = enumerator.Current; + object current2 = enumerator2.Current; + if (!flag) + { + builder.Append(","); + } + string text = current as string; + if (text != null) + { + SimpleJsonTool.SerializeString(text, builder); + } + else if (!SimpleJsonTool.SerializeValue(jsonSerializerStrategy, current2, builder)) + { + result = false; + return result; + } + builder.Append(":"); + if (SimpleJsonTool.SerializeValue(jsonSerializerStrategy, current2, builder)) + { + flag = false; + continue; + } + result = false; + return result; + } + builder.Append("}"); + result = true; + return result; + } + + private static bool SerializeArray(IJsonSerializerStrategy jsonSerializerStrategy, IEnumerable anArray, StringBuilder builder) + { + builder.Append("["); + bool flag = true; + IEnumerator enumerator = anArray.GetEnumerator(); + bool result; + try + { + while (enumerator.MoveNext()) + { + object current = enumerator.Current; + if (!flag) + { + builder.Append(","); + } + if (!SimpleJsonTool.SerializeValue(jsonSerializerStrategy, current, builder)) + { + result = false; + return result; + } + flag = false; + } + } + finally + { + IDisposable disposable; + if ((disposable = (enumerator as IDisposable)) != null) + { + disposable.Dispose(); + } + } + builder.Append("]"); + result = true; + return result; + } + + private static bool SerializeString(string aString, StringBuilder builder) + { + builder.Append("\""); + char[] array = aString.ToCharArray(); + for (int i = 0; i < array.Length; i++) + { + char c = array[i]; + if (c == '"') + { + builder.Append("\\\""); + } + else if (c == '\\') + { + builder.Append("\\\\"); + } + else if (c == '\b') + { + builder.Append("\\b"); + } + else if (c == '\f') + { + builder.Append("\\f"); + } + else if (c == '\n') + { + builder.Append("\\n"); + } + else if (c == '\r') + { + builder.Append("\\r"); + } + else if (c == '\t') + { + builder.Append("\\t"); + } + else + { + builder.Append(c); + } + } + builder.Append("\""); + return true; + } + + private static bool SerializeNumber(object number, StringBuilder builder) + { + if (number is long) + { + builder.Append(((long)number).ToString(CultureInfo.InvariantCulture)); + } + else if (number is ulong) + { + builder.Append(((ulong)number).ToString(CultureInfo.InvariantCulture)); + } + else if (number is int) + { + builder.Append(((int)number).ToString(CultureInfo.InvariantCulture)); + } + else if (number is uint) + { + builder.Append(((uint)number).ToString(CultureInfo.InvariantCulture)); + } + else if (number is decimal) + { + builder.Append(((decimal)number).ToString(CultureInfo.InvariantCulture)); + } + else if (number is float) + { + builder.Append(((float)number).ToString(CultureInfo.InvariantCulture)); + } + else + { + builder.Append(Convert.ToDouble(number, CultureInfo.InvariantCulture).ToString("r", CultureInfo.InvariantCulture)); + } + return true; + } + + private static bool IsNumeric(object value) + { + return value is sbyte || value is byte || value is short || value is ushort || value is int || value is uint || value is long || value is ulong || value is float || value is double || value is decimal; + } + + private static Queue stringBuilders = new Queue(); + + private static StringBuilder GetStringBuilder() + { + StringBuilder builder = null; + if (stringBuilders.Count <= 0) + builder=new StringBuilder(2000); + else + { + builder = stringBuilders.Dequeue(); + if (builder.Length > 0) + builder.Remove(0, builder.Length); + } + + return builder; + } + private static void RecycleStringBuilder(StringBuilder builder) + { + stringBuilders.Enqueue(builder); + } + + } +} diff --git a/Assets/Script/Core/Utils/SimpleJson/SimpleJson.cs.meta b/Assets/Script/Core/Utils/SimpleJson/SimpleJson.cs.meta new file mode 100644 index 00000000..deb2829a --- /dev/null +++ b/Assets/Script/Core/Utils/SimpleJson/SimpleJson.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8719e35bb1ecf674d8b82aaef9d8dc19 +timeCreated: 1496386938 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/SimpleJson/SimpleJson.meta b/Assets/Script/Core/Utils/SimpleJson/SimpleJson.meta new file mode 100644 index 00000000..2bdd7a6b --- /dev/null +++ b/Assets/Script/Core/Utils/SimpleJson/SimpleJson.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ef20dd7f2330a5046b6a39089646d00e +folderAsset: yes +timeCreated: 1496386937 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: From 5feca9f709453bdc182fe61709a5acb6db29c50f Mon Sep 17 00:00:00 2001 From: GaoKai Date: Wed, 29 Aug 2018 09:40:12 +0800 Subject: [PATCH 075/108] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=BC=BA=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Resources/Data/GuideData.txt | 2 +- Assets/Resources/Data/testData.txt | 14 +- ...\345\267\245\344\275\234\350\241\250.xlsx" | Bin 6610 -> 0 bytes ...267\245\344\275\234\350\241\250.xlsx.meta" | 9 - .../Core/Editor/Data/DataEditorWindow.cs | 21 +- .../Editor/Utils/EditorExtendAttributes.cs | 29 +++ .../Utils/EditorExtendAttributes.cs.meta | 13 + Assets/Script/Core/Utils/FileUtils.cs | 223 ++++++++++++++++++ Assets/Script/Core/Utils/FileUtils.cs.meta | 13 + Assets/Script/Core/Utils/MD5Utils.cs | 74 ++++++ Assets/Script/Core/Utils/MD5Utils.cs.meta | 13 + 11 files changed, 391 insertions(+), 20 deletions(-) delete mode 100644 "Assets/Resources/Data/\346\226\260\345\273\272 Microsoft Excel \345\267\245\344\275\234\350\241\250.xlsx" delete mode 100644 "Assets/Resources/Data/\346\226\260\345\273\272 Microsoft Excel \345\267\245\344\275\234\350\241\250.xlsx.meta" create mode 100644 Assets/Script/Core/Editor/Utils/EditorExtendAttributes.cs create mode 100644 Assets/Script/Core/Editor/Utils/EditorExtendAttributes.cs.meta create mode 100644 Assets/Script/Core/Utils/FileUtils.cs create mode 100644 Assets/Script/Core/Utils/FileUtils.cs.meta create mode 100644 Assets/Script/Core/Utils/MD5Utils.cs create mode 100644 Assets/Script/Core/Utils/MD5Utils.cs.meta diff --git a/Assets/Resources/Data/GuideData.txt b/Assets/Resources/Data/GuideData.txt index 8a2b8648..0b08b9e0 100644 --- a/Assets/Resources/Data/GuideData.txt +++ b/Assets/Resources/Data/GuideData.txt @@ -1,7 +1,7 @@ GuideID StartPoint EndPoint Premise NextGuide CallToNext ClickToNext GuideWindowName GuideObjectName GuideItemName TipContent TipContentPos MaskAlpha type Bool Bool String String Bool Bool String StringArray StringArray String Vector3 Float note 引导开始点 引导结束点 前提条件 下一步引导,如果为空,则为下一条记录 是否接收调用去下一步引导 是否接收点击去下一步引导 引导的界面名字 高亮显示的对象名字 高亮的Item名字 提示文本内容 提示文本位置 遮罩Alpha -default FALSE FALSE Null Null FALSE FALSE Null Null Null Null 0|0|0 0.75 +default FALSE FALSE Null Null FALSE FALSE Null Null Null Null 0,0,0 0.75 1 True True GuideWindow Click to continue 2 FALSE TRUE MainWindow Button_Shop Click to Open Shop 3 TRUE ShopWindow Button_Close Click to Close shop diff --git a/Assets/Resources/Data/testData.txt b/Assets/Resources/Data/testData.txt index ff3602ad..a13b30aa 100644 --- a/Assets/Resources/Data/testData.txt +++ b/Assets/Resources/Data/testData.txt @@ -1,12 +1,12 @@ ID name pos age type Vector2 Vector3 Int -default 0|0 333|333.333|0 23232323 +default 0,0 333,333.333,0 23232323 1111 -2 0|0|0 0 -zzzzadadzz 333|333.333|0 -4 333|333.333|0 0 -5 333|333.333|0 0 -6 0|0|0 0 +2 0,0,0 0 +zzzzadadzz 333,333.333,0 +4 333,333.333,0 0 +5 333,333.333,0 0 +6 0,0,0 0 7 8 9 @@ -27,5 +27,5 @@ zzzzadadzz 333|333.333|0 24 25 aaa 0 -asd 0|0|0 0 +asd 0,0,0 0 3333 diff --git "a/Assets/Resources/Data/\346\226\260\345\273\272 Microsoft Excel \345\267\245\344\275\234\350\241\250.xlsx" "b/Assets/Resources/Data/\346\226\260\345\273\272 Microsoft Excel \345\267\245\344\275\234\350\241\250.xlsx" deleted file mode 100644 index d158143b4a7b5fddb85c46d4aaa11699d5de86f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6610 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 heightItemList.Count) + { + selectRowIndexs.RemoveAt(i); + i = i - 1; + } + } + for (int i = 0; i < selectColumnIndexs.Count; i++) + { + if (selectColumnIndexs[i] >= withItemList.Count) + { + selectColumnIndexs.RemoveAt(i); + i = i - 1; + } + } + //selectRowIndexs.Clear(); + //selectColumnIndexs.Clear(); } private List withItemList = new List(); diff --git a/Assets/Script/Core/Editor/Utils/EditorExtendAttributes.cs b/Assets/Script/Core/Editor/Utils/EditorExtendAttributes.cs new file mode 100644 index 00000000..85d6cf72 --- /dev/null +++ b/Assets/Script/Core/Editor/Utils/EditorExtendAttributes.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +/// +/// 不在默认Editor GUI里面显示 +/// +[AttributeUsage(AttributeTargets.Field| AttributeTargets.Property)] +public class NoShowInEditorAttribute : Attribute { } + +/// +/// 在Editor GUI里面显示特别的名字 +/// +[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] +public class ShowGUINameAttribute: Attribute +{ + private string name; + public string Name + { + get + { + return name; + } + } + public ShowGUINameAttribute(string newName) + { + name = newName; + } +} diff --git a/Assets/Script/Core/Editor/Utils/EditorExtendAttributes.cs.meta b/Assets/Script/Core/Editor/Utils/EditorExtendAttributes.cs.meta new file mode 100644 index 00000000..06dfaf2f --- /dev/null +++ b/Assets/Script/Core/Editor/Utils/EditorExtendAttributes.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5b578f3854fa1004ba89b44aa098170a +timeCreated: 1535506615 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/FileUtils.cs b/Assets/Script/Core/Utils/FileUtils.cs new file mode 100644 index 00000000..acce492d --- /dev/null +++ b/Assets/Script/Core/Utils/FileUtils.cs @@ -0,0 +1,223 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Security.Cryptography; +using System.Text; +using UnityEngine; + +namespace HDJ.Framework.Utils +{ + public class FileUtils + { + + /// + /// 复制一个目录下的所有文件到另一个目录 + /// + /// + /// + /// 是否覆盖 + public static void CopyDirectory(string oldDirectory, string newDirectory, bool overwrite = true) + { + string[] pathArray = PathUtils.GetDirectoryFilePath(oldDirectory); + for (int i = 0; i < pathArray.Length; i++) + { + string newPath = pathArray[i].Replace(oldDirectory, newDirectory); + string s = Path.GetDirectoryName(newPath); + if (!Directory.Exists(s)) + { + Directory.CreateDirectory(s); + } + File.Copy(pathArray[i], newPath, overwrite); + } + } + + public static void MoveFile(string oldFilePath, string newFilePath, bool overwrite = true) + { + if (!File.Exists(oldFilePath) || oldFilePath == newFilePath) + return; + string s = Path.GetDirectoryName(newFilePath); + if (!Directory.Exists(s)) + { + Directory.CreateDirectory(s); + } + File.Copy(oldFilePath, newFilePath, overwrite); + DeleteFile(oldFilePath); + } + public static string LoadTextFileByPath(string path) + { + if (!File.Exists(path)) + { + Debug.Log("path dont exists ! : " + path); + return ""; + } + + StreamReader sr = File.OpenText(path); + StringBuilder line = new StringBuilder(); + string tmp = ""; + while ((tmp = sr.ReadLine()) != null) + { + line.Append(tmp); + } + + sr.Close(); + sr.Dispose(); + + return line.ToString(); + + } + public static byte[] LoadByteFileByPath(string path) + { + if (!File.Exists(path)) + { + Debug.Log("path dont exists ! : " + path); + return null; + } + FileStream fs = new FileStream(path, FileMode.Open); + + byte[] array = new byte[fs.Length]; + + fs.Read(array, 0, array.Length); + fs.Close(); + + return array; + } + /// + /// 加载txt 返回每一行数据 + /// + /// + /// + public static string[] LoadTextFileLineByPath(string path) + { + if (!File.Exists(path)) + { + Debug.Log("path dont exists ! : " + path); + return null; + } + + StreamReader sr = File.OpenText(path); + List line = new List(); + string tmp = ""; + while ((tmp = sr.ReadLine()) != null) + { + line.Add(tmp); + } + + sr.Close(); + sr.Dispose(); + + return line.ToArray(); + + } + public static bool DeleteFile(string path) + { + FileInfo t = new FileInfo(path); + try + { + + if (t.Exists) + { + t.Delete(); + } + Debug.Log("File Delete: " + path); + } + catch (Exception e) + { + Debug.LogError("File delete fail: " + path + " ---:" + e); + return false; + } + + return true; + } + /// + /// 保存文件数据 + /// + /// 全路径 + /// 数据 + /// + public static bool CreateTextFile(string path, string _data) + { + + byte[] dataByte = Encoding.GetEncoding("UTF-8").GetBytes(_data); + + return CreateFile(path, dataByte); + } + public static bool CreateFile(string path, byte[] _data) + { + if (string.IsNullOrEmpty(path)) + return false; + string temp = Path.GetDirectoryName(path); + if (!Directory.Exists(temp)) + { + Directory.CreateDirectory(temp); + } + + try + { + if (File.Exists(path)) + { + File.Delete(path); + } + + FileStream stream = new FileStream(path, FileMode.OpenOrCreate); + stream.Write(_data, 0, _data.Length); + stream.Close(); + + Debug.Log("File written: " + path); + } + catch (Exception e) + { + Debug.LogError("File written fail: " + path + " ---:" + e); + return false; + } + + return true; + } + + /// + /// 获取文件MD5 + /// + /// + /// + public static string GetFileMD5(string filePath) + { + try + { + FileInfo fileTmp = new FileInfo(filePath); + if (fileTmp.Exists) + { + FileStream fs = new FileStream(filePath, FileMode.Open); + int len = (int)fs.Length; + byte[] data = new byte[len]; + fs.Close(); + + return MD5Utils.GetMD5(data); + + } + return ""; + } + catch (FileNotFoundException e) + { + Console.WriteLine(e.Message); + return ""; + } + } + + public static IEnumerator LoadTxtFileIEnumerator(string path, CallBack callback) + { + + WWW www = new WWW(path); + yield return www; + + string data = ""; + if (string.IsNullOrEmpty(www.error)) + { + data = www.text; + } + if (callback != null) + callback(data); + yield return new WaitForEndOfFrame(); + + } + } +} diff --git a/Assets/Script/Core/Utils/FileUtils.cs.meta b/Assets/Script/Core/Utils/FileUtils.cs.meta new file mode 100644 index 00000000..2ccb8ab2 --- /dev/null +++ b/Assets/Script/Core/Utils/FileUtils.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: c4d6f39b08ee9564a8fbabfe51a4723e +timeCreated: 1525244974 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/MD5Utils.cs b/Assets/Script/Core/Utils/MD5Utils.cs new file mode 100644 index 00000000..4b814fff --- /dev/null +++ b/Assets/Script/Core/Utils/MD5Utils.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.Serialization; +using System.Runtime.Serialization.Formatters.Binary; +using System.Security.Cryptography; +using System.Text; +using UnityEngine; + +namespace HDJ.Framework.Utils +{ + public static class MD5Utils + { + public static string GetObjectMD5(object obj) + { + if (obj == null) + { + Debug.LogError("obj is Null !"); + return ""; + } + + return GetMD5(Object2Bytes(obj)); + } + public static int GetObjectMD5Hash(object obj) + { + return GetHashMD5(Object2Bytes(obj)); + + } + public static byte[] Object2Bytes(object obj) + { + byte[] buff; + using (MemoryStream ms = new MemoryStream()) + { + IFormatter iFormatter = new BinaryFormatter(); + iFormatter.Serialize(ms, obj); + buff = ms.GetBuffer(); + } + return buff; + } + + public static int GetStringToHash(string content) + { + return GetHashMD5(Encoding.UTF8.GetBytes(content)); + } + + + public static string GetMD5(byte[] data) + { + MD5 md5 = new MD5CryptoServiceProvider(); + byte[] result = md5.ComputeHash(data); + StringBuilder fileMD5 = new StringBuilder(); + foreach (byte b in result) + { + fileMD5.Append( Convert.ToString(b, 16)); + } + + return fileMD5.ToString(); + } + + public static int GetHashMD5(byte[] data) + { + MD5 md5 = new MD5CryptoServiceProvider(); + byte[] result = md5.ComputeHash(data); + int hashCode = 0; + for (int i = 0; i < 4; i++) + { + hashCode += (Convert.ToInt32(result[i]) + Convert.ToInt32(result[i + 1]) + Convert.ToInt32(result[i + 2]) + Convert.ToInt32(result[i])) << i * 8; + } + return hashCode; + } + + } +} diff --git a/Assets/Script/Core/Utils/MD5Utils.cs.meta b/Assets/Script/Core/Utils/MD5Utils.cs.meta new file mode 100644 index 00000000..16bafa2a --- /dev/null +++ b/Assets/Script/Core/Utils/MD5Utils.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: c2fecfc46048eb24b8c6a28d3b9ff6c4 +timeCreated: 1535506457 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 0b831b0f11b5fb8a64c57071d58a8bdcf60073c6 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Tue, 4 Sep 2018 13:58:53 +0800 Subject: [PATCH 076/108] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/Editor/Data/DataEditorWindow.cs | 13 ++- .../Lua/ToLua/PluginsRes/CString.dll.meta | 80 ++++++++++++++++++- .../Lua/ToLua/PluginsRes/Debugger.dll.meta | 80 ++++++++++++++++++- .../Lua/ToLua/PluginsRes/x86/tolua.dll.meta | 79 +++++++++++++++++- .../ToLua/PluginsRes/x86_64/tolua.dll.meta | 79 +++++++++++++++++- 5 files changed, 323 insertions(+), 8 deletions(-) diff --git a/Assets/Script/Core/Editor/Data/DataEditorWindow.cs b/Assets/Script/Core/Editor/Data/DataEditorWindow.cs index 4ad03b99..f2b1aead 100644 --- a/Assets/Script/Core/Editor/Data/DataEditorWindow.cs +++ b/Assets/Script/Core/Editor/Data/DataEditorWindow.cs @@ -12,6 +12,8 @@ public class DataEditorWindow : EditorWindow { + private const string FontPlayerPrefKey = "DataEditorWindow.FontKey"; + UILayerManager m_UILayerManager; static DataEditorWindow win; @@ -44,6 +46,11 @@ void OnEnable() configFileNames.AddRange(PathUtils.GetDirectoryFileNames(m_directoryPath, new string[] { ".txt" }, false, false)); } + private void OnDestroy() + { + PlayerPrefs.SetInt(FontPlayerPrefKey, nowButtonFontSize); + PlayerPrefs.Save(); + } public static void Refresh() { if (win) @@ -430,8 +437,10 @@ private void GridTopFunctionGUI() //字体大小调节 helpBoxStyle.fontSize = helpBoxStyle.font.fontSize; oldButtonFontSize = helpBoxStyle.fontSize; - if (nowButtonFontSize == 0) - nowButtonFontSize = oldButtonFontSize; + if (nowButtonFontSize <= 0) + { + nowButtonFontSize = PlayerPrefs.GetInt(FontPlayerPrefKey, oldButtonFontSize); + } nowButtonFontSize = EditorGUILayout.IntSlider("字体大小", nowButtonFontSize, oldButtonFontSize / 2, MaxButtonFontSize); GUILayout.FlexibleSpace(); diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/CString.dll.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/CString.dll.meta index 9d1cb289..917829fa 100644 --- a/Assets/Script/Core/Lua/ToLua/PluginsRes/CString.dll.meta +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/CString.dll.meta @@ -11,22 +11,98 @@ PluginImporter: isOverridable: 0 platformData: - first: - Any: + '': Any + second: + enabled: 0 + settings: + Exclude Android: 0 + Exclude Editor: 0 + Exclude Linux: 0 + Exclude Linux64: 0 + Exclude LinuxUniversal: 0 + Exclude OSXUniversal: 0 + Exclude Win: 0 + Exclude Win64: 0 + Exclude iOS: 0 + - first: + Android: Android second: enabled: 1 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 settings: {} - first: Editor: Editor second: - enabled: 0 + enabled: 1 settings: + CPU: AnyCPU DefaultValueInitialized: true + OS: AnyOS + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 1 + settings: + CPU: x86 + - first: + Standalone: Linux64 + second: + enabled: 1 + settings: + CPU: x86_64 + - first: + Standalone: LinuxUniversal + second: + enabled: 1 + settings: {} + - first: + Standalone: OSXUniversal + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: Win + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 1 + settings: + CPU: AnyCPU - first: Windows Store Apps: WindowsStoreApps second: enabled: 0 settings: CPU: AnyCPU + - first: + iPhone: iOS + second: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/Debugger.dll.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/Debugger.dll.meta index ae451b94..af1d052c 100644 --- a/Assets/Script/Core/Lua/ToLua/PluginsRes/Debugger.dll.meta +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/Debugger.dll.meta @@ -11,22 +11,98 @@ PluginImporter: isOverridable: 0 platformData: - first: - Any: + '': Any + second: + enabled: 0 + settings: + Exclude Android: 0 + Exclude Editor: 0 + Exclude Linux: 0 + Exclude Linux64: 0 + Exclude LinuxUniversal: 0 + Exclude OSXUniversal: 0 + Exclude Win: 0 + Exclude Win64: 0 + Exclude iOS: 0 + - first: + Android: Android second: enabled: 1 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 settings: {} - first: Editor: Editor second: - enabled: 0 + enabled: 1 settings: + CPU: AnyCPU DefaultValueInitialized: true + OS: AnyOS + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 1 + settings: + CPU: x86 + - first: + Standalone: Linux64 + second: + enabled: 1 + settings: + CPU: x86_64 + - first: + Standalone: LinuxUniversal + second: + enabled: 1 + settings: {} + - first: + Standalone: OSXUniversal + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: Win + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 1 + settings: + CPU: AnyCPU - first: Windows Store Apps: WindowsStoreApps second: enabled: 0 settings: CPU: AnyCPU + - first: + iPhone: iOS + second: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/x86/tolua.dll.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/x86/tolua.dll.meta index 0f657532..708e2ac1 100644 --- a/Assets/Script/Core/Lua/ToLua/PluginsRes/x86/tolua.dll.meta +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/x86/tolua.dll.meta @@ -10,17 +10,94 @@ PluginImporter: isPreloaded: 0 isOverridable: 0 platformData: + - first: + '': Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 - first: Any: second: - enabled: 1 + enabled: 0 settings: {} - first: Editor: Editor second: enabled: 0 settings: + CPU: AnyCPU DefaultValueInitialized: true + OS: AnyOS + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 0 + settings: + CPU: x86 + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: x86_64 + - first: + Standalone: LinuxUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + iPhone: iOS + second: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/x86_64/tolua.dll.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/x86_64/tolua.dll.meta index 44739ec2..a1ec4535 100644 --- a/Assets/Script/Core/Lua/ToLua/PluginsRes/x86_64/tolua.dll.meta +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/x86_64/tolua.dll.meta @@ -10,17 +10,94 @@ PluginImporter: isPreloaded: 0 isOverridable: 0 platformData: + - first: + '': Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 - first: Any: second: - enabled: 1 + enabled: 0 settings: {} - first: Editor: Editor second: enabled: 0 settings: + CPU: AnyCPU DefaultValueInitialized: true + OS: AnyOS + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 0 + settings: + CPU: x86 + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: x86_64 + - first: + Standalone: LinuxUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + iPhone: iOS + second: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: userData: assetBundleName: assetBundleVariant: From 7fd5438d00bffd460d463094cc9a9a96b0564c59 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Tue, 4 Sep 2018 14:16:21 +0800 Subject: [PATCH 077/108] =?UTF-8?q?=E5=85=BC=E5=AE=B9=E6=97=A7=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Script/Core/Editor/Data/DataEditorWindow.cs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/Assets/Script/Core/Editor/Data/DataEditorWindow.cs b/Assets/Script/Core/Editor/Data/DataEditorWindow.cs index f2b1aead..6fd7d5ef 100644 --- a/Assets/Script/Core/Editor/Data/DataEditorWindow.cs +++ b/Assets/Script/Core/Editor/Data/DataEditorWindow.cs @@ -552,7 +552,7 @@ private void DrawGridItem(Vector2 startPos,int heightStartIndex,int heightEndInd { - modifiIndex = new Vector2Int(i - 2, j); + modifiIndex = new TableIndex(i - 2, j); if (i == 0) { TableConfigFieldInfo f = new TableConfigFieldInfo(); @@ -973,7 +973,7 @@ private object DrawTextureGUI(string text, object value) return value; } - private Vector2Int modifiIndex = new Vector2Int(); + private TableIndex modifiIndex = new TableIndex(); /// @@ -1592,4 +1592,16 @@ public class TableConfigFieldInfo } +public struct TableIndex +{ + public TableIndex(int x ,int y) + { + this.x = x; + this.y = y; + } + + public int x; + public int y; +} + From 5dde6fe14db38d8ad997ce9d2c634aa2f01f4b47 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Wed, 10 Oct 2018 14:52:41 +0800 Subject: [PATCH 078/108] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/Application/ApplicationManager.cs | 6 - .../Application/ApplicationStatusManager.cs | 97 ++++- .../Core/Application/IApplicationStatus.cs | 31 +- Assets/Script/Core/Data/DataTable.cs | 27 +- .../Core/Editor/Data/DataEditorWindow.cs | 389 ++++++------------ .../Core/Editor/General/FolderTreeView.cs | 246 +++++++++++ .../Editor/General/FolderTreeView.cs.meta | 11 + .../Editor/GuideSystem/GuideSystemEditor.cs | 2 +- .../Language/LanguageDataEditorWindow.cs | 169 ++++++-- .../Script/Core/Editor/UI/ReplaceFont4uGUI.cs | 83 ++++ .../Core/Editor/UI/ReplaceFont4uGUI.cs.meta | 11 + .../Script/Core/Editor/UI/UICreateService.cs | 4 +- .../UI/componment/LanguageComponmentEditor.cs | 3 +- .../Core/Editor/Utils/EditorDrawGUIUtil.cs | 122 ++++++ Assets/Script/Core/Effect/CameraFade.cs | 2 +- .../Core/GuideSystem/GuideSystemBase.cs | 15 +- .../Input/Events/UI/InputUILongPressEvent.cs | 2 - .../InputEventProxy/InputUIEventProxy.cs | 95 ++--- .../Core/Input/Interface/IInputProxyBase.cs | 8 +- Assets/Script/Core/Input/RandomService.cs | 48 ++- .../ReusingScrollRect/ScrollRectInput.cs | 2 +- .../Script/Core/UI/Control/UIAnimManager.cs | 30 +- Assets/Script/Core/UI/Control/UIManager.cs | 46 ++- Assets/Script/Core/UI/Extensions/Gradient.cs | 119 ++++++ .../Core/UI/Extensions/Gradient.cs.meta | 11 + Assets/Script/Core/UI/Model/UIBase.cs | 24 +- Assets/Script/Core/UI/Model/UIWindowBase.cs | 11 + Assets/Script/Core/Utils/CameraFade.cs | 144 +++++++ Assets/Script/Core/Utils/CameraFade.cs.meta | 11 + Assets/Script/Core/Utils/CameraShaker.meta | 8 + .../Script/Core/Utils/CameraShaker/Demo.meta | 8 + .../CameraShaker/Demo/CameraShakeDemo.unity | Bin 0 -> 18636 bytes .../Demo/CameraShakeDemo.unity.meta | 10 + .../CameraShaker/Demo/Sample Scripts.meta | 8 + .../Demo/Sample Scripts/ShakeByDistance.cs | 31 ++ .../Sample Scripts/ShakeByDistance.cs.meta | 12 + .../Demo/Sample Scripts/ShakeOnKeyPress.cs | 14 + .../Sample Scripts/ShakeOnKeyPress.cs.meta | 12 + .../Demo/Sample Scripts/ShakeOnTrigger.cs | 42 ++ .../Sample Scripts/ShakeOnTrigger.cs.meta | 12 + .../Core/Utils/CameraShaker/Demo/ShakeDemo.cs | 141 +++++++ .../Utils/CameraShaker/Demo/ShakeDemo.cs.meta | 14 + .../Script/Core/Utils/CameraShaker/Docs.meta | 8 + .../Docs/EZ Camera Shake Guide & Docs.pdf | Bin 0 -> 191621 bytes .../EZ Camera Shake Guide & Docs.pdf.meta | 8 + .../Core/Utils/CameraShaker/Scripts.meta | 8 + .../Scripts/CameraShakeInstance.cs | 184 +++++++++ .../Scripts/CameraShakeInstance.cs.meta | 14 + .../Scripts/CameraShakePresets.cs | 103 +++++ .../Scripts/CameraShakePresets.cs.meta | 14 + .../CameraShaker/Scripts/CameraShaker.cs | 163 ++++++++ .../CameraShaker/Scripts/CameraShaker.cs.meta | 14 + .../Scripts/CameraShakerManager.cs | 32 ++ .../Scripts/CameraShakerManager.cs.meta | 11 + .../Utils/CameraShaker/Scripts/Utilities.meta | 8 + .../Scripts/Utilities/CameraUtilities.cs | 36 ++ .../Scripts/Utilities/CameraUtilities.cs.meta | 14 + 57 files changed, 2252 insertions(+), 446 deletions(-) create mode 100644 Assets/Script/Core/Editor/General/FolderTreeView.cs create mode 100644 Assets/Script/Core/Editor/General/FolderTreeView.cs.meta create mode 100644 Assets/Script/Core/Editor/UI/ReplaceFont4uGUI.cs create mode 100644 Assets/Script/Core/Editor/UI/ReplaceFont4uGUI.cs.meta create mode 100644 Assets/Script/Core/UI/Extensions/Gradient.cs create mode 100644 Assets/Script/Core/UI/Extensions/Gradient.cs.meta create mode 100644 Assets/Script/Core/Utils/CameraFade.cs create mode 100644 Assets/Script/Core/Utils/CameraFade.cs.meta create mode 100644 Assets/Script/Core/Utils/CameraShaker.meta create mode 100644 Assets/Script/Core/Utils/CameraShaker/Demo.meta create mode 100644 Assets/Script/Core/Utils/CameraShaker/Demo/CameraShakeDemo.unity create mode 100644 Assets/Script/Core/Utils/CameraShaker/Demo/CameraShakeDemo.unity.meta create mode 100644 Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts.meta create mode 100644 Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeByDistance.cs create mode 100644 Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeByDistance.cs.meta create mode 100644 Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeOnKeyPress.cs create mode 100644 Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeOnKeyPress.cs.meta create mode 100644 Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeOnTrigger.cs create mode 100644 Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeOnTrigger.cs.meta create mode 100644 Assets/Script/Core/Utils/CameraShaker/Demo/ShakeDemo.cs create mode 100644 Assets/Script/Core/Utils/CameraShaker/Demo/ShakeDemo.cs.meta create mode 100644 Assets/Script/Core/Utils/CameraShaker/Docs.meta create mode 100644 Assets/Script/Core/Utils/CameraShaker/Docs/EZ Camera Shake Guide & Docs.pdf create mode 100644 Assets/Script/Core/Utils/CameraShaker/Docs/EZ Camera Shake Guide & Docs.pdf.meta create mode 100644 Assets/Script/Core/Utils/CameraShaker/Scripts.meta create mode 100644 Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakeInstance.cs create mode 100644 Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakeInstance.cs.meta create mode 100644 Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakePresets.cs create mode 100644 Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakePresets.cs.meta create mode 100644 Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShaker.cs create mode 100644 Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShaker.cs.meta create mode 100644 Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakerManager.cs create mode 100644 Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakerManager.cs.meta create mode 100644 Assets/Script/Core/Utils/CameraShaker/Scripts/Utilities.meta create mode 100644 Assets/Script/Core/Utils/CameraShaker/Scripts/Utilities/CameraUtilities.cs create mode 100644 Assets/Script/Core/Utils/CameraShaker/Scripts/Utilities/CameraUtilities.cs.meta diff --git a/Assets/Script/Core/Application/ApplicationManager.cs b/Assets/Script/Core/Application/ApplicationManager.cs index 66c379bb..78aa80dd 100644 --- a/Assets/Script/Core/Application/ApplicationManager.cs +++ b/Assets/Script/Core/Application/ApplicationManager.cs @@ -73,12 +73,6 @@ public void Awake() AppLaunch(); } - private void OnEnable() - { - instance = this; - Debug.Log(this.name + " : OnEnable"); - } - /// /// 程序启动 /// diff --git a/Assets/Script/Core/Application/ApplicationStatusManager.cs b/Assets/Script/Core/Application/ApplicationStatusManager.cs index 9ab78f5b..b099a4b4 100644 --- a/Assets/Script/Core/Application/ApplicationStatusManager.cs +++ b/Assets/Script/Core/Application/ApplicationStatusManager.cs @@ -27,36 +27,82 @@ private static void AppOnGUI() if (s_currentAppStatus != null) s_currentAppStatus.OnGUI(); } - + private static float s_fadeInTime = 0.5f; + private static float s_afterInDelayTime = 0.1f; + private static float s_fadeOutTime = 0.4f; + public static void SetFadeTime(float _fadeInTime, float afterInDelayTime, float _fadeOutTime) + { + s_fadeInTime = _fadeInTime; + s_afterInDelayTime = afterInDelayTime; + s_fadeOutTime = _fadeOutTime; + } /// /// 切换游戏状态 /// /// - public static void EnterStatus() where T:IApplicationStatus + public static void EnterStatus(bool isFade = true) where T:IApplicationStatus { - EnterStatus(typeof(T).Name); + EnterStatus(typeof(T).Name,isFade); } - public static void EnterStatus(string statusName) + public static void EnterStatus(string statusName,bool isFade=true) { if (s_currentAppStatusName == statusName) return; + if (!isFade) + { + if (s_currentAppStatus != null) + { + s_currentAppStatus.CloseAllUI(); + s_currentAppStatus.OnExitStatus(); + } - s_currentAppStatusName = statusName; - ApplicationManager.Instance.currentStatus = statusName; + s_currentAppStatusName = statusName; + ApplicationManager.Instance.currentStatus = statusName; - if (s_currentAppStatus != null) - { - s_currentAppStatus.CloseAllUI(); - s_currentAppStatus.OnExitStatus(); + s_currentAppStatus = GetStatus(statusName); + + s_currentAppStatus.OnEnterStatus(); + + if (OnStatusChangeCallBack != null) + OnStatusChangeCallBack(s_currentAppStatus); } + else + { - s_currentAppStatus = GetStatus(statusName); + if (s_currentAppStatus != null) + { + UIManager.SetEventSystemEnable(false); + CameraFade.Instance.FadeInToOut(s_fadeInTime, s_afterInDelayTime, s_fadeOutTime, () => + { + UIManager.SetEventSystemEnable(true); + s_currentAppStatus.CloseAllUI(false); + s_currentAppStatus.OnExitStatus(); + s_currentAppStatusName = statusName; + ApplicationManager.Instance.currentStatus = statusName; + + s_currentAppStatus = GetStatus(statusName); + + s_currentAppStatus.OnEnterStatus(); - s_currentAppStatus.OnEnterStatus(); + if (OnStatusChangeCallBack != null) + OnStatusChangeCallBack(s_currentAppStatus); + }); + } + else + { + s_currentAppStatusName = statusName; + ApplicationManager.Instance.currentStatus = statusName; - if (OnStatusChangeCallBack != null) - OnStatusChangeCallBack(s_currentAppStatus); + s_currentAppStatus = GetStatus(statusName); + + s_currentAppStatus.OnEnterStatus(); + + if (OnStatusChangeCallBack != null) + OnStatusChangeCallBack(s_currentAppStatus); + } + + } //ApplicationManager.Instance.StartCoroutine(s_currentAppStatus.InChangeScene(() => //{ // s_currentAppStatus.OnEnterStatus(); @@ -76,12 +122,29 @@ public static IApplicationStatus GetStatus(string statusName) } else { - IApplicationStatus statusTmp = (IApplicationStatus)Activator.CreateInstance(Type.GetType(statusName)); + return CreateStatus(statusName); + } + } + + public static T CreateStatus() where T : IApplicationStatus + { + return (T)CreateStatus(typeof(T).Name); + } + + public static IApplicationStatus CreateStatus(string statusName) + { + IApplicationStatus statusTmp=null; + if (!s_status.ContainsKey(statusName)) + { + statusTmp = (IApplicationStatus)Activator.CreateInstance(Type.GetType(statusName)); statusTmp.OnCreate(); s_status.Add(statusName, statusTmp); - - return statusTmp; } + else + { + statusTmp= s_status[statusName]; + } + return statusTmp; } /// diff --git a/Assets/Script/Core/Application/IApplicationStatus.cs b/Assets/Script/Core/Application/IApplicationStatus.cs index 42031b0a..2d4a5f02 100644 --- a/Assets/Script/Core/Application/IApplicationStatus.cs +++ b/Assets/Script/Core/Application/IApplicationStatus.cs @@ -15,6 +15,14 @@ public T OpenUI() where T: UIWindowBase return (T)ui; } + public UIWindowBase OpenUI(string name) + { + UIWindowBase ui = UIManager.OpenUIWindow(name); + + m_uiList.Add(ui); + + return ui; + } public void OpenUIAsync() where T:UIWindowBase { @@ -31,11 +39,30 @@ public void CloseUI() where T:UIWindowBase UIManager.CloseUIWindow(ui); } - public void CloseAllUI() + public void CloseUI(UIWindowBase ui) + { + m_uiList.Remove(ui); + UIManager.CloseUIWindow(ui); + } + + public bool IsUIOpen() where T : UIWindowBase + { + for (int i = 0; i < m_uiList.Count; i++) + { + UIWindowBase tempWin = m_uiList[i]; + if (tempWin.GetType() == typeof(T) + &&(tempWin.windowStatus == UIWindowBase.WindowStatus.Open + || tempWin.windowStatus == UIWindowBase.WindowStatus.OpenAnim)) + return true; + } + return false; + } + + public void CloseAllUI(bool isPlayAnim = true) { for (int i = 0; i < m_uiList.Count; i++) { - UIManager.CloseUIWindow(m_uiList[i]); + UIManager.CloseUIWindow(m_uiList[i],isPlayAnim); } m_uiList.Clear(); } diff --git a/Assets/Script/Core/Data/DataTable.cs b/Assets/Script/Core/Data/DataTable.cs index 8948622a..2fcf2ba9 100644 --- a/Assets/Script/Core/Data/DataTable.cs +++ b/Assets/Script/Core/Data/DataTable.cs @@ -248,10 +248,13 @@ public static string Serialize(DataTable data) //type List type = new List(data.m_tableTypes.Keys); + Debug.Log("type count " + type.Count); + build.Append(c_fieldTypeTableTitle); + if (type.Count > 0) { - build.Append(c_fieldTypeTableTitle); build.Append(c_split); + for (int i = 1; i < data.TableKeys.Count; i++) { string key = data.TableKeys[i]; @@ -290,13 +293,19 @@ public static string Serialize(DataTable data) } } } + else + { + build.Append(c_newline); + } //note List noteValue = new List(data.m_noteValue.Keys); + build.Append(c_noteTableTitle); + if (noteValue.Count > 0) { - build.Append(c_noteTableTitle); build.Append(c_split); + for (int i = 1; i < data.TableKeys.Count; i++) { string key = data.TableKeys[i]; @@ -323,14 +332,20 @@ public static string Serialize(DataTable data) } } } + else + { + build.Append(c_newline); + } //defauleValue List defaultValue = new List(data.m_defaultValue.Keys); + build.Append(c_defaultValueTableTitle); + if (defaultValue.Count >0) { - build.Append(c_defaultValueTableTitle); - build.Append(c_split); + build.Append(c_split); + for (int i = 1; i < data.TableKeys.Count; i++) { string key = data.TableKeys[i]; @@ -357,6 +372,10 @@ public static string Serialize(DataTable data) } } } + else + { + build.Append(c_newline); + } //value foreach (string k in data.Keys) diff --git a/Assets/Script/Core/Editor/Data/DataEditorWindow.cs b/Assets/Script/Core/Editor/Data/DataEditorWindow.cs index 6fd7d5ef..53c96be8 100644 --- a/Assets/Script/Core/Editor/Data/DataEditorWindow.cs +++ b/Assets/Script/Core/Editor/Data/DataEditorWindow.cs @@ -1,13 +1,11 @@ using UnityEngine; using System.Collections; using UnityEditor; -using UnityEngine.UI; using System; -using System.Reflection; using System.Collections.Generic; using System.IO; using System.Text; -using FrameWork; + using HDJ.Framework.Utils; public class DataEditorWindow : EditorWindow @@ -22,29 +20,25 @@ public static void ShowWindow() { win = EditorWindow.GetWindow(); win.autoRepaintOnSceneChange = true; - FocusWindowIfItsOpen(); win.wantsMouseMove = true; } - List m_dataNameList = new List(); + List configFileNames = new List(); DataTable m_currentData; - //Dictionary m_foldList = new Dictionary(); private List langKeys; void OnEnable() { - //EditorGUIStyleData.Init(); win = this; - FindAllDataName(); langKeys = LanguageDataEditorUtils.GetLanguageLayersKeyList(); - if (!string.IsNullOrEmpty(chooseFileName)) - LoadData(chooseFileName); - configFileNames.Clear(); string m_directoryPath = Application.dataPath + "/Resources/" + DataManager.c_directoryName; configFileNames.AddRange(PathUtils.GetDirectoryFileNames(m_directoryPath, new string[] { ".txt" }, false, false)); + if (!string.IsNullOrEmpty(chooseFileName) && configFileNames.Contains(chooseFileName)) + LoadData(chooseFileName); + } private void OnDestroy() { @@ -56,81 +50,78 @@ public static void Refresh() if (win) win.OnEnable(); } - ////当选择改变时 - //void OnSelectionChange() - //{ - - //} - - ////当工程改变时 - //void OnProjectChange() - //{ - // if (!Application.isPlaying) - // { - // //ConvertUtf8(); - - // FindAllDataName(); - - // if (chooseFileName != null - // && chooseFileName != "" - // && chooseFileName != "None") - // { - // LoadData(chooseFileName); - // } - // } - //} - #region GUI void OnGUI() { titleContent.text = "数据编辑器"; + if (buttonStyle == null || helpBoxStyle == null) + { + buttonStyle = "Button"; + helpBoxStyle = "HelpBox"; + } EditorDrawGUIUtil.RichTextSupport = true; GUILayout.Space(8); ChooseFile(); GUILayout.Space(5); + if (string.IsNullOrEmpty(chooseFileName)) + return; + if (m_currentData == null) + return; + GridTopFunctionGUI(); + GUILayout.Space(5); + DrawTableDataGUI(); GUILayout.FlexibleSpace(); - - SaveDataGUI(); - GenerateDataClassGUI(); - GenerateAllDataClassGUI(); - - CleanCacheGUI(); } private string chooseFileName = ""; void ChooseFile() { GUILayout.BeginHorizontal(); - chooseFileName = EditorDrawGUIUtil.DrawPopup("选择文件", chooseFileName, m_dataNameList, LoadData); - if (GUILayout.Button("删除", GUILayout.Width(50))) + chooseFileName = EditorDrawGUIUtil.DrawPopup("选择文件", chooseFileName, configFileNames, LoadData); + if (GUILayout.Button("删除", GUILayout.Width(60))) { if (EditorUtility.DisplayDialog("警告", "是否删除文件[" + chooseFileName + "]", "确定", "取消")) { File.Delete(Application.dataPath + "/Resources/" + DataManager.c_directoryName + "/" + chooseFileName + ".txt"); AssetDatabase.Refresh(); m_currentData = null; + Refresh(); return; } } - if (GUILayout.Button("添加", GUILayout.Width(50))) + if (GUILayout.Button("添加", GUILayout.Width(60))) { GeneralDataModificationWindow.otherParameter = ""; GeneralDataModificationWindow.OpenWindow(this, "添加新配置文件", "", (value) => { value = EditorDrawGUIUtil.DrawBaseValue("新建配置文件:", value); GeneralDataModificationWindow.otherParameter = EditorDrawGUIUtil.DrawBaseValue("主键名:", GeneralDataModificationWindow.otherParameter); - if (string.IsNullOrEmpty(value.ToString()) || string.IsNullOrEmpty(GeneralDataModificationWindow.otherParameter.ToString())) + string fileName = value.ToString(); + string key = GeneralDataModificationWindow.otherParameter.ToString(); + if (string.IsNullOrEmpty(fileName) || string.IsNullOrEmpty(key)) { - EditorGUILayout.HelpBox("文件名不能为空!!", MessageType.Error); + EditorGUILayout.HelpBox("文件名或主键名不能为空!!", MessageType.Error); } + else if ((key.Contains(" ")) || (fileName.Contains(" "))) + EditorGUILayout.HelpBox("文件名或主键名有空格!!", MessageType.Error); + else if (configFileNames.Contains(fileName)) + { + EditorGUILayout.HelpBox("文件名重复!!", MessageType.Error); + } + return value; }, (value) => { - if (string.IsNullOrEmpty(value.ToString()) || string.IsNullOrEmpty(GeneralDataModificationWindow.otherParameter.ToString())) + string fileName = value.ToString(); + string key = GeneralDataModificationWindow.otherParameter.ToString(); + if (string.IsNullOrEmpty(fileName) + || string.IsNullOrEmpty(key) + || (key.Contains(" ")) || (fileName.Contains(" ")) + || configFileNames.Contains(fileName)) { return false; } @@ -141,15 +132,20 @@ void ChooseFile() (value) => { DataTable data = new DataTable(); - data.TableKeys.Add(GeneralDataModificationWindow.otherParameter.ToString()); - + string keyName = GeneralDataModificationWindow.otherParameter.ToString(); + data.TableKeys.Add(keyName); SaveData(value.ToString(), data); - AssetDatabase.Refresh(); - - LoadData(chooseFileName); + Refresh(); + LoadData(value.ToString()); AssetDatabase.Refresh(); }); } + if (GUILayout.Button("加载上一次保存", GUILayout.Width(90))) + { + DataManager.CleanCache(); + LoadData(chooseFileName); + + } GUILayout.EndHorizontal(); } @@ -160,13 +156,8 @@ private void LoadData(string fileName) chooseFileName = fileName; - if (chooseFileName != "None") - { - - m_currentData = DataManager.GetData(fileName); - } - else - return; + m_currentData = DataManager.GetData(fileName); + int widthCount = m_currentData.TableKeys.Count; //Debug.Log(" m_currentData.TableKeys.Count :" + m_currentData.TableKeys.Count + " withItemList.Count :" + withItemList.Count); @@ -209,8 +200,6 @@ private void LoadData(string fileName) i = i - 1; } } - //selectRowIndexs.Clear(); - //selectColumnIndexs.Clear(); } private List withItemList = new List(); @@ -235,37 +224,27 @@ private void LoadData(string fileName) /// void DrawTableDataGUI() { - if (m_currentData == null) - return; - if (buttonStyle == null || helpBoxStyle==null) - { - buttonStyle = "Button"; - helpBoxStyle = "HelpBox"; - } - Debug.unityLogger.logEnabled = false; - GridTopFunctionGUI(); - GUILayout.Space(5); - - Rect r = new Rect(0, 60, Screen.width, 18); + Rect r = new Rect(0, 90, position.width, 18); float detaH = wHeight; - if (heightItemList.Count > 3) + if (heightItemList.Count >= 3) { detaH = heightItemList[0] + heightItemList[1] + heightItemList[2]; } - Rect svPos_temp = new Rect(new Vector2(0, r.y), new Vector2(Screen.width-wWith, Screen.height - r.y - 120- detaH)); + Rect svPos_temp = new Rect(new Vector2(0, r.y), new Vector2(position.width - wWith, position.height - r.y - detaH)); Vector2 v = GetCententSize(); - svPos = GUI.BeginScrollView(new Rect(svPos_temp.x + wWith, svPos_temp.y + detaH, svPos_temp.width, svPos_temp.height), svPos, new Rect(r.x + wWith, r.y + detaH, v.x, v.y)); - - DrawGridItem(r.position + new Vector2(wWith, wHeight),2, heightItemList.Count); + //数据中两排后的数据 + DrawGridItem(r.position + new Vector2(wWith, wHeight), 2, heightItemList.Count); GUI.EndScrollView(); - //顶部格子 - topGridSVPos = GUI.BeginScrollView(new Rect(svPos_temp.x, svPos_temp.y, svPos_temp.width+ wWith, detaH), topGridSVPos, new Rect(r.x, r.y, v.x+wWith, detaH),false,false,"Label","Label"); + Debug.unityLogger.logEnabled = false; + //顶部格子 + topGridSVPos = GUI.BeginScrollView(new Rect(svPos_temp.x, svPos_temp.y, svPos_temp.width + wWith, detaH), topGridSVPos, new Rect(r.x, r.y, v.x + wWith, detaH), false, false, "Label", "Label"); topGridSVPos = new Vector2(svPos.x, topGridSVPos.y); - + Debug.unityLogger.logEnabled = true; + //数据中的前两排格子 DrawGridItem(r.position + new Vector2(wWith, wHeight), 0, 2); float tempWith = wWith; @@ -329,14 +308,15 @@ void DrawTableDataGUI() vStr = "description"; GUI.Label(dragR, vStr, buttonStyle); } - - } - - leftGridSVPos = GUI.BeginScrollView(new Rect(svPos_temp.x, tempHeight, wWith, svPos_temp.height), leftGridSVPos, new Rect(r.x, tempHeight, wWith, v.y), false, false, "Label", "Label"); + } + //默认第一列 + Debug.unityLogger.logEnabled = false; + leftGridSVPos = GUI.BeginScrollView(new Rect(svPos_temp.x, tempHeight, wWith, svPos_temp.height), leftGridSVPos, new Rect(r.x, tempHeight, wWith, v.y), false, false, "Label", "Label"); leftGridSVPos = new Vector2(leftGridSVPos.x, svPos.y); - + Debug.unityLogger.logEnabled = true; + for (int i = 2; i < heightItemList.Count; i++) { Rect dragR = new Rect(r.x, tempHeight, wWith, heightItemList[i]); @@ -349,7 +329,7 @@ void DrawTableDataGUI() tempHeight += heightItemList[i]; string vStr = ""; - if(selectRowIndexs.Contains(i)) + if (selectRowIndexs.Contains(i)) GUI.color = Color.cyan; if (i == 2) @@ -385,8 +365,6 @@ void DrawTableDataGUI() } GUI.EndScrollView(); - - Debug.unityLogger.logEnabled = true; } private Vector2 GetCententSize() @@ -415,27 +393,52 @@ private Vector2 GetCententSize() private string searchValue = ""; private void GridTopFunctionGUI() { + GUILayout.Space(4); GUILayout.BeginHorizontal(); if (GUILayout.Button("添加一行数据", GUILayout.Width(90))) { AddLineDataGUI(); } + GUILayout.FlexibleSpace(); - if (GUILayout.Button("加载上一次保存", GUILayout.Width(90))) + if (GUILayout.Button("添加字段", GUILayout.Width(90))) { - DataManager.CleanCache(); - LoadData(chooseFileName); - + Add2FieldGUI(); } GUILayout.FlexibleSpace(); - if (GUILayout.Button("添加字段", GUILayout.Width(90))) + + GUILayout.Space(5); + + if (GUILayout.Button("生成Data类", GUILayout.Width(90))) { - Add2FieldGUI(); + CreatDataCSharpFile(chooseFileName, m_currentData); + AssetDatabase.Refresh(); + } + GUILayout.FlexibleSpace(); + if (GUILayout.Button("生成全部Data类", GUILayout.Width(120))) + { + CreatAllClass(); + } + GUILayout.FlexibleSpace(); + if (GUILayout.Button("清除缓存", GUILayout.Width(90))) + { + LanguageManager.IsInit = false; + DataManager.CleanCache(); } GUILayout.FlexibleSpace(); + if (GUILayout.Button("保存", GUILayout.Width(140))) + { + SaveData(chooseFileName, m_currentData); + AssetDatabase.Refresh(); + ShowNotification(new GUIContent("Save Success!")); + } + GUILayout.EndHorizontal(); + GUILayout.Space(7); + GUILayout.BeginHorizontal(); + //字体大小调节 - helpBoxStyle.fontSize = helpBoxStyle.font.fontSize; + helpBoxStyle.fontSize = 11; oldButtonFontSize = helpBoxStyle.fontSize; if (nowButtonFontSize <= 0) { @@ -459,6 +462,7 @@ private void DrawGridItem(Vector2 startPos,int heightStartIndex,int heightEndInd { tempHeight += heightItemList[i]; } + for (int i = heightStartIndex; i < heightEndIndex; i++) { float h = heightItemList[i]; @@ -550,8 +554,6 @@ private void DrawGridItem(Vector2 startPos,int heightStartIndex,int heightEndInd GUI.color = Color.cyan; if (GUI.Button(new Rect(pos, size), showStr, helpBoxStyle)) { - - modifiIndex = new TableIndex(i - 2, j); if (i == 0) { @@ -575,7 +577,9 @@ private void DrawGridItem(Vector2 startPos,int heightStartIndex,int heightEndInd GeneralDataModificationWindow.OpenWindow(this, "修改数据", value, DrawModifiValueGUI, CheckModifiValueCallBack, ModificationCompleteCallBack); } } - + + + GUI.color = Color.white; tempWith += w; } @@ -809,7 +813,6 @@ private void DrawTableConfigFieldInfo(TableConfigFieldInfo temp) }); } - private List configFileNames = new List(); private List fieldNames = new List(); private List tableKeys = new List(); private string tableName = ""; @@ -849,6 +852,7 @@ private object DrawTableGUI(string text, object defultValue) private object DrawLocalizedLanguageField(string text, object value) { + value = EditorDrawGUIUtil.DrawBaseValue(text, value); value = EditorDrawGUIUtil.DrawPopup(text, value.ToString(), langKeys); GUILayout.Space(6); GUILayout.Label("多语言字段[" + value + "] : " + LanguageManager.GetContentByKey(value.ToString())); @@ -909,7 +913,10 @@ private object DrawPrefabGUI(string text, object value) } } } - catch { } + catch (Exception e) + { + Debug.LogError(e); + } if (!isHave) { @@ -964,7 +971,9 @@ private object DrawTextureGUI(string text, object value) } } } - catch { } + catch(Exception e) { + Debug.LogError(e); + } if (!isHave) { @@ -1041,6 +1050,8 @@ private void Add2FieldGUI() if (string.IsNullOrEmpty(info.fieldName)) EditorGUILayout.HelpBox("字段名不能为空!!", MessageType.Error); + else if (info.fieldName.Contains(" ")) + EditorGUILayout.HelpBox("字段名不能有空格!!", MessageType.Error); else if (m_currentData.TableKeys.Contains(info.fieldName)) EditorGUILayout.HelpBox("字段名重复!!", MessageType.Error); string df = DataConfigUtils.ObjectValue2TableString(info.defultValue); @@ -1051,7 +1062,7 @@ private void Add2FieldGUI() (value) => { TableConfigFieldInfo info = (TableConfigFieldInfo)value; - if (string.IsNullOrEmpty(info.fieldName) || m_currentData.TableKeys.Contains(info.fieldName)) + if (string.IsNullOrEmpty(info.fieldName) || m_currentData.TableKeys.Contains(info.fieldName)|| info.fieldName.Contains(" ")) return false; string df = DataConfigUtils.ObjectValue2TableString(info.defultValue); if (string.IsNullOrEmpty(df)) @@ -1075,16 +1086,19 @@ private void AddLineDataGUI() GeneralDataModificationWindow.OpenWindow(this, "插入一行数据", "", (value) => { value = EditorDrawGUIUtil.DrawBaseValue("Key:", value); - if (string.IsNullOrEmpty(value.ToString())) + string key = value.ToString(); + if (string.IsNullOrEmpty(key)) EditorGUILayout.HelpBox("Key不能为空!!", MessageType.Error); - else if (m_currentData.TableKeys.Contains(value.ToString())) + else if(key.Contains(" ")) + EditorGUILayout.HelpBox("Key 不能有空格!!", MessageType.Error); + else if (m_currentData.TableKeys.Contains(key.Trim())) EditorGUILayout.HelpBox("Key重复!!", MessageType.Error); return value; }, (value) => { - - if (string.IsNullOrEmpty(value.ToString()) || m_currentData.TableKeys.Contains(value.ToString())) + string key = value.ToString(); + if (string.IsNullOrEmpty(key) || (key.Contains(" "))|| m_currentData.TableKeys.Contains(key.Trim())) return false; return true; @@ -1111,25 +1125,6 @@ private void AddLineDataGUI() } - #region 数据文件相关 - - - - void CleanCacheGUI() - { - if (GUILayout.Button("清除缓存")) - { - LanguageManager.IsInit = false; - DataManager.CleanCache(); - } - } - - #endregion - - #region 记录相关 - - - #endregion #region 字段相关 @@ -1236,99 +1231,19 @@ static void ResetDataField(DataTable data,string key,FieldType type,string enumT } } - void SaveDataGUI() - { - //if (GUILayout.Button("Change")) - //{ - // foreach (var sd in m_currentData.Values) - // { - // foreach (var item in sd) - // { - // if(item.Key== "DescribeKey") - // { - // sd[item.Key]= "{[0,4][" + item.Value + "]}"; - // Debug.Log(m_currentData.Count + " " + item.Key); - // break; - // } - // } - // } - //} - if (GUILayout.Button("保存")) - { - SaveData(chooseFileName, m_currentData); - AssetDatabase.Refresh(); - //LoadData(chooseFileName); - } - } - - void GenerateDataClassGUI() - { - if (GUILayout.Button("生成Data类")) - { - CreatDataCSharpFile(chooseFileName, m_currentData); - AssetDatabase.Refresh(); - } - } - - void GenerateAllDataClassGUI() - { - if (GUILayout.Button("生成全部Data类")) - { - CreatAllClass(); - } - } - #endregion #endregion - #region FindData - - string m_directoryPath; - - void FindAllDataName() - { - AssetDatabase.Refresh(); - m_dataNameList = new List(); - - m_dataNameList.Add("None"); - - m_directoryPath = Application.dataPath + "/Resources/" + DataManager.c_directoryName; - - FindConfigName(m_directoryPath); - } - - public void FindConfigName(string path) - { - string[] allUIPrefabName = Directory.GetFiles(path); - foreach (var item in allUIPrefabName) - { - if (item.EndsWith(".txt")) - { - //string configName = FileTool.RemoveExpandName(FileTool.GetFileNameByPath(item)); - m_dataNameList.Add(FileTool.RemoveExpandName(PathTool.GetDirectoryRelativePath(m_directoryPath + "/",item))); - } - } - - string[] dires = Directory.GetDirectories(path); - for (int i = 0; i < dires.Length; i++) - { - FindConfigName(dires[i]); - } - } - - #endregion - #region 自动生成代码 void CreatAllClass() { - for (int i = 0; i < m_dataNameList.Count; i++) + for (int i = 0; i < configFileNames.Count; i++) { - if (m_dataNameList[i] != null && m_dataNameList[i] !="None") - { - CreatDataCSharpFile(m_dataNameList[i],DataManager.GetData(m_dataNameList[i])); - } + + CreatDataCSharpFile(configFileNames[i], DataManager.GetData(configFileNames[i])); + } UnityEditor.AssetDatabase.Refresh(); @@ -1499,27 +1414,8 @@ string OutPutFieldName(FieldType fileType, string enumType) #endregion - #region Utf-8转换 - - public static void ConvertUtf8() - { - FileTool.RecursionFileExecute(Application.dataPath + "/Resources/" + DataManager.c_directoryName, "txt", (name) => - { - FileTool.ConvertFileEncoding(name, null, System.Text.Encoding.UTF8); - }); - } - - #endregion - #region 保存数据 - public static bool GetIsExistDataEditor(string DataName) - { - return "" != ResourceIOTool.ReadStringByResource( - PathTool.GetRelativelyPath(DataManager.c_directoryName, - DataName, - DataManager.c_expandName)); - } public static void SaveData(string ConfigName, DataTable data) { @@ -1535,41 +1431,6 @@ public static void SaveData(string ConfigName, DataTable data) UnityEditor.AssetDatabase.Refresh(); } - /// - /// 读取编辑器数据 - /// - /// 数据名称 - public static Dictionary GetEditorData(string dataName) - { - UnityEditor.AssetDatabase.Refresh(); - - string dataJson = ResourceIOTool.ReadStringByFile(PathTool.GetEditorPath(DataManager.c_directoryName, dataName, DataManager.c_expandName)); - - if (dataJson == "") - { - Debug.Log(dataName + " dont find!"); - return new Dictionary(); - } - else - { - return Json.Deserialize(dataJson) as Dictionary; - } - } - - /// - /// 保存编辑器数据 - /// - /// 数据名称 - /// 数据表 - public static void SaveEditorData(string ConfigName, Dictionary data) - { - string configDataJson = Json.Serialize(data); - - EditorUtil.WriteStringByFile(PathTool.GetEditorPath(DataManager.c_directoryName, ConfigName, DataManager.c_expandName), configDataJson); - - UnityEditor.AssetDatabase.Refresh(); - } - #endregion } diff --git a/Assets/Script/Core/Editor/General/FolderTreeView.cs b/Assets/Script/Core/Editor/General/FolderTreeView.cs new file mode 100644 index 00000000..883e3182 --- /dev/null +++ b/Assets/Script/Core/Editor/General/FolderTreeView.cs @@ -0,0 +1,246 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using UnityEditor; +using UnityEditor.IMGUI.Controls; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityObject = UnityEngine.Object; + + +public class FolderTreeView : TreeView +{ + /// + /// 选择Item回调 + /// + public CallBack selectCallBack; + /// + /// 双击Item回调 + /// + public CallBack dblclickItemCallBack; + + static Texture2D folderIcon = EditorGUIUtility.FindTexture("Folder Icon"); + static Texture2D fileIcon = EditorGUIUtility.FindTexture("TextAsset Icon"); + private bool userSearch = true; + + + private int index; + private List allPath = null; + private SearchField m_SearchField; + public FolderTreeView(TreeViewState state) + : base(state) + { + index = 1; + searchString = ""; + rowHeight = 20; + showBorder = true; + m_SearchField = new SearchField(); + m_SearchField.downOrUpArrowKeyPressed += SetFocusAndEnsureSelectedItem; + } + /// + /// 是否开启使用搜索栏 + /// + public bool UserSearch + { + get + { + return userSearch; + } + + set + { + userSearch = value; + } + } + /// + /// 返回root节点 + /// + public FolderTreeViewItem RootItem + { + get { return (FolderTreeViewItem)rootItem; } + } + /// + /// 设置数据 + /// + /// + public void SetData(List datas) + { + allPath = datas; + //BuildRoot(); + // BuildRows(rootItem); + Reload(); + } + private List GetFolderRows() + { + List list = new List(); + var rows = GetRows(); + if (rows != null) + { + foreach (var item in GetRows()) + { + list.Add((FolderTreeViewItem)item); + } + } + return list; + } + protected override TreeViewItem BuildRoot() + { + FolderTreeViewItem root = new FolderTreeViewItem { id = 0, depth = -1, displayName = "Root" }; + + var rows = GetFolderRows(); + if (allPath == null) + return root; + foreach (var p in allPath) + { + string[] items = p.Split('/'); + + + string fullPath = ""; + for (int i = 0; i < items.Length; i++) + { + + string displayName = items[i]; + if (string.IsNullOrEmpty(fullPath)) + fullPath = displayName; + else + fullPath += "/" + displayName; + + bool isDirectory = !(i == (items.Length - 1)); + + bool isHaveItem = false; + foreach (var item in rows) + { + if (item.fullPath ==fullPath && item.isDirectory==isDirectory) + { + isHaveItem = true; + break; + } + } + + if ( !isHaveItem) + { + FolderTreeViewItem temp = new FolderTreeViewItem(index, i, displayName,fullPath,isDirectory); + string dir= Path.GetDirectoryName(fullPath); + FolderTreeViewItem parent = null; + foreach (var item in rows) + { + if (item.fullPath == dir && item.isDirectory) + { + parent = item; + break; + } + } + if (parent != null) + parent.AddChild(temp); + else + root.AddChild(temp); + rows.Add(temp); + index++; + } + } + } + List list = new List(); + foreach (var item in rows) + { + list.Add(item); + } + + //SetupParentsAndChildrenFromDepths(root, list); + foreach (var item in rows) + { + if (item.hasChildren) + item.icon = folderIcon; + else + item.icon = fileIcon; + } + return root; + } + + + public override void OnGUI(Rect rect) + { + if (!userSearch) + base.OnGUI(rect); + else + { + Rect searchRect = new Rect(rect.x, rect.y, rect.width, EditorStyles.toolbar.fixedHeight); + GUI.Box(searchRect, "", EditorStyles.toolbar); + searchRect = new Rect(rect.x+ rect.width / 2, rect.y+3, rect.width / 2, EditorStyles.toolbar.fixedHeight); + searchString = m_SearchField.OnToolbarGUI(searchRect, searchString); + + + rect = new Rect(rect.x, rect.y + searchRect.height, rect.width, rect.height - searchRect.height); + base.OnGUI(rect); + } + } + + protected override void RowGUI(RowGUIArgs args) + { + Event e = Event.current; + + if (e.type == EventType.MouseDown && args.rowRect.Contains(e.mousePosition) && selectCallBack != null) + { + selectCallBack((FolderTreeViewItem)args.item); + + } + if (e.type == EventType.MouseDown && args.rowRect.Contains(e.mousePosition) && e.clickCount == 2 && dblclickItemCallBack != null) + { + dblclickItemCallBack((FolderTreeViewItem)args.item); + } + + base.RowGUI(args); + + } + +} + +public class FolderTreeViewItem: TreeViewItem +{ + private string m_fullPath = ""; + private bool m_isDirectory; + public FolderTreeViewItem(int id, int depth, string displayName,string fullPath,bool isDirectory) : base(id, depth, displayName) + { + m_fullPath = fullPath; + m_isDirectory = isDirectory; + } + public FolderTreeViewItem(int id, int depth, string displayName) : base(id, depth, displayName) + { + } + public FolderTreeViewItem(int id, int depth) : base(id, depth) + { + } + public FolderTreeViewItem(int id) : base(id) + { + } + public FolderTreeViewItem() : base() + { + } + + public string fullPath + { + get + { + return m_fullPath; + } + + set + { + m_fullPath = value; + } + } + + public bool isDirectory + { + get + { + return m_isDirectory; + } + + set + { + m_isDirectory = value; + } + } +} + diff --git a/Assets/Script/Core/Editor/General/FolderTreeView.cs.meta b/Assets/Script/Core/Editor/General/FolderTreeView.cs.meta new file mode 100644 index 00000000..817ba67b --- /dev/null +++ b/Assets/Script/Core/Editor/General/FolderTreeView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ad7c386f0753bf948b09f2ac409a829f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/GuideSystem/GuideSystemEditor.cs b/Assets/Script/Core/Editor/GuideSystem/GuideSystemEditor.cs index 69f9c882..615911de 100644 --- a/Assets/Script/Core/Editor/GuideSystem/GuideSystemEditor.cs +++ b/Assets/Script/Core/Editor/GuideSystem/GuideSystemEditor.cs @@ -142,7 +142,7 @@ static void SaveDataTable() data.SetFieldType(GuideSystemBase.c_TipContentKey, FieldType.String, null); data.TableKeys.Add(GuideSystemBase.c_TipContentPosKey); - data.SetDefault(GuideSystemBase.c_TipContentPosKey, "0|0|0"); + data.SetDefault(GuideSystemBase.c_TipContentPosKey, "0,0,0"); data.SetNote(GuideSystemBase.c_TipContentPosKey, "提示文本位置"); data.SetFieldType(GuideSystemBase.c_TipContentPosKey, FieldType.Vector3, null); diff --git a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs index f595366a..5467089a 100644 --- a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs +++ b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.IO; using UnityEditor; +using UnityEditor.IMGUI.Controls; using UnityEngine; public class LanguageDataEditorWindow : EditorWindow @@ -18,6 +19,8 @@ public class LanguageDataEditorWindow : EditorWindow //所有语言列表 static List s_languageKeyList = new List(); + //所有文件(转换成全路径/) + static List s_languageFullKeyList = new List(); private int m_currentSelectIndex; private string m_currentLanguage; @@ -34,7 +37,8 @@ public static LanguageDataEditorWindow ShowWindow() win= EditorWindow.GetWindow(); return win; } - + FolderTreeView treeView; + TreeViewState treeViewState = null; void OnEnable() { win = this; @@ -46,8 +50,19 @@ void OnEnable() FindAllDataName(); LoadEditorConfig(); LoadConfig(); + + if (treeViewState == null) + treeViewState = new TreeViewState(); + + treeView = new FolderTreeView(treeViewState); + + treeView.SetData(s_languageFullKeyList); + treeView.dblclickItemCallBack = ModuleFileDblclickItemCallBack; + treeView.selectCallBack = ModuleFileFolderSelectCallBack; } + + void OnProjectChange() { FindAllDataName(); @@ -138,6 +153,13 @@ static void LoadEditorConfig() s_languageKeyList.Clear(); s_languageKeyDict.Clear(); s_languageKeyDict = LanguageDataEditorUtils.LoadEditorConfig(c_EditorConfigName, ref s_languageKeyList); + s_languageFullKeyList.Clear(); + + foreach (var item in s_languageKeyDict) + { + string ss = item.Key.Replace("_", "/"); + s_languageFullKeyList.Add(ss); + } } void LoadConfig() @@ -285,82 +307,143 @@ private void SelectEditorModuleGUI() EditorGUILayout.SelectableLabel(selectEditorModuleName); GUILayout.EndHorizontal(); } + /// + /// 模块文件中双击操作,选择文件 + /// + /// + private void ModuleFileDblclickItemCallBack(FolderTreeViewItem t) + { + if (t.isDirectory) + return; - Vector2 pos_editorField = Vector2.zero; + selectEditorModuleName = t.fullPath.Replace("/", "_"); ; + toolbarOption = 1; + } + /// + /// 模块文件中单击选择文件 + /// + /// + private void ModuleFileFolderSelectCallBack(FolderTreeViewItem t) + { + //Debug.Log(t.fullPath+ " depth :" + t.depth +" isDir :"+t.isDirectory); + if (t.isDirectory) + return; + selectItemFullName = t.fullPath.Replace("/","_"); + } + Vector2 pos_editorField = Vector2.zero; + private string selectItemFullName=""; void EditorLanguageModuleFileGUI() { + + if (string.IsNullOrEmpty(m_currentLanguage)) return; - EditorGUI.indentLevel = 1; - GUILayout.BeginHorizontal(); - EditorGUILayout.LabelField("▲多语言模块列表"); + EditorGUILayout.LabelField("▲多语言模块列表(双击选择文件)"); GUILayout.FlexibleSpace(); if (GUILayout.Button("新增模块", GUILayout.Width(70))) { AddLanguageModelGUI(); } GUILayout.EndHorizontal(); - GUILayout.Space(5); - - pos_editorField = EditorGUILayout.BeginScrollView(pos_editorField,"box", GUILayout.ExpandHeight(false)); - int index = 0; - foreach (var item in s_languageKeyDict) + GUILayout.Space(9); + GUIStyle style = "box"; + if (!string.IsNullOrEmpty(selectItemFullName)) { - EditorGUI.indentLevel = 2; - - GUIStyle style = "box"; - if (item.Key == selectEditorModuleName) - { - //GUI.color = Color.red; - style = "U2D.createRect"; - } - - EditorGUILayout.BeginHorizontal(style); - if (item.Key != selectEditorModuleName && GUILayout.Button("o",GUILayout.Width(20))) - { - selectEditorModuleName = item.Key; - toolbarOption = 1; - } - GUILayout.Label(index+". " + item.Key); - GUILayout.FlexibleSpace(); - - GUILayout.Space(6); - if (GUILayout.Button("删除",GUILayout.Width(40))) + style = "U2D.createRect"; + } + GUILayout.BeginHorizontal(style); + GUILayout.Label("选择的文件:" + selectItemFullName); + if (!string.IsNullOrEmpty(selectItemFullName)) + { + if (GUILayout.Button("删除", GUILayout.Width(40))) { - if (EditorUtility.DisplayDialog("提示", "确定删除 :"+ item.Key, "OK", "Cancel")) + if (EditorUtility.DisplayDialog("提示", "确定删除 :" + selectItemFullName, "OK", "Cancel")) { - if (item.Key == selectEditorModuleName) + if (selectItemFullName == selectEditorModuleName) selectEditorModuleName = ""; - s_languageKeyDict.Remove(item.Key); + s_languageKeyDict.Remove(selectItemFullName); foreach (var lan in s_languageList) { - string moduleName= LanguageManager.GetLanguageDataName(lan, item.Key) + ".txt"; + string moduleName = LanguageManager.GetLanguageDataName(lan, selectItemFullName) + ".txt"; FileUtils.DeleteFile(Application.dataPath + "/Resources/" + DataManager.c_directoryName + "/" + c_DataPath + "/" + lan + "/" + moduleName); } SaveData(); AssetDatabase.Refresh(); - break; + selectItemFullName = ""; + OnEnable(); } - + } + } + GUILayout.EndHorizontal(); + GUILayout.Space(8); + Rect rect = GUILayoutUtility.GetRect(0, 100000, 0, 100000); + treeView.OnGUI(rect); + //pos_editorField = EditorGUILayout.BeginScrollView(pos_editorField,"box", GUILayout.ExpandHeight(false)); + + + //int index = 0; + //foreach (var item in s_languageKeyDict) + //{ + // EditorGUI.indentLevel = 2; + + // GUIStyle style = "box"; + // if (item.Key == selectEditorModuleName) + // { + // //GUI.color = Color.red; + // style = "U2D.createRect"; + // } + + // EditorGUILayout.BeginHorizontal(style); + // if (item.Key != selectEditorModuleName && GUILayout.Button("o",GUILayout.Width(20))) + // { + // selectEditorModuleName = item.Key; + // toolbarOption = 1; + // } + // GUILayout.Label(index+". " + item.Key); + // GUILayout.FlexibleSpace(); + + // GUILayout.Space(6); - EditorGUILayout.EndHorizontal(); + + // if (GUILayout.Button("删除",GUILayout.Width(40))) + // { + + // if (EditorUtility.DisplayDialog("提示", "确定删除 :"+ item.Key, "OK", "Cancel")) + // { + // if (item.Key == selectEditorModuleName) + // selectEditorModuleName = ""; + // s_languageKeyDict.Remove(item.Key); + + // foreach (var lan in s_languageList) + // { + // string moduleName= LanguageManager.GetLanguageDataName(lan, item.Key) + ".txt"; + // FileUtils.DeleteFile(Application.dataPath + "/Resources/" + DataManager.c_directoryName + "/" + c_DataPath + "/" + lan + "/" + moduleName); + // } + // SaveData(); + // AssetDatabase.Refresh(); + // break; + // } + + // } - GUI.color = Color.white; + // EditorGUILayout.EndHorizontal(); - EditorGUILayout.Space(); + // GUI.color = Color.white; - EditorGUI.indentLevel = 1; + // EditorGUILayout.Space(); - index++; - } + // EditorGUI.indentLevel = 1; + + // index++; + //} - EditorGUILayout.EndScrollView(); + //EditorGUILayout.EndScrollView(); } diff --git a/Assets/Script/Core/Editor/UI/ReplaceFont4uGUI.cs b/Assets/Script/Core/Editor/UI/ReplaceFont4uGUI.cs new file mode 100644 index 00000000..7e6c5bed --- /dev/null +++ b/Assets/Script/Core/Editor/UI/ReplaceFont4uGUI.cs @@ -0,0 +1,83 @@ +using UnityEngine; +using System.Collections; +using UnityEditor; +using System.IO; +using UnityEngine.UI; + +public class ReplaceFont4uGUI : EditorWindow +{ + [MenuItem("Tool/替换UI字体")] + public static void OpenWindow() + { + EditorWindow.GetWindow(); + + } + private Font matchingfont; + private Font replaceFont; + void OnGUI() + { + Object[] selectObjs = Selection.GetFiltered(typeof(GameObject), SelectionMode.DeepAssets); + GUILayout.Label("选中数目:" + selectObjs.Length); + matchingfont = (Font)EditorGUILayout.ObjectField("需要替换的字体:",matchingfont, typeof(Font),true); + EditorGUILayout.Separator(); + replaceFont = (Font)EditorGUILayout.ObjectField("替换的字体:", replaceFont, typeof(Font), true); + EditorGUILayout.Separator(); + GUILayout.Space(15); + if (GUILayout.Button("替换")) + { + int num = CorrectionPublicFont(replaceFont, matchingfont); + EditorUtility.DisplayDialog("提示", "成功替换" + num + "处", "OK"); + } + } + private static int CorrectionPublicFont(Font replace, Font matching) + { + int replaceNum = 0; + Object[] selectObjs = Selection.GetFiltered(typeof(GameObject), SelectionMode.DeepAssets); + foreach (Object selectObj in selectObjs) + { + GameObject obj = (GameObject)selectObj; + if (obj == null || selectObj == null) + { + Debug.LogWarning("ERROR:Obj Is Null !!!"); + continue; + } + string path = AssetDatabase.GetAssetPath(selectObj); + if (path.Length < 1 || path.EndsWith(".prefab") == false) + { + Debug.LogWarning("ERROR:Folder=" + path); + } + else + { + Debug.Log("Selected Folder=" + path); + GameObject clone = GameObject.Instantiate(obj) as GameObject; + Text[] labels = clone.GetComponentsInChildren(true); + foreach (Text label in labels) + { + if (label.font == matching) + { + label.font = replace; + replaceNum++; + } + } + SaveDealFinishPrefab(clone, path); + GameObject.DestroyImmediate(clone); + Debug.Log("Connect Font Success=" + path); + } + } + AssetDatabase.Refresh(); + + return replaceNum; + } + private static void SaveDealFinishPrefab(GameObject go, string path) + { + if (File.Exists(path)) + { + Object prefab = AssetDatabase.LoadAssetAtPath(path, typeof(GameObject)); + PrefabUtility.ReplacePrefab(go, prefab); + } + else + { + PrefabUtility.CreatePrefab(path, go); + } + } +} diff --git a/Assets/Script/Core/Editor/UI/ReplaceFont4uGUI.cs.meta b/Assets/Script/Core/Editor/UI/ReplaceFont4uGUI.cs.meta new file mode 100644 index 00000000..909e842f --- /dev/null +++ b/Assets/Script/Core/Editor/UI/ReplaceFont4uGUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd6c9cfe09ac436418be14737f185a57 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/UI/UICreateService.cs b/Assets/Script/Core/Editor/UI/UICreateService.cs index 037315a8..6c5d1bc2 100644 --- a/Assets/Script/Core/Editor/UI/UICreateService.cs +++ b/Assets/Script/Core/Editor/UI/UICreateService.cs @@ -335,12 +335,14 @@ public static void CreateGuideWindow() GameObject Text_tips = new GameObject("Text_tip"); Text_tips.layer = LayerMask.NameToLayer("UI"); RectTransform txt_tipsrt = Text_tips.AddComponent(); - Text_tips.AddComponent(); + Text text = Text_tips.AddComponent(); txt_tipsrt.SetParent(tipsrt); guideBaseTmp.m_objectList.Add(Text_tips); guideBaseTmp.m_mask = img; + guideBaseTmp.m_TipText = text; + guideBaseTmp.m_TipTransfrom = txt_tipsrt; guideBaseTmp.m_bgMask = BgGo; guideBaseTmp.m_uiRoot = rootGo; diff --git a/Assets/Script/Core/Editor/UI/componment/LanguageComponmentEditor.cs b/Assets/Script/Core/Editor/UI/componment/LanguageComponmentEditor.cs index 03cbc36d..8031429c 100644 --- a/Assets/Script/Core/Editor/UI/componment/LanguageComponmentEditor.cs +++ b/Assets/Script/Core/Editor/UI/componment/LanguageComponmentEditor.cs @@ -31,7 +31,8 @@ public override void OnInspectorGUI() } if (m_languageList == null) m_languageList = LanguageDataEditorUtils.GetLanguageLayersKeyList(); - + GUILayout.Space(6); + m_lc.languageKey = EditorDrawGUIUtil.DrawBaseValue("多语言key", m_lc.languageKey).ToString(); GUILayout.Space(6); m_lc.languageKey = EditorDrawGUIUtil.DrawPopup("多语言key", m_lc.languageKey, m_languageList); m_lc.ResetLanguage(); diff --git a/Assets/Script/Core/Editor/Utils/EditorDrawGUIUtil.cs b/Assets/Script/Core/Editor/Utils/EditorDrawGUIUtil.cs index 7eccc084..76221520 100644 --- a/Assets/Script/Core/Editor/Utils/EditorDrawGUIUtil.cs +++ b/Assets/Script/Core/Editor/Utils/EditorDrawGUIUtil.cs @@ -639,6 +639,128 @@ public static object DrawList(GUIContent name, object data, CallBackR ad return data; } + /// + /// 绘制List泛型 + /// + /// + /// + /// 自定义添加新的Item + /// 当Item添加或删除时回调 + /// 自定义绘制Item + /// + public static int DrawPage(GUIContent name,int index, object data, CallBackR addCustomData = null, CallBack ItemChnageCallBack = null, CallBackR customDrawItem = null) + { + if (data == null) + { + DrawLableString(name, "Null"); + return -1; + } + + Type type = data.GetType(); + Type t = type.GetGenericArguments()[0]; + + int count = (int)type.GetProperty("Count").GetValue(data, null); + //Debug.Log(name + " count :" + count); + + MethodInfo methodInfo = type.GetMethod("get_Item", BindingFlags.Instance | BindingFlags.Public); + MethodInfo methodInfo1 = type.GetMethod("set_Item", BindingFlags.Instance | BindingFlags.Public); + MethodInfo methodInfo2 = type.GetMethod("RemoveAt", BindingFlags.Instance | BindingFlags.Public); + MethodInfo methodInfo3 = type.GetMethod("Add", BindingFlags.Instance | BindingFlags.Public); + MethodInfo methodInfo4 = type.GetMethod("Reverse", new Type[] { typeof(int), typeof(int) }); + + GUILayout.BeginVertical("box"); + GUILayout.BeginHorizontal(); + GUILayout.Label(name); + GUILayout.FlexibleSpace(); + if (GUILayout.Button("<",GUILayout.Width(60))) + { + index--; + + } + GUILayout.Label(index + "/" + (count - 1)); + if (GUILayout.Button(">", GUILayout.Width(60))) + { + index++; + + } + GUILayout.FlexibleSpace(); + + if (index <= 0) + index = 0; + if (index >= count) + index = count - 1; + + if (CanEdit && GUILayout.Button("+", GUILayout.Width(50))) + { + object temp = null; + if (addCustomData != null) + { + object tempVV = addCustomData(); + if (tempVV == null || tempVV.GetType().FullName != t.FullName) + temp = ReflectionUtils.CreateDefultInstance(t); + else + temp = tempVV; + } + else + temp = ReflectionUtils.CreateDefultInstance(t); + methodInfo3.Invoke(data, new object[] { temp }); + if (ItemChnageCallBack != null) + ItemChnageCallBack(true, temp); + } + GUILayout.EndHorizontal(); + + + if (count > 0) + { + GUILayout.BeginVertical("box"); + + int i = index; + object da = methodInfo.Invoke(data, new object[] { i }); + GUILayout.BeginHorizontal(); + GUILayout.BeginVertical(); + if (customDrawItem != null) + { + da = customDrawItem(da); + } + else + { + da = DrawBaseValue("" + i, da); + } + GUILayout.EndVertical(); + methodInfo1.Invoke(data, new object[] { i, da }); + if (CanEdit && GUILayout.Button("↑", GUILayout.Width(15))) + { + if (i != 0) + { + methodInfo4.Invoke(data, new object[] { i - 1, 2 }); + } + + } + if (CanEdit && GUILayout.Button("↓", GUILayout.Width(15))) + { + if (i != (count - 1)) + { + methodInfo4.Invoke(data, new object[] { i, 2 }); + } + + } + if (CanEdit && GUILayout.Button("-", GUILayout.Width(30))) + { + methodInfo2.Invoke(data, new object[] { i }); + if (ItemChnageCallBack != null) + ItemChnageCallBack(false, da); + + } + GUILayout.EndHorizontal(); + + + + GUILayout.EndVertical(); + } + GUILayout.EndVertical(); + + return index; + } public static object DrawArray(string name, object data, CallBackR addCustomData = null, CallBack ItemChnageCallBack = null, CallBackR customDrawItem = null) { diff --git a/Assets/Script/Core/Effect/CameraFade.cs b/Assets/Script/Core/Effect/CameraFade.cs index 3ba81eb2..bb013bd5 100644 --- a/Assets/Script/Core/Effect/CameraFade.cs +++ b/Assets/Script/Core/Effect/CameraFade.cs @@ -107,7 +107,7 @@ IEnumerator FadeAction(bool isFadeIn,float tempFadeTime, CallBack _fun) } yield return new WaitForEndOfFrame(); isFading = false; - Debug.Log("Camera fade alpha: " + alpha); + //Debug.Log("Camera fade alpha: " + alpha); try { if (_fun != null) diff --git a/Assets/Script/Core/GuideSystem/GuideSystemBase.cs b/Assets/Script/Core/GuideSystem/GuideSystemBase.cs index eac320e6..12a82475 100644 --- a/Assets/Script/Core/GuideSystem/GuideSystemBase.cs +++ b/Assets/Script/Core/GuideSystem/GuideSystemBase.cs @@ -95,11 +95,20 @@ public void Next() /// /// 新手引导开始点 /// - public void Start() + public void Start(string guideKey = null) { - SingleData guideData = LoadFirstGuide(); + SingleData guideData; - if (!IsStart + if (guideKey != null) + { + guideData = GetGuideDataByName(guideKey); + } + else + { + guideData = LoadFirstGuide(); + } + + if (!IsStart && guideData != null && GuideStartCondition(guideData) && GetGuideSwitch()) diff --git a/Assets/Script/Core/Input/Events/UI/InputUILongPressEvent.cs b/Assets/Script/Core/Input/Events/UI/InputUILongPressEvent.cs index fc9eb9b5..e6b1689f 100644 --- a/Assets/Script/Core/Input/Events/UI/InputUILongPressEvent.cs +++ b/Assets/Script/Core/Input/Events/UI/InputUILongPressEvent.cs @@ -4,8 +4,6 @@ public class InputUILongPressEvent : InputUIEventBase { - public InputUIEventType m_LongPressType; - public static string GetEventKey(string UIName, string ComponentName, string pram = null) { return UIName + "." + ComponentName + "." + pram + "." + InputUIEventType.LongPress.ToString(); diff --git a/Assets/Script/Core/Input/InputEventProxy/InputUIEventProxy.cs b/Assets/Script/Core/Input/InputEventProxy/InputUIEventProxy.cs index a8ce83c4..add75431 100644 --- a/Assets/Script/Core/Input/InputEventProxy/InputUIEventProxy.cs +++ b/Assets/Script/Core/Input/InputEventProxy/InputUIEventProxy.cs @@ -125,7 +125,8 @@ public static void DispatchLongPressEvent(string UIName, string ComponentName, s if (IsActive) { InputUILongPressEvent e = GetUIEvent(UIName, ComponentName, parm); - e.m_LongPressType = type; + e.m_type = type; + //e.m_LongPressType = type; e.EventKey = InputUILongPressEvent.GetEventKey(UIName, ComponentName, parm); InputManager.Dispatch("InputUILongPressEvent",e); @@ -212,23 +213,18 @@ public class InputButtonClickRegisterInfo : InputEventRegisterInfo public DragAcceptor m_acceptor; public InputUIEventDragCallBack m_OnDrag; - public override void AddListener(bool isSole) + public override void AddListener() { - base.AddListener(isSole); - if (isSole) - { - m_acceptor.m_OnDrag += m_OnDrag; - } + base.AddListener(); + m_acceptor.m_OnDrag += m_OnDrag; } - public override void RemoveListener(bool isSole) + public override void RemoveListener() { - base.RemoveListener(isSole); - if (isSole) - { - m_acceptor.m_OnDrag -= m_OnDrag; - } + base.RemoveListener(); + m_acceptor.m_OnDrag -= m_OnDrag; } } @@ -285,22 +270,16 @@ public class InputBeginDragRegisterInfo : InputEventRegisterInfo : InputEventRegisterInfo where T : IInputEventBase @@ -56,7 +56,7 @@ public InputEventRegisterInfo() /// 添加监听和派发 /// /// 这个eventKey是否已经注册过了,如果是则不在派发对象上重复派发 - public override void AddListener(bool isSole) + public override void AddListener() { InputManager.AddListener(eventKey, callBack); } @@ -65,7 +65,7 @@ public override void AddListener(bool isSole) /// 移除监听和派发 /// /// 这是不是这个eventKey最后一个监听事件,如果是则移除派发 - public override void RemoveListener(bool isSole) + public override void RemoveListener() { InputManager.RemoveListener(eventKey, callBack); HeapObjectPool>.PutObject(this); diff --git a/Assets/Script/Core/Input/RandomService.cs b/Assets/Script/Core/Input/RandomService.cs index f4c7f7f0..101945a6 100644 --- a/Assets/Script/Core/Input/RandomService.cs +++ b/Assets/Script/Core/Input/RandomService.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System; -public class RandomService +public class RandomService { static RandomHandel s_onRandomCreat; @@ -37,9 +37,9 @@ public static int GetRandReal(int min, int max) return Range(min, max + 1); } - public static int Range(int min,int max) + public static int Range(int min, int max) { - if(!s_isFixedRandom) + if (!s_isFixedRandom) { int random = UnityEngine.Random.Range(min, max); @@ -92,6 +92,48 @@ static int GetFixedRandom() throw new Exception("RandomService Exception no RandomList!"); } } + + public class FixRandom + { + public int m_RandomSeed = 0; + + int m_randomA = 9301; + int m_randomB = 49297; + int m_randomC = 233280; + + public FixRandom(int seed) + { + SetFixRandomSeed(seed); + } + + public void SetFixRandomSeed(int seed) + { + m_RandomSeed = seed; + } + + public void SetFixRandomParm(int a, int b, int c) + { + m_randomA = a; + m_randomB = b; + m_randomC = c; + } + + public int GetFixRandom() + { + m_RandomSeed = Math.Abs((m_RandomSeed * m_randomA + m_randomB) % m_randomC); + + return m_RandomSeed; + } + + public int Range(int min, int max) + { + if (max <= min) + return min; + int random = GetFixRandom(); + int range = max - min; + return (random % range) + min; + } + } } public delegate void RandomHandel(int random); diff --git a/Assets/Script/Core/UI/Components/ReusingScrollRect/ScrollRectInput.cs b/Assets/Script/Core/UI/Components/ReusingScrollRect/ScrollRectInput.cs index 17779a62..3b504b41 100644 --- a/Assets/Script/Core/UI/Components/ReusingScrollRect/ScrollRectInput.cs +++ b/Assets/Script/Core/UI/Components/ReusingScrollRect/ScrollRectInput.cs @@ -15,7 +15,7 @@ public virtual void Init(string UIEventKey) public virtual void Dispose() { - m_register.RemoveListener(true); + m_register.RemoveListener(); } protected override void SetContentAnchoredPosition(Vector2 position) diff --git a/Assets/Script/Core/UI/Control/UIAnimManager.cs b/Assets/Script/Core/UI/Control/UIAnimManager.cs index 167d1759..9a7ba97e 100644 --- a/Assets/Script/Core/UI/Control/UIAnimManager.cs +++ b/Assets/Script/Core/UI/Control/UIAnimManager.cs @@ -5,23 +5,24 @@ public class UIAnimManager : MonoBehaviour { //开始调用进入动画 - public void StartEnterAnim(UIWindowBase l_UIbase, UICallBack callBack, params object[] objs) + public void StartEnterAnim(UIWindowBase UIbase, UICallBack callBack, params object[] objs) { - UISystemEvent.Dispatch(l_UIbase, UIEvent.OnStartEnterAnim); - StartCoroutine(l_UIbase.EnterAnim(EndEnterAnim, callBack, objs)); + UISystemEvent.Dispatch(UIbase, UIEvent.OnStartEnterAnim); + StartCoroutine(UIbase.EnterAnim(EndEnterAnim, callBack, objs)); } //进入动画播放完毕回调 - public void EndEnterAnim(UIWindowBase l_UIbase, UICallBack callBack, params object[] objs) + public void EndEnterAnim(UIWindowBase UIbase, UICallBack callBack, params object[] objs) { - UISystemEvent.Dispatch(l_UIbase, UIEvent.OnCompleteEnterAnim); - l_UIbase.OnCompleteEnterAnim(); + UISystemEvent.Dispatch(UIbase, UIEvent.OnCompleteEnterAnim); + UIbase.OnCompleteEnterAnim(); + UIbase.windowStatus = UIWindowBase.WindowStatus.Open; try { if (callBack!= null) { - callBack(l_UIbase, objs); + callBack(UIbase, objs); } } catch (Exception e) @@ -31,23 +32,24 @@ public void EndEnterAnim(UIWindowBase l_UIbase, UICallBack callBack, params obje } //开始调用退出动画 - public void StartExitAnim(UIWindowBase l_UIbase, UICallBack callBack, params object[] objs) + public void StartExitAnim(UIWindowBase UIbase, UICallBack callBack, params object[] objs) { - UISystemEvent.Dispatch(l_UIbase, UIEvent.OnStartExitAnim); - StartCoroutine(l_UIbase.ExitAnim(EndExitAnim, callBack, objs)); + UISystemEvent.Dispatch(UIbase, UIEvent.OnStartExitAnim); + StartCoroutine(UIbase.ExitAnim(EndExitAnim, callBack, objs)); } //退出动画播放完毕回调 - public void EndExitAnim(UIWindowBase l_UIbase, UICallBack callBack, params object[] objs) + public void EndExitAnim(UIWindowBase UIbase, UICallBack callBack, params object[] objs) { - UISystemEvent.Dispatch(l_UIbase, UIEvent.OnCompleteExitAnim); - l_UIbase.OnCompleteExitAnim(); + UISystemEvent.Dispatch(UIbase, UIEvent.OnCompleteExitAnim); + UIbase.OnCompleteExitAnim(); + UIbase.windowStatus = UIWindowBase.WindowStatus.Close; try { if (callBack != null) { - callBack(l_UIbase, objs); + callBack(UIbase, objs); } } catch(Exception e) diff --git a/Assets/Script/Core/UI/Control/UIManager.cs b/Assets/Script/Core/UI/Control/UIManager.cs index 8c0bfedf..a02ac4bf 100644 --- a/Assets/Script/Core/UI/Control/UIManager.cs +++ b/Assets/Script/Core/UI/Control/UIManager.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System; using System.Text.RegularExpressions; +using UnityEngine.EventSystems; [RequireComponent(typeof(UIStackManager))] [RequireComponent(typeof(UILayerManager))] @@ -14,6 +15,7 @@ public class UIManager : MonoBehaviour public static UIAnimManager s_UIAnimManager; //UI动画管理器 public static UIStackManager s_UIStackManager; //UI栈管理器 public static Camera s_UIcamera; //UICamera + public static EventSystem s_EventSystem; static public Dictionary> s_UIs = new Dictionary>(); //打开的UI static public Dictionary> s_hideUIs = new Dictionary>(); //隐藏的UI @@ -35,8 +37,7 @@ public static void Init() s_UIAnimManager = instance.GetComponent(); s_UIStackManager = instance.GetComponent(); s_UIcamera = instance.GetComponentInChildren(); - - + s_EventSystem = instance.GetComponentInChildren(); DontDestroyOnLoad(instance); } @@ -68,7 +69,23 @@ static void SetUIManager(GameObject instance) DontDestroyOnLoad(instance); } -#endregion + #endregion + + #region EventSystem + + public static void SetEventSystemEnable(bool enable) + { + if(s_EventSystem != null) + { + s_EventSystem.enabled = enable; + } + else + { + Debug.LogError("EventSystem.current is null !"); + } + } + + #endregion #region UI的打开与关闭方法 @@ -81,12 +98,17 @@ public static T CreateUIWindow() where T : UIWindowBase { return (T)CreateUIWindow(typeof(T).Name); } + public static UIWindowBase CreateUIWindow(string UIName) { GameObject UItmp = GameObjectManager.CreateGameObject(UIName, s_UIManagerGo); UIWindowBase UIbase = UItmp.GetComponent(); UISystemEvent.Dispatch(UIbase, UIEvent.OnInit); //派发OnInit事件 - try{ + + UIbase.windowStatus = UIWindowBase.WindowStatus.Create; + + try + { UIbase.Init(GetUIID(UIName)); } catch(Exception e) @@ -122,6 +144,8 @@ public static UIWindowBase OpenUIWindow(string UIName, UICallBack callback = nul s_UIStackManager.OnUIOpen(UIbase); s_UILayerManager.SetLayer(UIbase); //设置层级 + UIbase.windowStatus = UIWindowBase.WindowStatus.OpenAnim; + UISystemEvent.Dispatch(UIbase, UIEvent.OnOpen); //派发OnOpen事件 try { @@ -165,7 +189,7 @@ public static void CloseUIWindow(UIWindowBase UI,bool isPlayAnim = true ,UICallB { callback = CloseUIWindowCallBack; } - + UI.windowStatus = UIWindowBase.WindowStatus.CloseAnim; s_UIAnimManager.StartExitAnim(UI, callback, objs); } else @@ -175,6 +199,7 @@ public static void CloseUIWindow(UIWindowBase UI,bool isPlayAnim = true ,UICallB } static void CloseUIWindowCallBack(UIWindowBase UI, params object[] objs) { + UI.windowStatus = UIWindowBase.WindowStatus.Close; UISystemEvent.Dispatch(UI, UIEvent.OnClose); //派发OnClose事件 try { @@ -215,7 +240,9 @@ public static UIWindowBase ShowUI(string UIname) public static UIWindowBase ShowUI(UIWindowBase ui) { + ui.windowStatus = UIWindowBase.WindowStatus.Open; UISystemEvent.Dispatch(ui, UIEvent.OnShow); //派发OnShow事件 + try { ui.Show(); @@ -237,6 +264,7 @@ public static UIWindowBase HideUI(string UIname) public static UIWindowBase HideUI(UIWindowBase ui) { + ui.windowStatus = UIWindowBase.WindowStatus.Hide; UISystemEvent.Dispatch(ui, UIEvent.OnHide); //派发OnHide事件 try @@ -398,7 +426,7 @@ public static UIWindowBase GetUI(string UIname) { if (!s_UIs.ContainsKey(UIname)) { - //Debug.Log("!ContainsKey " + l_UIname); + //Debug.Log("!ContainsKey " + UIname); return null; } else @@ -568,6 +596,12 @@ public static void DestroyAllHideUI() s_hideUIs.Clear(); } + public static T GetHideUI() where T:UIWindowBase + { + string UIname = typeof(T).Name; + return (T)GetHideUI(UIname); + } + /// /// 获取一个隐藏的UI,如果有多个同名UI,则返回最后创建的那一个 /// diff --git a/Assets/Script/Core/UI/Extensions/Gradient.cs b/Assets/Script/Core/UI/Extensions/Gradient.cs new file mode 100644 index 00000000..a3284030 --- /dev/null +++ b/Assets/Script/Core/UI/Extensions/Gradient.cs @@ -0,0 +1,119 @@ +/// Credit Breyer +/// Sourced from - http://forum.unity3d.com/threads/scripts-useful-4-6-scripts-collection.264161/#post-1780095 + +using System.Collections.Generic; + +namespace UnityEngine.UI.Extensions +{ + [AddComponentMenu("UI/Effects/Extensions/Gradient")] + public class Gradient : BaseMeshEffect + { + [SerializeField] + private GradientMode _gradientMode = GradientMode.Global; + [SerializeField] + private GradientDir _gradientDir = GradientDir.Vertical; + [SerializeField] + private bool _overwriteAllColor = false; + [SerializeField] + private Color _vertex1 = Color.white; + [SerializeField] + private Color _vertex2 = Color.black; + private Graphic targetGraphic; + + #region Properties + public GradientMode GradientMode { get { return _gradientMode; } set { _gradientMode = value; graphic.SetVerticesDirty(); } } + public GradientDir GradientDir { get { return _gradientDir; } set { _gradientDir = value; graphic.SetVerticesDirty(); } } + public bool OverwriteAllColor { get { return _overwriteAllColor; } set { _overwriteAllColor = value; graphic.SetVerticesDirty(); } } + public Color Vertex1 { get { return _vertex1; } set { _vertex1 = value; graphic.SetAllDirty(); } } + public Color Vertex2 { get { return _vertex2; } set { _vertex2 = value; graphic.SetAllDirty(); } } + #endregion + + protected override void Awake() + { + targetGraphic = GetComponent(); + } + + public override void ModifyMesh(VertexHelper vh) + { + int count = vh.currentVertCount; + if (!IsActive() || count == 0) + { + return; + } + var vertexList = new List(); + vh.GetUIVertexStream(vertexList); + UIVertex uiVertex = new UIVertex(); + if (_gradientMode == GradientMode.Global) + { + if (_gradientDir == GradientDir.DiagonalLeftToRight || _gradientDir == GradientDir.DiagonalRightToLeft) + { +#if UNITY_EDITOR + Debug.LogWarning("Diagonal dir is not supported in Global mode"); +#endif + _gradientDir = GradientDir.Vertical; + } + float bottomY = _gradientDir == GradientDir.Vertical ? vertexList[vertexList.Count - 1].position.y : vertexList[vertexList.Count - 1].position.x; + float topY = _gradientDir == GradientDir.Vertical ? vertexList[0].position.y : vertexList[0].position.x; + + float uiElementHeight = topY - bottomY; + + for (int i = 0; i < count; i++) + { + vh.PopulateUIVertex(ref uiVertex, i); + if (!_overwriteAllColor && uiVertex.color != targetGraphic.color) + continue; + uiVertex.color *= Color.Lerp(_vertex2, _vertex1, ((_gradientDir == GradientDir.Vertical ? uiVertex.position.y : uiVertex.position.x) - bottomY) / uiElementHeight); + vh.SetUIVertex(uiVertex, i); + } + } + else + { + for (int i = 0; i < count; i++) + { + vh.PopulateUIVertex(ref uiVertex, i); + if (!_overwriteAllColor && !CompareCarefully(uiVertex.color, targetGraphic.color)) + continue; + switch (_gradientDir) + { + case GradientDir.Vertical: + uiVertex.color *= (i % 4 == 0 || (i - 1) % 4 == 0) ? _vertex1 : _vertex2; + break; + case GradientDir.Horizontal: + uiVertex.color *= (i % 4 == 0 || (i - 3) % 4 == 0) ? _vertex1 : _vertex2; + break; + case GradientDir.DiagonalLeftToRight: + uiVertex.color *= (i % 4 == 0) ? _vertex1 : ((i - 2) % 4 == 0 ? _vertex2 : Color.Lerp(_vertex2, _vertex1, 0.5f)); + break; + case GradientDir.DiagonalRightToLeft: + uiVertex.color *= ((i - 1) % 4 == 0) ? _vertex1 : ((i - 3) % 4 == 0 ? _vertex2 : Color.Lerp(_vertex2, _vertex1, 0.5f)); + break; + + } + vh.SetUIVertex(uiVertex, i); + } + } + } + private bool CompareCarefully(Color col1, Color col2) + { + if (Mathf.Abs(col1.r - col2.r) < 0.003f && Mathf.Abs(col1.g - col2.g) < 0.003f && Mathf.Abs(col1.b - col2.b) < 0.003f && Mathf.Abs(col1.a - col2.a) < 0.003f) + return true; + return false; + } + } + + public enum GradientMode + { + Global, + Local + } + + public enum GradientDir + { + Vertical, + Horizontal, + DiagonalLeftToRight, + DiagonalRightToLeft + //Free + } + //enum color mode Additive, Multiply, Overwrite +} \ No newline at end of file diff --git a/Assets/Script/Core/UI/Extensions/Gradient.cs.meta b/Assets/Script/Core/UI/Extensions/Gradient.cs.meta new file mode 100644 index 00000000..69595bd4 --- /dev/null +++ b/Assets/Script/Core/UI/Extensions/Gradient.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a7ff52427cb097a4c831e0a6b419246e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/UI/Model/UIBase.cs b/Assets/Script/Core/UI/Model/UIBase.cs index af20baba..85038544 100644 --- a/Assets/Script/Core/UI/Model/UIBase.cs +++ b/Assets/Script/Core/UI/Model/UIBase.cs @@ -558,32 +558,32 @@ public virtual void RemoveAllListener() for (int i = 0; i < m_OnClickEvents.Count; i++) { - m_OnClickEvents[i].RemoveListener(true); + m_OnClickEvents[i].RemoveListener(); } m_OnClickEvents.Clear(); for (int i = 0; i < m_LongPressEvents.Count; i++) { - m_LongPressEvents[i].RemoveListener(true); + m_LongPressEvents[i].RemoveListener(); } m_LongPressEvents.Clear(); #region 拖动事件 for (int i = 0; i < m_DragEvents.Count; i++) { - m_DragEvents[i].RemoveListener(true); + m_DragEvents[i].RemoveListener(); } m_DragEvents.Clear(); for (int i = 0; i < m_BeginDragEvents.Count; i++) { - m_BeginDragEvents[i].RemoveListener(true); + m_BeginDragEvents[i].RemoveListener(); } m_BeginDragEvents.Clear(); for (int i = 0; i < m_EndDragEvents.Count; i++) { - m_EndDragEvents[i].RemoveListener(true); + m_EndDragEvents[i].RemoveListener(); } m_EndDragEvents.Clear(); #endregion @@ -608,21 +608,21 @@ bool GetRegister(List list, string eventKey) public void AddOnClickListener(string buttonName, InputEventHandle callback, string parm = null) { InputButtonClickRegisterInfo info = InputUIEventProxy.GetOnClickListener(GetButton(buttonName), UIEventKey, buttonName, parm, callback); - info.AddListener(GetRegister(m_OnClickEvents, info.eventKey)); + info.AddListener(); m_OnClickEvents.Add(info); } public void AddOnClickListenerByCreate(Button button, string compName, InputEventHandle callback, string parm = null) { InputButtonClickRegisterInfo info = InputUIEventProxy.GetOnClickListener(button, UIEventKey, compName, parm, callback); - info.AddListener(GetRegister(m_OnClickEvents, info.eventKey)); + info.AddListener(); m_OnClickEvents.Add(info); } public void AddLongPressListener(string compName, InputEventHandle callback, string parm = null) { InputEventRegisterInfo info = InputUIEventProxy.GetLongPressListener(GetLongPressComp(compName), UIEventKey, compName, parm, callback); - info.AddListener(GetRegister(m_LongPressEvents, info.eventKey)); + info.AddListener(); m_LongPressEvents.Add(info); } @@ -630,21 +630,21 @@ public void AddLongPressListener(string compName, InputEventHandle callback, string parm = null) { InputEventRegisterInfo info = InputUIEventProxy.GetOnDragListener(GetDragComp(compName), UIEventKey, compName, parm, callback); - info.AddListener(GetRegister(m_DragEvents, info.eventKey)); + info.AddListener(); m_DragEvents.Add(info); } public void AddBeginDragListener(string compName, InputEventHandle callback, string parm = null) { InputEventRegisterInfo info = InputUIEventProxy.GetOnBeginDragListener(GetDragComp(compName), UIEventKey, compName, parm, callback); - info.AddListener(GetRegister(m_BeginDragEvents, info.eventKey)); + info.AddListener(); m_BeginDragEvents.Add(info); } public void AddEndDragListener(string compName, InputEventHandle callback, string parm = null) { InputEventRegisterInfo info = InputUIEventProxy.GetOnEndDragListener(GetDragComp(compName), UIEventKey, compName, parm, callback); - info.AddListener(GetRegister(m_EndDragEvents, info.eventKey)); + info.AddListener(); m_EndDragEvents.Add(info); } @@ -685,7 +685,7 @@ public void RemoveOnClickListener(string buttonName, InputEventHandle(); + + } + return instance; + } + + set + { + instance = value; + } + } + private float alpha = 0; + private Texture2D crossfadeTexture; + void OnAwake() + { + crossfadeTexture = new Texture2D(1, 1, TextureFormat.RGB24, false); + crossfadeTexture.SetPixel(0, 0, Color.black); + crossfadeTexture.Apply(); + DontDestroyOnLoad(this); + } + + + //淡入 + public void FadeIn(float _fadeInTime, CallBack _fun = null) + { + if (!isFading) + { + StartCoroutine(FadeAction(true, _fadeInTime, _fun)); + } + } + //淡出 + public void FadeOut(float _fadeOutTime, CallBack _fun = null) + { + if (!isFading) + { + StartCoroutine(FadeAction(false, _fadeOutTime, _fun)); + } + + } + //从淡入到淡出 + public void FadeInToOut(float _fadeInTime, float afterInDelayTime, float _fadeOutTime, CallBack afterFadeInCallback = null, CallBack afterFadeOutCallback = null) + { + if (!isFading) + { + StartCoroutine(FadeInToOutAction(_fadeInTime, afterInDelayTime, _fadeOutTime, afterFadeInCallback, afterFadeOutCallback)); + } + } + IEnumerator FadeInToOutAction(float _fadeInTime, float afterInDelayTime, float _fadeOutTime, CallBack afterFadeInCallback = null, CallBack afterFadeOutCallback = null) + { + yield return StartCoroutine(FadeAction(true, _fadeInTime, afterFadeInCallback)); + isFading = true; + yield return new WaitForSeconds(afterInDelayTime); + yield return StartCoroutine(FadeAction(false, _fadeOutTime, afterFadeOutCallback)); + } + public bool isFading = false; + + IEnumerator FadeAction(bool isFadeIn, float fadeTime, CallBack _fun) + { + isFading = true; + tempColor = GUI.color; + GUI.depth = 100; + if (isFadeIn) + alpha = 0; + else + alpha = 1; + + float tempTime = fadeTime + Time.unscaledTime; ; + + while (true) + { + if (!isFadeIn) + { + alpha = (tempTime - Time.unscaledTime) / fadeTime; + + if (alpha < 0.05f) + { + alpha = 0; + break; + } + } + else + { + alpha = Mathf.Clamp(1 - ((tempTime - Time.unscaledTime) / fadeTime), 0f, 1f); + + if (alpha >= 0.98f) + { + alpha = 1; + break; + } + } + yield return new WaitForEndOfFrame(); + } + //yield return new WaitForEndOfFrame(); + isFading = false; + try + { + if (_fun != null) + { + _fun(); + } + } + catch (Exception e) + { + Debug.LogError("Camera Fade Call back Exception :" + e); + } + } + + // Update is called once per frame + Color tempColor; + + + void OnGUI() + { + if (alpha <= 0) + return; + tempColor.a = alpha; + GUI.color = tempColor; + if (crossfadeTexture != null) + { + GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), crossfadeTexture, ScaleMode.StretchToFill); + + } + } + } +} + + diff --git a/Assets/Script/Core/Utils/CameraFade.cs.meta b/Assets/Script/Core/Utils/CameraFade.cs.meta new file mode 100644 index 00000000..81186d1e --- /dev/null +++ b/Assets/Script/Core/Utils/CameraFade.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 486be78ea164ee74e8cad441fca44e0e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/CameraShaker.meta b/Assets/Script/Core/Utils/CameraShaker.meta new file mode 100644 index 00000000..7c1dd38d --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3d4b6b95681438c4d8f0860bec664c6b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/CameraShaker/Demo.meta b/Assets/Script/Core/Utils/CameraShaker/Demo.meta new file mode 100644 index 00000000..72634c6d --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Demo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2f942ca566edac440afd26e1826a61c9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/CameraShaker/Demo/CameraShakeDemo.unity b/Assets/Script/Core/Utils/CameraShaker/Demo/CameraShakeDemo.unity new file mode 100644 index 0000000000000000000000000000000000000000..becd44a352d55f9d595dcb4abeb2df607ed30eaf GIT binary patch literal 18636 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 literal 0 HcmV?d00001 diff --git a/Assets/Script/Core/Utils/CameraShaker/Demo/CameraShakeDemo.unity.meta b/Assets/Script/Core/Utils/CameraShaker/Demo/CameraShakeDemo.unity.meta new file mode 100644 index 00000000..ceab552f --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Demo/CameraShakeDemo.unity.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5de374464329e1040846d66efdb64d3e +labels: +- Shake +- Camera +- Follow +- Animation +- Effect +DefaultImporter: + userData: diff --git a/Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts.meta b/Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts.meta new file mode 100644 index 00000000..5be078bf --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a202981d5c049ed45b3a291f91405ead +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeByDistance.cs b/Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeByDistance.cs new file mode 100644 index 00000000..4633a19d --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeByDistance.cs @@ -0,0 +1,31 @@ +using UnityEngine; + +/* + * This script shakes the camera based on the player object's distance to the object this script is attached to. + */ +public class ShakeByDistance : MonoBehaviour +{ + //Our player object. + public GameObject Player; + + //The maximum distance. If the player is farther away than this distance then no shaking will be visible. + public float Distance = 10f; + + //Our saved shake instance. + private CameraShakeInstance _shakeInstance; + + void Start() + { + //Create the shake instance. We will modify its properties in Update() + _shakeInstance = CameraShakerManager.GetCameraShaker("Main Camera").StartShake(2, 14, 0); + } + + void Update () + { + //Get the distance from the player to this object. + float currentDistance = Vector3.Distance(Player.transform.position, this.transform.position); + + //Scale the magnitude of our saved shake, so that the scale is higher the closer we get to the object. + _shakeInstance.ScaleMagnitude = 1 - Mathf.Clamp01(currentDistance / Distance); + } +} diff --git a/Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeByDistance.cs.meta b/Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeByDistance.cs.meta new file mode 100644 index 00000000..bc8ca5e8 --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeByDistance.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8b4e798129c8dfe4ca1a59272eacbd94 +timeCreated: 1465069706 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeOnKeyPress.cs b/Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeOnKeyPress.cs new file mode 100644 index 00000000..61e2abe5 --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeOnKeyPress.cs @@ -0,0 +1,14 @@ +using UnityEngine; + +public class ShakeOnKeyPress : MonoBehaviour +{ + public float Magnitude = 2f; + public float Roughness = 10f; + public float FadeOutTime = 5f; + + void Update () + { + if(Input.GetKeyDown(KeyCode.LeftShift)) + CameraShakerManager.GetCameraShaker("Main Camera").ShakeOnce(Magnitude, Roughness, 0, FadeOutTime); + } +} diff --git a/Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeOnKeyPress.cs.meta b/Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeOnKeyPress.cs.meta new file mode 100644 index 00000000..b6e94ca4 --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeOnKeyPress.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e64941b1002d73d45a26f04fa597c5c7 +timeCreated: 1465253680 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeOnTrigger.cs b/Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeOnTrigger.cs new file mode 100644 index 00000000..a8f436ac --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeOnTrigger.cs @@ -0,0 +1,42 @@ +using UnityEngine; + +/* + * This script begins shaking the camera when the player enters the trigger, and stops shaking when the player leaves. + */ +public class ShakeOnTrigger : MonoBehaviour +{ + //Our saved shake instance. + private CameraShakeInstance _shakeInstance; + + void Start() + { + //We make a single shake instance that we will fade in and fade out when the player enters and leaves the trigger area. + _shakeInstance = CameraShakerManager.GetCameraShaker("Main Camera").StartShake(2, 15, 2); + + //Immediately make the shake inactive. + _shakeInstance.StartFadeOut(0); + + //We don't want our shake to delete itself once it stops shaking. + _shakeInstance.DeleteOnInactive = true; + } + + //When the player enters the trigger, begin shaking. + void OnTriggerEnter(Collider c) + { + //Check to make sure the object that entered the trigger was the player. + if (c.CompareTag("Player")) + _shakeInstance.StartFadeIn(1); + } + + //When the player exits the trigger, stop shaking. + void OnTriggerExit(Collider c) + { + //Check to make sure the object that exited the trigger was the player. + if (c.CompareTag("Player")) + { + //Fade out the shake over 3 seconds. + _shakeInstance.StartFadeOut(3f); + } + + } +} diff --git a/Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeOnTrigger.cs.meta b/Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeOnTrigger.cs.meta new file mode 100644 index 00000000..2f8ccef5 --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Demo/Sample Scripts/ShakeOnTrigger.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 170288b78db0eec489cf657b74c77a17 +timeCreated: 1465070431 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/CameraShaker/Demo/ShakeDemo.cs b/Assets/Script/Core/Utils/CameraShaker/Demo/ShakeDemo.cs new file mode 100644 index 00000000..2d7effbf --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Demo/ShakeDemo.cs @@ -0,0 +1,141 @@ +using UnityEngine; + +public class ShakeDemo : MonoBehaviour +{ + Vector3 posInf = new Vector3(0.25f, 0.25f, 0.25f); + Vector3 rotInf = new Vector3(1, 1, 1); + float magn = 1, rough = 1, fadeIn = 0.1f, fadeOut = 2f; + + bool modValues; + bool showList; + + CameraShakeInstance shake; + + delegate float Slider(float val, string prefix, float min, float max, int pad); + + void OnGUI() + { + if (Input.GetKeyDown(KeyCode.R)) + { + Application.LoadLevel(Application.loadedLevel); + } + + Slider s = delegate(float val, string prefix, float min, float max, int pad) + { + GUILayout.BeginHorizontal(); + GUILayout.Label(prefix, GUILayout.MaxWidth(pad)); + val = GUILayout.HorizontalSlider(val, min, max); + GUILayout.Label(val.ToString("F2"), GUILayout.MaxWidth(50)); + GUILayout.EndHorizontal(); + return val; + }; + + GUI.Box(new Rect(10, 10, 250, Screen.height - 15), "Make-A-Shake"); + GUILayout.BeginArea(new Rect(29f, 40, 215, Screen.height - 40)); + + GUILayout.Label("--Position Infleunce--"); + posInf.x = s(posInf.x, "X", 0, 4, 25); + posInf.y = s(posInf.y, "Y", 0, 4, 25); + posInf.z = s(posInf.z, "Z", 0, 4, 25); + + GUILayout.Label("--Rotation Infleunce--"); + rotInf.x = s(rotInf.x, "X", 0, 4, 25); + rotInf.y = s(rotInf.y, "Y", 0, 4, 25); + rotInf.z = s(rotInf.z, "Z", 0, 4, 25); + + GUILayout.Label("--Other Properties--"); + + magn = s(magn, "Magnitude:", 0, 10, 75); + rough = s(rough, "Roughness:", 0, 20, 75); + + fadeIn = s(fadeIn, "Fade In:", 0, 10, 75); + fadeOut = s(fadeOut, "Fade Out:", 0, 10, 75); + + GUILayout.Label("--Saved Shake Instance--"); + GUILayout.Label("You can save shake instances and modify their properties at runtime."); + + if (shake == null && GUILayout.Button("Create Shake Instance")) + { + shake = CameraShakerManager.GetCameraShaker("Main Camera").StartShake(magn, rough, fadeIn); + shake.DeleteOnInactive = false; + } + + if (shake != null) + { + if (GUILayout.Button("Delete Shake Instance")) + { + shake.DeleteOnInactive = true; + shake.StartFadeOut(fadeOut); + shake = null; + + } + + if (shake != null) + { + GUILayout.BeginHorizontal(); + if (GUILayout.Button("Fade Out")) + { + shake.StartFadeOut(fadeOut); + } + if (GUILayout.Button("Fade In")) + { + shake.StartFadeIn(fadeIn); + } + GUILayout.EndHorizontal(); + + modValues = GUILayout.Toggle(modValues, "Modify Instance Values"); + + if (modValues) + { + shake.ScaleMagnitude = magn; + shake.ScaleRoughness = rough; + shake.PositionInfluence = posInf; + shake.RotationInfluence = rotInf; + } + } + } + + GUILayout.Label("--Shake Once--"); + GUILayout.Label("You can simply have a shake that automatically starts and stops too."); + + if (GUILayout.Button("Shake!")) + { + CameraShakeInstance c = CameraShakerManager.GetCameraShaker("Main Camera").ShakeOnce(magn, rough, fadeIn, fadeOut); + c.PositionInfluence = posInf; + c.RotationInfluence = rotInf; + } + + GUILayout.EndArea(); + + float height; + + if (!showList) + height = 120; + else + height = 120 + CameraShakerManager.GetCameraShaker("Main Camera").ShakeInstances.Count * 130f; + + GUI.Box(new Rect(Screen.width - 310, 10, 300, height), "Shake Instance List"); + GUILayout.BeginArea(new Rect(Screen.width - 285, 40, 255, Screen.height - 40)); + + GUILayout.Label("All shake instances are saved and stacked as long as they are active."); + + showList = GUILayout.Toggle(showList, "Show List"); + + if (showList) + { + int index = 1; + foreach (CameraShakeInstance c in CameraShakerManager.GetCameraShaker("Main Camera").ShakeInstances) + { + string state = c.CurrentState.ToString(); + + GUILayout.Label("#" + index + ": Magnitude: " + c.Magnitude.ToString("F2") + ", Roughness: " + c.Roughness.ToString("F2")); + GUILayout.Label(" Position Influence: " + c.PositionInfluence); + GUILayout.Label(" Rotation Influence: " + c.RotationInfluence); + GUILayout.Label(" State: " + state); + GUILayout.Label("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"); + index++; + } + } + GUILayout.EndArea(); + } +} diff --git a/Assets/Script/Core/Utils/CameraShaker/Demo/ShakeDemo.cs.meta b/Assets/Script/Core/Utils/CameraShaker/Demo/ShakeDemo.cs.meta new file mode 100644 index 00000000..0c616d8a --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Demo/ShakeDemo.cs.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: b135c4a9d4b7a984e89f8c975b631b7f +labels: +- Shake +- Camera +- Follow +- Animation +- Effect +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Script/Core/Utils/CameraShaker/Docs.meta b/Assets/Script/Core/Utils/CameraShaker/Docs.meta new file mode 100644 index 00000000..aaabae44 --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Docs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b9483be550769214aa21dfcbd3cbdc39 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/CameraShaker/Docs/EZ Camera Shake Guide & Docs.pdf b/Assets/Script/Core/Utils/CameraShaker/Docs/EZ Camera Shake Guide & Docs.pdf new file mode 100644 index 0000000000000000000000000000000000000000..475043266796460416a312dc160cf4af5c31d8f7 GIT binary patch literal 191621 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
)bXW}m&w zV?b~o3#^TIj;_pr7tq;f;Zw)3thn|Bs1*OGdzhKgFC}L~k$NsqtMR7`wn*b09PPW% zUW?1UrPKBIwfsFcNi+M*&S!0-P@vz?zHH&3wLqzN2&B#q=gw>)jL9TB<%eF5XM6Po zpMlXq4lJv{!1B~b4}^}OTz9}xt{GbGGe;nbai2}%jiQuVl_zheC1_@PXr7P6zgN)A z)#hEz_{kKpVcbF~StU$4G`V#!H3`#>AEf=+Z;bcczMC;!PZ1KAgM1WBPQ5_%dsDSt zb1Bo9skEZJ>U=KF{V4oqUR!+4C;F*MR$NcZ0yXfTP);@#*Rc8*Z;*0>B$ROm-uQK!-A zM$9uPtkNvktKRDIq&kAS>f}#uVsefZE=n3S=TC?_mVA87T6C10DnWUtX~rav96~{B zCQqO`-zUmv+4%veui07^?9GBc7!iPx+whya!Q4Nd_Xvwg^Fu_wgHSKCzN$E`FMkoU zzeo>^VEskbV1&Igj_Wqao+8f}xyqAkqSBM=Oy}HjwPk&+wSIlg>*LVK1^+bEeTR0w zhDfOiu;!(6vJj)y3?rO8dQ97#l~P=Q)SJUWq7io&EGK(`_6y7TA|fXf7#XdC=}KWb zvigmoi`>^}+~+tyg)gK6gFk-1Lre@bf3}Xt{c$lAbp0_%2*Vs+r_)K971;lv6KD5G zd*U2}R!h17>CRVF4nu1OEI`mtJY&$BV8m5qCZB-J@u~XaplX9ta0F_w!>kLo^NYUe z7&Jm!Mj(NB!A!x#Zm7Ih3zc`A&+Ru|gB!K$3y}VNqp3J0q<3%OAbLIB#^?bnK1Ms| zy61L}0w?}40p_5Z3!5I_9=B)bKQ=6J0VE9XaW5%*n0spcbZR-YhqT@i1(NtR+>8v~ zY1i2MIT?S7K5sBwf{2`?#E{h+F1?L17axh3f|_BKCCDZme_~W+cPXdADkCbRACZ~} z&nBl6Cln`)h)keLaFv+*d7p44QS~zj&L5^Zv;arTon1$|RcQ-oYq%NOUon|UhI`t@aTr;{p$Yq?gsEnL=VKofO|j+4VS za+O;mWCCh~b>(j7-?3=<)ELn>uatG5Bjk`<4_NL5-puS%Y703S%AAyr)7w2Ydh5W{ zT0KykE8Am4pF*us7(0ep8;ZdU_=aG;OkG%y9oFmUhxM3RV587i=6yM*1F6gq7t zt)tA3W-bi+=v+BA8_svGRHbpAGo4tBpQQi9f;-O@&q+TNh)+*U-*<1yo$Cz4y8C=~ z;X|c@dF6v)Rq@Ryq85@!lYyVo%|rvgQ!90Z-{Bv9Oid1=^N^ThL3*c-OhfRR^vfp{ z{>GPsE&Dq%76wx)-hTNvriMZK3#QDkSM7r^oqp&6Y1fcGIK2Dt`|bW$p##EAheY~I#4Ix0GICmOydKZu<~R_( z@_9e`szfgAXc%>-t?$}A?8pXnX3{ksklA<5PEwKvUjkO#yC-@?8QI3V4=DST_cpm^ zSGg-u>>f$@J`Mx$rjq%fwkxs^%3%C-_x|A31^ugw0AUElS8#UUlMCt{J=`5<&S%m5 z0FAKcITENA9JF+1_>-8qvO)qa+mRn1=EvBCZ??vtfuXhS!0-C_XuwnwwD^hw>+sqH z>);9najamgs0Q+&y4U1`?|v*gRWZA4=o+1N)pY&zH}bE0D1nMbV}TCs&oRzrOz|1t zsU&hO5=mNl_kl2yj|I+SNOwghx2H=766ISbPA%Q2H$0+&Ln__|xh z>w9^fP*roCjF809VHb0Od`)p}8BI~d6bp-=S_v8-0}?Ay?+NSQrKD1iCM6iE&3{&! zPi&%5$^E1xabG$-6W`KY8T0G-CvSWi{mG~Eqf5769{myqDCTfK@@R=f>l5sQF$qUY zVBajdd?Rg0!~B_&IT5d5oN*5aV(^lxRrL6!p2QX`vmUMMnDARg5y2aeGsSb%w=APm z$wM**?I)94wV(1EfnBkBqLf6m(Xi>|vwCWP9P|DAkt0UmqF}*#G+8foL0LrDx-!14 zx4s~12K6o$5dOor5$$)vO+ByPsR{6iqZZ6CqUC@1^KGk@S2Q+X{=V}q>dyq1&zz}6 zyELo6>s%Omoi8cN?fkn%N%db-$|qxCbkPnR zPp8DJk1t`X@EL0^TxWx%Z3qr4^k}M~d#rA}Uh?5yg>)h}>XEX=Y;+1KB~Utpl;U@E zavJ%(#yoSty7FqV{-Ev%2MU_$&EDgOmNkn&b66tvjcXHQuUJ|Vn+QryS zNvmms@&eoNcEU2rc&AFj9b2rqx9&Q5Z^m4x%I$ctM88r6Z_2;#$v_WeCx2@t`hFr9 zJv)Mp(W;Ow^)Er88iSQ6adrfu-h?>8ycS~)AqR3MIbJ%JYIpWWxcy-Cv4~^6eQ}iT zY-7Z?B!Q^2Zy%2gWs%O1pWz5ZT~( zPhKdN@Zq>Lo=sRND6vOGWfWcD?UwQrgL&xDmi5(pfj4{nHAcdIKS&YpReZ3wnUC>Q z_N@g7wT2E^)fM9A%*sM7s?|xx+~3U2GM}U!`8`DfNG`apiQ+S06RO90P{v@V6Hj0& zKnomIaej2?>>l|XuQ*S3R3@EKQc4c*her-!>Ycnka7%m^4M5DufYO(jTOH}dKk5d= z=yuJxCR_$RBU%Ka6g|TGyzUM0!7#@?fo1ZDFbs4_J+=sEUKlMS)xMNXZkDYnv`wW~ zgQam3RR7|~;TKI85*OAgw>j=#rn$)64?;o+h6DOR+#npP@501@mfRe~vIlyCG1z}> z$}R3Wigg4PRxfRWH)r1Wl+uo0+LR+(F3esWA(Q0o$I1+OxqdNge&n9M*b#3h^({0T z#N)H{D>ECUjU_PJPj{vrik9QE%sxwZmSlPn=(^g#;{LnY;d>EKIRFoNKKuF|fT`X7 zZvNRDzCXXndCC3!4?UCfvu`HMylf&s3HbngU<7OBV66-6I4pUA*PT4(1v`fXZtq6T zGd8DE%kmIQ))NVNnE;d>nFeugqXR^Bx0M3;w{WMggAKH~{_LL_@1k`7d{D*udI1O* z8psXowD?O9rl$7wLS^;?!=ryNSuNV3{+EpLZjI628h3_A{-NGUPlm@gwSSgB6C>lb zL0VqD2u@y{%XNdZ_;4KsK6p>`DI*@30E4es)PH&7(`|7>abk<|1|BY+-I{Msm9z#j z+V}Q2@AV!T%X@?#11kN|)QJ{y&T|pr zj9PyFF-;bXUL^E>$(>fNvs&&+f5H9nv2*s~$_E5snshH)xbZPS-9tZ?deTp8uROWA zD5^}W2gIgzZag7k{c>A5Y>!6%rYBTH1IsW8cCd|7FDd z1&t5QJ<}<9;2GH$;h1BOChI941e3U5b9amZ#DB3|(1`WWXai?fix@&=3j%o+ghslr zi{uA*2Y9U`;BNB5+QF~f1IUk`-wjYn&^4;vW4+CuSNYFyQ^AE^HrWwD?qU{!7c@gDwYr4I0D#BWf zB+W;feIdm}ZVwQW5gy2kjtsz}dp6ypRem&jI}ng-ulX#_qe!QGr&T>{u4+Q1Mr_IE z&@W%&4Rz9DQ*!2ze?`U|02MNlQp@v?p4y$$6j zTwUPVf%1h=U?lh*PQV+wXLI$(xN=;LsBZNct%4G*q7o%x1*4G6+&%88Yg_dz7~%?T zYeYfSlEt~-WS>;j4>W+IbHLFgl{BsIxCk4gd*44DC`VD}^gz|4 zv}e}F21b-Q;IlO$iQ@?{ae=u5h>Lw{eF_SRr-;--dMJK64_d_h2z z-hQe`fvSamPQ>VJ<=iAh>^}Jl<3| z#+ze)qXz#-N4F_^BX^u;oX4TUfZEWno=%AyMr-Pv{;8xFyAEF-qoNO+6{jS;Y!>DC z9mFG(vZR-xj$0nXmqe}qi)o~`KuLJ9ailg9%z{NiK7`hkP97tw54$eLPPKoVMS|g- z+TRVl8f@fGe~nzu`A?g_hIQ!2uEUncP&0|tCWehvDf3S{XBL@`bk(PBciE?&PS#9% z)wj(eBp-5ba`O)fZrHsE-56R_-y;joepnfc5CbaAI-Ts6atzIverFHKO6rV=eC(T7^*(SxN6>E%q3i+V`*}Y1!^NehEX#0M#C$aUqoT zk6DxNs$Ljg7-;uh?=%8p)e9x?q&>d;P-ijk6|)VbqTYr-r6B9FXwx=`_qI z9jPla0HrlEfaF$l6#V*R_QHJ^{#oHGTh_f#*K6WlzDK^=WN3zq;i%n~*L5dpb0ih3 zYM2@#>d=P`2@*vHrvu8xxFFANO{R4T!>tYoll9Tw(^uTtgXH{{rQqQhiNmk5_aXrF zbZEBL^g;6F#;!@SaGqK)sulZ-!E?vdCFu*PAD=s4%Av>l7VI6G?^VEqr7`d%813ZI z^O^h4M&OmskkL*6+@sQ__k6*DH;RA~JoqPbZ*JKE?UvB4P;f(0t`&(-Zp+kFXLN2U z_L?F_dk&@>p9ESJLYNv7sudiqRG3->>H&@$cTHfQ%p1JxpJKzc`$d~yBd1sFMTOK} z1NLnoslmbT8}By}SnQWy^|V zpe|)EKM;@(9#;yO3Gr)F=k*fMg+FTSb=RZHehFr6PRYvZNMzL4VXpuFlNy` zj9GLWFpF*jIv)jkn=h~1v@U~uVO`C-FO#x$hIL-D1(WKO=ysIgaGnJhK|Rc~=wY7G zw1J0tLerr!gHory*2j}3{xS@r5l_xblnjUEB)%d}sP=E3i`jcnT zpF9KpWGA$I9bC#Y=u)26{H5kEVSVaPp4EI)vj>)b3;fB`;7`5{d!zp3DfA~%XYwRE zlRVA$G~WY$PxBrybtZ-AOd2$Q4bJ2_a3)8g{e8_bl8?^hIdmq^qcbT4XY#kua#Hhm zUi3cIr<)uQ>z$Bu{fza~77K2WOIxo}>^xNrUE+=BKc9Tr&af)R{c5 z`9SjltVumdq2?EwE71PG!IL}>p5&LXw`<@`($JaYYi2dG@V(TZ6rex(yyiC=(0G^* zn2UL&IhtFV+t5Oj0y8x8ngyuSyud8X3(Ua0z+B7=%)q?B$1#sIP4n-Xe+Q=7fw`KG zG@t-6K`;}9IVeEP5quo8Nz*V*@G;CLO~XvVEX)+l#ca}?^|9;Ypq=ImX06}2ej~Kd zl)-FF8GL+w^7<55O0x!YF>5djvj(#Ce-(=A13+ezMfydcl}#J>1+yu<8)Gq@TSL*ko2$B_W01Y4kkPJwRt{cq6^+}5!V2WO+7VGLYkFJ}8 z>yZ{GzzYZfA}i-G5dFSj{>r)T0t^H8uPi^bvb<;orO*byV+%c>Gk|le=Mp{VQ-Cvo zbAXG03BWYq3Sbs+W99Sqn$HL8-vQiR`Mk2S-Q6|ImkH4;0WpAhKoTJJ<4^kg=`#S? zpZSvwR($+h(R0)1t^C&iS)_at*uQs1zX$tON_0K^-nA$MlzjZTx{v67*`VY2>P!aS)0qamuQL<)U}sM6B;Cs2 zq&w1?@7Fiqu+;ZnZoX~V+Iv-Ztg{HYbhUo6v!eGZUFtVA-?23HUe}FwR`*_y)>rth zMc;cW&CJ9qlM+8B$s_g)LzIfT3ic^@#}QVAT}c@Q|U^9XQC z=P}^)&Xc|O=vMwfOIGKoyiXf%3CM6|JI7?AO|nE}jmP1$+IatdZK36moY~^F#mbqux15!hfGzO>(-!|BZHZ+>&Tom> zQjpUh)M>kaL|bk-E*G^7*s|mzTK6B9+n;+FHvQxkB4uIVV@QoU-Xx`HW5PKhtu~W|FJ5+bkF5I&HIM z0*}Fp>|Cv1w0Yr343=qmOUr~Uu*%c6h`dE>wp@`LJI1;L$PwfL;0xWmfXBOsfv39n z1J86H0>0KgA~({l`n?@<-N*X_TAO87)@j|A8?v$ER`)63h3+%Rw7%4RPBzk|{SmFt za$Dv)?ss35IWudy-9HdzZOC#*7R`M31oAX+EY@SOp4fc_IHh|QIKBG@a8~ziS)^O_ z?*hIH^&OUFSu*E#-vKV@z6)I34K1|2e^@(cRmvW7nU`{Q8TcDFS~md!QZc*^Do z){}tiy{W)ky&1qw-fUpKHxJn4EtF-tRsSKg)mzd(qTQ>#E{DxdZ@C=S9dkJ{iJ1LI|O7CUh81GeijBeXMtG#Tkk}qhl zT5IKTA>Moa4>-wtQy$k|w>HRA+MCvG@{Ew`okw0=t!H@e$urt{YqNY!$nGJloY%w2 z*R+dPgFM%A#WsMv3wRdmH*CYew{81@@7N9j-?fbZFWZjGb95{JIla<$%70ON&uW%$ z>4?=PFX&@zXMp38laNzw=i~*t)IXu)tZsQp$Js7YrgeRWZNeX`(^!4-eSNlV8u`i} z)bnh!z=gIOz$LcZz~#0(@_o9Me_EGd4f$DJvUP`_*H_u@0@vD>fg9{f;BEF8Kd(!( z4*FyD&Bz9Oy#I#>y%5-EFQM(Q{;WP^FNc;L z_A37kU5<6HKSe)iuLa(1Z}6w+@~sEtDa!ua`n~pT{yVxN>tR^`fV~;^P-HhyhL+iA z`wEv@kNVSf71k4QY=`Y;;G@VV>^8VEwEeFBwA~G}C)Rb<*3?K^-k z*$06q?Yn_5+xG%rwI2Y!Za?f_*59-r4JcthXZ^XlH2VqQ3hQ~`I_o7k&UyQ3;6=*V zGOOESo%9#z@7d3Ol4*MYY^(jeKdY6qUkb$Q8m*W8#jP6qq`#Qf14+6@JGAI@)~k44 zQNI45-kM;)37l-72Trpu0%zLq0p~~rIA7x6-08M=bw=xTf0<6S-t_NHqAVq^aq_dKw z1BSUKP~JKu8ReqZJ(39X3*0Y(s@8pyB+t=)8>nqPD0$@jtw$so_?Q%q_OU<%{e1)5 zT2D$l{aLzdX$TmuL!h~JRN6zYiL?(mdZuI2LEsD05q~|-I5&jC9u3SsbmYG+l=LLX zqEOzG3|!TdwlY57p`%>?U7@xoQ$DCY-ID`M$C+iJp(me?IXy+dFp@-+!nU4L7(JSM zD&!gL`LnI#(y@S{bxJxJFt^S~qXAp%HEAs1Zk>}Z^j>YfC5`u9Z(We40zO!02G&`U zt_4D^_ocbO4g)LQ3Je-}X(6!N5GyV9&TDI>`*MXL(ZL4x8d4m5;DC0UBUY|6q&pG= zhqc*`l)zDKo+DjOGh{ik{1*+mj@-ZrLxH0pa5}0t48@M(z*$3?qpWw5DvH2)L#3lK zaLG{PsG+}tqyE9nZm4%`MQ#G#3dc5SXmaQSmkoM{DR9+ba##b`4OWLUaMR#)cmwkW zuOkpxjB45z))4^}7u8XyQVapd0BBd#jfRM07w~{%7*rhX8~0lD4q(GB$DtrG3_C`G zoMFG?cu-?FMAy_R9jAI14I_>-!Gx%C)9rJd>zyJ;| z6quw}Aed&j?M#jK?O>+ijxz)HbJv+I7a5kFdBL1ErL!=YA61xbG0u`;QCqyTJXlKa zi(o}tlCug_I%xG^b(GsuowZQ~9;{o#TaX*^TXe|AwhU)O@6EPs=eFMYwmfHZ?;=&y zL9wmSX;`UC$R2us1?81133@mfM&3z}Dmc_u;xq?`qIKjwZRJjzoX}R~bb}rSRUF*c zR_pXdHE{6Y8a@I_)hTDTH8?}S+bC1j8ax)|wr1y!s8S7{Y%@3q<@`3Yb2l)wLyOJ1 zH>z3#ifEEQs8XRx)IS+&K1YH`OY704!%5`l!oF{;7&eNbd zC!A+NThiZUCdzGt&hx=*`V8kKxV!1d9NV_rISI38hVwGi_d2fz=X7b#>vTqN-VEMq zJK&u6-)TGSTnsL>9d+IdF14L-k>LHd(=IN=u8i$Cdg~fpnh@W1)|CLGvB#Ahij9th zZRcHSp~SXJuFOzM+oZiJl-_pPl@rQ}Y5=|2l@D_P&N6LR>9`%8quZ{#ibA<8O@) z8Ra>n#wF4@-6hHQjR`J~Khc=%lHq%=y25n+a={pAOmhuEd!}oTKe096weP`9Va#zI z3{@KQT}R;9KuZJ@j76?vfk}FHp&DbU>tuAK^-misT%)j`YS$Rd0x;)>>Wy{Q6QQki zo(eS?x415Z^u|Wlc*tbbxu!x^dfh@!+>h62bj^eUM$vT*JPwTEp-5EiP!2Rl`GKmj zx>q870@8pEY`1xBR?OrfP&LlR&dE>{^J{VZH-~tza$)jnGjy zG-BN8T8iq5(D4<9vj{X8hg|nzzQ8)3*NAbCoAsv~_qlmc6rd|Yr;G>Pu~8KPN43hK zVf|ruqCeMo#GL|s%$**c@nJu}p))Rn*>bVdp7bbhg zBUMp%puN;HC65Z1duAfF!d35yNP}>_=UQZ&aIe(o?JJAy7K?n9k-cK6uO?zP=h8K`gT8v%BUbpf zMh--MR>zpH>4Be(dQ7nzePxaL26cQs{pz=m_)Ng)mBc!q6&zF4<1B;6922+nECfr< zWj-hDztQK792RxH0QfAp0+FMl(HB|KD!W9{Hy|GrCEqT2M)dfGBPT@Jw?A?^>IcQJ z?@;8dxYIWhIZt&?xfx|~ zpYIHu(LwNBl6b^-PWDj$8<`i6`7W;17m@E#y|kUITuE@R+qo5nquQadYoc}J z1aZ_iE$

d{@A|f`{FnEMD-ccQ*> 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 L?~+f9ZV&ulO+YuS literal 0 HcmV?d00001 diff --git a/Assets/Script/Core/Utils/CameraShaker/Docs/EZ Camera Shake Guide & Docs.pdf.meta b/Assets/Script/Core/Utils/CameraShaker/Docs/EZ Camera Shake Guide & Docs.pdf.meta new file mode 100644 index 00000000..f339daff --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Docs/EZ Camera Shake Guide & Docs.pdf.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 452778ff585ca934b9a6bcc79bd1f68e +timeCreated: 1442338313 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/CameraShaker/Scripts.meta b/Assets/Script/Core/Utils/CameraShaker/Scripts.meta new file mode 100644 index 00000000..88fbbf27 --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f8fd9a251edc49b42b15c71038af76b8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakeInstance.cs b/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakeInstance.cs new file mode 100644 index 00000000..7d117dc0 --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakeInstance.cs @@ -0,0 +1,184 @@ +using UnityEngine; + + + public enum CameraShakeState { FadingIn, FadingOut, Sustained, Inactive } + + public class CameraShakeInstance + { + ///

+ /// The intensity of the shake. It is recommended that you use ScaleMagnitude to alter the magnitude of a shake. + /// + public float Magnitude; + + /// + /// Roughness of the shake. It is recommended that you use ScaleRoughness to alter the roughness of a shake. + /// + public float Roughness; + + /// + /// How much influence this shake has over the local position axes of the camera. + /// + public Vector3 PositionInfluence; + + /// + /// How much influence this shake has over the local rotation axes of the camera. + /// + public Vector3 RotationInfluence; + + /// + /// Should this shake be removed from the CameraShakeInstance list when not active? + /// + public bool DeleteOnInactive = true; + + + float roughMod = 1, magnMod = 1; + float fadeOutDuration, fadeInDuration; + bool sustain; + float currentFadeTime; + float tick = 0; + Vector3 amt; + + /// + /// Will create a new instance that will shake once and fade over the given number of seconds. + /// + /// The intensity of the shake. + /// How long, in seconds, to fade out the shake. + /// Roughness of the shake. Lower values are smoother, higher values are more jarring. + public CameraShakeInstance(float magnitude, float roughness, float fadeInTime, float fadeOutTime) + { + this.Magnitude = magnitude; + fadeOutDuration = fadeOutTime; + fadeInDuration = fadeInTime; + this.Roughness = roughness; + if (fadeInTime > 0) + { + sustain = true; + currentFadeTime = 0; + } + else + { + sustain = false; + currentFadeTime = 1; + } + + tick = Random.Range(-100, 100); + } + + /// + /// Will create a new instance that will start a sustained shake. + /// + /// The intensity of the shake. + /// Roughness of the shake. Lower values are smoother, higher values are more jarring. + public CameraShakeInstance(float magnitude, float roughness) + { + this.Magnitude = magnitude; + this.Roughness = roughness; + sustain = true; + + tick = Random.Range(-100, 100); + } + + public Vector3 UpdateShake() + { + amt.x = Mathf.PerlinNoise(tick, 0) - 0.5f; + amt.y = Mathf.PerlinNoise(0, tick) - 0.5f; + amt.z = Mathf.PerlinNoise(tick, tick) - 0.5f; + + if (fadeInDuration > 0 && sustain) + { + if (currentFadeTime < 1) + currentFadeTime += Time.deltaTime / fadeInDuration; + else if (fadeOutDuration > 0) + sustain = false; + } + + if (!sustain) + currentFadeTime -= Time.deltaTime / fadeOutDuration; + + if (sustain) + tick += Time.deltaTime * Roughness * roughMod; + else + tick += Time.deltaTime * Roughness * roughMod * currentFadeTime; + + return amt * Magnitude * magnMod * currentFadeTime; + } + + /// + /// Starts a fade out over the given number of seconds. + /// + /// The duration, in seconds, of the fade out. + public void StartFadeOut(float fadeOutTime) + { + if (fadeOutTime == 0) + currentFadeTime = 0; + + fadeOutDuration = fadeOutTime; + fadeInDuration = 0; + sustain = false; + } + + /// + /// Starts a fade in over the given number of seconds. + /// + /// The duration, in seconds, of the fade in. + public void StartFadeIn(float fadeInTime) + { + if (fadeInTime == 0) + currentFadeTime = 1; + + fadeInDuration = fadeInTime; + fadeOutDuration = 0; + sustain = true; + } + + /// + /// Scales this shake's roughness while preserving the initial Roughness. + /// + public float ScaleRoughness + { + get { return roughMod; } + set { roughMod = value; } + } + + /// + /// Scales this shake's magnitude while preserving the initial Magnitude. + /// + public float ScaleMagnitude + { + get { return magnMod; } + set { magnMod = value; } + } + + /// + /// A normalized value (about 0 to about 1) that represents the current level of intensity. + /// + public float NormalizedFadeTime + { get { return currentFadeTime; } } + + bool IsShaking + { get { return currentFadeTime > 0 || sustain; } } + + bool IsFadingOut + { get { return !sustain && currentFadeTime > 0; } } + + bool IsFadingIn + { get { return currentFadeTime < 1 && sustain && fadeInDuration > 0; } } + + /// + /// Gets the current state of the shake. + /// + public CameraShakeState CurrentState + { + get + { + if (IsFadingIn) + return CameraShakeState.FadingIn; + else if (IsFadingOut) + return CameraShakeState.FadingOut; + else if (IsShaking) + return CameraShakeState.Sustained; + else + return CameraShakeState.Inactive; + } + } + } diff --git a/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakeInstance.cs.meta b/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakeInstance.cs.meta new file mode 100644 index 00000000..b5967f16 --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakeInstance.cs.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 15591c547998f4e47a2e8ce9ac3d3a73 +labels: +- Shake +- Camera +- Follow +- Animation +- Effect +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakePresets.cs b/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakePresets.cs new file mode 100644 index 00000000..8b9bd892 --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakePresets.cs @@ -0,0 +1,103 @@ +using UnityEngine; + + + public static class CameraShakePresets + { + /// + /// [One-Shot] A high magnitude, short, yet smooth shake. + /// + public static CameraShakeInstance Bump + { + get + { + CameraShakeInstance c = new CameraShakeInstance(2.5f, 4, 0.1f, 0.75f); + c.PositionInfluence = Vector3.one * 0.15f; + c.RotationInfluence = Vector3.one; + return c; + } + } + + /// + /// [One-Shot] An intense and rough shake. + /// + public static CameraShakeInstance Explosion + { + get + { + CameraShakeInstance c = new CameraShakeInstance(5f, 10, 0, 1.5f); + c.PositionInfluence = Vector3.one * 0.25f; + c.RotationInfluence = new Vector3(4, 1, 1); + return c; + } + } + + /// + /// [Sustained] A continuous, rough shake. + /// + public static CameraShakeInstance Earthquake + { + get + { + CameraShakeInstance c = new CameraShakeInstance(0.6f, 3.5f, 2f, 10f); + c.PositionInfluence = Vector3.one * 0.25f; + c.RotationInfluence = new Vector3(1, 1, 4); + return c; + } + } + + /// + /// [Sustained] A bizarre shake with a very high magnitude and low roughness. + /// + public static CameraShakeInstance BadTrip + { + get + { + CameraShakeInstance c = new CameraShakeInstance(10f, 0.15f, 5f, 10f); + c.PositionInfluence = new Vector3(0, 0, 0.15f); + c.RotationInfluence = new Vector3(2, 1, 4); + return c; + } + } + + /// + /// [Sustained] A subtle, slow shake. + /// + public static CameraShakeInstance HandheldCamera + { + get + { + CameraShakeInstance c = new CameraShakeInstance(1f, 0.25f, 5f, 10f); + c.PositionInfluence = Vector3.zero; + c.RotationInfluence = new Vector3(1, 0.5f, 0.5f); + return c; + } + } + + /// + /// [Sustained] A very rough, yet low magnitude shake. + /// + public static CameraShakeInstance Vibration + { + get + { + CameraShakeInstance c = new CameraShakeInstance(0.4f, 20f, 2f, 2f); + c.PositionInfluence = new Vector3(0, 0.15f, 0); + c.RotationInfluence = new Vector3(1.25f, 0, 4); + return c; + } + } + + /// + /// [Sustained] A slightly rough, medium magnitude shake. + /// + public static CameraShakeInstance RoughDriving + { + get + { + CameraShakeInstance c = new CameraShakeInstance(1, 2f, 1f, 1f); + c.PositionInfluence = Vector3.zero; + c.RotationInfluence = Vector3.one; + return c; + } + } + } diff --git a/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakePresets.cs.meta b/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakePresets.cs.meta new file mode 100644 index 00000000..d771d0bf --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakePresets.cs.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 10b257f8230acee41bf69ee03cd26f50 +labels: +- Shake +- Camera +- Follow +- Animation +- Effect +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShaker.cs b/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShaker.cs new file mode 100644 index 00000000..b5415443 --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShaker.cs @@ -0,0 +1,163 @@ +using UnityEngine; +using System.Collections.Generic; + + +public class CameraShaker : MonoBehaviour +{ + + /// + /// The default position influcence of all shakes created by this shaker. + /// + public Vector3 DefaultPosInfluence = new Vector3(0.15f, 0.15f, 0.15f); + /// + /// The default rotation influcence of all shakes created by this shaker. + /// + public Vector3 DefaultRotInfluence = new Vector3(1, 1, 1); + + Vector3 posAddShake, rotAddShake; + + List cameraShakeInstances = new List(); + public string cameraTag = ""; + public bool isUICamera = false; + + private float UI_Z = 0; + void Awake() + { + if (string.IsNullOrEmpty(cameraTag)) + cameraTag = gameObject.name; + CameraShakerManager.AddCameraShaker(cameraTag, this); + + UI_Z = transform.localPosition.z; + } + + void Update() + { + //if (Input.GetKeyDown(KeyCode.E)) + //{ + // Shake(CameraShakePresets.Bump); + //} + + posAddShake = Vector3.zero; + rotAddShake = Vector3.zero; + + for (int i = 0; i < cameraShakeInstances.Count; i++) + { + if (i >= cameraShakeInstances.Count) + break; + + CameraShakeInstance c = cameraShakeInstances[i]; + + if (c.CurrentState == CameraShakeState.Inactive && c.DeleteOnInactive) + { + cameraShakeInstances.RemoveAt(i); + i--; + } + else if (c.CurrentState != CameraShakeState.Inactive) + { + posAddShake += CameraUtilities.MultiplyVectors(c.UpdateShake(), c.PositionInfluence); + rotAddShake += CameraUtilities.MultiplyVectors(c.UpdateShake(), c.RotationInfluence); + } + } + if (isUICamera) + posAddShake.z = UI_Z; + transform.localPosition = posAddShake; + transform.localEulerAngles = rotAddShake; + } + + + /// + /// Starts a shake using the given preset. + /// + /// The preset to use. + /// A CameraShakeInstance that can be used to alter the shake's properties. + public CameraShakeInstance Shake(CameraShakeInstance shake) + { + cameraShakeInstances.Add(shake); + return shake; + } + + /// + /// Shake the camera once, fading in and out over a specified durations. + /// + /// The intensity of the shake. + /// Roughness of the shake. Lower values are smoother, higher values are more jarring. + /// How long to fade in the shake, in seconds. + /// How long to fade out the shake, in seconds. + /// A CameraShakeInstance that can be used to alter the shake's properties. + public CameraShakeInstance ShakeOnce(float magnitude, float roughness, float fadeInTime, float fadeOutTime) + { + CameraShakeInstance shake = new CameraShakeInstance(magnitude, roughness, fadeInTime, fadeOutTime); + shake.PositionInfluence = DefaultPosInfluence; + shake.RotationInfluence = DefaultRotInfluence; + cameraShakeInstances.Add(shake); + + return shake; + } + + /// + /// Shake the camera once, fading in and out over a specified durations. + /// + /// The intensity of the shake. + /// Roughness of the shake. Lower values are smoother, higher values are more jarring. + /// How long to fade in the shake, in seconds. + /// How long to fade out the shake, in seconds. + /// How much this shake influences position. + /// How much this shake influences rotation. + /// A CameraShakeInstance that can be used to alter the shake's properties. + public CameraShakeInstance ShakeOnce(float magnitude, float roughness, float fadeInTime, float fadeOutTime, Vector3 posInfluence, Vector3 rotInfluence) + { + CameraShakeInstance shake = new CameraShakeInstance(magnitude, roughness, fadeInTime, fadeOutTime); + shake.PositionInfluence = posInfluence; + shake.RotationInfluence = rotInfluence; + cameraShakeInstances.Add(shake); + + return shake; + } + + /// + /// Start shaking the camera. + /// + /// The intensity of the shake. + /// Roughness of the shake. Lower values are smoother, higher values are more jarring. + /// How long to fade in the shake, in seconds. + /// A CameraShakeInstance that can be used to alter the shake's properties. + public CameraShakeInstance StartShake(float magnitude, float roughness, float fadeInTime) + { + CameraShakeInstance shake = new CameraShakeInstance(magnitude, roughness); + shake.PositionInfluence = DefaultPosInfluence; + shake.RotationInfluence = DefaultRotInfluence; + shake.StartFadeIn(fadeInTime); + cameraShakeInstances.Add(shake); + return shake; + } + + /// + /// Start shaking the camera. + /// + /// The intensity of the shake. + /// Roughness of the shake. Lower values are smoother, higher values are more jarring. + /// How long to fade in the shake, in seconds. + /// How much this shake influences position. + /// How much this shake influences rotation. + /// A CameraShakeInstance that can be used to alter the shake's properties. + public CameraShakeInstance StartShake(float magnitude, float roughness, float fadeInTime, Vector3 posInfluence, Vector3 rotInfluence) + { + CameraShakeInstance shake = new CameraShakeInstance(magnitude, roughness); + shake.PositionInfluence = posInfluence; + shake.RotationInfluence = rotInfluence; + shake.StartFadeIn(fadeInTime); + cameraShakeInstances.Add(shake); + return shake; + } + + /// + /// Gets a copy of the list of current camera shake instances. + /// + public List ShakeInstances + { get { return new List(cameraShakeInstances); } } + + void OnDestroy() + { + CameraShakerManager.RemoveCameraShaker(cameraTag); + } +} diff --git a/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShaker.cs.meta b/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShaker.cs.meta new file mode 100644 index 00000000..30a6f750 --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShaker.cs.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 2ab8353b5ebd32545867da143199a814 +labels: +- Shake +- Camera +- Follow +- Animation +- Effect +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakerManager.cs b/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakerManager.cs new file mode 100644 index 00000000..2f674d2a --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakerManager.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; + +public static class CameraShakerManager +{ + + private static Dictionary dicData = new Dictionary(); + public static void AddCameraShaker(string tag, CameraShaker shake) + { + if (dicData.ContainsKey(tag)) + Debug.LogError("有重复的CameraShake tag :" + tag + " gameObject :" + shake.gameObject.name); + else + dicData.Add(tag, shake); + } + public static void RemoveCameraShaker(string tag) + { + if (dicData.ContainsKey(tag)) + dicData.Remove(tag); + } + + public static CameraShaker GetCameraShaker(string tag) + { + if (dicData.ContainsKey(tag)) + return dicData[tag]; + Debug.LogError("未找到GetCameraShake tag:" + tag); + return null; + } +} + diff --git a/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakerManager.cs.meta b/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakerManager.cs.meta new file mode 100644 index 00000000..393f74e1 --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Scripts/CameraShakerManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d502ced90fb7ba340936d795c0c5f476 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/CameraShaker/Scripts/Utilities.meta b/Assets/Script/Core/Utils/CameraShaker/Scripts/Utilities.meta new file mode 100644 index 00000000..030f2812 --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Scripts/Utilities.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3f6e8f6c5b08ee743aeea5abcdf44910 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Utils/CameraShaker/Scripts/Utilities/CameraUtilities.cs b/Assets/Script/Core/Utils/CameraShaker/Scripts/Utilities/CameraUtilities.cs new file mode 100644 index 00000000..7f03f040 --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Scripts/Utilities/CameraUtilities.cs @@ -0,0 +1,36 @@ +using UnityEngine; + + + public class CameraUtilities + { + /// + /// Smoothes a Vector3 that represents euler angles. + /// + /// The current Vector3 value. + /// The target Vector3 value. + /// A refernce Vector3 used internally. + /// The time to smooth, in seconds. + /// The smoothed Vector3 value. + public static Vector3 SmoothDampEuler(Vector3 current, Vector3 target, ref Vector3 velocity, float smoothTime) + { + Vector3 v; + + v.x = Mathf.SmoothDampAngle(current.x, target.x, ref velocity.x, smoothTime); + v.y = Mathf.SmoothDampAngle(current.y, target.y, ref velocity.y, smoothTime); + v.z = Mathf.SmoothDampAngle(current.z, target.z, ref velocity.z, smoothTime); + + return v; + } + + /// + /// Multiplies each element in Vector3 v by the corresponding element of w. + /// + public static Vector3 MultiplyVectors(Vector3 v, Vector3 w) + { + v.x *= w.x; + v.y *= w.y; + v.z *= w.z; + + return v; + } + } diff --git a/Assets/Script/Core/Utils/CameraShaker/Scripts/Utilities/CameraUtilities.cs.meta b/Assets/Script/Core/Utils/CameraShaker/Scripts/Utilities/CameraUtilities.cs.meta new file mode 100644 index 00000000..b2cafaf4 --- /dev/null +++ b/Assets/Script/Core/Utils/CameraShaker/Scripts/Utilities/CameraUtilities.cs.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 5eebeb0be12630947983c46c4641a0b5 +labels: +- Shake +- Camera +- Effect +- Follow +- Animation +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: From 5c662e4cfd2665457d41c860f09b7c2e019e4369 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Thu, 11 Oct 2018 14:48:50 +0800 Subject: [PATCH 079/108] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A4=9AUICamera?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/Application/IApplicationStatus.cs | 14 +- .../Core/Develop/DevelopReplayManager.cs | 24 +- .../Language/LanguageDataEditorWindow.cs | 6 +- .../Script/Core/Editor/UI/UICreateService.cs | 99 +++++---- .../Script/Core/Editor/UI/UIEditorWindow.cs | 48 +++- .../UI/componment/LanguageComponmentEditor.cs | 1 - .../UIWindowBaseComponmentEditor.cs | 40 ++++ .../UIWindowBaseComponmentEditor.cs.meta | 13 ++ .../Core/GuideSystem/GuideSystemBase.cs | 16 +- .../Core/GuideSystem/GuideWindowBase.cs | 25 ++- .../UI/Components/JoyStick/UGUIJoyStick.cs | 2 +- .../Components/JoyStick/UGUIJoyStick_hide.cs | 2 +- .../Script/Core/UI/Control/UILayerManager.cs | 140 ++++++++---- Assets/Script/Core/UI/Control/UIManager.cs | 205 +++++++++++++++--- .../Script/Core/UI/Control/UIStackManager.cs | 8 +- Assets/Script/Core/UI/Model/UIWindowBase.cs | 6 +- .../Script/Core/UI/Style/LanguageManager.cs | 2 - 17 files changed, 507 insertions(+), 144 deletions(-) create mode 100644 Assets/Script/Core/Editor/UI/componment/UIWindowBaseComponmentEditor.cs create mode 100644 Assets/Script/Core/Editor/UI/componment/UIWindowBaseComponmentEditor.cs.meta diff --git a/Assets/Script/Core/Application/IApplicationStatus.cs b/Assets/Script/Core/Application/IApplicationStatus.cs index 2d4a5f02..eb1b6ead 100644 --- a/Assets/Script/Core/Application/IApplicationStatus.cs +++ b/Assets/Script/Core/Application/IApplicationStatus.cs @@ -5,6 +5,8 @@ public abstract class IApplicationStatus { + #region UI 管理 + List m_uiList = new List(); public T OpenUI() where T: UIWindowBase @@ -66,6 +68,11 @@ public void CloseAllUI(bool isPlayAnim = true) } m_uiList.Clear(); } + + #endregion + + #region 生命周期 + /// /// 当状态第一次创建时调用(生命周期里只调用一次) /// @@ -109,7 +116,6 @@ public virtual void OnGUI() { } - public virtual IEnumerator InChangeScene(ChangSceneFinish handle) { if (handle != null) @@ -118,14 +124,16 @@ public virtual IEnumerator InChangeScene(ChangSceneFinish handle) { handle(); } - catch(Exception e) + catch (Exception e) { Debug.LogError(e.ToString()); } } - yield break; + yield break; } + #endregion + public delegate void ChangSceneFinish(); } diff --git a/Assets/Script/Core/Develop/DevelopReplayManager.cs b/Assets/Script/Core/Develop/DevelopReplayManager.cs index d5bbe5c2..2b9855d3 100644 --- a/Assets/Script/Core/Develop/DevelopReplayManager.cs +++ b/Assets/Script/Core/Develop/DevelopReplayManager.cs @@ -89,9 +89,9 @@ static void ChoseReplayMode(bool isReplay,string replayFileName = null) //关闭正常输入,保证回放数据准确 IInputProxyBase.IsActive = false; - InputUIEventProxy.IsActive = false; - InputOperationEventProxy.IsActive = false; - InputNetworkEventProxy.IsActive = false; + //InputUIEventProxy.IsActive = false; + //InputOperationEventProxy.IsActive = false; + //InputNetworkEventProxy.IsActive = false; } else { @@ -333,15 +333,24 @@ static void MenuWindow(int windowID) #region ReplayListGUI + static bool isUploadReplay; + static void ReplayListGUI() { scrollPos = GUILayout.BeginScrollView(scrollPos); for (int i = 0; i < FileNameList.Length; i++) { - if (GUILayout.Button(FileNameList[i])) + if (GUILayout.Button("上传 " + FileNameList[i])) { - ChoseReplayMode(true, FileNameList[i]); + if(!isUploadReplay) + { + ChoseReplayMode(true, FileNameList[i]); + } + else + { + + } } } @@ -357,6 +366,11 @@ static void ReplayListGUI() }); } + if (GUILayout.Button("上传模式 : " + isUploadReplay)) + { + isUploadReplay = !isUploadReplay; + } + if (GUILayout.Button("返回上层")) { MenuStatus = DevMenuEnum.MainMenu; diff --git a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs index 5467089a..5658e983 100644 --- a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs +++ b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs @@ -77,7 +77,6 @@ void OnGUI() //GUI.skin.label.fontSize = 11; if (!Application.isPlaying) { - SelectLanguageGUI(); DefaultLanguageGUI(); SelectEditorModuleGUI(); @@ -198,10 +197,9 @@ void SaveConfig() List languageList = new List(); foreach (var item in s_languageList) { - - languageList.Add(item); - + languageList.Add(item); } + config.Add(LanguageManager.c_languageListKey, new SingleField(languageList)); //保存模块列表 diff --git a/Assets/Script/Core/Editor/UI/UICreateService.cs b/Assets/Script/Core/Editor/UI/UICreateService.cs index 6c5d1bc2..92c7750e 100644 --- a/Assets/Script/Core/Editor/UI/UICreateService.cs +++ b/Assets/Script/Core/Editor/UI/UICreateService.cs @@ -19,42 +19,63 @@ public static void CreatUIManager(Vector2 referenceResolution, CanvasScaler.Scre //UIManager GameObject UIManagerGo = new GameObject("UIManager"); UIManagerGo.layer = LayerMask.NameToLayer("UI"); - //UIManager UIManager = UIManagerGo.AddComponent(); - UIManagerGo.AddComponent(); + UIManager UIManager = UIManagerGo.AddComponent(); + + CreateUICamera(UIManager, "DefaultUI",1, referenceResolution, MatchMode, isOnlyUICamera, isVertical); + + ProjectWindowUtil.ShowCreatedAsset(UIManagerGo); + + //保存UIManager + ReSaveUIManager(UIManagerGo); + } + + public static void CreateUICamera(UIManager UIManager,string key, float cameraDepth, Vector2 referenceResolution, CanvasScaler.ScreenMatchMode MatchMode, bool isOnlyUICamera, bool isVertical) + { + UILayerManager.UICameraData uICameraData = new UILayerManager.UICameraData(); + + uICameraData.m_key = key; + + GameObject UIManagerGo = UIManager.gameObject; + GameObject canvas = new GameObject(key); + RectTransform canvasRt = canvas.AddComponent(); + + canvasRt.SetParent(UIManagerGo.transform); + uICameraData.m_root = canvas; //UIcamera GameObject cameraGo = new GameObject("UICamera"); - cameraGo.transform.SetParent(UIManagerGo.transform); + cameraGo.transform.SetParent(canvas.transform); cameraGo.transform.localPosition = new Vector3(0, 0, -1000); Camera camera = cameraGo.AddComponent(); camera.cullingMask = LayerMask.GetMask("UI"); camera.orthographic = true; - if (!isOnlyUICamera) - { - camera.clearFlags = CameraClearFlags.Depth; - camera.depth = 1; - } - else - { - camera.clearFlags = CameraClearFlags.SolidColor; - camera.backgroundColor = Color.black; - } + camera.depth = cameraDepth; + uICameraData.m_camera = camera; //Canvas - Canvas canvas = UIManagerGo.AddComponent(); - canvas.renderMode = RenderMode.ScreenSpaceCamera; - canvas.worldCamera = camera; + Canvas canvasComp = canvas.AddComponent(); + canvasComp.renderMode = RenderMode.ScreenSpaceCamera; + canvasComp.worldCamera = camera; //UI Raycaster - //GraphicRaycaster Graphic = UIManagerGo.AddComponent(); - UIManagerGo.AddComponent(); + canvas.AddComponent(); //CanvasScaler - CanvasScaler scaler = UIManagerGo.AddComponent(); + CanvasScaler scaler = canvas.AddComponent(); scaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize; scaler.referenceResolution = referenceResolution; scaler.screenMatchMode = MatchMode; + if (!isOnlyUICamera) + { + camera.clearFlags = CameraClearFlags.Depth; + camera.depth = 1; + } + else + { + camera.clearFlags = CameraClearFlags.SolidColor; + camera.backgroundColor = Color.black; + } if (isVertical) { scaler.matchWidthOrHeight = 1; @@ -67,73 +88,77 @@ public static void CreatUIManager(Vector2 referenceResolution, CanvasScaler.Scre //挂载点 GameObject goTmp = null; RectTransform rtTmp = null; - UILayerManager layerTmp = UIManagerGo.GetComponent(); + UILayerManager UILayerManager = UIManagerGo.GetComponent(); goTmp = new GameObject("GameUI"); goTmp.layer = LayerMask.NameToLayer("UI"); - goTmp.transform.SetParent(UIManagerGo.transform); + goTmp.transform.SetParent(canvas.transform); goTmp.transform.localScale = Vector3.one; rtTmp = goTmp.AddComponent(); rtTmp.anchorMax = new Vector2(1, 1); rtTmp.anchorMin = new Vector2(0, 0); rtTmp.anchoredPosition3D = Vector3.zero; rtTmp.sizeDelta = Vector2.zero; - layerTmp.m_GameUILayerParent = goTmp.transform; + uICameraData.m_GameUILayerParent = goTmp.transform; goTmp = new GameObject("Fixed"); goTmp.layer = LayerMask.NameToLayer("UI"); - goTmp.transform.SetParent(UIManagerGo.transform); + goTmp.transform.SetParent(canvas.transform); goTmp.transform.localScale = Vector3.one; rtTmp = goTmp.AddComponent(); rtTmp.anchorMax = new Vector2(1, 1); rtTmp.anchorMin = new Vector2(0, 0); rtTmp.anchoredPosition3D = Vector3.zero; rtTmp.sizeDelta = Vector2.zero; - layerTmp.m_FixedLayerParent = goTmp.transform; + uICameraData.m_FixedLayerParent = goTmp.transform; goTmp = new GameObject("Normal"); goTmp.layer = LayerMask.NameToLayer("UI"); - goTmp.transform.SetParent(UIManagerGo.transform); + goTmp.transform.SetParent(canvas.transform); goTmp.transform.localScale = Vector3.one; rtTmp = goTmp.AddComponent(); rtTmp.anchorMax = new Vector2(1, 1); rtTmp.anchorMin = new Vector2(0, 0); rtTmp.anchoredPosition3D = Vector3.zero; rtTmp.sizeDelta = Vector2.zero; - layerTmp.m_NormalLayerParent = goTmp.transform; + uICameraData.m_NormalLayerParent = goTmp.transform; goTmp = new GameObject("TopBar"); goTmp.layer = LayerMask.NameToLayer("UI"); - goTmp.transform.SetParent(UIManagerGo.transform); + goTmp.transform.SetParent(canvas.transform); goTmp.transform.localScale = Vector3.one; rtTmp = goTmp.AddComponent(); rtTmp.anchorMax = new Vector2(1, 1); rtTmp.anchorMin = new Vector2(0, 0); rtTmp.anchoredPosition3D = Vector3.zero; rtTmp.sizeDelta = Vector2.zero; - layerTmp.m_TopbarLayerParent = goTmp.transform; + uICameraData.m_TopbarLayerParent = goTmp.transform; goTmp = new GameObject("PopUp"); goTmp.layer = LayerMask.NameToLayer("UI"); - goTmp.transform.SetParent(UIManagerGo.transform); + goTmp.transform.SetParent(canvas.transform); goTmp.transform.localScale = Vector3.one; rtTmp = goTmp.AddComponent(); rtTmp.anchorMax = new Vector2(1, 1); rtTmp.anchorMin = new Vector2(0, 0); rtTmp.anchoredPosition3D = Vector3.zero; rtTmp.sizeDelta = Vector2.zero; - layerTmp.m_PopUpLayerParent = goTmp.transform; - //m_UILayerManager = layerTmp; + uICameraData.m_PopUpLayerParent = goTmp.transform; - ProjectWindowUtil.ShowCreatedAsset(UIManagerGo); + UILayerManager.UICameraList.Add(uICameraData); + //重新保存 + ReSaveUIManager(UIManagerGo); + } + + static void ReSaveUIManager(GameObject UIManagerGo) + { string Path = "Resources/UI/UIManager.prefab"; FileTool.CreatFilePath(Application.dataPath + "/" + Path); PrefabUtility.CreatePrefab("Assets/" + Path, UIManagerGo, ReplacePrefabOptions.ConnectToPrefab); - } - public static void CreatUI(string UIWindowName, UIType UIType,UILayerManager UILayerManager,bool isAutoCreatePrefab) + public static void CreatUI(string UIWindowName, string UIcameraKey,UIType UIType,UILayerManager UILayerManager,bool isAutoCreatePrefab) { GameObject uiGo = new GameObject(UIWindowName); @@ -340,9 +365,9 @@ public static void CreateGuideWindow() guideBaseTmp.m_objectList.Add(Text_tips); - guideBaseTmp.m_mask = img; - guideBaseTmp.m_TipText = text; - guideBaseTmp.m_TipTransfrom = txt_tipsrt; + //guideBaseTmp.m_mask = img; + //guideBaseTmp.m_TipText = text; + //guideBaseTmp.m_TipTransfrom = txt_tipsrt; guideBaseTmp.m_bgMask = BgGo; guideBaseTmp.m_uiRoot = rootGo; diff --git a/Assets/Script/Core/Editor/UI/UIEditorWindow.cs b/Assets/Script/Core/Editor/UI/UIEditorWindow.cs index 63a6b657..92247a7a 100644 --- a/Assets/Script/Core/Editor/UI/UIEditorWindow.cs +++ b/Assets/Script/Core/Editor/UI/UIEditorWindow.cs @@ -8,6 +8,7 @@ using System.IO; public class UIEditorWindow : EditorWindow { + UIManager m_UIManager; UILayerManager m_UILayerManager; [MenuItem("Window/UI编辑器工具", priority = 600)] @@ -24,6 +25,7 @@ void OnEnable() if(uiManager) { + m_UIManager = uiManager.GetComponent(); m_UILayerManager = uiManager.GetComponent(); } @@ -41,6 +43,8 @@ void OnGUI() UIManagerGUI(); + + CreateUIGUI(); UITemplate(); @@ -89,11 +93,46 @@ void UIManagerGUI() { UICreateService.CreatUIManager(m_referenceResolution, m_MatchMode, m_isOnlyUICamera, m_isVertical); } + + CreateUICameraGUI(); + } + } + + #region CreateUICamera + + bool isCreateUICamera = false; + string cameraKey; + float cameraDepth = 1; + + void CreateUICameraGUI() + { + isCreateUICamera = EditorGUILayout.Foldout(isCreateUICamera, "CreateUICamera:"); + if (isCreateUICamera) + { + EditorGUI.indentLevel = 2; + cameraKey = EditorGUILayout.TextField("Camera Key", cameraKey); + cameraDepth = EditorGUILayout.FloatField("Camera Depth", cameraDepth); + + if (cameraKey != "") + { + if (GUILayout.Button("CreateUICamera")) + { + UICreateService.CreateUICamera(m_UIManager, cameraKey, cameraDepth,m_referenceResolution, m_MatchMode, m_isOnlyUICamera, m_isVertical); + cameraKey = ""; + } + } + else + { + EditorGUILayout.LabelField("Camera Key 不能为空"); + } + } } #endregion + #endregion + #region createUI bool isAutoCreatePrefab = true; @@ -101,6 +140,8 @@ void UIManagerGUI() bool isUseLua = true; bool isFoldCreateUI = false; string m_UIname = ""; + int m_UICameraKeyIndex = 0; + string[] cameraKeyList; UIType m_UIType = UIType.Normal; void CreateUIGUI() @@ -110,9 +151,14 @@ void CreateUIGUI() if (isFoldCreateUI) { + cameraKeyList = UIManager.GetCameraNames(); + EditorGUI.indentLevel = 1; EditorGUILayout.LabelField("提示: 脚本和 UI 名称会自动添加Window后缀"); m_UIname = EditorGUILayout.TextField("UI Name:", m_UIname); + + m_UICameraKeyIndex = EditorGUILayout.Popup("Camera", m_UICameraKeyIndex, cameraKeyList); + m_UIType = (UIType)EditorGUILayout.EnumPopup("UI Type:", m_UIType); isUseLua = EditorGUILayout.Toggle("使用 Lua", isUseLua); @@ -138,7 +184,7 @@ void CreateUIGUI() { if (GUILayout.Button("创建UI")) { - UICreateService.CreatUI(l_nameTmp, m_UIType, m_UILayerManager, isAutoCreatePrefab); + UICreateService.CreatUI(l_nameTmp, cameraKeyList[m_UICameraKeyIndex], m_UIType, m_UILayerManager, isAutoCreatePrefab); m_UIname = ""; } } diff --git a/Assets/Script/Core/Editor/UI/componment/LanguageComponmentEditor.cs b/Assets/Script/Core/Editor/UI/componment/LanguageComponmentEditor.cs index 8031429c..5dc536d5 100644 --- a/Assets/Script/Core/Editor/UI/componment/LanguageComponmentEditor.cs +++ b/Assets/Script/Core/Editor/UI/componment/LanguageComponmentEditor.cs @@ -12,7 +12,6 @@ public class LanguageComponmentEditor : Editor LanguageComponent m_lc; List m_languageList; - public override void OnInspectorGUI() { if (m_lc == null) diff --git a/Assets/Script/Core/Editor/UI/componment/UIWindowBaseComponmentEditor.cs b/Assets/Script/Core/Editor/UI/componment/UIWindowBaseComponmentEditor.cs new file mode 100644 index 00000000..174b0934 --- /dev/null +++ b/Assets/Script/Core/Editor/UI/componment/UIWindowBaseComponmentEditor.cs @@ -0,0 +1,40 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +[CustomEditor(typeof(UIWindowBase),true)] +public class UIWindowBaseComponmentEditor : Editor +{ + UIWindowBase m_ui; + string[] list; + int selectIndex = 0; + + public override void OnInspectorGUI() + { + if (m_ui == null) + { + m_ui = (UIWindowBase)target; + } + + list = UIManager.GetCameraNames(); + selectIndex = GetIndex(m_ui.cameraKey); + + selectIndex = EditorGUILayout.Popup("Camera Key", selectIndex, list); + m_ui.cameraKey = list[selectIndex]; + + base.OnInspectorGUI(); + } + + public int GetIndex(string current) + { + for (int i = 0; i < list.Length; i++) + { + if (current.Equals(list[i])) + { + return i; + } + } + return 0; + } +} diff --git a/Assets/Script/Core/Editor/UI/componment/UIWindowBaseComponmentEditor.cs.meta b/Assets/Script/Core/Editor/UI/componment/UIWindowBaseComponmentEditor.cs.meta new file mode 100644 index 00000000..0b88949c --- /dev/null +++ b/Assets/Script/Core/Editor/UI/componment/UIWindowBaseComponmentEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 2f0a000afca788844a29af8758a8608a +timeCreated: 1539231264 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/GuideSystem/GuideSystemBase.cs b/Assets/Script/Core/GuideSystem/GuideSystemBase.cs index 12a82475..252db425 100644 --- a/Assets/Script/Core/GuideSystem/GuideSystemBase.cs +++ b/Assets/Script/Core/GuideSystem/GuideSystemBase.cs @@ -259,6 +259,11 @@ protected virtual void ClearGuideBehave() } + protected virtual GuideWindowBase OpenGuideWindow() + { + return (GuideWindowBase)UIManager.OpenUIWindow(c_guideWindowName); + } + /// /// 引导点击过滤器,返回true通过 /// @@ -404,7 +409,7 @@ void StartGuide() SetCurrent(LoadFirstGuide()); - m_guideWindowBase = (GuideWindowBase)UIManager.OpenUIWindow(c_guideWindowName); + m_guideWindowBase = OpenGuideWindow(); OnStart(); @@ -430,8 +435,7 @@ void EndGuide() m_isStart = false; m_isOperationUI = false; - if (m_guideWindowBase != null) - UIManager.CloseUIWindow(m_guideWindowBase); + CloseGuideWindow(m_guideWindowBase); m_guideWindowBase = null; @@ -446,7 +450,11 @@ void EndGuide() ApplicationManager.s_OnApplicationUpdate -= Update; } } - + protected virtual void CloseGuideWindow( GuideWindowBase m_guideWindowBase) + { + if (m_guideWindowBase != null) + UIManager.CloseUIWindow(m_guideWindowBase); + } void NextGuide() { // diff --git a/Assets/Script/Core/GuideSystem/GuideWindowBase.cs b/Assets/Script/Core/GuideSystem/GuideWindowBase.cs index 5ee31436..88de9130 100644 --- a/Assets/Script/Core/GuideSystem/GuideWindowBase.cs +++ b/Assets/Script/Core/GuideSystem/GuideWindowBase.cs @@ -2,17 +2,32 @@ using System.Collections; using System.Collections.Generic; using UnityEngine.UI; +using System; namespace FrameWork.GuideSystem { public class GuideWindowBase : UIWindowBase { - List m_effectList = new List(); - List m_uiList = new List(); + protected List m_effectList = new List(); + protected List m_uiList = new List(); - public Image m_mask; - public Text m_TipText; - public RectTransform m_TipTransfrom; + protected Image m_mask; + protected Text m_TipText; + protected RectTransform m_TipTransfrom; + + public override void OnOpen() + { + m_mask = GetImage("mask"); + m_TipText = GetText("Text_tip"); + m_TipTransfrom = GetRectTransform("Tips"); + + OnOpenUI(); + } + + protected virtual void OnOpenUI() + { + + } #region 特效相关 public GameObject CreateEffect(string effectName) diff --git a/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick.cs b/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick.cs index 9de0267f..dd451dc6 100644 --- a/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick.cs +++ b/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick.cs @@ -22,7 +22,7 @@ void Start() { //计算摇杆块的半径 mRadius = ((transform as RectTransform).sizeDelta.x-content.sizeDelta.x) * 0.5f; - Vector2 referenceResolution = UIManager.s_UIManagerGo.GetComponent().referenceResolution; + Vector2 referenceResolution = UIManager.UIManagerGo.GetComponent().referenceResolution; conversionX = referenceResolution.x / Screen.width ; conversionY = referenceResolution.y/Screen.height ; } diff --git a/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick_hide.cs b/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick_hide.cs index e9283e86..985dff7f 100644 --- a/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick_hide.cs +++ b/Assets/Script/Core/UI/Components/JoyStick/UGUIJoyStick_hide.cs @@ -27,7 +27,7 @@ void Start() { //计算摇杆块的半径 mRadius =( bg.sizeDelta.x - content.sizeDelta.x) * 0.5f; - referenceResolution = UIManager.s_UIManagerGo.GetComponent().referenceResolution; + referenceResolution = UIManager.UIManagerGo.GetComponent().referenceResolution; conversionX = referenceResolution.x / Screen.width; conversionY = referenceResolution.y / Screen.height; rocker.SetActive(false); diff --git a/Assets/Script/Core/UI/Control/UILayerManager.cs b/Assets/Script/Core/UI/Control/UILayerManager.cs index 8ad9f9ce..dcaa0ca2 100644 --- a/Assets/Script/Core/UI/Control/UILayerManager.cs +++ b/Assets/Script/Core/UI/Control/UILayerManager.cs @@ -4,55 +4,76 @@ public class UILayerManager : MonoBehaviour { - public Transform m_GameUILayerParent; - public Transform m_FixedLayerParent; - public Transform m_NormalLayerParent; - public Transform m_TopbarLayerParent; - public Transform m_PopUpLayerParent; - - public List normalUIList = new List(); + public List UICameraList = new List(); public void Awake() { - if (m_GameUILayerParent == null) + for (int i = 0; i < UICameraList.Count; i++) { - Debug.LogError("UILayerManager :GameUILayerParent is null!"); - } + UICameraData data = UICameraList[i]; - if (m_FixedLayerParent == null) - { - Debug.LogError("UILayerManager :FixedLayerParent is null!"); - } + data.m_root.transform.localPosition = new Vector3(0, 0, i * -2000); - if (m_NormalLayerParent == null) - { - Debug.LogError("UILayerManager :NormalLayerParent is null!"); + if (data.m_root == null) + { + Debug.LogError("UILayerManager :Root is null! " + " key : " + data.m_key + " index : " + i); + } + + if (data.m_camera == null) + { + Debug.LogError("UILayerManager :Camera is null! " + " key : " + data.m_key + " index : " + i); + } + + if (data.m_GameUILayerParent == null) + { + Debug.LogError("UILayerManager :GameUILayerParent is null!" + " key : " + data.m_key + " index : " + i); + } + + if (data.m_FixedLayerParent == null) + { + Debug.LogError("UILayerManager :FixedLayerParent is null!" + " key : " + data.m_key + " index : " + i); + } + + if (data.m_NormalLayerParent == null) + { + Debug.LogError("UILayerManager :NormalLayerParent is null!" + " key : " + data.m_key + " index : " + i); + } + + if (data.m_TopbarLayerParent == null) + { + Debug.LogError("UILayerManager :TopbarLayerParent is null!" + " key : " + data.m_key + " index : " + i); + } + + if (data.m_PopUpLayerParent == null) + { + Debug.LogError("UILayerManager :popUpLayerParent is null!" + " key : " + data.m_key + " index : " + i); + } } + } + + public void SetLayer(UIWindowBase ui,string cameraKey = null) + { + UICameraData data = GetUICameraDataByKey(cameraKey); - if (m_TopbarLayerParent == null) + if(cameraKey == null) { - Debug.LogError("UILayerManager :TopbarLayerParent is null!"); + data = GetUICameraDataByKey(ui.cameraKey); } - - if (m_PopUpLayerParent == null) + else { - Debug.LogError("UILayerManager :popUpLayerParent is null!"); + data = GetUICameraDataByKey(cameraKey); } - } - public void SetLayer(UIWindowBase ui) - { RectTransform rt = ui.GetComponent(); switch (ui.m_UIType) { - case UIType.GameUI: ui.transform.SetParent(m_GameUILayerParent); break; - case UIType.Fixed: ui.transform.SetParent(m_FixedLayerParent); break; + case UIType.GameUI: ui.transform.SetParent(data.m_GameUILayerParent); break; + case UIType.Fixed: ui.transform.SetParent(data.m_FixedLayerParent); break; case UIType.Normal: - ui.transform.SetParent(m_NormalLayerParent); - normalUIList.Add(ui); + ui.transform.SetParent(data.m_NormalLayerParent); break; - case UIType.TopBar: ui.transform.SetParent(m_TopbarLayerParent); break; - case UIType.PopUp: ui.transform.SetParent(m_PopUpLayerParent); break; + case UIType.TopBar: ui.transform.SetParent(data.m_TopbarLayerParent); break; + case UIType.PopUp: ui.transform.SetParent(data.m_PopUpLayerParent); break; } rt.localScale = Vector3.one; @@ -64,22 +85,61 @@ public void SetLayer(UIWindowBase ui) rt.anchorMax = Vector3.one; rt.sizeDelta = Vector2.zero; + rt.transform.localPosition = Vector3.zero; rt.anchoredPosition = Vector3.zero; rt.SetAsLastSibling(); } } - public void RemoveUI(UIWindowBase ui) + public UICameraData GetUICameraDataByKey(string key) { - switch (ui.m_UIType) + if(key == null || key == "") { - case UIType.GameUI: break; - case UIType.Fixed: break; - case UIType.Normal: - normalUIList.Remove(ui); - break; - case UIType.TopBar: break; - case UIType.PopUp: break; + if(UICameraList.Count > 0) + { + return UICameraList[0]; + } + else + { + throw new System.Exception("UICameraList is null ! " + key); + } + } + + for (int i = 0; i < UICameraList.Count; i++) + { + if(UICameraList[i].m_key == key) + { + return UICameraList[i]; + } } + + throw new System.Exception("Dont Find UILayerData by " + key); + } + + //public void RemoveUI(UIWindowBase ui) + //{ + // switch (ui.m_UIType) + // { + // case UIType.GameUI: break; + // case UIType.Fixed: break; + // case UIType.Normal: + // normalUIList.Remove(ui); + // break; + // case UIType.TopBar: break; + // case UIType.PopUp: break; + // } + //} + + [System.Serializable] + public struct UICameraData + { + public string m_key; + public GameObject m_root; + public Camera m_camera; + public Transform m_GameUILayerParent; + public Transform m_FixedLayerParent; + public Transform m_NormalLayerParent; + public Transform m_TopbarLayerParent; + public Transform m_PopUpLayerParent; } } diff --git a/Assets/Script/Core/UI/Control/UIManager.cs b/Assets/Script/Core/UI/Control/UIManager.cs index a02ac4bf..6d57bbdc 100644 --- a/Assets/Script/Core/UI/Control/UIManager.cs +++ b/Assets/Script/Core/UI/Control/UIManager.cs @@ -10,35 +10,44 @@ [RequireComponent(typeof(UIAnimManager))] public class UIManager : MonoBehaviour { - public static GameObject s_UIManagerGo; - public static UILayerManager s_UILayerManager; //UI层级管理器 - public static UIAnimManager s_UIAnimManager; //UI动画管理器 - public static UIStackManager s_UIStackManager; //UI栈管理器 - public static Camera s_UIcamera; //UICamera - public static EventSystem s_EventSystem; + private static GameObject s_UIManagerGo; + private static UILayerManager s_UILayerManager; //UI层级管理器 + private static UIAnimManager s_UIAnimManager; //UI动画管理器 + private static UIStackManager s_UIStackManager; //UI栈管理器 + + //public static Camera s_UIcamera; //UICamera + private static EventSystem s_EventSystem; static public Dictionary> s_UIs = new Dictionary>(); //打开的UI static public Dictionary> s_hideUIs = new Dictionary>(); //隐藏的UI #region 初始化 + static bool isInit; + public static void Init() { - GameObject instance = GameObject.Find("UIManager"); - - if (instance == null) + if(!isInit) { - instance = GameObjectManager.CreateGameObject("UIManager"); - } + GameObject instance = GameObject.Find("UIManager"); - s_UIManagerGo = instance; + if (instance == null) + { + instance = GameObjectManager.CreateGameObject("UIManager"); + } - s_UILayerManager = instance.GetComponent(); - s_UIAnimManager = instance.GetComponent(); - s_UIStackManager = instance.GetComponent(); - s_UIcamera = instance.GetComponentInChildren(); - s_EventSystem = instance.GetComponentInChildren(); - DontDestroyOnLoad(instance); + UIManagerGo = instance; + + s_UILayerManager = instance.GetComponent(); + s_UIAnimManager = instance.GetComponent(); + s_UIStackManager = instance.GetComponent(); + s_EventSystem = instance.GetComponentInChildren(); + + if (Application.isPlaying) + { + DontDestroyOnLoad(instance); + } + } } ///异步加载UIMnager @@ -60,24 +69,109 @@ public static void InitAsync() static void SetUIManager(GameObject instance) { - s_UIManagerGo = instance; + UIManagerGo = instance; - s_UILayerManager = instance.GetComponent(); - s_UIAnimManager = instance.GetComponent(); - s_UIcamera = instance.GetComponentInChildren(); + UILayerManager = instance.GetComponent(); + UIAnimManager = instance.GetComponent(); DontDestroyOnLoad(instance); } + public static UILayerManager UILayerManager + { + get + { + if (s_UILayerManager == null) + { + Init(); + } + return s_UILayerManager; + } + + set + { + s_UILayerManager = value; + } + } + + public static UIAnimManager UIAnimManager + { + get + { + if (s_UILayerManager == null) + { + Init(); + } + return s_UIAnimManager; + } + + set + { + s_UIAnimManager = value; + } + } + + public static UIStackManager UIStackManager + { + get + { + if (s_UIStackManager == null) + { + Init(); + } + return s_UIStackManager; + } + + set + { + + s_UIStackManager = value; + } + } + + public static EventSystem EventSystem + { + get + { + if (s_EventSystem == null) + { + Init(); + } + return s_EventSystem; + } + + set + { + s_EventSystem = value; + } + } + + public static GameObject UIManagerGo + { + get + { + if (s_UIManagerGo == null) + { + Init(); + } + return s_UIManagerGo; + } + + set + { + s_UIManagerGo = value; + } + } + #endregion #region EventSystem public static void SetEventSystemEnable(bool enable) { - if(s_EventSystem != null) + if(EventSystem != null) { - s_EventSystem.enabled = enable; + EventSystem.enabled = enable; } else { @@ -87,6 +181,48 @@ public static void SetEventSystemEnable(bool enable) #endregion + #region UICamera + + public static string[] GetCameraNames() + { + string[] list = new string[UILayerManager.UICameraList.Count]; + + for (int i = 0; i < UILayerManager.UICameraList.Count; i++) + { + list[i] = UILayerManager.UICameraList[i].m_key; + } + + return list; + } + + public static Camera GetCamera(string CameraKey = null) + { + var data = UILayerManager.GetUICameraDataByKey(CameraKey); + return data.m_camera; + } + + /// + /// 将一个UI移动到另一个UICamera下 + /// + /// + /// + public static void ChangeUICamera(UIWindowBase ui, string cameraKey) + { + UILayerManager.SetLayer(ui, cameraKey); + } + + /// + /// 将一个UI重新放回它原本的UICamera下 + /// + /// + /// + public static void ResetUICamera(UIWindowBase ui) + { + UILayerManager.SetLayer(ui, ui.cameraKey); + } + + #endregion + #region UI的打开与关闭方法 /// @@ -101,7 +237,7 @@ public static T CreateUIWindow() where T : UIWindowBase public static UIWindowBase CreateUIWindow(string UIName) { - GameObject UItmp = GameObjectManager.CreateGameObject(UIName, s_UIManagerGo); + GameObject UItmp = GameObjectManager.CreateGameObject(UIName, UIManagerGo); UIWindowBase UIbase = UItmp.GetComponent(); UISystemEvent.Dispatch(UIbase, UIEvent.OnInit); //派发OnInit事件 @@ -117,7 +253,7 @@ public static UIWindowBase CreateUIWindow(string UIName) AddHideUI(UIbase); - s_UILayerManager.SetLayer(UIbase); //设置层级 + UILayerManager.SetLayer(UIbase); //设置层级 return UIbase; } @@ -141,8 +277,8 @@ public static UIWindowBase OpenUIWindow(string UIName, UICallBack callback = nul RemoveHideUI(UIbase); AddUI(UIbase); - s_UIStackManager.OnUIOpen(UIbase); - s_UILayerManager.SetLayer(UIbase); //设置层级 + UIStackManager.OnUIOpen(UIbase); + UILayerManager.SetLayer(UIbase); //设置层级 UIbase.windowStatus = UIWindowBase.WindowStatus.OpenAnim; @@ -157,7 +293,7 @@ public static UIWindowBase OpenUIWindow(string UIName, UICallBack callback = nul } - s_UIAnimManager.StartEnterAnim(UIbase, callback, objs); //播放动画 + UIAnimManager.StartEnterAnim(UIbase, callback, objs); //播放动画 return UIbase; } public static T OpenUIWindow() where T : UIWindowBase @@ -176,7 +312,7 @@ public static void CloseUIWindow(UIWindowBase UI,bool isPlayAnim = true ,UICallB { RemoveUI(UI); //移除UI引用 UI.RemoveAllListener(); - s_UILayerManager.RemoveUI(UI); + //s_UILayerManager.RemoveUI(UI); if (isPlayAnim) { @@ -190,7 +326,7 @@ public static void CloseUIWindow(UIWindowBase UI,bool isPlayAnim = true ,UICallB callback = CloseUIWindowCallBack; } UI.windowStatus = UIWindowBase.WindowStatus.CloseAnim; - s_UIAnimManager.StartExitAnim(UI, callback, objs); + UIAnimManager.StartExitAnim(UI, callback, objs); } else { @@ -210,7 +346,7 @@ static void CloseUIWindowCallBack(UIWindowBase UI, params object[] objs) Debug.LogError(UI.UIName + " OnClose Exception: " + e.ToString()); } - s_UIStackManager.OnUIClose(UI); + UIStackManager.OnUIClose(UI); AddHideUI(UI); } public static void CloseUIWindow(string UIname, bool isPlayAnim = true, UICallBack callback = null, params object[] objs) @@ -330,7 +466,7 @@ public static void CloseAllUI(bool isPlayerAnim = false) public static void CloseLastUI(UIType uiType = UIType.Normal) { - s_UIStackManager.CloseLastUIWindow(uiType); + UIStackManager.CloseLastUIWindow(uiType); } #endregion @@ -472,6 +608,7 @@ public static UIBase GetUIBaseByEventKey(string eventKey) } static Regex uiKey = new Regex(@"(\S+)\d+"); + static UIWindowBase GetUIWindowByEventKey(string eventKey) { string UIname = uiKey.Match(eventKey).Groups[1].Value; @@ -564,7 +701,7 @@ static int GetUIID(string UIname) public static int GetNormalUICount() { - return s_UILayerManager.normalUIList.Count; + return UIStackManager.m_normalStack.Count; } #endregion diff --git a/Assets/Script/Core/UI/Control/UIStackManager.cs b/Assets/Script/Core/UI/Control/UIStackManager.cs index 1c14881e..038848e9 100644 --- a/Assets/Script/Core/UI/Control/UIStackManager.cs +++ b/Assets/Script/Core/UI/Control/UIStackManager.cs @@ -4,10 +4,10 @@ public class UIStackManager : MonoBehaviour { - List m_normalStack = new List(); - List m_fixedStack = new List(); - List m_popupStack = new List(); - List m_topBarStack = new List(); + public List m_normalStack = new List(); + public List m_fixedStack = new List(); + public List m_popupStack = new List(); + public List m_topBarStack = new List(); public void OnUIOpen(UIWindowBase ui) { diff --git a/Assets/Script/Core/UI/Model/UIWindowBase.cs b/Assets/Script/Core/UI/Model/UIWindowBase.cs index 61077310..ee584b6d 100644 --- a/Assets/Script/Core/UI/Model/UIWindowBase.cs +++ b/Assets/Script/Core/UI/Model/UIWindowBase.cs @@ -5,13 +5,15 @@ public class UIWindowBase : UIBase { + [HideInInspector] + public string cameraKey; public UIType m_UIType; + public WindowStatus windowStatus; + public GameObject m_bgMask; public GameObject m_uiRoot; - public WindowStatus windowStatus; - #region 重载方法 public virtual void OnOpen() diff --git a/Assets/Script/Core/UI/Style/LanguageManager.cs b/Assets/Script/Core/UI/Style/LanguageManager.cs index 3f6e57bc..6f4a25d2 100644 --- a/Assets/Script/Core/UI/Style/LanguageManager.cs +++ b/Assets/Script/Core/UI/Style/LanguageManager.cs @@ -16,8 +16,6 @@ public class LanguageManager public const string c_mainKey = "key"; public const string c_valueKey = "value"; - - static public List s_LanguageList = new List(); //语言列表 static public List s_modelList = new List(); //模块列表 static public SystemLanguage s_defaultlanguage = SystemLanguage.ChineseSimplified; //默认语言 From a21a05ccd5ad90fb8c7c762772be38d62510f450 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Mon, 15 Oct 2018 11:03:34 +0800 Subject: [PATCH 080/108] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/Develop/DevelopReplayManager.cs | 53 ++++++--- Assets/Script/Core/Develop/GUIUtil.cs | 10 +- .../Language/LanguageDataEditorWindow.cs | 2 +- .../Resource/PeojectAssetChangeEvent.cs | 6 +- .../UIWindowBaseComponmentEditor.cs | 12 +- .../Core/GuideSystem/GuideSystemBase.cs | 20 ++-- .../Core/Network/Interface/HeartBeatBase.cs | 112 ++++++++++++++++++ .../Network/Interface/HeartBeatBase.cs.meta | 13 ++ .../Network/Interface/INetworkInterface.cs | 8 ++ .../JsonMessageProcessingController.cs | 6 + Assets/Script/Core/Network/NetworkManager.cs | 104 ++++------------ .../Core/Network/Socket/SocketService.cs | 2 + Assets/Script/Core/UI/Model/UIBase.cs | 2 + Assets/Script/Core/Utils/HTTPTool.cs | 4 +- 14 files changed, 240 insertions(+), 114 deletions(-) create mode 100644 Assets/Script/Core/Network/Interface/HeartBeatBase.cs create mode 100644 Assets/Script/Core/Network/Interface/HeartBeatBase.cs.meta diff --git a/Assets/Script/Core/Develop/DevelopReplayManager.cs b/Assets/Script/Core/Develop/DevelopReplayManager.cs index 2b9855d3..37135744 100644 --- a/Assets/Script/Core/Develop/DevelopReplayManager.cs +++ b/Assets/Script/Core/Develop/DevelopReplayManager.cs @@ -89,9 +89,6 @@ static void ChoseReplayMode(bool isReplay,string replayFileName = null) //关闭正常输入,保证回放数据准确 IInputProxyBase.IsActive = false; - //InputUIEventProxy.IsActive = false; - //InputOperationEventProxy.IsActive = false; - //InputNetworkEventProxy.IsActive = false; } else { @@ -218,23 +215,31 @@ static void WriteInputEvent(string EventSerializeContent) public static void LoadReplayFile(string fileName) { - string eventContent = ResourceIOTool.ReadStringByFile( - PathTool.GetAbsolutePath(ResLoadLocation.Persistent, + string eventContent = ResourceIOTool.ReadStringByFile(GetReplayEventFilePath(fileName)); + string randomContent = ResourceIOTool.ReadStringByFile(GetReplayRandomFilePath(fileName)); + + LoadEventStream(eventContent.Split('\n')); + LoadRandomList(randomContent.Split('\n')); + } + + public static string GetReplayEventFilePath(string fileName) + { + return PathTool.GetAbsolutePath(ResLoadLocation.Persistent, PathTool.GetRelativelyPath( c_directoryName, fileName, - c_eventExpandName))); + c_eventExpandName)); + } - string randomContent = ResourceIOTool.ReadStringByFile( - PathTool.GetAbsolutePath(ResLoadLocation.Persistent, + public static string GetReplayRandomFilePath(string fileName) + { + return PathTool.GetAbsolutePath(ResLoadLocation.Persistent, PathTool.GetRelativelyPath( c_directoryName, fileName, - c_randomExpandName))); - - LoadEventStream(eventContent.Split('\n')); - LoadRandomList(randomContent.Split('\n')); + c_randomExpandName)); } + public static Deserializer Deserializer = new Deserializer(); static void LoadEventStream(string[] content) { @@ -341,15 +346,22 @@ static void ReplayListGUI() for (int i = 0; i < FileNameList.Length; i++) { - if (GUILayout.Button("上传 " + FileNameList[i])) + if (!isUploadReplay) { - if(!isUploadReplay) + if (GUILayout.Button(FileNameList[i])) { ChoseReplayMode(true, FileNameList[i]); } - else + } + else + { + if (GUILayout.Button("上传 " + FileNameList[i])) { + string replayPath = GetReplayEventFilePath(FileNameList[i]); + string randomPath = GetReplayRandomFilePath(FileNameList[i]); + HTTPTool.Upload_Request_Thread(URLManager.GetURL("ReplayFileUpLoadURL"), replayPath, UploadCallBack); + HTTPTool.Upload_Request_Thread(URLManager.GetURL("ReplayFileUpLoadURL"), randomPath, UploadCallBack); } } } @@ -366,9 +378,16 @@ static void ReplayListGUI() }); } - if (GUILayout.Button("上传模式 : " + isUploadReplay)) + if (URLManager.GetURL("ReplayFileUpLoadURL") != null) + { + if (GUILayout.Button("上传模式 : " + isUploadReplay)) + { + isUploadReplay = !isUploadReplay; + } + } + else { - isUploadReplay = !isUploadReplay; + GUILayout.Label("上传持久数据需要在 URLConfig -> ReplayFileUpLoadURL 配置上传目录"); } if (GUILayout.Button("返回上层")) diff --git a/Assets/Script/Core/Develop/GUIUtil.cs b/Assets/Script/Core/Develop/GUIUtil.cs index 0c8f20fe..ab615747 100644 --- a/Assets/Script/Core/Develop/GUIUtil.cs +++ b/Assets/Script/Core/Develop/GUIUtil.cs @@ -80,8 +80,8 @@ public static void ShowTips(string content) const int tipWindowStartID = 1000; - const float tipWidth = 600; - const float tipHeight = 500; + static float tipWidth = Screen.width/2; + static float tipHeight = Screen.height / 2; static void TipsGUI() { int lastID = 0; @@ -113,11 +113,15 @@ static Vector2 GetTipPos(int i) return pos; } + static Vector2 TipsScrollPos = Vector2.zero; + static void TipsWindow(int windowID) { + TipsScrollPos = GUILayout.BeginScrollView(TipsScrollPos); GUILayout.Label(tiplist[windowID - tipWindowStartID], GUILayout.ExpandHeight(true)); + GUILayout.EndScrollView(); - if( GUILayout.Button("OK")) + if ( GUILayout.Button("OK")) { tiplist.RemoveAt(windowID - tipWindowStartID); if(tiplist.Count == 0) diff --git a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs index 5658e983..efa15501 100644 --- a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs +++ b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs @@ -476,7 +476,7 @@ void AddLanguageModelGUI() m_langeuageDataDict.Add(selectEditorModuleName, data); SaveData(); - + OnEnable(); }); } diff --git a/Assets/Script/Core/Editor/Resource/PeojectAssetChangeEvent.cs b/Assets/Script/Core/Editor/Resource/PeojectAssetChangeEvent.cs index aa178f84..06f5cec3 100644 --- a/Assets/Script/Core/Editor/Resource/PeojectAssetChangeEvent.cs +++ b/Assets/Script/Core/Editor/Resource/PeojectAssetChangeEvent.cs @@ -31,7 +31,7 @@ private static void OnMoveAssetCallBack(AssetMoveResult t, string t1, string t2) List paths = new List(); paths.Add(t1); paths.Add(t2); - UpdateAsset(paths); + //UpdateAsset(paths); Debug.Log("OnMoveAssetCallBack"); //GlobalEvent.DispatchEvent(EditorGlobalEventEnum.OnMoveAsset, t,t1,t2); } @@ -40,7 +40,7 @@ private static void OnDeleteAssetCallBack(AssetDeleteResult t, string t1, Remove { List paths = new List(); paths.Add(t1); - UpdateAsset(paths); + //UpdateAsset(paths); Debug.Log("OnDeleteAssetCallBack"); //GlobalEvent.DispatchEvent(EditorGlobalEventEnum.OnDeleteAsset, t, t1, t2); } @@ -49,7 +49,7 @@ private static void OnCreateAssetCallBack(string t) { List paths = new List(); paths.Add(t); - UpdateAsset(paths); + //UpdateAsset(paths); Debug.Log("OnCreateAssetCallBack"); //GlobalEvent.DispatchEvent(EditorGlobalEventEnum.OnCreateAsset, t); } diff --git a/Assets/Script/Core/Editor/UI/componment/UIWindowBaseComponmentEditor.cs b/Assets/Script/Core/Editor/UI/componment/UIWindowBaseComponmentEditor.cs index 174b0934..a59f4956 100644 --- a/Assets/Script/Core/Editor/UI/componment/UIWindowBaseComponmentEditor.cs +++ b/Assets/Script/Core/Editor/UI/componment/UIWindowBaseComponmentEditor.cs @@ -1,6 +1,7 @@ using System.Collections; using System.Collections.Generic; using UnityEditor; +using UnityEditor.SceneManagement; using UnityEngine; [CustomEditor(typeof(UIWindowBase),true)] @@ -12,6 +13,7 @@ public class UIWindowBaseComponmentEditor : Editor public override void OnInspectorGUI() { + if (m_ui == null) { m_ui = (UIWindowBase)target; @@ -21,13 +23,21 @@ public override void OnInspectorGUI() selectIndex = GetIndex(m_ui.cameraKey); selectIndex = EditorGUILayout.Popup("Camera Key", selectIndex, list); - m_ui.cameraKey = list[selectIndex]; + if (list.Length != 0) + m_ui.cameraKey = list[selectIndex]; base.OnInspectorGUI(); + if (GUI.changed) + { + EditorUtility.SetDirty(target); + EditorSceneManager.MarkAllScenesDirty(); + } } public int GetIndex(string current) { + if (string.IsNullOrEmpty(current)) + return 0; for (int i = 0; i < list.Length; i++) { if (current.Equals(list[i])) diff --git a/Assets/Script/Core/GuideSystem/GuideSystemBase.cs b/Assets/Script/Core/GuideSystem/GuideSystemBase.cs index 252db425..6a4ecfcd 100644 --- a/Assets/Script/Core/GuideSystem/GuideSystemBase.cs +++ b/Assets/Script/Core/GuideSystem/GuideSystemBase.cs @@ -53,7 +53,8 @@ public abstract class GuideSystemBase DataTable m_guideData; protected SingleData m_currentGuideData; //int m_currentGuideIndex = 0; - string m_currentGuideKey = ""; + protected string m_currentGuideKey = ""; + protected string m_startGuideKey = ""; public bool IsStart { @@ -113,7 +114,7 @@ public void Start(string guideKey = null) && GuideStartCondition(guideData) && GetGuideSwitch()) { - StartGuide(); + StartGuide(guideData); } } @@ -152,10 +153,10 @@ protected virtual void GetGuideRecord() /// 保存引导记录 /// 可以根据情况选择是保存在本地还是发往服务器 /// - protected virtual void SaveGuideRecord(SingleData data) + protected virtual void SaveGuideRecord(string startKey,string currentKey) { - RecordManager.SaveRecord(c_guideRecordName, data.m_SingleDataKey, true); - RecordManager.SaveRecord(c_guideRecordName, c_guideCurrentKeyName, data.m_SingleDataKey); + RecordManager.SaveRecord(c_guideRecordName, startKey, true); + RecordManager.SaveRecord(c_guideRecordName, c_guideCurrentKeyName, currentKey); } /// @@ -403,11 +404,13 @@ protected void Init() } } - void StartGuide() + void StartGuide(SingleData guideData) { m_isStart = true; - SetCurrent(LoadFirstGuide()); + m_startGuideKey = guideData.m_SingleDataKey; + + SetCurrent(guideData); m_guideWindowBase = OpenGuideWindow(); @@ -425,7 +428,6 @@ void StartGuide() ApplicationManager.s_OnApplicationUpdate += Update; } - } void EndGuide() @@ -465,7 +467,7 @@ void NextGuide() //如果是结束点则保存这一步 if (GuideEndCondition()) - SaveGuideRecord(m_currentGuideData); + SaveGuideRecord(m_startGuideKey,m_currentGuideData.m_SingleDataKey); SingleData nextGuideData = GetNextGuideData(m_currentGuideData); diff --git a/Assets/Script/Core/Network/Interface/HeartBeatBase.cs b/Assets/Script/Core/Network/Interface/HeartBeatBase.cs new file mode 100644 index 00000000..41edbc96 --- /dev/null +++ b/Assets/Script/Core/Network/Interface/HeartBeatBase.cs @@ -0,0 +1,112 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public abstract class HeartBeatBase +{ + #region 属性 + private float m_heatBeatSendSpaceTime = 15f; + + private float m_sendHeatBeatTimer; + private float m_receviceHeatBeatTimer; + + /// + /// 设置心跳包发送间隔时间 + /// + public float HeatBeatSendSpaceTime + { + get + { + return m_heatBeatSendSpaceTime; + } + + set + { + m_heatBeatSendSpaceTime = Mathf.Clamp(value, 2f, 100); + ResetSendTimer(); + } + } + + #endregion + + #region 生命周期 + + public virtual void Init(int spaceTime) + { + HeatBeatSendSpaceTime = spaceTime; + + InputManager.AddListener("HB",ReceviceMessage); + InputManager.AddListener(ReceviceConnectStatus); + } + + public virtual void Dispose() + { + InputManager.RemoveListener("HB",ReceviceMessage); + InputManager.RemoveListener(ReceviceConnectStatus); + } + + #endregion + + #region 重载方法 + + protected virtual void SendHeartBeatMessage() + { + //Debug.Log("SendHeartBeatMessage"); + NetworkManager.SendMessage("HB", new Dictionary()); + } + + protected virtual void ReceviceMessage(InputNetworkMessageEvent e) + { + if(e.m_MessgaeType == "HB") + { + ResetReceviceTimer(); + } + } + + protected virtual void ReceviceConnectStatus(InputNetworkConnectStatusEvent e) + { + if(e.m_status == NetworkState.Connected) + { + ResetSendTimer(); + ResetReceviceTimer(); + } + } + + #endregion + + #region Update + + public void Update() + { + m_sendHeatBeatTimer -= Time.unscaledDeltaTime; + m_receviceHeatBeatTimer -= Time.unscaledDeltaTime; + + //定时发送心跳包 + if (m_sendHeatBeatTimer <= 0) + { + ResetSendTimer(); + SendHeartBeatMessage(); + } + + //长期没收到服务器返回认为断线 + if (m_receviceHeatBeatTimer <= 0) + { + NetworkManager.DisConnect(); + } + } + + /// + /// 重设心跳包接收Timer + /// + void ResetReceviceTimer() + { + m_receviceHeatBeatTimer = HeatBeatSendSpaceTime * 2 + 1; + } + + void ResetSendTimer() + { + m_sendHeatBeatTimer = HeatBeatSendSpaceTime; + } + + #endregion +} diff --git a/Assets/Script/Core/Network/Interface/HeartBeatBase.cs.meta b/Assets/Script/Core/Network/Interface/HeartBeatBase.cs.meta new file mode 100644 index 00000000..cfb64c65 --- /dev/null +++ b/Assets/Script/Core/Network/Interface/HeartBeatBase.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5caa990eacbb05b408f4b9ab9579fcad +timeCreated: 1539311309 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Network/Interface/INetworkInterface.cs b/Assets/Script/Core/Network/Interface/INetworkInterface.cs index c4c4f7ca..b493d0e1 100644 --- a/Assets/Script/Core/Network/Interface/INetworkInterface.cs +++ b/Assets/Script/Core/Network/Interface/INetworkInterface.cs @@ -13,6 +13,14 @@ public virtual void Init() { } + public virtual void Dispose() + { + m_messageCallBack = null; + + m_socketService.Dispose(); + m_socketService = null; + } + public virtual void GetIPAddress() { diff --git a/Assets/Script/Core/Network/MessageClass4Json/JsonMessageProcessingController.cs b/Assets/Script/Core/Network/MessageClass4Json/JsonMessageProcessingController.cs index 97c3bc22..0ffaa3ed 100644 --- a/Assets/Script/Core/Network/MessageClass4Json/JsonMessageProcessingController.cs +++ b/Assets/Script/Core/Network/MessageClass4Json/JsonMessageProcessingController.cs @@ -21,6 +21,12 @@ public static void Init() private static void MessageReceiveCallBack(InputNetworkMessageEvent inputEvent) { + //心跳包 + if (inputEvent.m_MessgaeType == "HB") + { + return; + } + if (ApplicationManager.Instance.m_AppMode != AppMode.Release) Debug.Log("MessageReceiveCallBack ;" + JsonUtils.ToJson(inputEvent)); diff --git a/Assets/Script/Core/Network/NetworkManager.cs b/Assets/Script/Core/Network/NetworkManager.cs index b390442e..c1af1bf9 100644 --- a/Assets/Script/Core/Network/NetworkManager.cs +++ b/Assets/Script/Core/Network/NetworkManager.cs @@ -8,6 +8,7 @@ public class NetworkManager { static INetworkInterface s_network; + static HeartBeatBase s_heatBeat; public static bool IsConnect { @@ -21,6 +22,8 @@ public static bool IsConnect } } + #region 初始化 + /// /// 对旧代码的兼容 /// @@ -50,7 +53,6 @@ public static void Init(ProtocolType protocolType = ProtocolT s_network = new TProtocol(); s_network.m_socketService = new TSocket(); - //ApplicationManager.s_OnApplicationOnGUI += GUI; NetInit(); } @@ -80,58 +82,29 @@ private static void NetInit() ApplicationManager.s_OnApplicationUpdate += Update; ApplicationManager.s_OnApplicationQuit += DisConnect; - - HeatBeatInit(); } - private static byte[] heatBeatMsg; - private static void HeatBeatInit() + public static void InitHeartBeat(int spaceTime = 15) where T:HeartBeatBase,new() { - heatBeatMsg = System.Text.Encoding.UTF8.GetBytes("&"); + s_heatBeat = new T(); + s_heatBeat.Init(spaceTime); } - #region 心跳包操作 HeatBeat - private static float heatBeatDelayTime = 3f; - /// - /// 设置心跳包发送间隔时间 - /// - public static float HeatBeatDelayTime - { - get - { - return heatBeatDelayTime; - } - set - { - heatBeatDelayTime =Mathf.Clamp( value,2f,100); - } - } - private static float tempHeatBeatTimer; - private static bool startSendHeatBeat = false; - private static void StartSendHeatBeatMsg() - { - if (startSendHeatBeat) - { - if(tempHeatBeatTimer<=0) - { - tempHeatBeatTimer = HeatBeatDelayTime; - SendMessage(heatBeatMsg); - } - else - { - tempHeatBeatTimer -= Time.unscaledDeltaTime; - } - } - } #endregion + + #region API + public static void Dispose() { InputManager.UnLoadDispatcher(); InputManager.UnLoadDispatcher(); - s_network.m_messageCallBack = null; + s_network.Dispose(); s_network = null; + s_heatBeat.Dispose(); + s_heatBeat = null; + ApplicationManager.s_OnApplicationUpdate -= Update; } @@ -141,7 +114,6 @@ public static void SetServer(string IP, int port) } public static void Connect() { - //s_network.GetIPAddress(); s_network.Connect(); } @@ -192,6 +164,10 @@ public static void SendMessage(Dictionary data) } } + #endregion + + #region 事件派发 + static int msgCount = 0; static void ReceviceMeaasge(NetWorkMessage message) @@ -232,17 +208,10 @@ static void ConnectStatusChange(NetworkState status) static void Dispatch(NetworkState status) { InputNetworkEventProxy.DispatchStatusEvent(status); - - if(status == NetworkState.Connected) - { - startSendHeatBeat = true; - } - else - { - startSendHeatBeat = false; - } } + #endregion + #region Update static List s_statusList = new List(); @@ -254,25 +223,15 @@ static void Update() { if (s_messageList.Count > 0) { - int dealCount = 0; for (int i = 0; i < s_messageList.Count; i++) { - dealCount++; Dispatch(s_messageList[i]); s_messageList.RemoveAt(i); i--; - - //if (dealCount >= MaxDealCount) - //{ - // Debug.Log("s_messageList.Count " + s_messageList.Count); - - // break; - //} } } - if (s_statusList.Count > 0) { for (int i = 0; i < s_statusList.Count; i++) @@ -281,29 +240,18 @@ static void Update() } s_statusList.Clear(); } - if(s_network != null) + + if (s_network != null) { s_network.Update(); } - StartSendHeatBeatMsg(); - + if(s_heatBeat != null && IsConnect) + { + s_heatBeat.Update(); + } } - //static float msgCountTimer = 0; - //static int count = 0; - //static void GUI() - //{ - // msgCountTimer += Time.deltaTime; - // GUILayout.Label("MPS " + count); - - // if (msgCountTimer > 1) - // { - // count = msgCount; - // msgCountTimer = 0; - // msgCount = 0; - // } - - //} + #endregion } diff --git a/Assets/Script/Core/Network/Socket/SocketService.cs b/Assets/Script/Core/Network/Socket/SocketService.cs index 5754adb6..c614257d 100644 --- a/Assets/Script/Core/Network/Socket/SocketService.cs +++ b/Assets/Script/Core/Network/Socket/SocketService.cs @@ -24,6 +24,8 @@ public override void Init() public override void Close() { isConnect = false; + m_connectStatusCallback(NetworkState.ConnectBreak); + if (m_Socket != null) { m_Socket.Close(0); diff --git a/Assets/Script/Core/UI/Model/UIBase.cs b/Assets/Script/Core/UI/Model/UIBase.cs index 85038544..5b28bfda 100644 --- a/Assets/Script/Core/UI/Model/UIBase.cs +++ b/Assets/Script/Core/UI/Model/UIBase.cs @@ -701,6 +701,7 @@ public UIBase CreateItem(string itemName, string prantName, bool isActive) GameObject item = GameObjectManager.CreateGameObjectByPool(itemName, GetGameObject(prantName), isActive); item.transform.localScale = Vector3.one; + item.transform.localPosition = Vector3.zero; UIBase UIItem = item.GetComponent(); if (UIItem == null) @@ -720,6 +721,7 @@ public UIBase CreateItem(GameObject itemObj, GameObject parent, bool isActive) GameObject item = GameObjectManager.CreateGameObjectByPool(itemObj, parent, isActive); item.transform.localScale = Vector3.one; + item.transform.localPosition = Vector3.zero; UIBase UIItem = item.GetComponent(); if (UIItem == null) diff --git a/Assets/Script/Core/Utils/HTTPTool.cs b/Assets/Script/Core/Utils/HTTPTool.cs index 2ddbac17..091f9cb2 100644 --- a/Assets/Script/Core/Utils/HTTPTool.cs +++ b/Assets/Script/Core/Utils/HTTPTool.cs @@ -116,10 +116,10 @@ public void Upload_Request() } catch (Exception e) { - Debug.Log(files[0] + "上传失败 " + e.ToString()); + Debug.Log(files[0] + "上传失败 \n" + e.ToString()); if (callBack != null) { - callBack(files[0] + "上传完成 " + e.ToString()); + callBack(files[0] + "上传失败 \n" + e.ToString()); } } } From bbd5f7a555de1803ace18867d65578fe83da2d29 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Thu, 6 Dec 2018 09:54:32 +0800 Subject: [PATCH 081/108] =?UTF-8?q?=E5=A4=A7=E9=87=8F=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/AnimSystem/AnimData.cs | 180 ++-- Assets/Script/Core/AnimSystem/AnimSystem.cs | 101 ++- .../Core/Application/ApplicationManager.cs | 10 +- .../Application/ApplicationStatusManager.cs | 97 +- .../Core/Application/IApplicationStatus.cs | 18 + .../Script/Core/AudioManager/Audio2DPlayer.cs | 55 +- .../Script/Core/AudioManager/Audio3DPlayer.cs | 37 +- Assets/Script/Core/AudioManager/AudioAsset.cs | 194 ++-- .../AudioManager/AudioButtonClickComponent.cs | 25 + .../AudioButtonClickComponent.cs.meta | 11 + .../Core/AudioManager/AudioPlayManager.cs | 326 +++---- .../Core/AudioManager/AudioPlayerBase.cs | 52 +- .../Script/Core/Data/DataGenerateManager.cs | 10 + Assets/Script/Core/Data/DataTable.cs | 4 +- .../Core/Develop/DevelopReplayManager.cs | 84 +- Assets/Script/Core/Develop/GUIConsole.cs | 87 +- Assets/Script/Core/Develop/GUIUtil.cs | 70 +- Assets/Script/Core/Develop/LogOutPutThread.cs | 10 +- .../AudioButtonClickComponentEditor.cs | 35 + .../AudioButtonClickComponentEditor.cs.meta | 11 + .../Core/Editor/Config/ConfigEditorWindow.cs | 2 +- .../Core/Editor/Data/DataEditorWindow.cs | 148 +++- .../General/GeneralDataModificationWindow.cs | 4 +- .../Editor/General/ObjectSelectorWindow.cs | 4 +- .../Editor/GuideSystem/GuideSystemEditor.cs | 5 + .../Language/LanguageDataEditorWindow.cs | 70 +- .../Package/PackageConfigEditorWindow.cs | 109 ++- .../Core/Editor/Package/PackageService.cs | 3 +- .../Core/Editor/Record/RecordEditorWindow.cs | 3 +- .../Resource/PeojectAssetChangeEvent.cs | 8 +- .../Script/Core/Editor/UI/UICreateService.cs | 2 +- .../UI/componment/ImageLoadComponentEditor.cs | 36 + .../ImageLoadComponentEditor.cs.meta | 11 + .../UIWindowBaseComponmentEditor.cs | 8 +- .../Core/Editor/Utils/AudioEditorUtils.cs | 827 ++++++++++++++++++ .../Editor/Utils/AudioEditorUtils.cs.meta | 11 + .../Core/Editor/Utils/EditorDrawGUIUtil.cs | 16 +- Assets/Script/Core/Effect/CameraFade.cs | 254 ++++-- .../Core/GameObject/GameObjectManager.cs | 38 +- .../Core/GuideSystem/GuideSystemBase.cs | 170 +++- .../Core/GuideSystem/GuideWindowBase.cs | 2 +- .../Script/Core/HotUpdate/HotUpdateManager.cs | 104 ++- .../Input/Events/UI/InputUIOnMouseEvent.cs | 26 + .../Events/UI/InputUIOnMouseEvent.cs.meta | 12 + Assets/Script/Core/Input/InputDispatcher.cs | 2 +- .../InputEventProxy/InputUIEventProxy.cs | 77 ++ Assets/Script/Core/Input/InputManager.cs | 5 +- .../Core/Input/Interface/IInputDispatcher.cs | 2 +- .../Core/Network/Interface/HeartBeatBase.cs | 10 +- .../Core/Network/Json/JsonNetworkService.cs | 7 + Assets/Script/Core/Network/NetworkManager.cs | 1 + .../Core/Network/Socket/SocketService.cs | 5 +- .../Core/ResourceLoad/AssetsBundleManager.cs | 9 +- .../Script/Core/ResourceLoad/MemoryManager.cs | 16 +- .../ResourceLoad/ResourcesConfigManager.cs | 18 +- Assets/Script/Core/Timer/Timer.cs | 8 +- Assets/Script/Core/Timer/TimerEvent.cs | 2 +- Assets/Script/Core/UI/Components/DragUI.meta | 10 + .../Core/UI/Components/DragUI/DragUIInput.cs | 61 ++ .../UI/Components/DragUI/DragUIInput.cs.meta | 13 + .../Components/GuideHeightLightComponent.cs | 102 +++ .../GuideHeightLightComponent.cs.meta | 11 + .../Core/UI/Components/IlifeCycleComponent.cs | 10 + .../UI/Components/IlifeCycleComponent.cs.meta | 13 + .../Core/UI/Components/ImageLoadComponent.cs | 30 + .../UI/Components/ImageLoadComponent.cs.meta | 11 + .../LanguageComponent/LanguageComponent.cs | 7 +- .../LongPressAcceptor/LongPressAcceptor.cs | 20 +- .../Core/UI/Components/MouseDownUp.meta | 10 + .../UI/Components/MouseDownUp/MouseDownUp.cs | 48 + .../MouseDownUp/MouseDownUp.cs.meta | 13 + .../ReusingScrollRect/ReusingScrollRect.cs | 12 +- .../ReusingScrollRect/ScrollRectInput.cs | 4 +- .../Script/Core/UI/Control/UILayerManager.cs | 8 +- Assets/Script/Core/UI/Control/UIManager.cs | 33 +- .../Script/Core/UI/Control/UISystemEvent.cs | 58 +- Assets/Script/Core/UI/Extensions/TextPro.cs | 89 +- Assets/Script/Core/UI/Model/UIBase.cs | 510 ++++++----- Assets/Script/Core/UI/Model/UIWindowBase.cs | 58 +- .../Script/Core/UI/Utils/UIModelShowTool.cs | 184 +++- Assets/Script/Core/UI/Utils/UITools.cs | 1 + .../Core/Utils/CameraShaker/Demo/ShakeDemo.cs | 2 +- .../Scripts/CameraShakeInstance.cs | 14 +- .../CameraShaker/Scripts/CameraShaker.cs | 15 + Assets/Script/Core/Utils/ExpandMethod.cs | 14 + Assets/Script/Core/Utils/FileTool.cs | 28 +- Assets/Script/Core/Utils/PathTool.cs | 9 +- Assets/Script/Core/Utils/UGUITool.cs | 54 +- 88 files changed, 3778 insertions(+), 1126 deletions(-) create mode 100644 Assets/Script/Core/AudioManager/AudioButtonClickComponent.cs create mode 100644 Assets/Script/Core/AudioManager/AudioButtonClickComponent.cs.meta create mode 100644 Assets/Script/Core/Editor/AudioManager/AudioButtonClickComponentEditor.cs create mode 100644 Assets/Script/Core/Editor/AudioManager/AudioButtonClickComponentEditor.cs.meta create mode 100644 Assets/Script/Core/Editor/UI/componment/ImageLoadComponentEditor.cs create mode 100644 Assets/Script/Core/Editor/UI/componment/ImageLoadComponentEditor.cs.meta create mode 100644 Assets/Script/Core/Editor/Utils/AudioEditorUtils.cs create mode 100644 Assets/Script/Core/Editor/Utils/AudioEditorUtils.cs.meta create mode 100644 Assets/Script/Core/Input/Events/UI/InputUIOnMouseEvent.cs create mode 100644 Assets/Script/Core/Input/Events/UI/InputUIOnMouseEvent.cs.meta create mode 100644 Assets/Script/Core/UI/Components/DragUI.meta create mode 100644 Assets/Script/Core/UI/Components/DragUI/DragUIInput.cs create mode 100644 Assets/Script/Core/UI/Components/DragUI/DragUIInput.cs.meta create mode 100644 Assets/Script/Core/UI/Components/GuideHeightLightComponent.cs create mode 100644 Assets/Script/Core/UI/Components/GuideHeightLightComponent.cs.meta create mode 100644 Assets/Script/Core/UI/Components/IlifeCycleComponent.cs create mode 100644 Assets/Script/Core/UI/Components/IlifeCycleComponent.cs.meta create mode 100644 Assets/Script/Core/UI/Components/ImageLoadComponent.cs create mode 100644 Assets/Script/Core/UI/Components/ImageLoadComponent.cs.meta create mode 100644 Assets/Script/Core/UI/Components/MouseDownUp.meta create mode 100644 Assets/Script/Core/UI/Components/MouseDownUp/MouseDownUp.cs create mode 100644 Assets/Script/Core/UI/Components/MouseDownUp/MouseDownUp.cs.meta diff --git a/Assets/Script/Core/AnimSystem/AnimData.cs b/Assets/Script/Core/AnimSystem/AnimData.cs index b0881ab6..1929dc28 100644 --- a/Assets/Script/Core/AnimSystem/AnimData.cs +++ b/Assets/Script/Core/AnimSystem/AnimData.cs @@ -24,6 +24,10 @@ public class AnimData public float m_totalTime = 0; public int m_repeatCount = -1; + //Q4 + public Quaternion m_fromQ4; + public Quaternion m_toQ4; + //V3 public Vector4 m_fromV4; public Vector4 m_toV4; @@ -73,12 +77,13 @@ public class AnimData //缓存变量 RectTransform m_rectRransform; Transform m_transform; + string gameObjectName; #endregion #region 核心函数 - public void executeUpdate() + public bool ExecuteUpdate() { if (m_delayTime <= 0) { @@ -123,6 +128,8 @@ public void executeUpdate() case AnimType.LocalScale: LocalScale(); break; case AnimType.LocalRotate: LocalRotate(); break; case AnimType.Rotate: Rotate(); break; + case AnimType.LocalRotation:LocalRotation();break; + case AnimType.Rotation:Rotation();break; case AnimType.Color: UpdateColor(); break; case AnimType.Alpha: UpdateAlpha(); break; @@ -137,8 +144,10 @@ public void executeUpdate() } catch (Exception e) { - Debug.LogError("AnimSystem Error Exception: " + e.ToString()); + Debug.LogError("AnimSystem Error ! GameObjectName: " + gameObjectName + " Exception: " + e.ToString()); + return true; } + return false; } //动画播放完毕执行回调 @@ -228,6 +237,16 @@ public void ExchangeAlpha() public void Init() { + if (m_animGameObejct != null) + { + gameObjectName = m_animGameObejct.name; + } + else + { + gameObjectName = "customMethod"; + } + + switch (m_animType) { case AnimType.UGUI_Color: UguiColorInit(m_isChild); break; @@ -243,6 +262,9 @@ public void Init() case AnimType.LocalScale: TransfromInit(); break; case AnimType.LocalRotate: TransfromInit(); break; case AnimType.Rotate: TransfromInit(); break; + case AnimType.LocalRotation: TransfromInit(); break; + case AnimType.Rotation: TransfromInit(); break; + } if (m_pathType != PathType.Line) @@ -383,50 +405,44 @@ Vector3 Bezier3(Vector3 startPos, Vector3 endPos, float n_time, Vector3[] t_Cont #region UGUI_Color - List m_animObjectList_Image = new List(); - List m_animObjectList_Text = new List(); + List m_graphicList_Image = new List(); + //List m_rawImageList_Text = new List(); + //List m_animObjectList_Text = new List(); #region ALpha public void UguiAlphaInit(bool isChild) { - m_animObjectList_Image.Clear(); - m_animObjectList_Text.Clear(); + m_graphicList_Image.Clear(); m_oldColor.Clear(); if (isChild) { - Image[] images = m_animGameObejct.GetComponentsInChildren(true); + Graphic[] images = m_animGameObejct.GetComponentsInChildren(true); for (int i = 0; i < images.Length; i++) { if (images[i].transform.GetComponent() == null) { - m_animObjectList_Image.Add(images[i]); + m_graphicList_Image.Add(images[i]); m_oldColor.Add(images[i].color); } } - Text[] texts = m_animGameObejct.GetComponentsInChildren(true); + //Text[] texts = m_animGameObejct.GetComponentsInChildren(true); - for (int i = 0; i < texts.Length; i++) - { - m_animObjectList_Text.Add(texts[i]); - m_oldColor.Add(texts[i].color); - } + //for (int i = 0; i < texts.Length; i++) + //{ + // m_animObjectList_Text.Add(texts[i]); + // m_oldColor.Add(texts[i].color); + //} } else { - Image image = m_animGameObejct.GetComponent(); - Text text = m_animGameObejct.GetComponent(); - if (image != null) + Graphic gra = m_animGameObejct.GetComponent(); + if (gra != null) { - m_animObjectList_Image.Add(image); - m_oldColor.Add(image.color); - } - if (text != null) - { - m_animObjectList_Text.Add(text); - m_oldColor.Add(text.color); + m_graphicList_Image.Add(gra); + m_oldColor.Add(gra.color); } } @@ -444,23 +460,23 @@ public void SetUGUIAlpha(float a) Color newColor = colTmp; int index = 0; - for (int i = 0; i < m_animObjectList_Image.Count; i++) + for (int i = 0; i < m_graphicList_Image.Count; i++) { newColor = m_oldColor[index]; newColor.a = a; - m_animObjectList_Image[i].color = newColor; + m_graphicList_Image[i].color = newColor; index++; } - for (int i = 0; i < m_animObjectList_Text.Count; i++) - { - newColor = m_oldColor[index]; - newColor.a = a; - m_animObjectList_Text[i].color = newColor; + //for (int i = 0; i < m_graphicList_Image.Count; i++) + //{ + // newColor = m_oldColor[index]; + // newColor.a = a; + // m_graphicList_Image[i].color = newColor; - index++; - } + // index++; + //} } #endregion @@ -474,29 +490,29 @@ void UguiColor() public void UguiColorInit(bool isChild) { - m_animObjectList_Image.Clear(); - m_animObjectList_Text.Clear(); + m_graphicList_Image.Clear(); + //m_animObjectList_Text.Clear(); if (isChild) { - Image[] images = m_animGameObejct.GetComponentsInChildren(); + Graphic[] images = m_animGameObejct.GetComponentsInChildren(); for (int i = 0; i < images.Length; i++) { if (images[i].transform.GetComponent() == null) { - m_animObjectList_Image.Add(images[i]); + m_graphicList_Image.Add(images[i]); } else { //Debug.LogError("name:" + images[i].gameObject.name); } } - Text[] texts = m_animGameObejct.GetComponentsInChildren(); + //Text[] texts = m_animGameObejct.GetComponentsInChildren(); - for (int i = 0; i < texts.Length; i++) - { - m_animObjectList_Text.Add(texts[i]); - } + //for (int i = 0; i < texts.Length; i++) + //{ + // m_graphicList_Image.Add(texts[i]); + //} } else { @@ -504,27 +520,27 @@ public void UguiColorInit(bool isChild) Text text = m_animGameObejct.GetComponent(); if (image != null) { - m_animObjectList_Image.Add(image); - } - if (text != null) - { - m_animObjectList_Text.Add(text); + m_graphicList_Image.Add(image); } + //if (text != null) + //{ + // m_animObjectList_Text.Add(text); + //} } SetUGUIColor(m_fromColor); } void SetUGUIColor(Color color) { - for (int i = 0; i < m_animObjectList_Image.Count; i++) + for (int i = 0; i < m_graphicList_Image.Count; i++) { - m_animObjectList_Image[i].color = color; + m_graphicList_Image[i].color = color; } - for (int i = 0; i < m_animObjectList_Text.Count; i++) - { - m_animObjectList_Text[i].color = color; - } + //for (int i = 0; i < m_graphicList_Image.Count; i++) + //{ + // m_graphicList_Image[i].color = color; + //} } @@ -540,7 +556,7 @@ void SizeDelta() Debug.LogError(m_transform.name + "缺少RectTransform组件,不能进行sizeDelta变换!!"); return; } - m_rectRransform.sizeDelta = GetInterpolationV3(m_fromV2, m_toV2); + m_rectRransform.sizeDelta = GetInterpolationV2(m_fromV2, m_toV2); } #endregion @@ -557,6 +573,7 @@ void UguiPosition() m_rectRransform.anchoredPosition3D = GetInterpolationV3(m_fromV3, m_toV3); } + #endregion #endregion @@ -590,11 +607,23 @@ void LocalRotate() m_transform.localEulerAngles = GetInterpolationV3(m_fromV3, m_toV3); } + + void LocalRotation() + { + m_transform.localRotation = GetInterpolationQ4(m_fromQ4, m_toQ4); + + } + void Rotate() { m_transform.eulerAngles = GetInterpolationV3(m_fromV3, m_toV3); } + void Rotation() + { + m_transform.rotation = GetInterpolationQ4(m_fromQ4, m_toQ4); + + } void LocalScale() { m_transform.localScale = GetInterpolationV3(m_fromV3, m_toV3); @@ -811,6 +840,25 @@ Vector3 GetInterpolationV4(Vector4 oldValue, Vector4 aimValue) return result; } + Vector3 GetInterpolationV2(Vector2 oldValue, Vector2 aimValue) + { + Vector2 result = Vector2.zero; + + if (m_pathType == PathType.Line) + { + result = new Vector2( + GetInterpolation(oldValue.x, aimValue.x), + GetInterpolation(oldValue.y, aimValue.y) + ); + } + else + { + result = GetBezierInterpolationV3(oldValue, aimValue); + } + + return result; + } + Vector3 GetInterpolationV3(Vector3 oldValue, Vector3 aimValue) { Vector3 result = Vector3.zero; @@ -831,6 +879,28 @@ Vector3 GetInterpolationV3(Vector3 oldValue, Vector3 aimValue) return result; } + + Quaternion GetInterpolationQ4(Quaternion oldValue, Quaternion aimValue) + { + Quaternion result = Quaternion.Euler(Vector3.zero); + + if (m_pathType == PathType.Line) + { + result = new Quaternion( + GetInterpolation(oldValue.x, aimValue.x), + GetInterpolation(oldValue.y, aimValue.y), + GetInterpolation(oldValue.z, aimValue.z), + GetInterpolation(oldValue.w, aimValue.w) + ); + } + else + { + //result = GetBezierInterpolationV3(oldValue, aimValue); + } + + return result; + } + Color GetInterpolationColor(Color oldValue, Color aimValue) { Color result = new Color(GetInterpolation(oldValue.r, aimValue.r), @@ -857,7 +927,7 @@ public float OutBack(float b, float to, float t, float d, float s = 1.70158f) float c = to - b; t = t / d - 1; - + //Debug.LogWarning(c * (t * t * ((s + 1) * t + s) + 1) + b); return c * (t * t * ((s + 1) * t + s) + 1) + b; } diff --git a/Assets/Script/Core/AnimSystem/AnimSystem.cs b/Assets/Script/Core/AnimSystem/AnimSystem.cs index 93c15cb0..6a048dd5 100644 --- a/Assets/Script/Core/AnimSystem/AnimSystem.cs +++ b/Assets/Script/Core/AnimSystem/AnimSystem.cs @@ -445,8 +445,95 @@ public static AnimData Rotate(GameObject animObject, Vector3? from, Vector3 to, #endregion + #region Rotate_Quaternion + + public static AnimData Rotation(GameObject animObject, Quaternion? from, Quaternion to, + + float time = 0.5f, + float delayTime = 0, + bool isLocal = true, + InterpType interp = InterpType.Default, + bool IsIgnoreTimeScale = false, + RepeatType repeatType = RepeatType.Once, + int repeatCount = -1, + + AnimCallBack callBack = null, object[] parameter = null) + { + AnimType animType; + Quaternion fromTmp; + + if (isLocal) + { + fromTmp = from ?? animObject.transform.localRotation; + animType = AnimType.LocalRotation; + } + else + { + fromTmp = from ?? animObject.transform.rotation; + animType = AnimType.Rotation; + } + + AnimData l_tmp = new AnimData(); ; + + l_tmp.m_animGameObejct = animObject; + l_tmp.m_animType = animType; + l_tmp.m_fromQ4 = fromTmp; + l_tmp.m_toQ4 = to; + + l_tmp.m_isLocal = isLocal; + + l_tmp.m_delayTime = delayTime; + l_tmp.m_totalTime = time; + l_tmp.m_interpolationType = interp; + l_tmp.m_repeatType = repeatType; + l_tmp.m_repeatCount = repeatCount; + l_tmp.m_ignoreTimeScale = IsIgnoreTimeScale; + l_tmp.m_callBack = callBack; + l_tmp.m_parameter = parameter; + + l_tmp.Init(); + + GetInstance().animList.Add(l_tmp); + return l_tmp; + + } + + + public static AnimData Rotation(GameObject animObject, Vector3? from, Vector3 to, + + float time = 0.5f, + float delayTime = 0, + bool isLocal = true, + InterpType interp = InterpType.Default, + bool IsIgnoreTimeScale = false, + RepeatType repeatType = RepeatType.Once, + int repeatCount = -1, + + AnimCallBack callBack = null, object[] parameter = null) + { + + Quaternion? quaternion = null; + if (from != null) + { + quaternion = Quaternion.Euler((Vector3)from); + } + return Rotation( animObject, quaternion, Quaternion.Euler(to), + + time , + delayTime, + isLocal , + interp , + IsIgnoreTimeScale, + repeatType , + repeatCount, + + callBack , parameter ); + + } + #endregion + #region Scale - public static AnimData Scale(GameObject animObject, Vector3? from, Vector3 to, + public static AnimData Scale(GameObject animObject, Vector3? from, Vector3 to, float time = 0.5f, InterpType interp = InterpType.Default, bool IsIgnoreTimeScale = false, @@ -963,7 +1050,7 @@ public static void StopAnim(AnimData animData, bool isCallBack = false) public static void FinishAnim(AnimData animData) { animData.m_currentTime = animData.m_totalTime; - animData.executeUpdate(); + animData.ExecuteUpdate(); animData.ExecuteCallBack(); GetInstance().animList.Remove(animData); @@ -997,7 +1084,13 @@ public void Update() for (int i = 0; i < animList.Count; i++) { //执行Update - animList[i].executeUpdate(); + bool isError = animList[i].ExecuteUpdate(); + + if(isError) + { + removeList.Add(animList[i]); + continue; + } if (animList[i].m_isDone == true) { @@ -1040,6 +1133,8 @@ public enum AnimType LocalScale, LocalRotate, Rotate, + LocalRotation, + Rotation, Color, Alpha, diff --git a/Assets/Script/Core/Application/ApplicationManager.cs b/Assets/Script/Core/Application/ApplicationManager.cs index 78aa80dd..5f302153 100644 --- a/Assets/Script/Core/Application/ApplicationManager.cs +++ b/Assets/Script/Core/Application/ApplicationManager.cs @@ -50,6 +50,14 @@ public bool UseAssetsBundle } } + public static string Version + { + get + { + return Application.version + "." + HotUpdateManager.GetHotUpdateVersion(); + } + } + [Tooltip("是否记录输入到本地")] public bool m_recordInput = true; @@ -81,7 +89,7 @@ public void AppLaunch() DontDestroyOnLoad(gameObject); SetResourceLoadType(); //设置资源加载类型 ResourcesConfigManager.Initialize(); //资源路径管理器启动 - + AudioPlayManager.Init(); MemoryManager.Init(); //内存管理初始化 Timer.Init(); //计时器启动 InputManager.Init(); //输入管理器启动 diff --git a/Assets/Script/Core/Application/ApplicationStatusManager.cs b/Assets/Script/Core/Application/ApplicationStatusManager.cs index b099a4b4..b9eb4225 100644 --- a/Assets/Script/Core/Application/ApplicationStatusManager.cs +++ b/Assets/Script/Core/Application/ApplicationStatusManager.cs @@ -37,24 +37,43 @@ public static void SetFadeTime(float _fadeInTime, float afterInDelayTime, float s_fadeOutTime = _fadeOutTime; } /// - /// 切换游戏状态 + /// 切换游戏状态(当当前游戏状态和要进入的游戏状态相同则不执行) /// /// public static void EnterStatus(bool isFade = true) where T:IApplicationStatus { - EnterStatus(typeof(T).Name,isFade); + string statusName = typeof(T).Name; + + EnterStatus(statusName, isFade); + } + /// + /// 切换游戏状态(当当前游戏状态和要进入的游戏状态相同则也执行) + /// + /// + public static void ForceEnterStatus(bool isFade = true) where T : IApplicationStatus + { + string statusName = typeof(T).Name; + EnterStatus(statusName, isFade); } - public static void EnterStatus(string statusName,bool isFade=true) + public static void EnterStatus(string statusName,bool isFade = true) { if (s_currentAppStatusName == statusName) return; + if (!isFade) { if (s_currentAppStatus != null) { s_currentAppStatus.CloseAllUI(); - s_currentAppStatus.OnExitStatus(); + try + { + s_currentAppStatus.OnExitStatus(); + } + catch (Exception e) + { + Debug.LogError("EnterStatus Exception " + statusName + " " + e.ToString()); + } } s_currentAppStatusName = statusName; @@ -62,19 +81,36 @@ public static void EnterStatus(string statusName,bool isFade=true) s_currentAppStatus = GetStatus(statusName); - s_currentAppStatus.OnEnterStatus(); + try + { + s_currentAppStatus.OnEnterStatus(); + } + catch (Exception e) + { + Debug.LogError("EnterStatus Exception " + statusName + " " + e.ToString()); + } - if (OnStatusChangeCallBack != null) + try + { + if (OnStatusChangeCallBack != null) OnStatusChangeCallBack(s_currentAppStatus); + } + catch (Exception e) + { + Debug.LogError("EnterStatus Exception " + statusName + " " + e.ToString()); + } } else { - if (s_currentAppStatus != null) { + Debug.Log("Change "); + UIManager.SetEventSystemEnable(false); - CameraFade.Instance.FadeInToOut(s_fadeInTime, s_afterInDelayTime, s_fadeOutTime, () => + CameraFade.FadeInToOut(s_fadeInTime, s_afterInDelayTime, s_fadeOutTime, () => { + Debug.Log("Change call back "); + UIManager.SetEventSystemEnable(true); s_currentAppStatus.CloseAllUI(false); s_currentAppStatus.OnExitStatus(); @@ -83,10 +119,24 @@ public static void EnterStatus(string statusName,bool isFade=true) s_currentAppStatus = GetStatus(statusName); - s_currentAppStatus.OnEnterStatus(); - - if (OnStatusChangeCallBack != null) - OnStatusChangeCallBack(s_currentAppStatus); + try + { + s_currentAppStatus.OnEnterStatus(); + } + catch (Exception e) + { + Debug.LogError("EnterStatus Exception " + statusName + " " + e.ToString()); + } + + try + { + if (OnStatusChangeCallBack != null) + OnStatusChangeCallBack(s_currentAppStatus); + } + catch (Exception e) + { + Debug.LogError("EnterStatus Exception " + statusName + " " + e.ToString()); + } }); } else @@ -96,17 +146,26 @@ public static void EnterStatus(string statusName,bool isFade=true) s_currentAppStatus = GetStatus(statusName); - s_currentAppStatus.OnEnterStatus(); + try + { + s_currentAppStatus.OnEnterStatus(); + } + catch (Exception e) + { + Debug.LogError("EnterStatus Exception " + statusName + " " + e.ToString()); + } - if (OnStatusChangeCallBack != null) + try + { + if (OnStatusChangeCallBack != null) OnStatusChangeCallBack(s_currentAppStatus); + } + catch (Exception e) + { + Debug.LogError("EnterStatus Exception " + statusName + " " + e.ToString()); + } } - } - //ApplicationManager.Instance.StartCoroutine(s_currentAppStatus.InChangeScene(() => - //{ - // s_currentAppStatus.OnEnterStatus(); - //})); } public static T GetStatus() where T : IApplicationStatus diff --git a/Assets/Script/Core/Application/IApplicationStatus.cs b/Assets/Script/Core/Application/IApplicationStatus.cs index eb1b6ead..b5077eba 100644 --- a/Assets/Script/Core/Application/IApplicationStatus.cs +++ b/Assets/Script/Core/Application/IApplicationStatus.cs @@ -8,7 +8,25 @@ public abstract class IApplicationStatus #region UI 管理 List m_uiList = new List(); + /// + /// 获取现在ApplicationStatus管理的打开的UI的个数 + /// + /// + public int GetUIListCount() + { + return m_uiList.Count; + } + /// + /// 获取status打开的window的最上层Window + /// + /// + public UIWindowBase GetStatusTopUIWindow() + { + if (m_uiList.Count > 0) + return m_uiList[m_uiList.Count - 1]; + return null; + } public T OpenUI() where T: UIWindowBase { UIWindowBase ui = UIManager.OpenUIWindow(); diff --git a/Assets/Script/Core/AudioManager/Audio2DPlayer.cs b/Assets/Script/Core/AudioManager/Audio2DPlayer.cs index 4bdb54f4..d654bc25 100644 --- a/Assets/Script/Core/AudioManager/Audio2DPlayer.cs +++ b/Assets/Script/Core/AudioManager/Audio2DPlayer.cs @@ -27,7 +27,7 @@ public override void SetSFXVolume(float volume) } } - public void PlayMusic(int channel, string audioName, bool isLoop = true, float volumeScale = 1, float delay = 0f, float fadeTime = 0.5f) + public void PlayMusic(int channel, string audioName, bool isLoop = true, float volumeScale = 1, float delay = 0f, float fadeTime = 0.5f, string flag = "") { AudioAsset au; @@ -37,10 +37,11 @@ public void PlayMusic(int channel, string audioName, bool isLoop = true, float v } else { - au = CreateAudioAsset(mono.gameObject, false, true); + au = CreateAudioAssetByPool(mono.gameObject, false, AudioSourceType.Music); bgMusicDic.Add(channel, au); } - PlayMusicControl(au, audioName, isLoop, volumeScale, delay, fadeTime); + + PlayMusicControl(au, audioName, isLoop, volumeScale, delay, fadeTime, flag); } public void PauseMusic(int channel, bool isPause, float fadeTime = 0.5f) { @@ -76,10 +77,11 @@ public void StopMusicAll() } } - public void PlaySFX(string name, float volumeScale = 1f, float delay = 0f) + public void PlaySFX(string name, float volumeScale = 1f, float delay = 0f, float pitch = 1, string flag = "") { AudioAsset au = GetEmptyAudioAssetFromSFXList(); - PlayClip(au, name, false, volumeScale, delay); + au.flag = flag; + PlayClip(au, name, false, volumeScale, delay, pitch); } public void PauseSFXAll(bool isPause) @@ -88,12 +90,10 @@ public void PauseSFXAll(bool isPause) { if (isPause) { - if (sfxList[i].PlayState == AudioPlayState.Playing) sfxList[i].Pause(); } else { - if (sfxList[i].PlayState == AudioPlayState.Pause) sfxList[i].Play(); } } @@ -102,21 +102,9 @@ public void PauseSFXAll(bool isPause) private AudioAsset GetEmptyAudioAssetFromSFXList() { AudioAsset au = null; - if (sfxList.Count > 0) - { - for (int i = 0; i < sfxList.Count; i++) - { - sfxList[i].CheckState(); - if (sfxList[i].PlayState == AudioPlayState.Stop) - { - au = sfxList[i]; - break; - } - } - } if (au == null) { - au = CreateAudioAsset(mono.gameObject, false, false); + au = CreateAudioAssetByPool(mono.gameObject, false, AudioSourceType.SFX); sfxList.Add(au); } return au; @@ -125,27 +113,22 @@ private AudioAsset GetEmptyAudioAssetFromSFXList() private List clearList = new List(); public void ClearMoreAudioAsset() { - if (sfxList.Count > maxSFXAudioAssetNum) + for (int i = 0; i < sfxList.Count; i++) { - - for (int i = 0; i < sfxList.Count; i++) + sfxList[i].CheckState(); + if (sfxList[i].PlayState == AudioPlayState.Stop) { - sfxList[i].CheckState(); - if (sfxList[i].PlayState == AudioPlayState.Stop) - { - clearList.Add(sfxList[i]); - } + clearList.Add(sfxList[i]); } + } - for (int i = 0; i < clearList.Count; i++) - { - if (sfxList.Count <= maxSFXAudioAssetNum) - break; - Object.Destroy(clearList[i].audioSource); - sfxList.Remove(clearList[i]); - } - clearList.Clear(); + for (int i = 0; i < clearList.Count; i++) + { + DestroyAudioAssetByPool(clearList[i]); + sfxList.Remove(clearList[i]); } + clearList.Clear(); + } } diff --git a/Assets/Script/Core/AudioManager/Audio3DPlayer.cs b/Assets/Script/Core/AudioManager/Audio3DPlayer.cs index 2acf4985..94981332 100644 --- a/Assets/Script/Core/AudioManager/Audio3DPlayer.cs +++ b/Assets/Script/Core/AudioManager/Audio3DPlayer.cs @@ -35,7 +35,7 @@ public override void SetSFXVolume(float volume) } } - public void PlayMusic(GameObject owner, string audioName, int channel = 0, bool isLoop = true, float volumeScale = 1, float delay = 0f, float fadeTime = 0.5f) + public void PlayMusic(GameObject owner, string audioName, int channel = 0, bool isLoop = true, float volumeScale = 1, float delay = 0f, float fadeTime = 0.5f, string flag = "") { if (owner == null) { @@ -59,11 +59,11 @@ public void PlayMusic(GameObject owner, string audioName, int channel = 0, bool } else { - au = CreateAudioAsset(owner, true, true); + au = CreateAudioAssetByPool(owner, true, AudioSourceType.Music); tempDic.Add(channel, au); } - PlayMusicControl(au, audioName, isLoop, volumeScale, delay, fadeTime); + PlayMusicControl(au, audioName, isLoop, volumeScale, delay, fadeTime,flag); } public void PauseMusic(GameObject owner, int channel, bool isPause, float fadeTime = 0.5f) { @@ -175,12 +175,10 @@ public void PauseSFXAll(bool isPause) { if (isPause) { - if (sfxList[i].PlayState == AudioPlayState.Playing) sfxList[i].Pause(); } else { - if (sfxList[i].PlayState == AudioPlayState.Pause) sfxList[i].Play(); } } @@ -215,20 +213,6 @@ private AudioAsset GetEmptyAudioAssetFromSFXList(GameObject owner) if (sfxDic.ContainsKey(owner)) { sfxList = sfxDic[owner]; - if (sfxList.Count > 0) - { - for (int i = 0; i < sfxList.Count; i++) - { - sfxList[i].CheckState(); - if (sfxList[i].PlayState == AudioPlayState.Stop) - { - au = sfxList[i]; - break; - } - } - - } - } else { @@ -238,7 +222,7 @@ private AudioAsset GetEmptyAudioAssetFromSFXList(GameObject owner) } if (au == null) { - au = CreateAudioAsset(owner, true, false); + au = CreateAudioAssetByPool(owner, true, AudioSourceType.SFX); sfxList.Add(au); } @@ -251,8 +235,7 @@ private void ClearMoreAudioAsset(GameObject owner) if (sfxDic.ContainsKey(owner)) { List sfxList = sfxDic[owner]; - if (sfxList.Count > maxSFXAudioAssetNum) - { + for (int i = 0; i < sfxList.Count; i++) { sfxList[i].CheckState(); @@ -264,13 +247,13 @@ private void ClearMoreAudioAsset(GameObject owner) for (int i = 0; i < tempClearList.Count; i++) { - if (sfxList.Count <= maxSFXAudioAssetNum) - break; - Object.Destroy(tempClearList[i].audioSource); - sfxList.Remove(tempClearList[i]); + AudioAsset asset = tempClearList[i]; + Object.Destroy(asset.audioSource); + DestroyAudioAssetByPool(asset); + sfxList.Remove(asset); } tempClearList.Clear(); - } + } } diff --git a/Assets/Script/Core/AudioManager/AudioAsset.cs b/Assets/Script/Core/AudioManager/AudioAsset.cs index b4a14b67..0d9802d7 100644 --- a/Assets/Script/Core/AudioManager/AudioAsset.cs +++ b/Assets/Script/Core/AudioManager/AudioAsset.cs @@ -2,122 +2,138 @@ using System.Collections; using System.Collections.Generic; - public enum AudioPlayState +public enum AudioPlayState +{ + Playing, + Pause, + Stoping, + Stop, +} +/// +/// 音乐资源类型,音乐还是音效 +/// +public enum AudioSourceType +{ + Music, + SFX, +} +public class AudioAsset +{ + public AudioSource audioSource; + public AudioSourceType sourceType; + public string flag = ""; + public string assetName = ""; + private float totleVolume = 1; + /// + /// 总音量 + /// + public float TotleVolume { - Playing, - Pause, - Stop, - } - public class AudioAsset - { - public AudioSource audioSource; - - public string assetName = ""; - private float totleVolume = 1; - /// - /// 总音量 - /// - public float TotleVolume + get { - get - { - return totleVolume; - } - - set - { - - totleVolume = value; - Volume = TotleVolume * volumeScale; - } + return totleVolume; } - /// - /// 当前AudioSource 实际音量 - /// - public float Volume - { - get { return audioSource.volume; } - set { audioSource.volume = value; } - } - /// - /// 实际音量恢复到当前的最大 - /// - public void ResetVolume() + + set { + + totleVolume = value; Volume = TotleVolume * volumeScale; } - public float GetMaxRealVolume() - { - return TotleVolume * volumeScale; - } - /// - /// 相对于总音量当前当前AudioSource的音量缩放 Volume=TotleVolume * volumeScale - /// - private float volumeScale = 1f; - public float VolumeScale - { - get { return volumeScale; } - set - { - volumeScale = Mathf.Clamp01(value); - ResetVolume(); - } - } - public bool IsPlay + } + /// + /// 当前AudioSource 实际音量 + /// + public float Volume + { + get { return audioSource.volume; } + set { audioSource.volume = value; } + } + /// + /// 实际音量恢复到当前的最大 + /// + public void ResetVolume() + { + Volume = TotleVolume * volumeScale; + } + public float GetMaxRealVolume() + { + return TotleVolume * volumeScale; + } + /// + /// 相对于总音量当前当前AudioSource的音量缩放 Volume=TotleVolume * volumeScale + /// + private float volumeScale = 1f; + public float VolumeScale + { + get { return volumeScale; } + set { - get { return audioSource.isPlaying; } + volumeScale = Mathf.Clamp01(value); + ResetVolume(); } + } + public bool IsPlay + { + get { return audioSource.isPlaying; } + } - private AudioPlayState playState = AudioPlayState.Stop; - public AudioPlayState PlayState + private AudioPlayState playState = AudioPlayState.Stop; + public AudioPlayState PlayState + { + get { - get - { - //if (audioSource == null || (!audioSource.isPlaying && playState != AudioPlayState.Pause)) - // playState = AudioPlayState.Stop; - - return playState; - } - + return playState; } + } + - public void SetPlayState(AudioPlayState state) - { - playState = state; - } + public void SetPlayState(AudioPlayState state) + { + playState = state; + } public void CheckState() { if (audioSource == null || (!audioSource.isPlaying && playState != AudioPlayState.Pause)) - playState = AudioPlayState.Stop; + Stop(); } public void Play(float delay = 0f) + { + if (audioSource != null && audioSource.clip != null) { - if (audioSource != null && audioSource.clip != null) - { - audioSource.PlayDelayed(delay); - playState = AudioPlayState.Playing; + audioSource.PlayDelayed(delay); + playState = AudioPlayState.Playing; - } } - public void Pause() - { - if (audioSource != null && audioSource.clip != null && audioSource.isPlaying) - { - audioSource.Pause(); - playState = AudioPlayState.Pause; - } - } - public void Stop() + } + public void Pause() + { + if (audioSource != null && audioSource.clip != null && audioSource.isPlaying) { - if (audioSource) - audioSource.Stop(); - playState = AudioPlayState.Stop; + audioSource.Pause(); + playState = AudioPlayState.Pause; } } + public void Stop() + { + if (audioSource) + audioSource.Stop(); + playState = AudioPlayState.Stop; + } + + /// + /// 重置某些参数,防止回收后再使用参数不对 + /// + public void ResetData() + { + audioSource.pitch = 1; + flag = ""; + } +} public class VolumeFadeData { diff --git a/Assets/Script/Core/AudioManager/AudioButtonClickComponent.cs b/Assets/Script/Core/AudioManager/AudioButtonClickComponent.cs new file mode 100644 index 00000000..cec85ed2 --- /dev/null +++ b/Assets/Script/Core/AudioManager/AudioButtonClickComponent.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +[RequireComponent(typeof(Button))] +public class AudioButtonClickComponent : MonoBehaviour { + + public string audioName = ""; + public float volume = 1f; + // Use this for initialization + void Awake () + { + Button button = GetComponent
@@ -140,17 +144,52 @@ public static void CloseAD(string SDKName, ADType adType, string tag = "") wh #region 数据上报 - /// - /// 数据上报 - /// - /// - public static void Log(string eventID, Dictionary data) + public static void Log_Login(string AccountId, Dictionary data = null) + { + if(data == null) + { + data = new Dictionary(); + } + + data.Add(SDKInterfaceDefine.ModuleName, SDKInterfaceDefine.ModuleName_Log); + data.Add(SDKInterfaceDefine.FunctionName, SDKInterfaceDefine.Log_FunctionName_Login); + data.Add(SDKInterfaceDefine.Log_ParameterName_AccountId, AccountId); + + Call(data); + } + + public static void Log_Loginout(string AccountId = null, Dictionary data = null) { + if (data == null) + { + data = new Dictionary(); + } + + data.Add(SDKInterfaceDefine.ModuleName, SDKInterfaceDefine.ModuleName_Log); + data.Add(SDKInterfaceDefine.FunctionName, SDKInterfaceDefine.Log_FunctionName_LoginOut); + data.Add(SDKInterfaceDefine.Log_ParameterName_AccountId, AccountId); + + Call(data); + } + public static void Log(string eventID, Dictionary data = null) + { + Log(eventID, null, data); } - public static void Log(string eventID, Dictionary data) + public static void Log(string eventID, string label ,Dictionary data = null) { + if (data == null) + { + data = new Dictionary(); + } + + data.Add(SDKInterfaceDefine.ModuleName, SDKInterfaceDefine.ModuleName_Log); + data.Add(SDKInterfaceDefine.FunctionName, SDKInterfaceDefine.Log_FunctionName_Event); + data.Add(SDKInterfaceDefine.Log_ParameterName_EventID, eventID); + data.Add(SDKInterfaceDefine.Log_ParameterName_EventLabel, label); + + Call(data); } #endregion diff --git a/Assets/Script/Core/Utils/SystemInfoTool.cs b/Assets/Script/Core/Utils/SystemInfoTool.cs index 507486ab..e870b613 100644 --- a/Assets/Script/Core/Utils/SystemInfoTool.cs +++ b/Assets/Script/Core/Utils/SystemInfoTool.cs @@ -9,7 +9,7 @@ public static string GetSysInfo(string name) name = name.ToLower(); if (name == "all") isall = true; string str = ""; -#if UNITY_5_6 +#if UNITY_5_6_OR_NEWER if (isall || name == "bundleidentifier") str = isall ? str + Application.identifier+"\n" : Application.identifier; #endif #if UNITY_5_5 From adb60c41f39bb3eb02155b5939f2a66eb017f7f2 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Fri, 20 Apr 2018 15:28:28 +0800 Subject: [PATCH 052/108] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=96=B0=E6=89=8B?= =?UTF-8?q?=E5=BC=95=E5=AF=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/GuideSystem/GuideSystemBase.cs | 3 +++ Assets/Script/Core/GuideSystem/GuideWindowBase.cs | 5 +++++ .../Script/Core/SDKManager/SDKInterfaceDefine.cs | 1 + Assets/Script/Core/SDKManager/SDKManagerNew.cs | 15 +++++++++++++++ 4 files changed, 24 insertions(+) diff --git a/Assets/Script/Core/GuideSystem/GuideSystemBase.cs b/Assets/Script/Core/GuideSystem/GuideSystemBase.cs index abc60876..e362d2a7 100644 --- a/Assets/Script/Core/GuideSystem/GuideSystemBase.cs +++ b/Assets/Script/Core/GuideSystem/GuideSystemBase.cs @@ -237,6 +237,9 @@ protected virtual void ClearGuideBehaveByUI(UIWindowBase ui) //清除手指 m_guideWindowBase.HideAllGuideUI(); + + //清除文本 + m_guideWindowBase.ClearTips(); } /// diff --git a/Assets/Script/Core/GuideSystem/GuideWindowBase.cs b/Assets/Script/Core/GuideSystem/GuideWindowBase.cs index 45f69faf..5ee31436 100644 --- a/Assets/Script/Core/GuideSystem/GuideWindowBase.cs +++ b/Assets/Script/Core/GuideSystem/GuideWindowBase.cs @@ -122,6 +122,11 @@ public virtual void ShowTips(string content, Vector3 pos) } } + public virtual void ClearTips() + { + m_TipTransfrom.gameObject.SetActive(false); + } + public virtual void SetMaskAlpha(float alpha) { if(alpha != 0) diff --git a/Assets/Script/Core/SDKManager/SDKInterfaceDefine.cs b/Assets/Script/Core/SDKManager/SDKInterfaceDefine.cs index 0f1f5934..2c0565df 100644 --- a/Assets/Script/Core/SDKManager/SDKInterfaceDefine.cs +++ b/Assets/Script/Core/SDKManager/SDKInterfaceDefine.cs @@ -40,6 +40,7 @@ public class SDKInterfaceDefine public const string FunctionName_Logout = "Logout"; public const string Login_ParameterName_Device = "Device"; + public const string Login_ParameterName_AccountId = "AccountId"; //Pay相关参数 public const string Pay_ParameterName_GoodsID = "GoodsID"; diff --git a/Assets/Script/Core/SDKManager/SDKManagerNew.cs b/Assets/Script/Core/SDKManager/SDKManagerNew.cs index babf5bac..5dd00281 100644 --- a/Assets/Script/Core/SDKManager/SDKManagerNew.cs +++ b/Assets/Script/Core/SDKManager/SDKManagerNew.cs @@ -288,9 +288,18 @@ static void OnDebug(Dictionary data) #region Login + public static CallBack OnLoginCallBack; + static void OnLogin(Dictionary data) { + bool isSuccess = bool.Parse(data[SDKInterfaceDefine.ParameterName_IsSuccess]); + string accountId = data[SDKInterfaceDefine.Login_ParameterName_AccountId]; + + OnLoginInfo info = new OnLoginInfo(); + info.isSuccess = isSuccess; + info.accountId = accountId; + OnLoginCallBack(info); } #endregion @@ -366,6 +375,12 @@ public struct OnPayInfo public GoodsType goodsType; } + public struct OnLoginInfo + { + public bool isSuccess; + public string accountId; + } + public enum GoodsType { NORMAL, //可以反复购买的商品 From be5beb384c71ade8adb528c2a103a464695db002 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Sun, 22 Apr 2018 14:48:32 +0800 Subject: [PATCH 053/108] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/Develop/Log.cs | 4 + .../ApplicationStatusCreater.cs.meta | 13 +++ .../Script/Core/Editor/UI/UICreateService.cs | 2 +- .../res/ApplicationStatusTemplate.txt.meta | 9 ++ .../Core/GuideSystem/GuideSystemBase.cs | 2 +- Assets/Script/Core/Lua/ToLua/Plugins.meta | 10 ++ Assets/Script/Core/Lua/ToLua/Plugins/iOS.meta | 10 ++ .../Lua/ToLua/Plugins/iOS/libtolua.a.meta | 21 ---- Assets/Script/Core/Lua/ToLua/PluginsRes.meta | 10 ++ .../Lua/ToLua/PluginsRes/Debugger.dll.meta | 32 ++++++ .../Lua/ToLua/PluginsRes/tolua.bundle.meta | 42 +++++++ .../PluginsRes/tolua.bundle/Contents.meta | 10 ++ .../tolua.bundle/Contents/Info.plist.meta | 9 ++ .../tolua.bundle/Contents/MacOS.meta | 10 ++ .../tolua.bundle/Contents/MacOS/tolua.meta | 9 ++ .../Script/Core/Lua/ToLua/PluginsRes/x86.meta | 10 ++ .../Lua/ToLua/PluginsRes/x86/tolua.dll.meta | 103 ++++++++++++++++++ .../Core/Lua/ToLua/PluginsRes/x86_64.meta | 10 ++ .../ToLua/PluginsRes/x86_64/tolua.dll.meta | 103 ++++++++++++++++++ .../SDKManager/SDKInterfaceDefine.cs.meta | 13 +++ .../Core/SDKManager/SDKManagerNew.cs.meta | 13 +++ .../ReusingScrollRect/ReusingScrollRect.cs | 4 +- 22 files changed, 424 insertions(+), 25 deletions(-) create mode 100644 Assets/Script/Core/Editor/Application/ApplicationStatusCreater.cs.meta create mode 100644 Assets/Script/Core/Editor/res/ApplicationStatusTemplate.txt.meta create mode 100644 Assets/Script/Core/Lua/ToLua/Plugins.meta create mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/iOS.meta delete mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/iOS/libtolua.a.meta create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes.meta create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/Debugger.dll.meta create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle.meta create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents.meta create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/Info.plist.meta create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/MacOS.meta create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/MacOS/tolua.meta create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/x86.meta create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/x86/tolua.dll.meta create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/x86_64.meta create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/x86_64/tolua.dll.meta create mode 100644 Assets/Script/Core/SDKManager/SDKInterfaceDefine.cs.meta create mode 100644 Assets/Script/Core/SDKManager/SDKManagerNew.cs.meta diff --git a/Assets/Script/Core/Develop/Log.cs b/Assets/Script/Core/Develop/Log.cs index 24640d36..57bffdbe 100644 --- a/Assets/Script/Core/Develop/Log.cs +++ b/Assets/Script/Core/Develop/Log.cs @@ -13,7 +13,11 @@ public class Log public static void Init(bool isOpenLog = true) { +#if UNITY_2017 + Debug.unityLogger.logEnabled = isOpenLog; +#else Debug.logger.logEnabled = isOpenLog; +#endif if (isOpenLog) { diff --git a/Assets/Script/Core/Editor/Application/ApplicationStatusCreater.cs.meta b/Assets/Script/Core/Editor/Application/ApplicationStatusCreater.cs.meta new file mode 100644 index 00000000..4b711615 --- /dev/null +++ b/Assets/Script/Core/Editor/Application/ApplicationStatusCreater.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 655692f65c7348d4b89ce4f50226aee2 +timeCreated: 1524378257 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Editor/UI/UICreateService.cs b/Assets/Script/Core/Editor/UI/UICreateService.cs index 44663a91..037315a8 100644 --- a/Assets/Script/Core/Editor/UI/UICreateService.cs +++ b/Assets/Script/Core/Editor/UI/UICreateService.cs @@ -335,7 +335,7 @@ public static void CreateGuideWindow() GameObject Text_tips = new GameObject("Text_tip"); Text_tips.layer = LayerMask.NameToLayer("UI"); RectTransform txt_tipsrt = Text_tips.AddComponent(); - Text txt = Text_tips.AddComponent(); + Text_tips.AddComponent(); txt_tipsrt.SetParent(tipsrt); guideBaseTmp.m_objectList.Add(Text_tips); diff --git a/Assets/Script/Core/Editor/res/ApplicationStatusTemplate.txt.meta b/Assets/Script/Core/Editor/res/ApplicationStatusTemplate.txt.meta new file mode 100644 index 00000000..e687e5fd --- /dev/null +++ b/Assets/Script/Core/Editor/res/ApplicationStatusTemplate.txt.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a9e6c97bd48928c418bf343ccf7ed03d +timeCreated: 1524378268 +licenseType: Pro +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/GuideSystem/GuideSystemBase.cs b/Assets/Script/Core/GuideSystem/GuideSystemBase.cs index e362d2a7..eac320e6 100644 --- a/Assets/Script/Core/GuideSystem/GuideSystemBase.cs +++ b/Assets/Script/Core/GuideSystem/GuideSystemBase.cs @@ -291,7 +291,7 @@ protected virtual bool GuideClickFilter(InputUIOnClickEvent e) { string itemName = GetObjName(objnames[i]); - if (e.EventKey.Contains(objnames[i])) + if (e.EventKey.Contains(itemName)) { isExist = true; } diff --git a/Assets/Script/Core/Lua/ToLua/Plugins.meta b/Assets/Script/Core/Lua/ToLua/Plugins.meta new file mode 100644 index 00000000..3d3bb7ca --- /dev/null +++ b/Assets/Script/Core/Lua/ToLua/Plugins.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c605199a37db9d647a4f91ed63c58494 +folderAsset: yes +timeCreated: 1524378253 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/Plugins/iOS.meta b/Assets/Script/Core/Lua/ToLua/Plugins/iOS.meta new file mode 100644 index 00000000..731e09fa --- /dev/null +++ b/Assets/Script/Core/Lua/ToLua/Plugins/iOS.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a37926ddd3db3b24d841849d171ea877 +folderAsset: yes +timeCreated: 1524378253 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/Plugins/iOS/libtolua.a.meta b/Assets/Script/Core/Lua/ToLua/Plugins/iOS/libtolua.a.meta deleted file mode 100644 index 884c6ff4..00000000 --- a/Assets/Script/Core/Lua/ToLua/Plugins/iOS/libtolua.a.meta +++ /dev/null @@ -1,21 +0,0 @@ -fileFormatVersion: 2 -guid: 5b519f0d4041a8a41a2107a75caf20cf -timeCreated: 1484289222 -licenseType: Pro -PluginImporter: - serializedVersion: 1 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - isOverridable: 0 - platformData: - Any: - enabled: 1 - settings: {} - Editor: - enabled: 0 - settings: - DefaultValueInitialized: true - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes.meta new file mode 100644 index 00000000..4e95e214 --- /dev/null +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 06df1c68b8baa13429112547e49f84ac +folderAsset: yes +timeCreated: 1524378253 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/Debugger.dll.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/Debugger.dll.meta new file mode 100644 index 00000000..65392ae7 --- /dev/null +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/Debugger.dll.meta @@ -0,0 +1,32 @@ +fileFormatVersion: 2 +guid: 310ca598e92405545922aea450fba9a9 +timeCreated: 1524378255 +licenseType: Pro +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle.meta new file mode 100644 index 00000000..8ac61061 --- /dev/null +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle.meta @@ -0,0 +1,42 @@ +fileFormatVersion: 2 +guid: 34ce089b11bb6a74c865f0cd4559e23c +folderAsset: yes +timeCreated: 1524378253 +licenseType: Pro +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + - first: + '': OSXIntel + second: + enabled: 1 + settings: {} + - first: + '': OSXIntel64 + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Standalone: OSXUniversal + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents.meta new file mode 100644 index 00000000..5a6f3cfe --- /dev/null +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5a74e8f81cb15e44ea9c3405df01eddf +folderAsset: yes +timeCreated: 1524378253 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/Info.plist.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/Info.plist.meta new file mode 100644 index 00000000..d033fb5f --- /dev/null +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/Info.plist.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3eb443420c63d2d46a75047fb50f3c2c +timeCreated: 1524378253 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/MacOS.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/MacOS.meta new file mode 100644 index 00000000..0e237a5f --- /dev/null +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/MacOS.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 8cdad410a276f5d4a8d0ce9468cf30a4 +folderAsset: yes +timeCreated: 1524378253 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/MacOS/tolua.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/MacOS/tolua.meta new file mode 100644 index 00000000..9d2a99dc --- /dev/null +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/MacOS/tolua.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: eb8a271f0b6ac374b86658e93616e768 +timeCreated: 1524378253 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/x86.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/x86.meta new file mode 100644 index 00000000..4cf1fc0d --- /dev/null +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/x86.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7ff29b6c9fc818544bbabdfdb2c425c2 +folderAsset: yes +timeCreated: 1524378253 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/x86/tolua.dll.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/x86/tolua.dll.meta new file mode 100644 index 00000000..1c850d14 --- /dev/null +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/x86/tolua.dll.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: b1ead8f44f44f03489dbaace838ac272 +timeCreated: 1524378268 +licenseType: Pro +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + - first: + '': Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 0 + settings: + CPU: x86 + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: x86_64 + - first: + Standalone: LinuxUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + iPhone: iOS + second: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/x86_64.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/x86_64.meta new file mode 100644 index 00000000..e8f5dc4e --- /dev/null +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/x86_64.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d2398ccf16394014ca72c6dc9cc415b1 +folderAsset: yes +timeCreated: 1524378253 +licenseType: Pro +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/x86_64/tolua.dll.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/x86_64/tolua.dll.meta new file mode 100644 index 00000000..61c9bd8d --- /dev/null +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/x86_64/tolua.dll.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: a73477e3e361eb44c84a1acfb93c4e86 +timeCreated: 1524378268 +licenseType: Pro +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + - first: + '': Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Facebook: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Facebook: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Linux + second: + enabled: 0 + settings: + CPU: x86 + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: x86_64 + - first: + Standalone: LinuxUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + iPhone: iOS + second: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/SDKManager/SDKInterfaceDefine.cs.meta b/Assets/Script/Core/SDKManager/SDKInterfaceDefine.cs.meta new file mode 100644 index 00000000..73d5468e --- /dev/null +++ b/Assets/Script/Core/SDKManager/SDKInterfaceDefine.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 76d047bca098e4845a2b1f9b67a0c58b +timeCreated: 1524378257 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/SDKManager/SDKManagerNew.cs.meta b/Assets/Script/Core/SDKManager/SDKManagerNew.cs.meta new file mode 100644 index 00000000..1ec89822 --- /dev/null +++ b/Assets/Script/Core/SDKManager/SDKManagerNew.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 2b9da08723c61f447a7d3c1102ab44b2 +timeCreated: 1524378256 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs b/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs index 8f3d83ad..a38c63f1 100644 --- a/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs +++ b/Assets/Script/Core/UI/Components/ReusingScrollRect/ReusingScrollRect.cs @@ -17,7 +17,7 @@ public class ReusingScrollRect : ScrollRectInput public List m_items = new List(); public List m_itemCaches = new List(); - RectTransform m_rectTransform; + //RectTransform m_rectTransform; private Bounds m_viewBounds; public GameObject m_itemPrefab; @@ -37,7 +37,7 @@ public void Init(string UIEventKey,string itemName) base.Init(UIEventKey); m_ItemName = itemName; - m_rectTransform = GetComponent(); + //m_rectTransform = GetComponent(); Rebuild(CanvasUpdate.Layout); From a5d0ca04c35c6139d888d0968aad263b322ced30 Mon Sep 17 00:00:00 2001 From: Sagic Date: Sun, 22 Apr 2018 23:17:08 +0800 Subject: [PATCH 054/108] =?UTF-8?q?Bug=E4=BF=AE=E6=AD=A3=20=E6=89=B9?= =?UTF-8?q?=E9=87=8Fappy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 批量Appy Prefab 批量Revert Prefab Bug修正 --- .../Script/Core/Editor/Utils/AppyPrefabs.cs | 33 ++++++++++++++----- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/Assets/Script/Core/Editor/Utils/AppyPrefabs.cs b/Assets/Script/Core/Editor/Utils/AppyPrefabs.cs index 5b1da084..af0c3995 100644 --- a/Assets/Script/Core/Editor/Utils/AppyPrefabs.cs +++ b/Assets/Script/Core/Editor/Utils/AppyPrefabs.cs @@ -7,13 +7,23 @@ public class AppyPrefabs : Editor static void BatchExportPrefab() { GameObject[] objs = Selection.gameObjects; - //int len = objs.Length; foreach (GameObject item in objs) { - //if (PrefabUtility.GetPrefabType(item) == PrefabType.PrefabInstance){} - Object parentObject = PrefabUtility.GetPrefabParent(item); - PrefabUtility.ReplacePrefab(item, parentObject); - PrefabUtility.RevertPrefabInstance(item); + if (item == null) continue; + + GameObject currobj = PrefabUtility.FindRootGameObjectWithSameParentPrefab(item); + if (currobj == null) continue; + + PrefabType pt = PrefabUtility.GetPrefabType(currobj); + if (pt == PrefabType.None) continue; + + Object tg = PrefabUtility.GetCorrespondingObjectFromSource(currobj); + if (tg == null) continue; + + //Debug.Log(currobj.name +"===="+ tg.name); + + PrefabUtility.ReplacePrefab(currobj, tg,ReplacePrefabOptions.ConnectToPrefab); + PrefabUtility.ResetToPrefabState(currobj); } AssetDatabase.Refresh(); } @@ -22,12 +32,17 @@ static void BatchExportPrefab() static void BatchRestPrefab() { GameObject[] objs = Selection.gameObjects; - //int len = objs.Length; foreach (GameObject item in objs) { - //if (PrefabUtility.GetPrefabType(item) == PrefabType.PrefabInstance){} - //Object parentObject = PrefabUtility.GetPrefabParent(item); - PrefabUtility.RevertPrefabInstance(item); + if (item == null) continue; + + GameObject currobj = PrefabUtility.FindRootGameObjectWithSameParentPrefab(item); + if (currobj == null) continue; + + //Debug.Log(currobj.name); + + PrefabUtility.ReconnectToLastPrefab(currobj);//must reconnect + PrefabUtility.ResetToPrefabState(currobj); } AssetDatabase.Refresh(); } From 7da9a16e312f6a7ac8a4a8c8fcc0fa7e52543499 Mon Sep 17 00:00:00 2001 From: Sagic Date: Sun, 22 Apr 2018 23:22:17 +0800 Subject: [PATCH 055/108] =?UTF-8?q?=E5=85=BC=E5=AE=B9BuildPlayer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 兼容BuildPlayer 2017 or newer --- .../Editor/Package/ProjectBuildService.cs | 53 +++++++++++++------ 1 file changed, 37 insertions(+), 16 deletions(-) diff --git a/Assets/Script/Core/Editor/Package/ProjectBuildService.cs b/Assets/Script/Core/Editor/Package/ProjectBuildService.cs index 5507f2f7..d20d2e9b 100644 --- a/Assets/Script/Core/Editor/Package/ProjectBuildService.cs +++ b/Assets/Script/Core/Editor/Package/ProjectBuildService.cs @@ -43,7 +43,7 @@ public static string ExportPath { if (arg.StartsWith("ExportPath")) { - path = arg.Split("-"[0])[1]; + path = arg.Split("-"[0])[1]; } } @@ -216,7 +216,7 @@ static void BundlePackage() FileTool.SafeDeleteDirectory(Application.dataPath + "/Resources"); } -#endregion + #endregion #region Android @@ -243,25 +243,37 @@ static void BuildForAndroid() ApplyScriptDefine(); //设置签名 - //签名路径 - PlayerSettings.Android.keystoreName = ""; - //密钥密码 - PlayerSettings.Android.keystorePass = ""; - //密钥别名 - PlayerSettings.Android.keyaliasName = ""; - //别名密码 - PlayerSettings.Android.keyaliasPass = ""; + //签名路径 + PlayerSettings.Android.keystoreName = ""; + //密钥密码 + PlayerSettings.Android.keystorePass = ""; + //密钥别名 + PlayerSettings.Android.keyaliasName = ""; + //别名密码 + PlayerSettings.Android.keyaliasPass = ""; //打包 string path = ExportPath + "/" + GetPackageName() + ".apk"; + +#if UNITY_2017_OR_NEWER + BuildPlayerOptions bo = new BuildPlayerOptions(); + bo.scenes = GetBuildScenes(); + bo.target = BuildTarget.Android; + bo.options = BuildOptions.None; + bo.locationPathName = path; + + BuildPipeline.BuildPlayer(bo); +#else BuildOptions option = BuildOptions.None; if (ApplicationMode == AppMode.Release) { option = BuildOptions.Il2CPP; } - BuildPipeline.BuildPlayer(GetBuildScenes(), path, BuildTarget.Android, option); +#endif + + } #endregion @@ -292,18 +304,27 @@ static void BuildForIOS() //打包 +#if UNITY_2017_OR_NEWER + BuildPlayerOptions bo = new BuildPlayerOptions(); + bo.scenes = GetBuildScenes(); + bo.target = BuildTarget.iOS; + bo.options = BuildOptions.None; + bo.locationPathName = ExportPath; + + BuildPipeline.BuildPlayer(bo); +#else BuildOptions option = BuildOptions.None; if (ApplicationMode == AppMode.Release) { option = BuildOptions.Il2CPP; } - BuildPipeline.BuildPlayer(GetBuildScenes(), ExportPath, BuildTarget.iOS, option); +#endif } #endregion - #region WEBGL +#region WEBGL static void BuildForWEBGL() { @@ -341,9 +362,9 @@ static void BuildForWEBGL() #endregion - #endregion +#endregion - #region 功能函数 +#region 功能函数 //在这里找出你当前工程所有的场景文件,假设你只想把部分的scene文件打包 那么这里可以写你的条件判断 总之返回一个字符串数组。 static string[] GetBuildScenes() @@ -451,5 +472,5 @@ public static void SwitchPlatform(BuildTarget target) } } - #endregion +#endregion } \ No newline at end of file From 6b27a7bc1ea121d16532f2a2f7896ebf6f0f04a8 Mon Sep 17 00:00:00 2001 From: Sagic Date: Sun, 22 Apr 2018 23:27:59 +0800 Subject: [PATCH 056/108] 2017 Debug.logger is not recommended 2017 Debug.logger is not recommended --- Assets/Script/Core/Develop/Log.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Script/Core/Develop/Log.cs b/Assets/Script/Core/Develop/Log.cs index 57bffdbe..21f805e5 100644 --- a/Assets/Script/Core/Develop/Log.cs +++ b/Assets/Script/Core/Develop/Log.cs @@ -13,7 +13,7 @@ public class Log public static void Init(bool isOpenLog = true) { -#if UNITY_2017 +#if UNITY_2017_OR_NEWER Debug.unityLogger.logEnabled = isOpenLog; #else Debug.logger.logEnabled = isOpenLog; From 5736ef66d7e24db952edcc8cf917a0b128d1f335 Mon Sep 17 00:00:00 2001 From: isagic Date: Mon, 23 Apr 2018 15:10:47 +0800 Subject: [PATCH 057/108] =?UTF-8?q?2017=5F1=E4=BB=A5=E5=90=8E=E4=B8=8D?= =?UTF-8?q?=E7=94=A8=E5=B0=8F=E7=89=88=E6=9C=AC=E5=8F=B7=E4=B8=8D=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2017_1以后不用小版本号不行 --- Assets/Script/Core/Editor/Package/ProjectBuildService.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Assets/Script/Core/Editor/Package/ProjectBuildService.cs b/Assets/Script/Core/Editor/Package/ProjectBuildService.cs index d20d2e9b..1a725bce 100644 --- a/Assets/Script/Core/Editor/Package/ProjectBuildService.cs +++ b/Assets/Script/Core/Editor/Package/ProjectBuildService.cs @@ -256,7 +256,7 @@ static void BuildForAndroid() string path = ExportPath + "/" + GetPackageName() + ".apk"; -#if UNITY_2017_OR_NEWER +#if UNITY_2017_1_OR_NEWER BuildPlayerOptions bo = new BuildPlayerOptions(); bo.scenes = GetBuildScenes(); bo.target = BuildTarget.Android; @@ -304,7 +304,7 @@ static void BuildForIOS() //打包 -#if UNITY_2017_OR_NEWER +#if UNITY_2017_1_OR_NEWER BuildPlayerOptions bo = new BuildPlayerOptions(); bo.scenes = GetBuildScenes(); bo.target = BuildTarget.iOS; @@ -473,4 +473,4 @@ public static void SwitchPlatform(BuildTarget target) } #endregion -} \ No newline at end of file +} From a0d54c9fda9f4aadef9c60840d68f58cab448cf5 Mon Sep 17 00:00:00 2001 From: isagic Date: Mon, 23 Apr 2018 15:12:36 +0800 Subject: [PATCH 058/108] =?UTF-8?q?2017=E5=90=8E=E4=B8=8D=E7=94=A8logger.l?= =?UTF-8?q?ogEnabled?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2017后不用logger.logEnabled --- Assets/Script/Core/Develop/Log.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Script/Core/Develop/Log.cs b/Assets/Script/Core/Develop/Log.cs index 21f805e5..8f352cf6 100644 --- a/Assets/Script/Core/Develop/Log.cs +++ b/Assets/Script/Core/Develop/Log.cs @@ -13,7 +13,7 @@ public class Log public static void Init(bool isOpenLog = true) { -#if UNITY_2017_OR_NEWER +#if UNITY_2017_1_OR_NEWER Debug.unityLogger.logEnabled = isOpenLog; #else Debug.logger.logEnabled = isOpenLog; From 952f872886d96e1f2fefee7a4dbc328b14ceaf14 Mon Sep 17 00:00:00 2001 From: isagic Date: Mon, 23 Apr 2018 15:35:11 +0800 Subject: [PATCH 059/108] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E4=B8=BAEnum?= =?UTF-8?q?=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更改为Enum方式 --- Assets/Script/Core/Utils/SystemInfoTool.cs | 30 +++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/Assets/Script/Core/Utils/SystemInfoTool.cs b/Assets/Script/Core/Utils/SystemInfoTool.cs index e870b613..68f91786 100644 --- a/Assets/Script/Core/Utils/SystemInfoTool.cs +++ b/Assets/Script/Core/Utils/SystemInfoTool.cs @@ -1,8 +1,32 @@ -using UnityEngine; +using UnityEngine; public class SystemInfoTool { - + public enum SystemInfoNames + { + /// 设备ID + bundleidentifier, + /// 版本号 + version, + devicemodel, + devicename, + deviceuniqueidentifier, + graphicsdevicename, + graphicsmemorysize, + graphicsmultithreaded, + operatingsystem, + processorcount, + processortype, + systemmemorysize, + developerbuild, + rsmodel, + all + } + + public static string GetSysInfo(SystemInfoNames name) + { + return GetSysInfo(name.ToString()); + } public static string GetSysInfo(string name) { bool isall = false; @@ -10,7 +34,7 @@ public static string GetSysInfo(string name) if (name == "all") isall = true; string str = ""; #if UNITY_5_6_OR_NEWER - if (isall || name == "bundleidentifier") str = isall ? str + Application.identifier+"\n" : Application.identifier; + if (isall || name == "bundleidentifier") str = isall ? str + Application.identifier + "\n" : Application.identifier; #endif #if UNITY_5_5 if (isall || name == "bundleidentifier") str = isall ? str + Application.bundleIdentifier + "\n" : Application.bundleIdentifier; From 283e0cba516255f05d19abdfecfd937dbb78b835 Mon Sep 17 00:00:00 2001 From: isagic Date: Mon, 23 Apr 2018 15:42:50 +0800 Subject: [PATCH 060/108] =?UTF-8?q?=EF=BC=9A=EF=BC=89=E7=94=A8=E4=BA=86?= =?UTF-8?q?=E4=B8=AA2018.2=E7=9A=84API=EF=BC=8C=E5=85=BC=E5=AE=B9=E4=B8=80?= =?UTF-8?q?=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2018.2的API,兼容一下 --- .../Script/Core/Editor/Utils/AppyPrefabs.cs | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/Assets/Script/Core/Editor/Utils/AppyPrefabs.cs b/Assets/Script/Core/Editor/Utils/AppyPrefabs.cs index af0c3995..8d9f51a5 100644 --- a/Assets/Script/Core/Editor/Utils/AppyPrefabs.cs +++ b/Assets/Script/Core/Editor/Utils/AppyPrefabs.cs @@ -1,4 +1,4 @@ -using UnityEditor; +using UnityEditor; using UnityEngine; public class AppyPrefabs : Editor @@ -17,13 +17,17 @@ static void BatchExportPrefab() PrefabType pt = PrefabUtility.GetPrefabType(currobj); if (pt == PrefabType.None) continue; +#if UNITY_2018_2_OR_NEWER Object tg = PrefabUtility.GetCorrespondingObjectFromSource(currobj); +#else + Object tg = PrefabUtility.GetPrefabParent(currobj); +#endif if (tg == null) continue; - - //Debug.Log(currobj.name +"===="+ tg.name); - - PrefabUtility.ReplacePrefab(currobj, tg,ReplacePrefabOptions.ConnectToPrefab); + //Debug.Log(currobj.name + "====" + tg.name); + PrefabUtility.ReplacePrefab(currobj, tg, ReplacePrefabOptions.ConnectToPrefab); PrefabUtility.ResetToPrefabState(currobj); + //重设后有子节点,去掉,在导出后不会影响已经加过子节的Hierarchy Object + //PrefabUtility.RevertPrefabInstance(currobj); } AssetDatabase.Refresh(); } @@ -39,11 +43,12 @@ static void BatchRestPrefab() GameObject currobj = PrefabUtility.FindRootGameObjectWithSameParentPrefab(item); if (currobj == null) continue; - //Debug.Log(currobj.name); + Debug.Log(currobj.name); - PrefabUtility.ReconnectToLastPrefab(currobj);//must reconnect + PrefabUtility.ReconnectToLastPrefab(currobj);//must reconnect PrefabUtility.ResetToPrefabState(currobj); + PrefabUtility.RevertPrefabInstance(currobj);//会全部重设 } AssetDatabase.Refresh(); } -} \ No newline at end of file +} From 036dd8aef7f907057773ccbbaa043a1090cfa22b Mon Sep 17 00:00:00 2001 From: GaoKai Date: Thu, 26 Apr 2018 11:13:10 +0800 Subject: [PATCH 061/108] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/Editor/Data/DataEditorWindow.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Assets/Script/Core/Editor/Data/DataEditorWindow.cs b/Assets/Script/Core/Editor/Data/DataEditorWindow.cs index 23f6f693..019117b5 100644 --- a/Assets/Script/Core/Editor/Data/DataEditorWindow.cs +++ b/Assets/Script/Core/Editor/Data/DataEditorWindow.cs @@ -511,6 +511,10 @@ void EditorDataGUI() //弹出警告并重置数据 if (EditorUtility.DisplayDialog("警告", "改变字段类型会重置该字段的所有数据和默认值\n是否继续?", "是", "取消")) { + if (m_editorNewEnumIndex == -1) + { + m_editorNewEnumIndex = 0; + } m_currentData.SetFieldType(key, m_editorNewType, EditorTool.GetAllEnumType()[m_editorNewEnumIndex]); ResetDataField(m_currentData, key, m_editorNewType, EditorTool.GetAllEnumType()[m_editorNewEnumIndex]); From 6c22c8c7dc4651aecc0fae8c5b02323c09a9ec93 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Thu, 26 Apr 2018 11:57:16 +0800 Subject: [PATCH 062/108] =?UTF-8?q?UI=E7=BC=96=E8=BE=91=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Core/Editor/UI/UITemplate.cs | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/Assets/Script/Core/Editor/UI/UITemplate.cs b/Assets/Script/Core/Editor/UI/UITemplate.cs index 4efcda5a..a8f364d6 100644 --- a/Assets/Script/Core/Editor/UI/UITemplate.cs +++ b/Assets/Script/Core/Editor/UI/UITemplate.cs @@ -773,23 +773,18 @@ void FindAllUITemplate() public void FindTemplateName(string path) { - FileTool.CreatPath(path); - - string[] allUIPrefabName = Directory.GetFiles(path); - foreach (var item in allUIPrefabName) + if(Directory.Exists(path)) { - if (item.EndsWith(".prefab")) + string[] allUIPrefabName = Directory.GetFiles(path); + foreach (var item in allUIPrefabName) { - string configName = FileTool.RemoveExpandName(FileTool.GetFileNameByPath(item)); - m_allTemplateName.Add(configName); + if (item.EndsWith(".prefab")) + { + string configName = FileTool.RemoveExpandName(FileTool.GetFileNameByPath(item)); + m_allTemplateName.Add(configName); + } } } - - //string[] dires = Directory.GetDirectories(path); - //for (int i = 0; i < dires.Length; i++) - //{ - // FindConfigName(dires[i]); - //} } From 5251a3caf957f679330deccbe23752fba6da9bfb Mon Sep 17 00:00:00 2001 From: GaoKai Date: Thu, 26 Apr 2018 12:14:25 +0800 Subject: [PATCH 063/108] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UI/GuideWindow/GuideWindow.prefab | Bin 19960 -> 19976 bytes Assets/Scene/main.unity | Bin 18472 -> 20008 bytes .../Lua/ToLua/Plugins/iOS/libtolua.a.meta | 26 ++++++++++++++++++ ProjectSettings/ProjectSettings.asset | Bin 37361 -> 56227 bytes ProjectSettings/ProjectVersion.txt | 3 +- ProjectSettings/TagManager.asset | Bin 4308 -> 4328 bytes 6 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 Assets/Script/Core/Lua/ToLua/Plugins/iOS/libtolua.a.meta diff --git a/Assets/Resources/UI/GuideWindow/GuideWindow.prefab b/Assets/Resources/UI/GuideWindow/GuideWindow.prefab index c33a588371ab15f93cc692d80d6c9466f398a12a..30d27b1ac8dc5981e9614913de08f9a4ac98d68c 100644 GIT binary patch delta 1529 zcmbVMZAep57(Qor(I#vE7@tF|+1!weUx)pdu3bfQ0^J6jBhx4eSdN z83!XO((p$T2+4)AFf1rSDEv`kg&0r(_u@xr{>2;+bYDU__k^g}4Px zfN&4&p%Sf##uX|qU>PBWJ~ZwkKO`r4ZVBs7HiJ_M(;{nxkd9gmXgNm@n4%RN?HA_r zTN)nU8@UizywT-eyf&Njiws)ZutH+hPFU045UkIy^`a{wnHEPULWc~^7>Zs+ z<4tP6O~H_xss$ajF?%1~EE9!DZ}nYR&sR{hgEcd-vV@VG6xQ3y*4rurP3jkb2Tp*D z2S*HwJuU|z!y(#bgtZO5)iZeYT zW$qFw^O$JHlo(ST68Eg+TE0-f1$M85_@DRp3MP^)n)JSv*V!%yge7ng!t`yhGMEh2 z(}q9R(}sJiJ!I{MsU>W289VLu5GkAo+*ml1aVC5b_L{zTM&R92CnGy?et2MbF5TdM zba*!PwSBy9fJCAtYIzU12;3?x)~VzO%@Q7Vw8q@-4E|B0>B M`yULbM$dW;{%-QsH2T0av>cFYC;MNQfr|QR7OM*h0RK9 z(L;{4si>gb^guYc3UU?IB3kvp1cPYNCJ7>>g}47d_YBOPF5;rax%b@v|IYXQuX8Wo zq3gHlPC|@}gzQ--glvcX4S17OqBD`2NRkcHG-(MKzN_#s&EZ;q^G4>$&$mPV_Lf}F zf!V$(N@ibF!sA1N=9os0gb1O;O%f`}^}-o1EFUaN2%Dm7l(3UZWfguaHNv9C~dL8;g%qmpt|)d6`;#Z&X@pTNP9s^^QB<_;}>`Ih+nqwOeL za7}K_0ZbYI`Mj2+1)>q~p}!gyylR_NHGQwFpj4ZCK)P2;vo7E$$`mX` zLGf&P1SKbfC^-|fs%z&&X>8cLAQsFN$jS;QWW7`$tC&$l>~`pD7?8Xxyh}p`d!NBll)Y%lcx;oFu!pg8A`_QQ zG%7_q>N5`Qj7jfYec`a?JJ=w-D~{e~>5avm&bCPJ@wi@Q-5R`EdFEDT1XBEKJigU= ze970EhPDd+ufuzVvi77?-TSQ!`RQbnT2R^qnDNrNWC3)oj$Q5WM%>o7_<>+4@;Hyg zVZ+0zl>(+Xc#4=B!eB$@VzxZCknKX}v;&)8>Q#5a6!PV+eKgR!5^enWc;xlo^UAT` zhnJtS?sS+9bwt?NbTf?NgEY=G=CPbEEnvhJV|-GR)9zb%(J@1sBqWCm{=+8P48j+B rCRHBoJEQRX#(p<@WR$b$fSWz*uV$w*0ls7K7j>O5M?<`I_b2r)av1#% diff --git a/Assets/Scene/main.unity b/Assets/Scene/main.unity index 7a199540dffe6dc3c325b630f26eb8d716c2c5be..9edabdfc725dd207d23da25051e371f27eea2267 100644 GIT binary patch delta 2788 zcmbVOdrVVT7(b_#@)9gUDJqX5g#zn?hg!snMR|)anCSj6wMv1`mMZ0?iF&t8r`sHE z$4zI<23fMHaXxl+QD>$kZ2q$tN!$_>;NV)zg`_YIIiL<-q>ymnd20QtNdzw)uJ*Tz;RYtJCdkU)JsF@HjVrm}n_o>321@Ih%bwUZ;Np z8G+;r=6`j=px&ZVkPz(cOs)U%b*q+46F|z>?Bpm;FqK$4> zkUM|`V4@3Zn1n;ul%yZ>76BmQkm#p@#sQE469b)!I1J1)25JHvq9KU_hI+*O&jB3s zpCsW+o!v`Z{4#ZclTCYh71sqpP#i-QMaa&G<&Vjw+9{)z6}nOVxFy z=Z{|4k@xuEp47)5-;ep5H72*nDj)+4pdoYu_L%jhV+CAH*J{xjN`8W%uyUbD1IR09 zZ_G|qMdOp5uhnw$q7CYrF6p|RGNKvy<@BYY?}rx7jQDc+*y6Vz89>&}MvI*<;{$lI z$&kr@oV7Cydx~Ub!|XveBlQn@iAAS9RIht@1k|Za%~s| z&xQQdoRQaO)KZL;ak>a<=XdIg6*3JbFde#SnFc*zs8J=l^)!<~Zls6{0nN+054QTV z@j&*aXEL2Wifz=ZWES#(jTYpqPU`RduT>qXSVfS*cP}U3c>Rtc_I=eWf6W#5k>?)19X zKRf;`)mY1Vjay|wKntFjFJ>{tLj+|e3>%7!?=hvzQyg5P6HIgLxTQLbLQFcg=lFt? z3VMrOENYgKu-W0(L7zhsvlUyyNTqsVZxzpF-xaySFkW{353;qvqlh~ga;(K@UwEX( z)W%0Unk=m=avq#Nyk<%E!7;XB&Njh-Qn;YzOTk4*1{78^oWMfsT7jbq;b7xKCyrY0 z)o}0>D%FZoz!gHb`3T;z+oT}Q;YuYfgv8@Sd>Z0*Hd0cPg~}pAOr@caAWq3n1>Q~L zI;{b3E!+v*6;Ud7*`#V zWgJ9@Ls!0f?r9qvw&~ebd(_tpf1~P_`X*5ZVzkfSSX4hrhh!YVXz&`sg3SN)+rGiv zG$mVGVVpbxNMgq-QbNJ26Iu4kBz-UF!5uV-mpeR(BSf9OGDY_iq$E9V&I^erD~&Vc z>hUYZ>uB)#I+t}cyE@p33Qefv%d51^QuQ1-A?96GxuMH0Oa#Uz0{ZG)yWA5j1+SyL zeSMp+V~MlZjGKe`fT9i=@-^(e>XhyOMZjCw>sapY_H_yhu~8J5@q^{rkSmn)Hv{G0 o_-Bu{@7|cNA~E=#=XKQj%hz|hyIt%_^>j7r>u-IC$6gr!0L~jQGXMYp delta 1938 zcmb7Ee@v8h82^6n;En*flM@gEUN1N~iMs<2goERf1iP9ya#Vn2b{ofX!OmSxw8YM> zaLrh|kEP7qY?%`m{g|n!Z7y70&-1?Dix+tRsPFddz56^r zzR&Y{zRz>)AV0RBKfsv(ea3=L#@JH)J&s>i<6h&g>8@gbClU#6`P9+DIfLCik286M zM^f?`ok;76wVkdGxh0c%Z2s>lSfDE658KQZ|P{Og?8Ai=Uc04)=U5y@VwEUd;8gz@;#7atzc^=PpNht0zgqTNt{9=(=5B6# zKHL@U3x!{NAr$S3u+ykziNvLY<#Q#c$+y%25Dg zw#;;5MKzHx*!;YOvuQ-`qEPl$6gt!;B^!}FHW)D#r|h#t_Sq^9135p#aIVkVv3dDd zCte-yJaJ{({lksbVfZn(8(#pIFf*7ewL^biR&XwigziLwSq+0%aCQO1JMllhpakif z6rF)1QE?K&sV_}TKA#uon#L!i6(}AIdh(~NyQa@MGt>K}*IU1g`2Xm;4Vw!VC8QHV zBm`k81VLvZ4Bj8mv9gGZX4jmA4-2pJI6%=|YxY_H#wnNgiL0l3Uwh2-_#Sw>xCpBs zstGP+LMNoSSPn}gR2ns6Ugd;g^iaJ}^28E&$#PGm7p0qC+^v0mQky@xcxbrz+NG_ikx>DH4lBLtA69 zXpANp%&y&<@*U{Auz6!HoG|#-CCHb}?qY4flP)WiYZ(M8AJGX|s%qtTD~}sEhgNTw z#)$S5-HK}q^JXyN)o#h8R&FC5LaWIsa{PW~>L;D_nSlnnCBNY+x4~ZxwK<=mmR2ZD8=Z0FuNfZoAL2vso4?(c z-jdx-_zL7=IeuxeW(cefG1|&YP%gjx)OP%^IAXtIAF|*`qr_9;WaB3=5U{{V;5MIu mHy)B&g|$x9{&@4f&2`)zGtr}BgM-|t^*huj$_ zto2Yf|HVTpPux4UXN@2@c6t!3&yTUq2!aN7dEdQh1VJ1AyJl?AxTP&hw*Nh)ah%Mwh;WatGxP^RAye1n*h%Mw(@tPdjbQ|;28w8C5 z@s9ZzFBq?dAFg~&@(g3zf@csvjJNcxg)eR)KNGLX*CxakdM8 z@fGqpDDPc(%X(XnyutV}ZIkheU*xRcwhZ}Lm!EC04?V0usn4;&5r{nzUwqFx4eOcy z`|+M09AiZAGvB{4aFTx$a`)x?H#OcC+%+a>Jc{=$(`NYM#`VY^zT zob8=k$S+jBvtZ-jP`(R!rs-d;eAh_)RY>v<209~00Y9xwJwZfp33 znC_Gq57XuN!HxC*2-@fMNSFO+8ezkg%j>86lCLKB`{{IYY~(+LgZ-5ChVfE8?ZL&U z&xi0C`_X>n*xE3nMf=hIjx`*Q_M-!gx4U|N1Rl04j&nhV9_gpgsQ(~xZ1H}2uw(R( z38MZ(jEmPXc3YV4tI8M0_*hKf%+HZAzLoN$Vtk77qscSeSK3t{IFbmCiEx(p1daa)IkqrA zb>+tjHvVbl$Hn-Ul^-ADHz_|M#_v|1jqxXx561XEl;_AZ&2nvqg$&D;C&w1%e{XQs zTfxyLKS=qK81GfSG{%ooJ{034%8N06s&cezw}tt+Q28>_jO2&wkn6xXeh!m2$o+ma z0^F7%_xn+a+x50e(qO(l3?SHDX+%(%gSpp{+{xBjBhYr@;4ge zdnsQYxyd4bFNv zBgPjgKQqRQ%0C(7rzk%w#xGHRc7(GYt_5fQ&mqr9{#l&DTNjd2(zaAFuoif{m}E z{EIQZk@Cx8d~@ZOlV>D99GA8O=eYDG@`g*-Ti0CyoHQ_s6hU3xo+cm~z+&B>VX$Skdd1UbX_0@dK3K7UPF2|2BE1>Cb^PpWh+J7UsX9{JVl(KEDKZ4Zc|3?~!Mk@nLyyC&w1% z^CrZzyx(_}ug3)Ufjxw;F<^I)uWrUartv=@#};~CP<|(2hFp&O8_MsB@paG$neGoG zoa^MRz}b&hlQ$US&+k7X&q%r)&%^5&KPJZ(*3XIfjP-W6qvXNGBPwDwNVS~Iq;5dWvs6qaK z@p0Zb^B}m4Gi$hh9oEk;$lcc(-gTZ|8W;cCNQ3@|z$IPZ|0~94=<@x)CU;-H|6$`e z--q$@T0g%5mv-eJ-$%$Bbour3C^@!x{X9n4AouI%apQjep8!wF|C8kI%g_IBjr;ZU z6nIkoJk9tFU4H$bttR@PH7@P*YHe4)1LqdD+dGy2Ua;|BEB`}`zo`7V2xt3Qdp&8N z&yzRk_v`T1#)a*xeieNqF~2+ z5x-bHFU5FS`CnuFOyw`f_@&BUiSe&1|67dTrTp*Y8IFN%!9mE+%)&HC1?#r+Lw~R~s*%f}~^Pl+Q z#{958_XX$vZxd!3j1*8Kd7yulbhKkoo1<>%kz?#s{5yT&EmlQiA;z`2F_IbHet zf{kCU+{q*HH!FAd5+eL=Y@e)7CXEo_*A_UW#XZ zi}yVn7#Ghh^=z2p*~sF3&&I~ZQ&7()DV|L&-uG-~Ts&v0XY&-#78dV&wlprDtJSkr zif3z!_dVMf7tcNF**3+qoyGf}?Tw4)Y4z-o;+bIazGp|{;(1p+A4>7;WbwXdXXE18 zVnb<%yQFw_wRqpNn{n~%rykx9;TG>-AGUbk!}}!B{?)6VJySfqf0ER{_BJl(O@r`o zJ;VDd=+?}Sw_e(ZJVWl!cazAmk#pSOdXoKgvT^^sX$rXHr`@~mJ=M76XSwEQ8a<8H z{On7fY0b}ca%}PZ%rNffXFu?y{OoUB@^hZ%=Ky*dt@$~SJky$=gUGSP^K-CqKR<_n zC*|i*cD*P5SRdK#_ynMaPyi@=lev)H(-f7abd=J6xVBjeHpaQ5G$jQjKc z(dO~TrDKfi_@*A-cjXoz-;T9--*cRDt|u3vrjF2j9v|^=Jy}tHf{UlW&E1b1Ri3qY z;pZtIjBu{&t_0_}mm_bue0t+vp8gEEKkgOCUAg>q-4f$c&v$CNOBw9qrG6d(XFU%Y z_v^XnJPoAb*UyQ{!}@te{mUYrX#EVkc;;2=VWW-ZxQ|%8@V%6mBAoTp4bJ*0lQ-z` z=YI!9ap{lOsDCAc6a0KGAiSQ#b#Him;AC=a^#1@3mW%cCQS-?8?{n%u#khZd{V{OK zzkmMwadPMP&#ymWyxrX&e@*=j1~<5m??07%HM#FUjT{^KtJpKl|LNu#@3sFkjIZfk zCpptRYkJpVK56l5dDmgiGQPIwKO0=?VI9wZ4!O(cI$rzvlyUKg*I~|OaD)5!{__~0 zA@}{~o5%Nm+PJinceS2BV}8FKUO>K@e!m@FNREx1{V1&Gi_FvR)x*W$l23UKA#87# zkUP&fuO2QnF3)|fvx)TU&obD>OaIy)oal4>mf>sRGn9Wm#t&2eg_!49a`$mlKgjjm6i}5{` zUmxRBm4DN?RaHl-tgzCn~h67&w_{TmH!~duTg$yjDKJGUE~?@^E&_I;H4zM9;xw_lKBBkzJE9JhaI9+}?<)c=ri zfByXyxU^?~{{1z%^ZWDr!^UNPA5{Nu7~J4KzW)*O47u-rlpNa_@DnxvTjKp=%G>ZH zE|231e8%JWxN(`^p9kY{c>-LH)LHJiv!fE8+;Rv@Ob^+JpS?egK@t;p94=iUeA*wY1VUe{Q0Bt zc6Z%)HPU9>pZE=mUFYn)sOZ(hxb2(mrXK;h@zW-J7jCi8+@@wSS!gkB!#rE?L z<5F+i!cX+Nd8FQU*L2??Z!pHMw>QaGll%4d7CAQZ3>;xQ`KNjOdVAZrU#@?FC)L|K z^!h*8k~|`d`yLe*Ldy+^>hV z!ISEL9dhUQ>wjJ2e*LdUe}?j7+<9dYseV30?)-lKcQP*Rg!RL? zo$1FGj@vJ4xppCMko(7dSMt^5ez|rt&)8toEt=!c?&k5^|A&qH<=O*0sa$)KBkB0K zy_a!W?;V7++Yz@n{n%J8jvMp9Isfwa4}wMm)GyaQ^km5Wa!qo6;n8tpvT*2ar3zpPvJb zOL?zQ|3NAKgH!y6n8)`YYFzx+sXvqA??~}?n#cEd85jTU>hDhR&rI>pGLP?{ZCsAa zFW_%S)z6{d)u-^^EANSLo(H|5`8kZd!Q<<<&%?=All$$n*F64pn7QWhufxm(m*ehV zhnY|A^66iP=`$|*UlWV%c4XxU`mu%WaDws$F@AvZ{s`y#d@eZG=L3$jT>g0we;-Kl zOKzUL_8GC!US5673I>B%rZ(oQY_=eThUdBf$?yRP*SdR)AJ zT#hxr-%gG*F6mya=^jtNrptbP7kE3+3FO$AAFj8b)%a|Tzo~pM#y8xG`vyVI`NhNW zVHa?gD^K1a_uE?mT*hI)TuaDZe*AJRH7@mbkot#G{KXXiiRSVB%Z!VEq56kY{39v; zl6ic8*|_*C>aRF|qosaMa(;5ZeyYwRJUU<0j7vXiz|Z4brymC(>_?X=AC2+bl`oI+ zN0qOLaJG{-zTP@Ve=NoS z@f80j%;WnT#>GEP{iixV^W^9MH0LMxkIU)KBRqOs&M+?i+3G(t#sA3^|5@ho^MAH+ z@gJ@Jb5i`DO7Wj-9^ZeSaq*9+|NIpHr&Ii&F^})Rz_|Du>c23>e^HA6V)OX^ON@*E zV)b8|;{R-l|8wT?{hv23{%h3#g%tl6Q~Z~i$M;`uT>Q7I|4S+UD^mPlHjnSW(zy5^ zQ2$ja{;#C?ziJ-ef3KzJ zHZs25kmA2F#eb7|eE+wMi+^kN-<;yVCB=WMd3^tE#>GET{ohXUe<#KNUGw<_= zr}}SC@qa(Xe}{Q|{|}6df06p{Oz~swm$e~)qT zpP~Mrr1Ib&`X5a3|02czOY`{thm4E= zKK1`9#sBLR|HJ0-{l76T{@QJJ|Mw~WKcx7dGmr0o-njS=QvV-Q{C`UE|Jgjg|1ZYH zKcM~>Qv5Hb_+K)Q@BgcD@eiy2#cZ%m-i}%mF z-!m?rht%_aiU-Sh!jw=U?hs zGsUx(#rqyym(}u$XU*;8c&(G-S=Zuy&w9qiv$=ZKPw{ME@xEt6Oi|CKDW1(N-uG;7Ts#@|Y?0#G(&By3R>s9MUp-r=c<{VZVmsW{xOk3J&vq%E z?JeHV&kn}LGoqdeDV`lI-uHaSxOh%c&rT_xoh{z?>|$Iz=c;Gd6whuJ?|XJPE}kpY z^WhZF9v1I=_B1Y@o7J;dif3<&_dOWXy#95MdiF{2OtN_2GugQ0=P~t6N%2gzc;7S4 zxOiSv&%P<1=@##MW*8UGyXx65#k0S~`GzeE#A-1EaT!iRz0&*Jhx~19 z&ood+{`I0rzW+Gmavk_Z z_}fu6$J6iDIg)Ps4pMI?kSEkzmY#%q8#KS4ZqB%*yEXhwH&4H&`wU*}t-KK7yl&j7 z`B_4qke{XWC*)^{-1+_d6pc%M7HhgE(jUoBMftKAKTG*=j9;yMB*K~hTfx~5OXLap z=im2A%72ACA^#^Cm;67f=~n5FYqI{*} zEQ92;p?p=0U#$G(7{5mOM`QeU<)_5>1Ij-Z{9NT< zkMUcSUrU}5Kj)VR!P|kp5sUw`#$OkUZ`(=YuaCsjGeP+`W4u%O4Kbcoeq)TEuKcDL zzfAeJV*ESGZ;o)@Z+#e?^?6H-zpDJ!7@x4S#NS39sh>l@SwG))@r;r7Fc+NT)py7n z{-`?&tF7r+m{&uME0_PT% z>vT=`hvW@%zg(;7$&mZy`VqPF`04)GxTJf5rh7Lyw=mtyHQjs28{~evKcOc>?x%Y% zx%2qx{?xeC=MC!r8F-TaKE@~b?>CR{|G9A~*B$V;L;V0ax3FCIYPt`SH^}{R{eqqh zxnHhdk~@!|?nA~U-A6UuUx9ODy6lfHEB|$jkK0A^`EZQyqWm`z&Uv{5obCJ(@&^5W z{vQQz%aHr|e~jGa$It)c#^tyirT!NLN|M%cY{y#82!T+3jeE;*t#ecc_{|KJs{}baA{C_r&@BfQ&@!zWc7r>MJ zFET#C|B`up|6h%Z|EKDI89d4V3gZ*}e>0Eo|GRPVKc)Ux!IS*2F+Rcn5A*o`*Nuz+ zCH21np5%X%@d^I7%;Wq2X%q{pWuJTJihGE=SLwg+f+zXkV|;@D zee?MKpdIm0h2z@<^|yg1`NuFm!9UhKzQ5hLsf4q5o|C+{S zoID(UpkOV2!xolniKe?Yd80Mmb-{B+kdF6o}C>8=mXEgZKmSH3}ve_Q#6 zF@C@Djbi*+&iEY@wIl7de}6^w^P1ZjPIj-^9bjB(GAY|Vhi#{YrSm=o>XsJ zk-K{E>uqb}vQF-UpK;rOb7Q@6y?31QZDV{``F1hBO8NFNe!lV@V*EG&vO9T$e!m}m z7(D5?>_LuQIKM~FulF=A{j{q7y}*M6|K5zxh==*#268`HUEUMfrX)-u_`p zcmEjQO8EgXK1KO~G2W;AAo7glpY<>TPIPdDV=dRX0G#dN5c1WG_v@2?S6;ZkuFH^P zKN&e_V?H z_!R#M=JEYmN}O7WLd{1x-~{*#Q0|7`VFQ~b3Qf89L3f7H16zoP!-DgG5H{*~tO{i}?N z|5o*%oZ|mzivJYz`2LR>7yo_g|9Fc36Dj_Nd3^t=#>M}8^`DmFKRv~NhIxGdna0Kc zFZF*i#eY_c|7`R4{&S3re|`L+6V8vHO7WkY;y=$kzW;pVvi{!zeyTssZ`i{1{|x1y ziSaJw7sPnK@(UxJ^Kt>4`M-#~LBBu#Uksi!eqKWE^5f_KQsYuTE7bp4@F2neImTz` z^2h(ro5%Nm!MOO(QU4dgg9QI&j8E`iZXVzNCFA11T>V#o2MPW!Gd{t8rFne+RmR1C zo%+859whj`%J>BT)#ma2Uo$TLJJf#-c#z=#I^z@k*P6%of5W)=f2IEGz=H(;^^8yO zf73j^{|4jI{$GM0D7cZ|u!ZgaUFA1LINS3Edr5o#7I}m5etW(dJSji7kUPJhpIePf zdAC>pZQwzI|J#hu(B-%1@0iE;f7iH_cQ5#Xg75Jgws4)czovUTd4t?9*Z0Ab(!GP+ zdHi&LU|h;|xcct|4-))$F+M|=U#=gT$M>%`F6BB}%k?90ZsBn(D*thW_aX7=J+dPh@pIgG1)Sx2n!G{o_pfKblgjlhId)-rqviUY zajCa46UF~~@F2ne2gYZ_6TL3+oOyiz^Tx%$rTYH}9whkx#P|gNpUva@|6*LuD|dyT z<$M908;=X?{~+Zr#`q%TFOg>?p5@Ac6a6(3|0?*&;H>|b$r}yW{rZ2!xZke+<~)q| z|1QVhEnfb<#AUD&y=w9P-y3<&;{CsC@elB}4E_G!w|SjB5FS15Zy1-qH*%qt>rHTk zx0LHG<9@mRNscXEuD31T|9d09gFwNwXSi$TB*4$<=Vvj{`jz|aT&LtgTEc>&FIG#wv%@>-Ob4x zt?6!I+)sB)^Z512e+N=Letm9j+^^4Vz?158TXL6AznyGn+;1n_)9>P?yxZ<0<=r91 z_fkF~!a2Wmf^&S^k-X7b4<7C?N%8NR;@{0YzJGV);$N!% z52yI|Nb&D!9^b#0aq*v`{=HND6I1;An8)`|GA{m0)jv7K@BSUp4C~r&hf~et`==Qf z{|)NjH^o1l@d^GJ=JEae8Efn`3^zTs`LT>+LY(;@@2Tho|^^Q~Yzy*rE!*q``F6-WxkuI_n91kAW8`nh}O_p|b0{Lpj`0Xl7-XQne)gU>xcz?-Ryg%RN zjr;wg0G`w@mXJHY-!GOLZ+Gjuu-^@(_>0E<_2h}<>fZt9zbB%U?7zz_e!Ls6xDF>D zHom5J{x||I`CrSO=Z5!xOXSYKmUo_2HZJ}!|CJQ~Nh$uSd3=A(xb*8?_4xANi%uGE zN6qga-{t1<`}GRr@^>t!s()pQe--&^)`jmsnH(GWOgO^&|EPJS{VY=dDaQTw^D*$G z_VaOa=l9#sCya}KQ2mV*|EVed)6C=hPd6_0zfApSnBVVTXPV!ypHG^{um7`*%eeY6 z_&HvkO@D@EmUKU->7GO0AotV#6g@89PxoB&`{|x%T>Lkw|NIpHr&Ii&F^})Rz_|E- zsQwF6{1>J8FE)?wzr?tVhmXO}_Hilw*ur_|CFP$b&j{zbWsNB^PJWKOLGIV*=jnIx zetmv{9J{ccAAvpD&iVd}#&vxTKab;O^kZXwIDbu7emQwYIIm;O0jK9nk$CcBlwT2v zXZ}wD=Q#Fd@&@tIu5W-RmFqfk>=G~6^~S~jg!;dk;=duqf1`Q) z<9?HI@xP${Z>9KePVwJj9^Zefaq+*S{@YUg-%jy=$2`9OyT--8F8+Z8*8lfX{I{q0 zzi%Gje}{4LZ>Rnrr1Fr~aR%`0q>c-)|n@|8wKwKU)0{r1&39@&Cd+zWjxC-yqNMweUI0-;D5A(GK%k4{wpLX1rey|0Hja`}OcPIX3d>dDg!y z-miyujQjQQZ}6mgc$eJy{d#!MczaMo-ox{(_nUs#&hhX4xbwSU4M-Yvt>K;DwSh~z z^6znk{c#MrOLx4tt{ZE7ob#Wn_12!^AD7}^!#uu!ym9Gw7s1c*XHELC;om!O|E}4W zG~Knx8?EJ9n><7AmunsK2W=2D|#B-$L}v&ldmTC`^z@u*y7{cw&wB2x9z~Cp8aundvfRT$G07f%fELvZeM9X z6Xy50N*R#+cxEuxHlBdu%&d{FopQ{-W}oBm6nA&DIgm zF60?0FP}pwVIS82t`;xj*z;g)hr5AG{rms!?e50q-_Jc$Js(c->|yb~XHVlY{$CCc z*SCAov)Yx{8z1&2Z%F>5?QJ4Cw)nWWkH!1r-X!DxxHlO*Y22Ga?)?6^H`Ta*e{CB5 zE?(9}H*2}}C2!E>x6kSHWXS#YIm7(^I%GfN(thrNpT}!|`khD8eNxjsfV|O~?t%2U zct72P%Jy;p6!bkm;;cRV4GS`{SEn8YGkCyUX@QD8k?fq4+ZNf<%_v&yMdvU5C=GP?4BPGRWF`gD1AT-((0&G zdP>dX-B}pQE-#{E}c zihP#Q^$P>#u;Kit&lXl{#e9L5q$q1s3tU4=NW&s}3rp&5clm&KWm)9x;BcY4P^k}L2*mL$<%+|y7X~V+^-i=l z9;mP#^wegJ4iEbctEV;(t#o;zS$V-oHn*UFkvQ8wTB)E<1=Z0~wB7^s#X82)ejMQ8 zg6c*_>xKFCp+dD|G+!+D>xkJ`EmX4A!i1jr{S#)Ds}mL!a^&*N$8}tUOo?Rt}a|_VpY&P*};_cS)@|I?H9c)E3?UXe)DL4S6nGRz9X+?gGY zH0SxH;Z;FtYQBbs&pMHjsg^5Oin&F_!V349R7U?0no_>ESgX&k)FXUR|Ef~XB{#nm zZO6||j%`KP8XfaEX$KJy7!f@zIVw%;NHT23b4lTWgr9{ujNFiV3s4@gF zR36Ub@Z<~SxrGrl6*T%qg=)R9GVG|8T4hQfhNG&he7@_*oitjk7CL9o#oSa}IIt*^ zRf5?V2>P=5x&0j-E#z<CQst`{R20g)Pg}QfQAdGH}+wUh#bbbcdbx|uYj`klq#cj8FPXawJiEd zsm5`qRPSGrt>lKXMfBX`BNJ_3)-CYDPR02)Jdk>DrRUAAjH3QA0!#1L<|EB zE1Aw{YwY6US3j6rEcNG?h0RpqfIFvX&jtTz*?_VsH5eK6fqoxyuZ5( zZ81W-(AesQ#gJ66)<%K*4xhOaCpO%Lr!KW%S)owj!mfbz9KKhvy28pKa9LVd!ja2! zitWPb5HecA0h7V5YbaYP6^6-ixZF&ftu4c`#c~I0NGVpc>WcIGrP}8AYi%+COda** z^ZO%J$+rt|4u;Wk=1Q!8kSz|5&C$p0kgOW*!4bgtfI{FH)8I&B78T&r&1eT$`VL7VcitwobQ-|s)~j*ruJ&*oFo&E~Zfsh_7SbZ#Cv%xt-TFPo!fK4iS|!ClXr43am4u~(*?0`P_;4Q};d=3U}j=tp;ZtasDo|!MA7~!Pqme(D9J&{uu808!uqhvMf zmfrJAZUN+GJ)A>gxm(7FKY+ysE=wVPZnlKW75&AfJg33Bk7pQVeZ54kVzKl57h$e9 z%Ibh;F}%E#Q*V$P#x#+ih3jeVN}o4nN|lClYqW!No-c&6c=UrX`0xVG8L=>P^{i4b ztPZj`*TpruFrh`9k&vOmBCpDXxTnThBzz}XAIO$)K_@FK070Fc)2bn3!{T)iT+++t zR@rQhODei*aM88Usyh#Q4klYcW0pmWoP=P$^e$=Wj+i>RGLgBB<5VqZ0bUFyTM6U$ z#l`xN>oNlInOs-G3OT$EhShJL6Ld3`&MZzKISVH-UQptZwV;vXyH}O6BOZzD7_Rxy zP`#Xc9F@n9@grE#upkt|kvxiYVe9D$z4=J?;n zjT|4}ljmRq#k#xL%-1d%bZj{{8yP8=`m@V%1q1^-5n3%z(>ykRcsVc@Yv?#GXrNef zi%{-xSh-kYW9^aC#_%l%tGQg*HPh+jb<9{gKFjClmvAK;SJHdB<#cl{&U1M3jGj=( z)kfRhEj+79pU5>LoX}J(7;A!h7S~)WdUc9fVwO2sw0zKA&B^JBp883#!aEARI?eHX zghd>{wT%U%?EKP@a77W9P0J7azX(nCzN1vScJaO zL0taCg;~FrVmM4GhQq{SI7}~wQ<4m8E*2fuUJQpd7{g&L#&B4ZF>JLN=PBj1T8+o2 zl+uny#%6}>{byJDkCT?Wdw!l2nx#^L1CdIC@gsdg~gAcunr<9tcVD*+K94*{9C<5 z;}S|>H6&}_IRkThwcpBo$qVsV&DRw67M5m*drIz-og1yCk0;G>@(C_W;4*TqAaiy; z)Zl*N9L_3SfJxv2+={E5Ps7Sd{xqzo|n6w~Jjjmwg6u zxWA1X0BHPJ=ja9YX2WiNjN7OMTzO53;K`D|H?DMRb|K)$Eqga37UnDd&blXf%U=4C z6i2c$bIFn-7H51YMr*+>DYZ~2Nw{Q|Pq6@9QLZj?3*#ktr~qRshMQ_ycpp~a1q?A* zd%G2PD67<_&Fkw}T96J9xVLUy*k8cfv#x+^;Z=P&qj1-95EQl*InxFR4{K%(dN`^AU_kQUxgilBz?mKCU$Qbx!!@q?qjh)B0#}82vj<@z){@HUcZ7FhWaqg? z+UGbasFqKZT0p7s*b$PhmP@#_g?o=UD>!m)ZWdGjihyDArAoh?#XZ5Hln z;=%_~L(t;`<9fbV@U zudmK?U3A6Ju>kj4>+T@{oZH|wAueO_QXP}_KAM|#H&VKbt~6|217$n`hNW`Y(s=h0 zd(Gr66nWgh*F`2KcjPBCIu55K!Kq1b8e#aLicOSYv$Iv)ow74r5FFJ6h}*rmh~O%@ zQtFp`EqI)+Hmy<$7Z&nv7N2{|>qk5>mWvilGvJ9XssMMWYT;EyEJ`r#@|L1|y2Gs& z+>p6ItXn8_RYqlL1A^v}8|qso4?BhLd(nGp^*H4ntEGh^)@@;%ayxh9 z!8zQ@H9HqCGG>MCOH!R%#^sgpE@zmPsogDzH&0swaUB5nP%*qOTEL|8@>~Q5Zro}r z$Q4h1upI9=mdgV*vvBi{kH{cTu0GK>IbZb`ven#B{6op+%vE^y3E!}4bWg$PwJ=Gx zr-WSKmKuhkQO;esYE+(CT8@M(QzQ>X-UxB;=k*Q5N7u@fd3{>m*`0IC)!B#jX=rqy zW|SMLo4uEa3zix#STQYmXUi8K*ZR=nD?_+W5@y8hiVMtc-`HqenIemJJ*Jf@y{P04 zTxpt(M$iH|KDvi5TRv$41GtblY!okYL(+n{^7lC&n86KQM(37=)u*pn7EFgcdX*^{ zxo{D?&D02`Wv*)Hl(%p6@wpgf z8Ny{R*EU>0bZ)LpiA>HssQ&DXXK13+GqSg+vs|uQjirs|4Ad)tGe<^Us%{xLfQw}q z|Mi(dmUm$Vk9puxLb@H#B%-7?Ws_1 z$}uW^xEqOfx*Epl)~AH!0hs1Z!2c9ww-9TUYLTrUm;S1KWy~_T-dh-)-7D?QomRQ` zc6Blw#T?}|B~IV9j@lgL2;+pqoJYE{a=$5Kax&D>$sn~A41a3{Xm+$0{KEY8+OcMv0ZR~<1Ke1UyLZT=>p*xW*WFc! zQ9cHxJ&p%Oo{LftrsbZM>cRtPc)A5mQ@Uy^)L|(8LI3C=mz-jbSbA!;Q7j1K;q%J% zjwR?f@?m2__bgzYcN9adkJm{;HHBm8YU8~9_!^?dAMm}8!V#9q1lE@ zbvz(}3c$kA{W3=Ms6{z0c1c|GZZXqxW*0ZRuOH1>A3aj%T)Q>V@)54_50_W5Q_0;; zk;kbklhfm|D|=4JJrl~IU}Zg=VjK#)J%(P~q{PT3505sZ^bs#UhKd-y>BM)E2kVPO z3kpkl+l4RP{OSfFzT>4adDO@4$&(Tnr4{IIpYfAOSHS#vq&%dmK~1o*l1C5a%^8j8 zM=wBZGa{T4&EaOt=I8xg&DUJw&##3?){P@!!fqjg!6oTKWED%M;u0*8lRnnrWhREf zRdO@RlNO{5xT#wj9meAixT&e1M;nu(@M2>aVlCfxVj1)lU-#+Zg%_@JH6!7^a{e&8 zZ=rkmLT~TuK61ID7KX}OH~70T8^bN9M*h$~f|u?T0{zc!@k+lrUeB=P-mp6b2yZ#- z9$}j3&f#<&ChV3Lc%D;wR}ap`G#EWXA3t-Kx^zwFTG>i{pjn>wb3GR0>!Jnv2uS$r zQ_HI{;GRO|Wl??dR39wm`FnFz!?T(4yeV;WJmOOtqxpV30*haZs)c7}yjn9@E-#Bb zj+Z!*$=)a=XAU&SioA05SFSEa+mc5W@sUd>^cUP6Q~Aw=u=g=fJZVLi=M`4SBfsvq z1Hxa1m_LliDe)k%oRZliG4czC@{4KwK6d@)>*%X37F@OFfhUd3y6JOc-|Ag3ug1^# z%Yb7v=pg*$t~x`wS-Z3<2sQ$nyUP7K7JerTjdU@tY3V-kALpO9?jdjg^PdNw+6WH8 zZxSAgzc7dmKk?nYbUQQ-C2M{;=;DN>y$^ZhCkrqZzXOV|Bg29KF)jY?U6^kCCx3Y~ z+z=*lZEoXRx8Ys*5&`mhE079rIOZm1E0w*u$l$L?Ok9d;aTTh2gnKee;p?W1ubLED zcUzMvz>koHKSL1al>1Jeh`%Bi*(^4~_>w&7vyg4C@qE8z$r>5{PX2g&b;u(=!OnP{ zE00X{+sDL~rorDW#w=6H<9C#BH6hp)?{R)xU-f}|1_9F?;H-?F|807#13c69U&ph_ z@aeAq*3bF~)8K2?Hh*r2FK&FzE&M6(1$Cqa8|y0E zFR6>V&p3Es5SoA=OR615bmsP3T+2>gxu|c+^22h~r3;Q)F;Fa?T$@s_9>KMT+eg2# zZ~t$$X#M?9JQEN+Yx@2jCwC5KS5EDkHFak9yrGe)wQ_G~-_VT7M-^6%7XK$c7rVP0 zW{$nMz%v224BYYTS;V8ZcSmPe_v9&4r|s*Gr+YPh#(w(~&z!~mqsK7%nxDDx&#O7o z|6;>F@!dATZXJDny**tW13mNS9iVG6CktcwlWmx5Bc{#v%5sJ4IlOF{cgWbj7Z(O` zTEgGAlP&bn8TE!~X;|1r{zvBw;lBTq^NcVb=bXLfAvb?((jiYj^%0zJ1cCov&O1VX z_%oj8kh7n-&+v`)G-;(fz<4z#7&AT?%Pzumba!%x*Ag>p*3?<<(1U#N7S4f8hsUFU b-zxjyz5crhwznA*_n(NraU^Zc-|hbZlBG{= literal 37361 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 diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index 558807b2..27997c5a 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1 @@ -m_EditorVersion: 5.3.5f1 -m_StandardAssetsVersion: 0 +m_EditorVersion: 2017.3.1f1 diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index 239cc3a87eff3812aa36e663dc72d8e7ba89ad74..3f369ec3bfd95e24e54b5098a7a88b1ad4ed562d 100644 GIT binary patch delta 322 zcmcbj_(IX1fr05S1B1W|1_lN}APuA#7>o=I&Gn4+4ATr5{{8>|pOFzL<_D7a|9^95 z6Zf)T|8{1INqsW=DDOGZ(v-1bV!pWK0R{#}24;qP3=9p@%nS`IK-J73EesRqi%T|u zBv}{@fs!B$H1j_zP>RuE;(2jN5QBl0ArL5$1;ilB*ui2G|3h^$q3GlUN-`Xntj`G5 z%FN&av=F2fWG**IwqbHSP}TurFtU?)fs%|2llvLPf#h;VeZ~WuuQQ4=@`FSX;KgP^ m=FdEn6_^Dkvk2^9WSYEJKwJdmVE59@lvE&nKXTg&ka7TDPe^M3 delta 318 zcmaE%ctz2Yfr0541B1X71_lOxAPuA#7) Date: Thu, 26 Apr 2018 22:55:50 +0800 Subject: [PATCH 064/108] =?UTF-8?q?2017.4=E5=90=8EUI=E9=87=8D=E8=AE=BEloca?= =?UTF-8?q?lposition=20=E5=BE=97=E7=94=A8=20AnchoredPosition?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit UIBase 中加入SetAnchoredPosition --- Assets/Script/Core/UI/Model/UIBase.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Assets/Script/Core/UI/Model/UIBase.cs b/Assets/Script/Core/UI/Model/UIBase.cs index a173c2a7..ad845f97 100644 --- a/Assets/Script/Core/UI/Model/UIBase.cs +++ b/Assets/Script/Core/UI/Model/UIBase.cs @@ -1019,6 +1019,11 @@ public void SetPosition(string TextID, float x, float y, float z, bool islocal) } + public void SetAnchoredPosition(string ID,float x, float y) + { + GetRectTransform(ID).anchoredPosition = Vector2.right * x + Vector2.up * y; + } + public void SetScale(string TextID, float x, float y, float z) { GetGameObject(TextID).transform.localScale = Vector3.right * x + Vector3.up * y + Vector3.forward * z; From c72bd9c5e8ce1194bfbc05a444d68aaf81b4ce15 Mon Sep 17 00:00:00 2001 From: GaoKai Date: Wed, 2 May 2018 15:51:58 +0800 Subject: [PATCH 065/108] =?UTF-8?q?=E4=BF=AE=E5=A4=8DLua=E4=B8=A4=E4=B8=AA?= =?UTF-8?q?=E7=82=B9=E8=A2=AB=E6=9B=BF=E6=8D=A2=E6=88=90=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E7=82=B9=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/Editor/res/LuaLib/FrameWork.meta | 3 +- .../Editor/res/LuaLib/FrameWork/Data.meta | 3 +- .../FrameWork/Data/LuaDataHelper.txt.meta | 3 +- .../FrameWork/LuaFrameWorkEventName.txt.meta | 3 +- .../Editor/res/LuaLib/FrameWork/Status.meta | 3 +- .../FrameWork/Status/LuaStatusManager.txt | 8 ++-- .../Status/LuaStatusManager.txt.meta | 3 +- .../FrameWork/Status/LuaStatusMetaTable.txt | 8 ++-- .../Status/LuaStatusMetaTable.txt.meta | 3 +- .../Core/Editor/res/LuaLib/FrameWork/UI.meta | 3 +- .../res/LuaLib/FrameWork/UI/LuaUIManager.txt | 22 +++++------ .../LuaLib/FrameWork/UI/LuaUIManager.txt.meta | 3 +- .../UI/LuaUIWindowMetatable.txt.meta | 3 +- .../Editor/res/LuaLib/FrameWork/Update.meta | 3 +- .../res/LuaLib/FrameWork/Update/LuaUpdate.txt | 6 +-- .../FrameWork/Update/LuaUpdate.txt.meta | 3 +- .../Editor/res/LuaLib/LuaDataHelper.txt.meta | 3 +- .../Editor/res/LuaLib/LuaEventDispatcher.txt | 12 +++--- .../res/LuaLib/LuaEventDispatcher.txt.meta | 3 +- .../Core/Editor/res/LuaLib/LuaFormatTools.txt | 20 +++++----- .../Editor/res/LuaLib/LuaFormatTools.txt.meta | 3 +- .../Core/Editor/res/LuaLib/LuaPrintTable.txt | 12 +++--- .../Editor/res/LuaLib/LuaPrintTable.txt.meta | 3 +- .../res/LuaLib/LuaStringHelper.txt.meta | 3 +- .../Script/Core/Editor/res/LuaLib/Unity.meta | 3 +- .../res/LuaLib/Unity/LuaUnityDefine.txt.meta | 3 +- .../Script/Core/Editor/res/LuaLib/luaJson.txt | 38 +++++++++---------- .../Core/Editor/res/LuaLib/luaJson.txt.meta | 3 +- 28 files changed, 103 insertions(+), 83 deletions(-) diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork.meta index ca9824f5..871ffba4 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork.meta @@ -1,9 +1,10 @@ fileFormatVersion: 2 -guid: ff2a2f1dce34c7e40a92a7783e430a28 +guid: 552b1284d771184498d996ec56102798 folderAsset: yes timeCreated: 1484192362 licenseType: Pro DefaultImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data.meta index e105be9e..f5312594 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data.meta @@ -1,9 +1,10 @@ fileFormatVersion: 2 -guid: d780b84b98b09e04c8de87040cad363e +guid: 40c36a044ef65324ea4c21345a9cee85 folderAsset: yes timeCreated: 1484207744 licenseType: Pro DefaultImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data/LuaDataHelper.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data/LuaDataHelper.txt.meta index 8878e454..66c4dd0d 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data/LuaDataHelper.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data/LuaDataHelper.txt.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: e44f100664822d64fb3c97199e39e2ce +guid: 3d07bea5ec4b5cf42b6a100d90ee3959 timeCreated: 1484128663 licenseType: Pro TextScriptImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/LuaFrameWorkEventName.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/LuaFrameWorkEventName.txt.meta index 74794ba9..9f4e1171 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/LuaFrameWorkEventName.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/LuaFrameWorkEventName.txt.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 4adb41b46c02b37488c49a683a97c9d3 +guid: e4af1d457b5a24b4cb136b124422668d timeCreated: 1484207614 licenseType: Pro TextScriptImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status.meta index b44babae..1c9d7136 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status.meta @@ -1,9 +1,10 @@ fileFormatVersion: 2 -guid: f6e5203268f3aa743a6639220ac4d987 +guid: f97c5ce3400010740bff3ee442acdc5b folderAsset: yes timeCreated: 1484207744 licenseType: Pro DefaultImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusManager.txt b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusManager.txt index 032d4107..4666ada3 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusManager.txt +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusManager.txt @@ -20,7 +20,7 @@ function LuaStatusManager:EnterStatus(s_StatusName) --调用Init方法 t_status:OnStatusInit(); else - error("EnterStatus 没有找到 ->".tostring(s_StatusName)."<- Status"); + error("EnterStatus 没有找到 ->"..tostring(s_StatusName).."<- Status"); end end @@ -39,7 +39,7 @@ function LuaStatusManager:ExitStatus(s_StatusName) t_status:CloseALLUIWindow(); t_status:OnExitStatus(); else - error("ExitStatus 没有找到 ->".tostring(s_StatusName)."<- Status"); + error("ExitStatus 没有找到 ->"..tostring(s_StatusName).."<- Status"); end end @@ -58,7 +58,7 @@ function LuaStatusManager:DestroyStatus(s_StatusName) t_status:OnStatusDestroy(); self.t_statusDict[s_StatusName] = nil; else - error("DestroyStatus 没有找到 ->".tostring(s_StatusName)."<- Status"); + error("DestroyStatus 没有找到 ->"..tostring(s_StatusName).."<- Status"); end end @@ -71,7 +71,7 @@ function LuaStatusManager:GetStatus(s_StatusName) return t_status; else - error("GetStatus 没有找到 ->".tostring(s_StatusName)."<- Status"); + error("GetStatus 没有找到 ->"..tostring(s_StatusName).."<- Status"); end end diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusManager.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusManager.txt.meta index ad9cff90..ae4a19a0 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusManager.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusManager.txt.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: b0411e9fd364e7b46a1ce54f656f7f88 +guid: 33b6d89db1e4e9c44b363b2deaaf7122 timeCreated: 1483583261 licenseType: Pro TextScriptImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusMetaTable.txt b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusMetaTable.txt index 8fc95555..9b177598 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusMetaTable.txt +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusMetaTable.txt @@ -27,12 +27,12 @@ end function LuaStatusMetaTable:OpenUIWindow(s_WindowName,func_callBack,parms) - print("LuaStatusMetaTable:OpenUIWindow: ".tostring(s_WindowName)); + print("LuaStatusMetaTable:OpenUIWindow: "..tostring(s_WindowName)); if LuaStatusMetaTable.t_windowList[s_WindowName] == nil then LuaStatusMetaTable.t_windowList[s_WindowName] = {}; else - error("LuaStatusMetaTable:OpenUIWindow 覆盖了 ".tostring(s_WindowName)."! 请检查界面是否重复打开"); + error("LuaStatusMetaTable:OpenUIWindow 覆盖了 "..tostring(s_WindowName).."! 请检查界面是否重复打开"); end LuaStatusMetaTable.t_windowList[s_WindowName].s_WindowName = s_WindowName; @@ -41,7 +41,7 @@ end function LuaStatusMetaTable:CloseUIWindow(s_WindowName,isPlayAnim,func_callBack,parms) - print("LuaStatusMetaTable:CloseUIWindow: ".tostring(s_WindowName)); + print("LuaStatusMetaTable:CloseUIWindow: "..tostring(s_WindowName)); if s_WindowName == nil then error("CloseUIWindow error : s_WindowName is nil"); @@ -49,7 +49,7 @@ function LuaStatusMetaTable:CloseUIWindow(s_WindowName,isPlayAnim,func_callBack, end if LuaStatusMetaTable.t_windowList[s_WindowName] == nil then - error("Not Exits ->".tostring(s_WindowName)."<- Window !"); + error("Not Exits ->"..tostring(s_WindowName).."<- Window !"); return; end diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusMetaTable.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusMetaTable.txt.meta index b5d3ba9b..c676d7cb 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusMetaTable.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusMetaTable.txt.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 48f3961b8970ad84f84d39a8598c61a0 +guid: 70724ee8c77a31a4497607374c49f106 timeCreated: 1483584427 licenseType: Pro TextScriptImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI.meta index 2b5c07ba..9a13a14f 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI.meta @@ -1,9 +1,10 @@ fileFormatVersion: 2 -guid: af8955bf1ad0c994bb8887e1b4c936bd +guid: 3b636b62065a30b419b0a2d91f8665ed folderAsset: yes timeCreated: 1484207743 licenseType: Pro DefaultImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIManager.txt b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIManager.txt index 719f35c1..7a780a71 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIManager.txt +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIManager.txt @@ -15,7 +15,7 @@ function LuaUIManager.UIOnInit(UIWindow_window) t_UIWindow:OnInit(); else - error("没有找到 ->".UIWindow_window.UIName."<- 对应的Lua脚本!"); + error("没有找到 ->"..UIWindow_window.UIName.."<- 对应的Lua脚本!"); end end @@ -26,7 +26,7 @@ function LuaUIManager.UIOnOpen(UIWindow_window) if t_UI ~= nil then t_UI:OnOpen(); else - error("UIOnOpen Error Not Find ->".UIWindow_window.UIEventKey."<- "); + error("UIOnOpen Error Not Find ->"..UIWindow_window.UIEventKey.."<- "); end end @@ -37,7 +37,7 @@ function LuaUIManager.UIOnShow(UIWindow_window) if t_UI ~= nil then t_UI:OnShow(); else - error("UIOnShow Error Not Find ->".UIWindow_window.UIEventKey."<- "); + error("UIOnShow Error Not Find ->"..UIWindow_window.UIEventKey.."<- "); end end @@ -48,7 +48,7 @@ function LuaUIManager.UIOnHide(UIWindow_window) if t_UI ~= nil then t_UI:OnHide(); else - error("UIOnHide Error Not Find ->".UIWindow_window.UIEventKey."<- "); + error("UIOnHide Error Not Find ->"..UIWindow_window.UIEventKey.."<- "); end end @@ -59,7 +59,7 @@ function LuaUIManager.UIOnEnterAnim(UIWindow_window) if t_UI ~= nil then return t_UI:EnterAnim(); else - error("UIOnOpen Error Not Find ->".UIWindow_window.UIEventKey."<- "); + error("UIOnOpen Error Not Find ->"..UIWindow_window.UIEventKey.."<- "); end end @@ -69,7 +69,7 @@ function LuaUIManager.UIOnCompleteEnterAnim(UIWindow_window) if t_UI ~= nil then t_UI:OnCompleteEnterAnim(); else - error("UIOnOpen Error Not Find ->".UIWindow_window.UIEventKey."<- "); + error("UIOnOpen Error Not Find ->"..UIWindow_window.UIEventKey.."<- "); end end @@ -79,7 +79,7 @@ function LuaUIManager.UIOnRefresh(UIWindow_window) if t_UI ~= nil then t_UI:OnRefresh(); else - error("UIOnOpen Error Not Find ->".UIWindow_window.UIEventKey."<- "); + error("UIOnOpen Error Not Find ->"..UIWindow_window.UIEventKey.."<- "); end end @@ -89,7 +89,7 @@ function LuaUIManager.UIOnClose(UIWindow_window) if t_UI ~= nil then t_UI:OnClose(); else - error("UIOnOpen Error Not Find ->".UIWindow_window.UIEventKey."<- "); + error("UIOnOpen Error Not Find ->"..UIWindow_window.UIEventKey.."<- "); end end @@ -99,7 +99,7 @@ function LuaUIManager.UIOnExitAnim(UIWindow_window) if t_UI ~= nil then return t_UI:ExitAnim(); else - error("UIOnOpen Error Not Find ->".UIWindow_window.UIEventKey."<- "); + error("UIOnOpen Error Not Find ->"..UIWindow_window.UIEventKey.."<- "); end end @@ -109,7 +109,7 @@ function LuaUIManager.UIOnCompleteExitAnim(UIWindow_window) if t_UI ~= nil then t_UI:OnCompleteExitAnim(); else - error("UIOnOpen Error Not Find ->".UIWindow_window.UIEventKey."<- "); + error("UIOnOpen Error Not Find ->"..UIWindow_window.UIEventKey.."<- "); end end @@ -121,7 +121,7 @@ function LuaUIManager.UIOnDestroy(UIWindow_window) t_UI:OnDestroy(); LuaUIManager.t_UIs[UIWindow_window.UIEventKey] = nil; else - error("UIOnDestroy Error Not Find ->".UIWindow_window.UIEventKey."<- "); + error("UIOnDestroy Error Not Find ->"..UIWindow_window.UIEventKey.."<- "); end end diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIManager.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIManager.txt.meta index 0c4ca59d..bbe9821a 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIManager.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIManager.txt.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 5e22bcf50d9d55a4abbab9b4a6dbeece +guid: a078db2707dfe63429485a726fc5bd23 timeCreated: 1483408582 licenseType: Pro TextScriptImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIWindowMetatable.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIWindowMetatable.txt.meta index 7c545ee4..544fc573 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIWindowMetatable.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIWindowMetatable.txt.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 3e2abdb8dcdc74b448ffe39b60d542ff +guid: c06f8ae202bc0c047b72f01540c13f98 timeCreated: 1483408582 licenseType: Pro TextScriptImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update.meta index 92e3a796..5c83df62 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update.meta @@ -1,9 +1,10 @@ fileFormatVersion: 2 -guid: 6b4884196e4d11d4ab0ef4c200f0f212 +guid: 23f9c774450078342b22b9084ab7e36c folderAsset: yes timeCreated: 1484207744 licenseType: Pro DefaultImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update/LuaUpdate.txt b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update/LuaUpdate.txt index df754bc5..c258c6fd 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update/LuaUpdate.txt +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update/LuaUpdate.txt @@ -113,7 +113,7 @@ function judge_yieldCallBack(n_timeDelta) t_yieldCallBackList[k] = nil; local r, msg = pcall(v.func,v.data) if not r then - error("judge_yieldCallBack error !:".tostring(msg)); + error("judge_yieldCallBack error !:"..tostring(msg)); end end end @@ -128,7 +128,7 @@ function judge_yieldCallBack(n_timeDelta) local r, msg = pcall(v.func,v.data) if not r then - error("judge_nextFrame error !:".tostring(msg)); + error("judge_nextFrame error !:"..tostring(msg)); end end end @@ -142,5 +142,5 @@ end function TimerSwitch() b_isStop = not b_isStop; - warn("b_isStop: ".tostring(b_isStop)); + warn("b_isStop: "..tostring(b_isStop)); end \ No newline at end of file diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update/LuaUpdate.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update/LuaUpdate.txt.meta index b45f1b55..88aab4e3 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update/LuaUpdate.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update/LuaUpdate.txt.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 2e54a1ea4d516b14483649476f908c99 +guid: 179c3d3fb12376d46ae8375f2534e4fb timeCreated: 1484192777 licenseType: Pro TextScriptImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Editor/res/LuaLib/LuaDataHelper.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/LuaDataHelper.txt.meta index 78c7254f..d642f6bc 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/LuaDataHelper.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/LuaDataHelper.txt.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 462a33f48cfbd5e4ea72a00e2bfbc02b +guid: 277c6a274e6bae0428bb2a4cd8f2beba timeCreated: 1484128663 licenseType: Pro TextScriptImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Editor/res/LuaLib/LuaEventDispatcher.txt b/Assets/Script/Core/Editor/res/LuaLib/LuaEventDispatcher.txt index 7dec5c76..194d0e37 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/LuaEventDispatcher.txt +++ b/Assets/Script/Core/Editor/res/LuaLib/LuaEventDispatcher.txt @@ -9,11 +9,11 @@ local ipairs = _G.ipairs module ("EventDispatcher", package.seeall) -- 默认调用函数 -local function PreInvoke( EventName, Func, Object, UserData, .. ) +local function PreInvoke( EventName, Func, Object, UserData, ... ) if Object then - Func( Object, EventName, .. ) + Func( Object, EventName, ... ) else - Func( EventName, .. ) + Func( EventName, ... ) end end @@ -62,7 +62,7 @@ end -- 派发 local te_time = 0; -function Dispatch( Self, EventName, .. ) +function Dispatch( Self, EventName, ... ) assert( EventName ) --print("Dispatch") local Event = Self.mEventTable[ EventName ] @@ -76,13 +76,13 @@ function Dispatch( Self, EventName, .. ) if Object == "_StaticFunc" then for Func, UserData in pairs( ObjectFunc ) do - Self.mPreInvokeFunc( EventName, Func, nil, UserData, .. ); + Self.mPreInvokeFunc( EventName, Func, nil, UserData, ... ); end else for Func, UserData in pairs( ObjectFunc ) do - Self.mPreInvokeFunc( EventName, Func, Object, UserData, .. ); + Self.mPreInvokeFunc( EventName, Func, Object, UserData, ... ); end end end diff --git a/Assets/Script/Core/Editor/res/LuaLib/LuaEventDispatcher.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/LuaEventDispatcher.txt.meta index 5d7b94c1..62ef26e6 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/LuaEventDispatcher.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/LuaEventDispatcher.txt.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: d3a6cfb05c20cac46b9f8212cbbdd3a0 +guid: bb1eaed66359b8c44bae8449af09399a timeCreated: 1484192797 licenseType: Pro TextScriptImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Editor/res/LuaLib/LuaFormatTools.txt b/Assets/Script/Core/Editor/res/LuaLib/LuaFormatTools.txt index a022f24c..cba82cb2 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/LuaFormatTools.txt +++ b/Assets/Script/Core/Editor/res/LuaLib/LuaFormatTools.txt @@ -9,19 +9,19 @@ end function sec2string(sec) local d,h,m,s = sec2time(sec) local str = "" - if d>0 then str = d.":" end + if d>0 then str = d..":" end if h>0 then - h = h<=9 and "0".h or h - str = str=="" and h or str.":".h + h = h<=9 and "0"..h or h + str = str=="" and h or str..":"..h end if tonumber(d)>0 or tonumber(h)>0 or tonumber(m)>0 then - m = m<=9 and "0".m or m - str = str=="" and m or str.":".m + m = m<=9 and "0"..m or m + str = str=="" and m or str..":"..m end - s = s<=9 and "0".s or s - str = str=="" and s or str.":".s + s = s<=9 and "0"..s or s + str = str=="" and s or str..":"..s return str end @@ -55,16 +55,16 @@ function string.replace (allstr,str,nstr) return (string.gsub(allstr,str,nstr))--没有括号会返回替换次数 end --替换所有$[num].. 为 {..}中的个数值 -function string.replace_tbl (..) +function string.replace_tbl (...) local allstr = "replace tbl no succ!" - local tmp = {..} + local tmp = {...} if tmp == nil then return allstr end for i,v in ipairs(tmp) do if i == 1 then allstr = v end if allstr~=nil and i>1 then - allstr = (string.replace(allstr,tostring("$".(i-1)),v)) + allstr = (string.replace(allstr,tostring("$"..(i-1)),v)) end end return allstr diff --git a/Assets/Script/Core/Editor/res/LuaLib/LuaFormatTools.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/LuaFormatTools.txt.meta index f92bd303..92a5a979 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/LuaFormatTools.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/LuaFormatTools.txt.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 91c832fd50f59c14c9591a063d32dc61 +guid: e43171af3aa65ab4bad57176870beed8 timeCreated: 1486691786 licenseType: Pro TextScriptImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Editor/res/LuaLib/LuaPrintTable.txt b/Assets/Script/Core/Editor/res/LuaLib/LuaPrintTable.txt index 60107d78..514a3428 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/LuaPrintTable.txt +++ b/Assets/Script/Core/Editor/res/LuaLib/LuaPrintTable.txt @@ -21,17 +21,17 @@ function print_r(root) for k,v in pairs(t) do local key = tostring(k) if cache[v] then - tinsert(temp,"+" . key . " {" . cache[v]."}") + tinsert(temp,"+" .. key .. " {" .. cache[v].."}") elseif type(v) == "table" then - local new_key = name . "." . key + local new_key = name .. "." .. key cache[v] = new_key - tinsert(temp,"+" . key . _dump(v,space . (next(t,k) and "|" or " " ). srep(" ",#key),new_key)) + tinsert(temp,"+" .. key .. _dump(v,space .. (next(t,k) and "|" or " " ). srep(" ",#key),new_key)) else - tinsert(temp,"+" . key . " [" . tostring(v)."]") + tinsert(temp,"+" .. key .. " [" .. tostring(v).."]") end end - return tconcat(temp,"\n".space) + return tconcat(temp,"\n"..space) end - print("\n"._dump(root, "","")) + print("\n".._dump(root, "","")) end end diff --git a/Assets/Script/Core/Editor/res/LuaLib/LuaPrintTable.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/LuaPrintTable.txt.meta index 9cbf687f..395a16f3 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/LuaPrintTable.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/LuaPrintTable.txt.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 840e07686d9ea654793ca3cd47e9a384 +guid: 8b32f9887abc3084190de94a5dc7116b timeCreated: 1483587801 licenseType: Pro TextScriptImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Editor/res/LuaLib/LuaStringHelper.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/LuaStringHelper.txt.meta index 1bd998d3..75715df5 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/LuaStringHelper.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/LuaStringHelper.txt.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 506d492ff00984f419fe79d4c84be7e0 +guid: 5e0fa0dae5a2d1d4982aaf5c88ad77cb timeCreated: 1486697665 licenseType: Pro TextScriptImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Editor/res/LuaLib/Unity.meta b/Assets/Script/Core/Editor/res/LuaLib/Unity.meta index 395fc835..45ecf0f3 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/Unity.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/Unity.meta @@ -1,9 +1,10 @@ fileFormatVersion: 2 -guid: bbc24aef5b7a7bd4797ee8a344aaffaa +guid: 8d5eb7c036dc1f54ea76bf0889953202 folderAsset: yes timeCreated: 1486951508 licenseType: Pro DefaultImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Editor/res/LuaLib/Unity/LuaUnityDefine.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/Unity/LuaUnityDefine.txt.meta index 67c4683f..a9a30639 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/Unity/LuaUnityDefine.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/Unity/LuaUnityDefine.txt.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: dfdce21bd5144154590676ba2634cdb3 +guid: 768976c78abe63740933d37133c5c6de timeCreated: 1486799727 licenseType: Pro TextScriptImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Assets/Script/Core/Editor/res/LuaLib/luaJson.txt b/Assets/Script/Core/Editor/res/LuaLib/luaJson.txt index 503abafd..6b903578 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/luaJson.txt +++ b/Assets/Script/Core/Editor/res/LuaLib/luaJson.txt @@ -34,7 +34,7 @@ -- Handle strings if vtype=='string' then - return '"' . json_private.encodeString(v) . '"' -- Need to handle encoding in string + return '"' .. json_private.encodeString(v) .. '"' -- Need to handle encoding in string end -- Handle booleans @@ -54,14 +54,14 @@ else -- An object, not an array for i,j in pairs(v) do if isEncodable(i) and isEncodable(j) then - table.insert(rval, '"' . json_private.encodeString(i) . '":' . json.encode(j)) + table.insert(rval, '"' .. json_private.encodeString(i) .. '":' .. json.encode(j)) end end end if bArray then - return '[' . table.concat(rval,',') .']' + return '[' .. table.concat(rval,',') ..']' else - return '{' . table.concat(rval,',') . '}' + return '{' .. table.concat(rval,',') .. '}' end end @@ -70,13 +70,13 @@ return 'null' end - assert(false,'encode attempt to encode unsupported type ' . vtype . ':' . tostring(v)) + assert(false,'encode attempt to encode unsupported type ' .. vtype .. ':' .. tostring(v)) end function json.decode(s, startPos) startPos = startPos and startPos or 1 startPos = decode_scanWhitespace(s,startPos) - assert(startPos<=string.len(s), 'Unterminated JSON encoded object found at position in [' . s . ']') + assert(startPos<=string.len(s), 'Unterminated JSON encoded object found at position in [' .. s .. ']') local curChar = string.sub(s,startPos,startPos) -- Object if curChar=='{' then @@ -108,7 +108,7 @@ function decode_scanArray(s,startPos) local array = {} -- The return value local stringLen = string.len(s) - assert(string.sub(s,startPos,startPos)=='[','decode_scanArray called but array does not start at position ' . startPos . ' in string:\n'.s ) + assert(string.sub(s,startPos,startPos)=='[','decode_scanArray called but array does not start at position ' .. startPos .. ' in string:\n'..s ) startPos = startPos + 1 -- Infinite loop for array elements repeat @@ -129,9 +129,9 @@ function decode_scanComment(s, startPos) - assert( string.sub(s,startPos,startPos+1)=='/*', "decode_scanComment called but comment does not start at position " . startPos) + assert( string.sub(s,startPos,startPos+1)=='/*', "decode_scanComment called but comment does not start at position " .. startPos) local endPos = string.find(s,'*/',startPos+2) - assert(endPos~=nil, "Unterminated comment in string at " . startPos) + assert(endPos~=nil, "Unterminated comment in string at " .. startPos) return endPos+2 end @@ -144,7 +144,7 @@ return consts[k], startPos + string.len(k) end end - assert(nil, 'Failed to scan constant from string ' . s . ' at starting position ' . startPos) + assert(nil, 'Failed to scan constant from string ' .. s .. ' at starting position ' .. startPos) end function decode_scanNumber(s,startPos) @@ -156,9 +156,9 @@ ) do endPos = endPos + 1 end - local stringValue = 'return ' . string.sub(s,startPos, endPos-1) + local stringValue = 'return ' .. string.sub(s,startPos, endPos-1) local stringEval = loadstring(stringValue) - assert(stringEval, 'Failed to scan number [ ' . stringValue . '] in JSON string at position ' . startPos . ' : ' . endPos) + assert(stringEval, 'Failed to scan number [ ' .. stringValue .. '] in JSON string at position ' .. startPos .. ' : ' .. endPos) return stringEval(), endPos end @@ -166,7 +166,7 @@ local object = {} local stringLen = string.len(s) local key, value - assert(string.sub(s,startPos,startPos)=='{','decode_scanObject called but object does not start at position ' . startPos . ' in string:\n' . s) + assert(string.sub(s,startPos,startPos)=='{','decode_scanObject called but object does not start at position ' .. startPos .. ' in string:\n' .. s) startPos = startPos + 1 repeat startPos = decode_scanWhitespace(s,startPos) @@ -181,12 +181,12 @@ assert(startPos<=stringLen, 'JSON string ended unexpectedly scanning object.') -- Scan the key key, startPos = json.decode(s,startPos) - assert(startPos<=stringLen, 'JSON string ended unexpectedly searching for value of key ' . key) + assert(startPos<=stringLen, 'JSON string ended unexpectedly searching for value of key ' .. key) startPos = decode_scanWhitespace(s,startPos) - assert(startPos<=stringLen, 'JSON string ended unexpectedly searching for value of key ' . key) - assert(string.sub(s,startPos,startPos)==':','JSON object key-value assignment mal-formed at ' . startPos) + assert(startPos<=stringLen, 'JSON string ended unexpectedly searching for value of key ' .. key) + assert(string.sub(s,startPos,startPos)==':','JSON object key-value assignment mal-formed at ' .. startPos) startPos = decode_scanWhitespace(s,startPos+1) - assert(startPos<=stringLen, 'JSON string ended unexpectedly searching for value of key ' . key) + assert(startPos<=stringLen, 'JSON string ended unexpectedly searching for value of key ' .. key) value, startPos = json.decode(s,startPos) object[key]=value until false -- infinite loop while key-value pairs are found @@ -225,7 +225,7 @@ local a = string.sub(s,j+1,j+4) j = j + 4 local n = tonumber(a, 16) - assert(n, "String decoding failed: bad Unicode escape " . a . " at position " . i . " : " . j) + assert(n, "String decoding failed: bad Unicode escape " .. a .. " at position " .. i .. " : " .. j) -- math.floor(x/2^y) == lazy right shift -- a % 2^b == bitwise_and(a, (2^b)-1) -- 64 = 2^6 @@ -246,7 +246,7 @@ end end table.insert(t,string.sub(j, j+1)) - assert(string.find(s, startChar, j+1), "String decoding failed: missing closing " . startChar . " at position " . j . "(for string at position " . startPos . ")") + assert(string.find(s, startChar, j+1), "String decoding failed: missing closing " .. startChar .. " at position " .. j .. "(for string at position " .. startPos .. ")") return table.concat(t,""), j+2 -- END SoniEx2 end diff --git a/Assets/Script/Core/Editor/res/LuaLib/luaJson.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/luaJson.txt.meta index 5b57044a..c3d2ea72 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/luaJson.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/luaJson.txt.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 74a25163d3fedd6478bdd0e1c2e4cd57 +guid: 00d5d76703af5184c8d9892593fb29da timeCreated: 1484110323 licenseType: Pro TextScriptImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: From d7af6bbb45c03e2c19450b1445d895e78c448aab Mon Sep 17 00:00:00 2001 From: GaoKai Date: Wed, 2 May 2018 17:55:55 +0800 Subject: [PATCH 066/108] =?UTF-8?q?Lua=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Script/Core/Editor/Lua/LuaEditorWindow.cs | 6 +- .../Core/Editor/res/LuaLib/FrameWork.meta | 2 +- .../Editor/res/LuaLib/FrameWork/Data.meta | 2 +- .../FrameWork/Data/LuaDataHelper.txt.meta | 2 +- .../FrameWork/LuaFrameWorkEventName.txt.meta | 2 +- .../Editor/res/LuaLib/FrameWork/Status.meta | 2 +- .../Status/LuaStatusManager.txt.meta | 2 +- .../Status/LuaStatusMetaTable.txt.meta | 2 +- .../Core/Editor/res/LuaLib/FrameWork/UI.meta | 2 +- .../LuaLib/FrameWork/UI/LuaUIManager.txt.meta | 2 +- .../UI/LuaUIWindowMetatable.txt.meta | 2 +- .../Editor/res/LuaLib/FrameWork/Update.meta | 2 +- .../FrameWork/Update/LuaUpdate.txt.meta | 2 +- .../Editor/res/LuaLib/LuaDataHelper.txt.meta | 2 +- .../res/LuaLib/LuaEventDispatcher.txt.meta | 2 +- .../Editor/res/LuaLib/LuaFormatTools.txt.meta | 2 +- .../Editor/res/LuaLib/LuaPrintTable.txt.meta | 2 +- .../res/LuaLib/LuaStringHelper.txt.meta | 2 +- .../Script/Core/Editor/res/LuaLib/Unity.meta | 2 +- .../res/LuaLib/Unity/LuaUnityDefine.txt.meta | 2 +- .../Core/Editor/res/LuaLib/luaJson.txt.meta | 2 +- Assets/Script/Core/Lua/ToLua/Core/LuaState.cs | 28 ++++-- .../Core/Lua/ToLua/PluginsRes/Android.meta | 8 ++ .../Lua/ToLua/PluginsRes/Android/libs.meta | 8 ++ .../PluginsRes/Android/libs/armeabi-v7a.meta | 8 ++ .../libs/armeabi-v7a/libtolua.so.meta} | 36 ++----- .../ToLua/PluginsRes/Android/libs/x86.meta | 8 ++ .../libs/x86/libtolua.so.meta} | 38 +++----- .../Core/Lua/ToLua/PluginsRes/CString.dll | Bin 0 -> 94720 bytes .../Lua/ToLua/PluginsRes/CString.dll.meta | 30 ++++++ .../Core/Lua/ToLua/PluginsRes/Debugger.dll | Bin 7168 -> 7680 bytes .../Lua/ToLua/PluginsRes/Debugger.dll.meta | 4 +- .../Script/Core/Lua/ToLua/PluginsRes/iOS.meta | 8 ++ .../Lua/ToLua/PluginsRes/iOS/libtolua.a.meta | 89 ++++++++++++++++++ .../Lua/ToLua/PluginsRes/tolua.bundle.meta | 68 ++++++++++++- .../PluginsRes/tolua.bundle/Contents.meta | 2 +- .../tolua.bundle/Contents/Info.plist | 14 +-- .../tolua.bundle/Contents/Info.plist.meta | 2 +- .../tolua.bundle/Contents/MacOS.meta | 2 +- .../tolua.bundle/Contents/MacOS/tolua | Bin 809684 -> 816760 bytes .../tolua.bundle/Contents/MacOS/tolua.meta | 2 +- .../Script/Core/Lua/ToLua/PluginsRes/x86.meta | 2 - .../Core/Lua/ToLua/PluginsRes/x86/tolua.dll | Bin 993455 -> 0 bytes .../Core/Lua/ToLua/PluginsRes/x86/tolua.dllx | Bin 0 -> 1015230 bytes .../Lua/ToLua/PluginsRes/x86/tolua.dllx.meta | 9 ++ .../Core/Lua/ToLua/PluginsRes/x86_64.meta | 2 - .../Lua/ToLua/PluginsRes/x86_64/tolua.dll | Bin 987078 -> 0 bytes .../Lua/ToLua/PluginsRes/x86_64/tolua.dllx | Bin 0 -> 1030079 bytes .../ToLua/PluginsRes/x86_64/tolua.dllx.meta | 9 ++ Assets/Script/Core/Utils/FileTool.cs | 9 ++ 50 files changed, 330 insertions(+), 102 deletions(-) create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/Android.meta create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/Android/libs.meta create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/Android/libs/armeabi-v7a.meta rename Assets/Script/Core/Lua/ToLua/PluginsRes/{x86/tolua.dll.meta => Android/libs/armeabi-v7a/libtolua.so.meta} (73%) create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/Android/libs/x86.meta rename Assets/Script/Core/Lua/ToLua/PluginsRes/{x86_64/tolua.dll.meta => Android/libs/x86/libtolua.so.meta} (73%) create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/CString.dll create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/CString.dll.meta create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/iOS.meta create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/iOS/libtolua.a.meta delete mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/x86/tolua.dll create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/x86/tolua.dllx create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/x86/tolua.dllx.meta delete mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/x86_64/tolua.dll create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/x86_64/tolua.dllx create mode 100644 Assets/Script/Core/Lua/ToLua/PluginsRes/x86_64/tolua.dllx.meta diff --git a/Assets/Script/Core/Editor/Lua/LuaEditorWindow.cs b/Assets/Script/Core/Editor/Lua/LuaEditorWindow.cs index 77fab315..6ab0497e 100644 --- a/Assets/Script/Core/Editor/Lua/LuaEditorWindow.cs +++ b/Assets/Script/Core/Editor/Lua/LuaEditorWindow.cs @@ -14,7 +14,7 @@ public class LuaEditorWindow : EditorWindow List m_LuaLibFileList; Dictionary m_luaConfig; - [MenuItem("Window/Lua设置编辑器")] + [MenuItem("Window/Lua设置编辑器 &7")] public static void ShowWindow() { EditorWindow.GetWindow(typeof(LuaEditorWindow)); @@ -91,6 +91,10 @@ void InitLua() //拷贝LuaPlugins文件 FileTool.CopyDirectory(pluginsResPath, pluginsPath); + //修改文件名 dllx -> dll + FileTool.ChangeFileName(pluginsPath + "/x86/tolua.dllx", pluginsPath + "/x86/tolua.dll"); + FileTool.ChangeFileName(pluginsPath + "/x86_64/tolua.dllx", pluginsPath + "/x86_64/tolua.dll"); + //初始Warp ToLuaMenu.GenLuaAll(); diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork.meta index 871ffba4..05c0473b 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 552b1284d771184498d996ec56102798 +guid: ff2a2f1dce34c7e40a92a7783e430a28 folderAsset: yes timeCreated: 1484192362 licenseType: Pro diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data.meta index f5312594..8bca9178 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 40c36a044ef65324ea4c21345a9cee85 +guid: d780b84b98b09e04c8de87040cad363e folderAsset: yes timeCreated: 1484207744 licenseType: Pro diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data/LuaDataHelper.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data/LuaDataHelper.txt.meta index 66c4dd0d..1d23a0fd 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data/LuaDataHelper.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Data/LuaDataHelper.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3d07bea5ec4b5cf42b6a100d90ee3959 +guid: e44f100664822d64fb3c97199e39e2ce timeCreated: 1484128663 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/LuaFrameWorkEventName.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/LuaFrameWorkEventName.txt.meta index 9f4e1171..66c74707 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/LuaFrameWorkEventName.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/LuaFrameWorkEventName.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e4af1d457b5a24b4cb136b124422668d +guid: 4adb41b46c02b37488c49a683a97c9d3 timeCreated: 1484207614 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status.meta index 1c9d7136..88a8a52b 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f97c5ce3400010740bff3ee442acdc5b +guid: f6e5203268f3aa743a6639220ac4d987 folderAsset: yes timeCreated: 1484207744 licenseType: Pro diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusManager.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusManager.txt.meta index ae4a19a0..8e75b0db 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusManager.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusManager.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 33b6d89db1e4e9c44b363b2deaaf7122 +guid: b0411e9fd364e7b46a1ce54f656f7f88 timeCreated: 1483583261 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusMetaTable.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusMetaTable.txt.meta index c676d7cb..ff7f3f25 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusMetaTable.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Status/LuaStatusMetaTable.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 70724ee8c77a31a4497607374c49f106 +guid: 48f3961b8970ad84f84d39a8598c61a0 timeCreated: 1483584427 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI.meta index 9a13a14f..a01c9677 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3b636b62065a30b419b0a2d91f8665ed +guid: af8955bf1ad0c994bb8887e1b4c936bd folderAsset: yes timeCreated: 1484207743 licenseType: Pro diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIManager.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIManager.txt.meta index bbe9821a..319d3651 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIManager.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIManager.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a078db2707dfe63429485a726fc5bd23 +guid: 5e22bcf50d9d55a4abbab9b4a6dbeece timeCreated: 1483408582 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIWindowMetatable.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIWindowMetatable.txt.meta index 544fc573..bff36048 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIWindowMetatable.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/UI/LuaUIWindowMetatable.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c06f8ae202bc0c047b72f01540c13f98 +guid: 3e2abdb8dcdc74b448ffe39b60d542ff timeCreated: 1483408582 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update.meta index 5c83df62..b3e1a4d8 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 23f9c774450078342b22b9084ab7e36c +guid: 6b4884196e4d11d4ab0ef4c200f0f212 folderAsset: yes timeCreated: 1484207744 licenseType: Pro diff --git a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update/LuaUpdate.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update/LuaUpdate.txt.meta index 88aab4e3..d61885be 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update/LuaUpdate.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/FrameWork/Update/LuaUpdate.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 179c3d3fb12376d46ae8375f2534e4fb +guid: 2e54a1ea4d516b14483649476f908c99 timeCreated: 1484192777 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/LuaDataHelper.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/LuaDataHelper.txt.meta index d642f6bc..efa84af2 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/LuaDataHelper.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/LuaDataHelper.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 277c6a274e6bae0428bb2a4cd8f2beba +guid: 462a33f48cfbd5e4ea72a00e2bfbc02b timeCreated: 1484128663 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/LuaEventDispatcher.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/LuaEventDispatcher.txt.meta index 62ef26e6..a36daad0 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/LuaEventDispatcher.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/LuaEventDispatcher.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: bb1eaed66359b8c44bae8449af09399a +guid: d3a6cfb05c20cac46b9f8212cbbdd3a0 timeCreated: 1484192797 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/LuaFormatTools.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/LuaFormatTools.txt.meta index 92a5a979..bad3d932 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/LuaFormatTools.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/LuaFormatTools.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e43171af3aa65ab4bad57176870beed8 +guid: 91c832fd50f59c14c9591a063d32dc61 timeCreated: 1486691786 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/LuaPrintTable.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/LuaPrintTable.txt.meta index 395a16f3..13191f45 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/LuaPrintTable.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/LuaPrintTable.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8b32f9887abc3084190de94a5dc7116b +guid: 840e07686d9ea654793ca3cd47e9a384 timeCreated: 1483587801 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/LuaStringHelper.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/LuaStringHelper.txt.meta index 75715df5..665b6dda 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/LuaStringHelper.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/LuaStringHelper.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5e0fa0dae5a2d1d4982aaf5c88ad77cb +guid: 506d492ff00984f419fe79d4c84be7e0 timeCreated: 1486697665 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/Unity.meta b/Assets/Script/Core/Editor/res/LuaLib/Unity.meta index 45ecf0f3..bd89c01c 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/Unity.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/Unity.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8d5eb7c036dc1f54ea76bf0889953202 +guid: bbc24aef5b7a7bd4797ee8a344aaffaa folderAsset: yes timeCreated: 1486951508 licenseType: Pro diff --git a/Assets/Script/Core/Editor/res/LuaLib/Unity/LuaUnityDefine.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/Unity/LuaUnityDefine.txt.meta index a9a30639..c50a0ad9 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/Unity/LuaUnityDefine.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/Unity/LuaUnityDefine.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 768976c78abe63740933d37133c5c6de +guid: dfdce21bd5144154590676ba2634cdb3 timeCreated: 1486799727 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Editor/res/LuaLib/luaJson.txt.meta b/Assets/Script/Core/Editor/res/LuaLib/luaJson.txt.meta index c3d2ea72..80373766 100644 --- a/Assets/Script/Core/Editor/res/LuaLib/luaJson.txt.meta +++ b/Assets/Script/Core/Editor/res/LuaLib/luaJson.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 00d5d76703af5184c8d9892593fb29da +guid: 74a25163d3fedd6478bdd0e1c2e4cd57 timeCreated: 1484110323 licenseType: Pro TextScriptImporter: diff --git a/Assets/Script/Core/Lua/ToLua/Core/LuaState.cs b/Assets/Script/Core/Lua/ToLua/Core/LuaState.cs index 5e1ac79b..e1b202a6 100644 --- a/Assets/Script/Core/Lua/ToLua/Core/LuaState.cs +++ b/Assets/Script/Core/Lua/ToLua/Core/LuaState.cs @@ -312,13 +312,21 @@ public void EndModule() void BindTypeRef(int reference, Type t) { - metaMap.Add(t, reference); - typeMap.Add(reference, t); + try + { + metaMap.Add(t, reference); + typeMap.Add(reference, t); - if (t.IsGenericTypeDefinition) + if (t.IsGenericTypeDefinition) + { + genericSet.Add(t); + } + } + catch(Exception e) { - genericSet.Add(t); + Debug.LogError(reference + " " + t.FullName + " " + e.ToString()); } + } public Type GetClassType(int reference) @@ -409,9 +417,17 @@ public int BeginEnum(Type t) throw new LuaException("must call BeginModule first"); } - int reference = LuaDLL.tolua_beginenum(L, t.Name); + int reference = 0; + + reference = LuaDLL.tolua_beginenum(L, t.Name); RegFunction("__gc", Collect); - BindTypeRef(reference, t); + + if (!metaMap.ContainsKey(t)) + { + BindTypeRef(reference, t); + } + + return reference; } diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/Android.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/Android.meta new file mode 100644 index 00000000..d7ace473 --- /dev/null +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/Android.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 92d266e2db13e864bbb1db196b068b26 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/Android/libs.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/Android/libs.meta new file mode 100644 index 00000000..82a08a77 --- /dev/null +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/Android/libs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 64f1adc97052f1342ac21d1cc367d9f3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/Android/libs/armeabi-v7a.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/Android/libs/armeabi-v7a.meta new file mode 100644 index 00000000..43457317 --- /dev/null +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/Android/libs/armeabi-v7a.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 24c6550c8db68384f93a6c143335d6d6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/x86/tolua.dll.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/Android/libs/armeabi-v7a/libtolua.so.meta similarity index 73% rename from Assets/Script/Core/Lua/ToLua/PluginsRes/x86/tolua.dll.meta rename to Assets/Script/Core/Lua/ToLua/PluginsRes/Android/libs/armeabi-v7a/libtolua.so.meta index 1c850d14..be2c6c20 100644 --- a/Assets/Script/Core/Lua/ToLua/PluginsRes/x86/tolua.dll.meta +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/Android/libs/armeabi-v7a/libtolua.so.meta @@ -1,7 +1,5 @@ fileFormatVersion: 2 -guid: b1ead8f44f44f03489dbaace838ac272 -timeCreated: 1524378268 -licenseType: Pro +guid: 120af15bf85ced44b855e6913a31cac8 PluginImporter: externalObjects: {} serializedVersion: 2 @@ -11,23 +9,21 @@ PluginImporter: isOverridable: 0 platformData: - first: - '': Any + '': OSXIntel second: enabled: 0 settings: - Exclude Android: 1 - Exclude Editor: 1 - Exclude Linux: 1 - Exclude Linux64: 1 - Exclude LinuxUniversal: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 - Exclude iOS: 1 + CPU: AnyCPU - first: - Android: Android + '': OSXIntel64 second: enabled: 0 + settings: + CPU: AnyCPU + - first: + Android: Android + second: + enabled: 1 settings: CPU: ARMv7 - first: @@ -67,18 +63,6 @@ PluginImporter: enabled: 0 settings: CPU: x86_64 - - first: - Standalone: LinuxUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: AnyCPU - first: Standalone: Win second: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/Android/libs/x86.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/Android/libs/x86.meta new file mode 100644 index 00000000..b5cacf38 --- /dev/null +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/Android/libs/x86.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d3a079fd090114c40b00e4e7c1baea78 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/x86_64/tolua.dll.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/Android/libs/x86/libtolua.so.meta similarity index 73% rename from Assets/Script/Core/Lua/ToLua/PluginsRes/x86_64/tolua.dll.meta rename to Assets/Script/Core/Lua/ToLua/PluginsRes/Android/libs/x86/libtolua.so.meta index 61c9bd8d..934c34b1 100644 --- a/Assets/Script/Core/Lua/ToLua/PluginsRes/x86_64/tolua.dll.meta +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/Android/libs/x86/libtolua.so.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: a73477e3e361eb44c84a1acfb93c4e86 -timeCreated: 1524378268 +guid: 29c11b63798b2944ca5e0c26b3f9566e +timeCreated: 1471082297 licenseType: Pro PluginImporter: externalObjects: {} @@ -11,25 +11,23 @@ PluginImporter: isOverridable: 0 platformData: - first: - '': Any + '': OSXIntel second: enabled: 0 settings: - Exclude Android: 1 - Exclude Editor: 1 - Exclude Linux: 1 - Exclude Linux64: 1 - Exclude LinuxUniversal: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 - Exclude iOS: 1 + CPU: AnyCPU - first: - Android: Android + '': OSXIntel64 second: enabled: 0 settings: - CPU: ARMv7 + CPU: AnyCPU + - first: + Android: Android + second: + enabled: 1 + settings: + CPU: x86 - first: Any: second: @@ -67,18 +65,6 @@ PluginImporter: enabled: 0 settings: CPU: x86_64 - - first: - Standalone: LinuxUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: AnyCPU - first: Standalone: Win second: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/CString.dll b/Assets/Script/Core/Lua/ToLua/PluginsRes/CString.dll new file mode 100644 index 0000000000000000000000000000000000000000..9c67e2322680fb0a8f9804fd295a17c165901514 GIT binary patch literal 94720 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ⅈ4PYo#zFv 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 z zrt2oWPqRJ5dtC70otTr70<$!-68Yws$)~tk$_i$M4=ZRkpL}SZ@aR<~o7b3}&=zkA zAM|#;osaSL-k~*}X?OXqYgczy#3%_y`lNl>%Qr`Zr_%6=qF~la->#!ShAoq7u6j44 zb4Q`0fRG411;eOfIXPq%+ z;mXnNMX&f`dgt=q54kNkqUTt3Lhd&MJ#Fc9Nw2pn1H7jho0ZozKe`irY~-%pKX>mE zu@x4R{wgi5w-2YKwOLFKQ1w|AUA1-1qm?$VBFip@sXX6RJ|M=w$MLFo{GbuF-KV|` zd8?zR(kK0zuf{LH@wY{V;L-b!PX5@s>!H+*#YI}8;zy>&7OnHrH@1!%8SUHwlVWKU{Kai>iiU+L2p3hAePfWoQ#Of$v=NCezXOgYV0f{M;mVX!s$k@UK4& zP54dX+PqRs%^oz0R^8SN3(w3oNJ;Sg_1oNQrIzH4Z$CGeKR*%}f45I~mzs5x$i7}3 zF_-uYdMZ7Bh8OIMM`WeEI4YYFI>A!w#ta+NE|qOdV)yQ9>Rn-XwmnMhLeI0bh4+UU z`Ft-j%0DzF=T7m=x`voTPHWY|-!%HDxF7h)V;$4zGLG5+OIJ zjX%4nw14{0Dp|*nsQ$!*UA1Fpis*>zb)1k+*7cpdtlr*2&A)0*!J@@qzb@gXZt!n>FNM$m=sIf+-_(KTW!7d}xkdgT|uuAtpxx&beRu{BgZ? zooh+w?pQqyT9E?vEG?m^j1?*D_+Peq}J2U zOGK;u#4>`~E4+~r@IwkjL&96<(%gjDYsc8SW z))3w@)zSNN*!kY;Q77;GZvEu*HBVaUXJvC`o1cZl*Zn2?@7<5h?7h5mj%&AwRL@G` zBL(mE%)6VltyecKi@d8gVsx15dEtF7chgbLQ!@N^_NwoE-#M$^EZT7Id8oy! zBr751t6j0>%5j==*LRGHpEuF-sE~%geYQc1l%`wFA;*>1r+QpHI_1>!$fz^&jw79Z z&JuB%c~U6*%K_cIWCtzBRvmxeNr#u5yz5sJx^muG>9X-EUC)m%w1`%A>?od{A3J>B zNe!2$#qGM;(ryBlRD_O4Yu%R6t+uI_k|az43qnzF_uE%!-LF>~D(dR<#Ml<(Npi{lgos#CAX z%PG#1OEXwIbGm)Xbi7MuAgX}`o*MO{_Lc6`mGzPXD(dyKJf0>wEgR?G&U*ipDWS1!|jKI`Z1H26N*0{ zcD3DbQ#JI3MPbsH_`2}DqvWGCMNjuCh}sVK)SuroTR&-RnJIt&+N0tR6gJ89bxb$T zoc+V{cSGVj^VF2bDTz_9M@nkuYsn6)5H|G)@UkAgM`zRZN98-k|Y#jRfu=|b;v{7^YE7JO3CZf z%BBr*+HbZwCOT$BwtB?ui?c7L7OfOMxHNUCK}fT#x>)F$=%8gPp zKHR!>L8;q(&*Qi_pE(~k%jF9SR%Y$XTfX4X-~=gEzbEHRcqOJTsJ^s#gMi5v{_Y*k zxr0WE$h@CW;x$Z2*Q!x9{Pt+grExh6e(w_Zcp&;YMEg?B8D)c(Pu_vYT;{F3-dxdW zn|FN1S9hf!qZdf;Z7Xs3EPig9!o7&YEyk`flU>^ifAXCXSzAyQ{8i9duVdAL_BM^2 zfch8O_wTuT)VX;~>F#PiqjL3n==+Wm7pL``yBZrJ^0H?}?ss!*la)#4(I~!JWn(#M zfLrK>0}0!B?+IK8@30pYI4JMkTc4pXr#th`ud`;$r!P(3-L)v<@ssfq4&DNJs+W{a zGVjRwE?7Qqy?Nq{s&nVZ3Yj~c?2>Vl){M+_=&&lD=D{=daDAN1sFtdx!tbINM6Msm z3;tx_trw}|*ZzEEMF5Xqb#-xb=|`Cc2#5Al5p2 z|6r@4@R~`f>byJF^&VZMzgS@WhhH-;H&~^oFY!4kcRp^i@vXZKGu#E&uG_Ki@SY71 z!(Q7(&lCTW)pI9(_=(A_R^Jni`R&$L#(k6xkx6@}WM7f_dgy!gIfwR4tr*p~ILkyn zYL946(TB$6v&A#E%RkP2a&WTgxS9E0m-W_eQb_I`7uOJWVVJ~A#fj&8yvLZ_v{!Tc zULmo5TZZ%1k9((lwu^o4T;VWMGi_vX?w-R!9!A2UUh?=iSEh!o;|`mzQV3ghS8>|r zmRUV5N%qkLOAq+$eK+Q!&UJ~q3U!i8{UWFAo1Ja;pqgi+YN}&IX8M5c;gXhZ?_+ed z_)WJ}HSzf^k=Zo%K%QXr&E*&TJ7kx+Dn9nEt+%N!u*U6oTD>6|sVUp9| zt+g6z^~*HzQOAyvJHCa4!J*?^3JMu%TX4tpti&{XQS+31^Qx?$$KBE+^uEd3QJmN(>0 z#JNggLtnlJ{jU3UR##2T>@QUJdzCWDygztx^`wHVrv6t}%8OQ6<@Mi=n|rBchi`v^ z;4wLmd>h|OgQcfm4@jsAeRu#+txqZdtX{tk-zhbVur<1 zJDHbj?M=5%KUG_9yKbcD?zt!8_q`X=mpW!As@kL#Xl|RXKmUSPW7FuuhHP0I)jaW_ z^G-Iq=KC7Ic00XG?Cf~6+s#Gx88XV@yGlYbOs(er7K`{~8n(lt->^;N_yy6eeXFZ* zI-J4i-d8ClDR)O`qbFHr_dE$9nBUtHxzH+xBF9OHs7U9o;YK-7##9 ztazW^>{`Al|G$;*w0Qt5|qnf1uUzLc`y``Cw^gggX|2|iIctg&)MvmuePQ_#x+6itn-`F+VyWUW!9@lo#?EYYW3N5nEk6` zQ9D`+tH<2F68T0=K237h+5rz;Y>mvsItFItC9Q5UTyihASp3z6)i)20+Gu>+=hZen z(e8B#mH5w{`tLtPbuE0b@#sE{p&j{|->0j(kF3Xk?o6D2O)qi6C@%+og=I3TBITJf zv+6D9>+YOtm6G^4dy2jJ8VQ+vr;Udq-V7M5Gu>k#mfrOe-#KXQsHlCn1Gn4@ zyPx+?v2k!}&mq4$`&?fA?^Et)XKYVx*l*VTQF5HYd5wto&&(88xViT=7DXIB-`uSI zBTm@Dy`;qFv!G7wweX0_77brbJh`zpj}8w`edf{UG2k)eG2)rZGmXcB$CAeir=S=2 z_4jkG{f824ave=d(X29Tasy3nqFJ}FNjaL_MziiUmhHfcqZHZ-dpo4i4jw`kToY|?=y@6oIe*yJOcd_uE6W0Oua`GRJB#U|g-qzldJ z#wOp<`O}OX0 zWAS2>5op4PW{t!qqtIkDnl%QSj71ZEG)n-Rj6;+0XfgrKnutvV(L@N%62>MXXd;Sc ziD46QG?75FB(aGUnng55;jpr6BRT|6`QD`$s{yO9h+#N zi6)w*g-x{4LT4mIpTRM3W_GmKQehMiU=2%NLvYp~+G-%O9Hr zpvf{cD-fG3N0Sw3vJ%Z&g-uqYNf4S9j7`>{$yzjP9X1I;ll5rU25b_FCL7VLP1qz1 zO~TQv2y7CGCY#Z$E!ZRqO`_4P7;F-YCR@?0ZP;Wxn(RQ6I5cY~Hi<`*U1(MUHrb6P ziD=dyY_b?7R@?`P0pi94w{vVO)j8G9-4I#o8+U(B{b_Y zHYq@pLNx0NHYq}rt7uj+Ho1l-C1}=lY*LCQWoXt7Y;qG#ZlOsznspnS+(DBHH0v%l zsYH`1H0vHVsYa9gXx0O4@(@jG(5zZ)@(4}p(5!lF(tsw7XjT(8d5k7c(5$D}MJW_`jYpV6cf z&H92(zM{!DG^-1nbfd|4H0uX8`H3dK(5xP8@*7Qh(X2jfg8b*@?|)DK=N0$NiY)H= z6AAYWiDWRE#Xa#N;hsO7aL*FX8jel4r(h)9b3U^8u*pa?8HHwz#wOgeK@#o>%~|}| zL;y{=Co5--$0ifdWFnfyJ)a~ILK9&$O9Y$X0V+I%dvFQi9>~Gs9*9A>2T>3yG)o$r z;6X7wL>A5B9*{z~2a^!)fgmhJY{ESVgD9g}D%b=M(%~U^fDI3edw>j4M-%RWDJ<@R zB}5BNxCe-^bg+pon&_cf`q%^y2Eupj{=z+whh>CKCZmZlnwX$j+=F8X_rMlnhGv;# zlc{Jj4b8H^CYESog=Se}6B{&{j%LlkCbnoY6U~~1O=hEs9hzm2O&ri<4w^L=o6JKK zM>NX`o6JX(1!&@oX1QRKg=n$}&2q&ii_ydl&2q;k9%$l;W-Y-cUTETtX8B+fUo`PU zvzB5Le>4d|vzB3#Kr~s7X05;`E74>Xnzb661ffYVnyf*y)?$-&XcB^Et;Z%C&?FSi z+K5dyp-C8;6^>0J&?FMg+Kf%Mph*;(6^%_|&?FYk+KNrKp~-eMYX>%oLzA6oRy;P@ zg(eAT)^2Q)h$ef`WG|YPgiZFLNiv$XADg70$pJL$AT~)wlQc9d9h)3NlMFN~6Pp}H zlPomr2sSy2CdbgMfQh;U^Vv{RqQiNt*#U{mQat+NY!6w(yq!i66!zMS-zpP3qC40nKW}CQWGa7|nWu zO`f93Gc@ZtHfcta7BuSxHhGCAuh6X5*rXLr+R&_aZ1M(8-lEAnG^+!fyhoD{Xx2w; z@(E2oqgkEUmfq2atgiW|(6UY!WYbZ9su>?E>rzdbHE&PE)4Y-31{(;jIxDyoq;KOTzlMuMm z5dJX=O-7^17&MD}Vt&GpCIV>IIBYT=O(vjOIMRVT*5MC9ye2|umM}IEK@(9li#xZ0 zh@%M(px_Rn_=hB#NTG=|nk9oxWYI(pP2|x8cY!}Q`#`)N1cPA+425AZ9C%?Y@Ph!1 zgYhr{CW0UcfiOscG{}G~$bmd4fFdY?GH8MpXoC*uf*$CD0T_Z2n8Q?<1{PomR$vV_ zFdb%q1I&TBFb^ET3FgBBa0VCf08dx~Uf>Nr;0u1R6#QWotcD;6hBdGj)^kOcc68TLa89Dx7n-)nf{(t6>N`ruOX;yVp|_>RIT ze3ra*FQaqX5-9c)g)F7$BQbVMMN)3}5F2yS~LW)m{N3);%V*fw(GT_hsLg=rn zf%z=l=_!A1<4EQwk=)Pzb(=Y74&WI-=+FG~!}vkmJzzd=J9qqOh1+o+ZdZH!ea;=P z?QnbB|9QLO!JqIu;y%t_AB$d_{rT0u?!N>7ZhFPtX9nP-a);Ym-Rr=B!@q5qlw$_um9=d zcH{2nB6!aMxc730=`P3T=8jzF?o-^08otu#*SO<%SKwY{hu7TOaW9T|uUWX~d7=&R z)i~gv&ufXd2*&+_yFC9oc$a%0i+{VE-0i@=-+a7Z5Z?3eLx=J9TKMjU=0CX4GZLSN zyN3Qc$e24UJCM0l|NimSanIxq*X6z@`SE_-(bRr_-h=xcufp$#yM%uD%HqC;{`=>o z@c(NU-`Az?pX>79-~KHq)o|J*h3zX17kfT{oh literal 0 HcmV?d00001 diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/CString.dll.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/CString.dll.meta new file mode 100644 index 00000000..13142f11 --- /dev/null +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/CString.dll.meta @@ -0,0 +1,30 @@ +fileFormatVersion: 2 +guid: 71e6a1c7aca592f44bc0bcc41ea7bd94 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/Debugger.dll b/Assets/Script/Core/Lua/ToLua/PluginsRes/Debugger.dll index 6a16ba282a58741ff834766efa8260b35b54dd4f..7c7cf8871efbf279ff773293e867aa09d8670815 100644 GIT binary patch literal 7680 zcmeHLeQX@X6@Rn4cfOp-VLM+=FnIIHVLONIBm@Tt{tPj35+}ApfTYRZ-TJ)bZui)| z3o&ghBR&e0qC!L|R8bKEl~M?*TG9&9N=URt6;vvPswk>Z)ATciQt0o^?tM53 zRQ;#4QpdhG^Ly{jn>TOX%sJV1Y`pIM(;#l*M7(FxVmBr7A zp;s1dnVf6jH;^nk(cXmX zxhWv&TQ?d!(MJ5LN;kYuxMtRYBKt~v@nc)3INVLt3+{~aD#sOteN!kzuVZ2EI-5vH z?!Qmwv}^PkbVL98=JXfOL2DXqtvTwq;g&W(+S)Y5%y0v_sPpkTMA7(Mkgtaq?2Lw+ z)1AMXU)#E1inVJRL>xg1Mra|M4=eE%khgRy&iSb0m~yz~B1MhI%V?dVYVixoa6Mos-crV_ z+*(G2IBIk;;)wXypXN&&6k8YhzRZcQ1d93|g&WW04fa8mHxgC6k+8~}va<9>qEGZC z@v*+lKa(#FGklS#;){e;zLb@vFA}jY1Esh)7h-UkqKbnfGAh?B8Z22jE?t|kWZ@~! z=S9-7u)k!m#Wsgfb5W~os=m>VlI5ywINh{TWje@)CCYrK6P;VOD5|px4Hp|CFIy|H z@^a51U2xJ+{SKBtMJnrj zz_o`J*`cM^->9taGpKju%3cwiVpvex-8O{EjZo8U|IS!?#n@m!cx}LYG5pfrtdj)h0w}K9tSCQxhE?WaCiHzVs)cEz!t_Uyj*EJ24i%snrn|-M zYM5FTre{g|l%x}q-X!T`Qs+jo1{T&!`ZLLyRBs07gkU-(E)0d~TbixLNP$~ndV_4( zd{ANfkjnIB^=++z{zS(hjSJ?~Nq#LfW3(H+8t9jhHqa84>A9g}at?ff^V|g8gh{=O z_U1BrN6iAM*zGroI$EYNs-Z>nHE0dU^{K%H#^~qJB*=8B`6OhlxtQwdsJ27Y(~m*t z(*pGx(DmwC#Pv;eH~3v-fWAnk*f!lvmKfGyhVE(nhnf|Fj!1MLeM8*?pI!^lw}BM; zKq6mLrT)d}M)%O;S_}NGUBc)-TBKU=y|;|gSjVkplow&zT}JywgtBFHP}I`r%IH>c zHr*AVlZu5|y;??Tj%yj^#TU(xlxm7e#V}Ops&+}+k8Knua zD5Jd4>4q}eFP6}4Wpq$1r~At2R&fD68lVT%yF@Gft&Hv!Z8Xg3jkp|D?-vQWIzaDh zhXhV6SzZb)QtJpuOMp%)b%e7bK*u4&ff1m;X!8h%LVy;jkBc>w4{VZnQd~@r1Zb{! zMs(5B0n)|&VjaCCk-vU?!wdSgq(zn6npUBYOFnZHNJ@Oats>jc#L=)u75+q(&Hqko zCzOh}e!ENh-$iwGN)V0nt%aV(mOyGVZX8ErzQP~q;FG9U5?Y~1+|5^ zeIeSHht}eZ;L(3em*R9iOuy4MfO8am4^u?jg!Ywq!aq#Mlue-9i0Lj+=8w@I=%?DX zXvft}uy8r;K|6|3-oyS*gL6c)=>A}=Co~%)KA{yP{j8)nL-VAPCLwO8yU{+5UeD7c zT?qOB=o@rMyBBBBDtP!JM*J#hO=uG+`y9cU_5{U%_=b2Jvpt_~rX$!twUW-E@1cDT zy$rgPj)At~)J|ZZdv}s=J>hg}viVEiu!lMX^D(^C%{|H57rwPcLlhHn`vj#L4$T-RVOz)>C(+kx|lWB)8?L?dwRzPhx!M$?-?1qW`J^D%5k$+ zlDs4hyJk<8-+%`Da%t+x=S@3J8MClw#7sFsbF-DrTAq)GiU!6o-Ekvj`g#Q;wQtmA zIB=kVx-e4Vu%XSS=NTE3azX7sEc6zwY}$1DjMRilds4FMb8HX2`B`GrNM=pyHwxyc zl{2ZpWX!e-lLL0fvP~LtGNY4u2$=Mwt}j}yNh6b9!OSK49JH@614})2db^o54bP;} z3D-2zaIavcdI}gPSu8-aXr(J?%-(Oh*0{yv_u-wpBI!4i#Y~3z6<(i{+hKXu3|^1t znYm=V>J|l0WkTsMlH7cjkSV1OK z$y&)*8p!3*flH{J&tnzu8Y*7e)RiPc>u{b^Xg1y|h~9ht&S#JIo!Io1*X$qI-~9Yz zr0OIzU5H2sq<$VZV@wo@d$bxQ5&@3IGy;KkOsx?SB^(QpA|jDcjZ!}b8P$(L#zq>p z#Uzd3w2yEnCZdT6_ld=t!lZ&W)sV&&AeiSi!E6j&d>v`Rh-o#V!H9h4#$7uWu72wd z4NoI@?8c=s{cu7|-x8!qDG1dImMAeRi&)--ZF=eQXw!pp=`wyp#9y1l_=+b`~#Cq|XJk$qMkmT=@ENwABA z8a_9sgcUX1(1_nQ{0t?`0TCQE839m^09PCVfe3^UqK4fPH0+kZV9;R1YIGIBuQ$O& zJV0X&hQ^mGuGt7GqVxDgYgCzkm22d;ICgo*;=XWh@C5V_JCxbzP~L_Vk{5JTP-xV_ ztw^*$P(%3y)Q=w4_0IMVyt7^)XqmazyeQRWj<4)8Rwq}kUY$y=Om?KYR*t7ub##t* zu3eQ%!@^mDYC8OA$^k)2-*?%ACX6_Zhx=)~9&R7$A9=UqgLy{}{dMbYBaIVl4o~bNNnW=rxE9OIL_VD?4f{V`|Bycv1m#U`>m@X^ zE`7uGxqI;3(4Wn2HZ0qJLNZNx0kHI=<*-pVvv)NTQi#u+)74yl`r|dhnQ|JR_4wQI z&TgV*RnKEpaZlWtwB78Zvh?z-Qa(9r|)XN|ImNB6+U-nyh&WL*v_j?({vIi&DM3cekD%Q#<8<@8mD&Rc%4^?NoHrqn@M(e zHZ!x0-5;r23Z!ZT1VpO}QQE41Dg=V6h!!aYMHK={p+u+>FEtfXOMalzUm%cLzH?`1 zb~g@1{Gk=%?#_4bdE9f)J@?!@kFk5dL@E(!xIXxR=tb0A1|)ts%t0K#!2MSW;rS}!OK^Xc7@jJH;7K6rQpN@uG@oJ$2EY9s7bb!z;9--|FX;h!RMmVz-L*N|JAxeG7CkA z-F@5`Ae!SqTw9J4eFD5cbrG$)R`y}EPPDK_z7X{88anA)Gd}2>3eTq}Nql0_#v zo^(Ce1SNeNK!Yc`99K;lfcHt)$~#bGU+Fk5wzU#hO&K8CSwqU^B*ztneN(7`e$+;k zh!Y9P{m)@Zr$*1B8~QivjEU7)!vtp8*touh5?InkXBptu^)93(2XjFik`@0_a$}98 zp{`GBjbu?(lEB0p^>n_0hG;kq$_@W$FVD=JT~LTyu2jg3~wevl0bJ)&88O+;~=kW#!%>GX z3$=<1OA=U+#>T*r*p2m0Ai-*!kW|$PN!B+m%@1yYoAc0vd&r38B=73_M~?^ zG=nxabb8NDQQ57$_wVaYb|yD<_I3C1^cyG-JdZQ9?JUvXQ2!i*wxxa7F6KPec;$xR zTx&a!rYmUkQQ3C)fsrB9e*wJ(L$~eBI~i6+0VxhmDTLid^moz2XAxpU*c9@p#{MKM zEN#IBKY8x*xMCe{hcym7mD`vKeNDWl#;8qUd{*M1_@=sqn&E4VY_T2un8NsuY(Fa7 zDTzlV&Po0OaTz+T62C1uNmbWk^r~RoAYK5DYa5{R5;2}p7$;Q5j5@8w=@)bfBdTJ9 z8mEhB$LT$VId4KUPS0qUq{s4hf|&?J*Jd)XS36XazkD-OV%w)TmWbCCHe% zS@!z|WMiOKBR+2{9b!2tY6|Tc^$yWY&r^@sKi5iqVq8Zjxc(*Ut31qk?g8+7HNO9V)J+OIkB0(SfSpf^P-QwUZMU$r^Oa}UQ&T) zTVX}elWG+ok2ne>AwOuVaz_RFwH%GGF)MZyTJy2D_Nr3#HfZxhhoBy6YEmlE__Nfh z#n&Q^LUGIy&xp_$^aM@??i=7Dx`1<}8Q6eb#_cu0My%citl?IPgAzw1?w5E(q9M@+ zE~C@3JuC4M;7aT`w)ULFpGth1Tx~se@-u2XPLMk(DX|xvOG-O%Cozrze?^D1ZS))L z(tdi2UeQwY1pPtTh4zTHN8-4|LlTcc^D;EA(kz`s`<&WO-$iQ|@KNAfbeC4dSbtR- zfaf(Ho#)Fa@RYff9>PiW5+bq?y+4n8&S&V$B8egK5>L_l;CPf!Olk8$`U)(+A|3@^QFs(m8M7*Lv{&GA~*mItt&Sl+12B4%7v+_AzkOMeWTHT9*iZMeBk0(3ES(_Lduww$;6X>9QD zv7HA-Mu&zcj-^NL9j1b3I&R+1ke8v6R3S@)rIJ<5QqJ;^r7hE`G{@|G-u41|v}}wN zeaoFTOe@gy4fE8b%jEEkkJ?XHIc#Xm@;oDFQK3=?ci5d}JD;`OlwqE*=$I+1A;Y&O z?Se%Iinc#HT+G=;i$wy$|)SQJ-d!K z=y_Hllb@Zm{aV$C?HXCDV7RBMRuCbp=-E!O$_ll2*?H@r<<<+a2xS+s7`NPl?bXY| zjwz=&ZRg4^=6XH5LzZW{cBx*7*_7X`m~LCPu3x_0hFjcDA! zo9&?M8nf3^FO-a8jbNf&^s&*`cFHgmA&WPV5|6LK z(=Kq;0@Anw3FghK)CGd|1D!Z*!pisWKYFmW_sSz0pWHA+H1}ju%spIL-f&j6kxqup zYV@Q0@6f}8xkIlU3ETPI1-}kGRnGfm*VFYB# znVU9uZSCo`I=5_HCMK1p^eMXpOE~SYx=3@O#1u8wvJ}^p663kY;~W5v-Olf>;TgdleF01*qU{YCr$TdoP zono}9a9BHMJOMpK4`nerM4N~jJZTiK`qhgqhESX*SkBrHWA$>Xr0w( zZ8o=B(;K%My_t=@y=G=(rpw&AaoX(Z>YncI>oKziz5@wb&=rJJj>iywV`C3iVMGlN zwHiLiOr(d>*_P!Gk6jdBwfdSS6n1EM+fm=imyL}%+dmpQTWvU*lSeD}qKKI+ zWivd~|4iA<51N&d;kF)9^>z3iE#Mx*O?xPxA2aM?@cdy}@=#{!2kT)Yc!jJt@iCx; zbPV6y=IWgZzA)hZXda*ScH=rcK(r3~B`oXIUNjFvCkLElmI%gJ6m^Ag@wIC43{lL&O? z^K`sB>G*ZSk1oRDg=c(@Th&gmLRr`?z^+Spj^W{C*(v?qR~ds>i2V&$n< BuildMachineOSBuild - 15E65 + 16E195 CFBundleDevelopmentRegion English CFBundleExecutable @@ -47,18 +47,18 @@ DTCompiler com.apple.compilers.llvm.clang.1_0 DTPlatformBuild - 7D175 + 8E2002 DTPlatformVersion GM DTSDKBuild - 15E60 + 16E185 DTSDKName - macosx10.11 + macosx10.12 DTXcode - 0730 + 0832 DTXcodeBuild - 7D175 + 8E2002 NSHumanReadableCopyright - Copyright © 2013 xlcw games. All rights reserved. + Copyright © 2014 topameng. All rights reserved. diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/Info.plist.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/Info.plist.meta index d033fb5f..eaddd4c8 100644 --- a/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/Info.plist.meta +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/Info.plist.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 3eb443420c63d2d46a75047fb50f3c2c -timeCreated: 1524378253 +timeCreated: 1497605580 licenseType: Pro DefaultImporter: externalObjects: {} diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/MacOS.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/MacOS.meta index 0e237a5f..01bf6c44 100644 --- a/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/MacOS.meta +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/MacOS.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 8cdad410a276f5d4a8d0ce9468cf30a4 folderAsset: yes -timeCreated: 1524378253 +timeCreated: 1497605580 licenseType: Pro DefaultImporter: externalObjects: {} diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/MacOS/tolua b/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/MacOS/tolua index 847e2efe12f42194644b941fd86e82a2db5c9821..68e08048ff5f07014a394f0848813fca9785c8f8 100644 GIT binary patch literal 816760 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̅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

KO5S;hepZX!RGn0GNM zqr`y4-Jg^WF`_>QYEcwne~0vhZx;1YJkSy9Qsd zf6cCb(TRA9^~Yxg-QhL6hD4j!>>3{Jv9-(7(jQLk4cqb6H9xnX(>Yml{2|%CsqG32 zCZsy!AexzP$VaiJaB-6MTL;Vrz0{-^I z?=U`F{qzgzAmi*rev6u2r(V#fW>>rD*qUAKV}*D{jhjsR#@C=pZH}H!?T%<`B!9AI zL7Qyf1axmN*~GHmB0ei;Ynz%~r$zUz*>!sCARUQq-E)nMweS`iN#pijxE%wxK22!o z6->=4OciVtui9>X1FnE6LVZ#GzGLpBz`XNsao{{JeM7 z=kZOGZC}1-o3@K*%0%7V+{B}|j7MqM6aDvjPu)_Q?dudn7bthkgw)uUruIhlC5^|u zTclZzV^-{kty%pSWye>}Te)f8&b_O?k*C+^?aZEudA_XJCoS6L+)`FA7mWc*6JYkilgSyT5No!Y*yv6ITd zZ~T-}v^iU6Bx9TK{uqd)=BW>>F@J(sPVH2fnv8D>*^i;#KJal-T;5?Jsu~pLWk|lH z8oxhjiM+)UXeNBeZqHhSyo~ph$f0R!QHbU&zb-WlL5i(9`A}jTM04r;`AZXfN{dFu=EV&gHpI7o|MAK% zn$7XTs$deX5Lg9neO7;I7{_}^+lISAd3#_x&HA^(Pj%@UwB;qffv0J`+H)< zDxDTR$xe$V7hHQV-XCEn7XRn|ErLSjTyDzc?v&_`JDW zeX%x+^0zF!xCMr^iRO}L$Jj3_adB(-oV;`v{4)jZgwd%5csXQr>PGmLI;%l!kfSI? zImufuEQZSkZQyb&%F~=?GIqxs9!-sD)VQ^$XsAWlJ0Zu|gN9gyMqAZL-r6_A-X30i z-)1v_4tR~J;__uoR+=D3!sXO`q0{qe(Lt+%j4Mp-r8M=Y!qlVMCqc{2szhpu0+YHE z`9AZe90*^s;L8st=$wMoUk@=sB7wJ`A^o;%wV5?_dyZBdUQdp+p8Umlk}J+mM6U)3 z>UM@N7MbU>X}MqkF#$NjHG!Fc+h6r%AW}v6iw`a(o=Sl!EYj|=Lm{~eT^p&QTm_^*cqM#z9?IISXu!M) zfKm{?U0qAX3BMvof%s+vVP|)Xse=fd!&M+w#vo=Cg;MV{s;x}mrfUX~NeJ{(o6B}k zN63}t+;~&&lr=UYmAhvKYSYSoKZ&|06ZM<+EL9(gH@)n(i@1{t#Ldu*z~gFQ7}BGi zR3K)-ERFPIYx^VpSb%@^6oM3>-%->=H828?^RVK;RQMN(s9F!V*cPH}ePB3#eHN@Z zstCA#H}zV981k0vwTMz4z(*P&oKs&tmvZSt@mt_h4^GLCR1ti23!#jG_s+mBJy1$z zt1hBafid_k=}{72SaQ89Qbjcvh!;T_?lKtv%cbJVTmlXJ-YTOXrXx@IPU;@XK2!OF zQwuPid{+}Q6Z<^D=?43}z<8UmE;nKMl4YM3iZ^3μa|SX00fzvF%-$l+PcJ=9ih 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 z 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

BgB}si7dBb?L8Cl|>|L7^ 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�Y%Cehyi{xcjrK7p&lNV`Lw2c3tDzXJVCo z)7s*GlIk$4ga-3#|723fxwxVhQ~Xr3=?>B=NvC@MiK?4Yy~k%QM-!e5t_bIhTMS2d zjAc1wU^_^>fO=?B$SuZ>inU#MR{WzCG$-l*m+L<2$zF-&hwxOu?^#LmCLBt1hUPxH zX?w?r;?V4UoA%$JwyuzLjw+Q_eZo?{)#r$m6WbAtl*X zVA~<~ZC7@v%B5DG#iMze#?QU35X@hkdfbR>`qb$+TmE)? zr)|3$w|x0q)MIh#L01dy;f8JN z9X{=cZc(Gr@wF&CNL~b{eNwyMlJ~iGAy1vv>uCSC|KtO^%U#h_Fk;?zf?`@HZOWkh zefggw40dDH^4woT^fb*2&W8=)XX*^{N<1{-{rGfx-n7{x@>4%$LMqdW(?eWGAIVuWGr6(-O}=F9 z)p{l!f9JIbXxa2|DVcSF1wo`=I&5Otwf})I9m#*kX03`e=XLXFtHy1XB`j6RSuP7E z&F)Ls=XS|`-=<`28f8EGm&t(#?*lrJbVQ5Dr|JV&16g6)47V~lHEX<=QLYu3EtpQs zlNj2?m-7A77HjBiN3R+jev))D4c+NV^ubbnn#^_?t`Au(Ouyb**r#ZmDGs^PQC3va zgLTR{ix3DeH1k-0{O#oI+}nk(ub(^NEeVMati5b1OSeRsH$U~)f#?Pn+2PjhF--;* zU!9eBVty*_h~k8|u0I*xm$Mi=fxA=%zVVmA7J9nd4a%EurBUanzI28voED%1Hg9{j zpgSwA9-1i~KHgf!@&9ZS4)T_`x3o@kQ?~X*g7Lm!)MK3vsul zef17788xw?fW(#OU1Z(;BQhti|8!o->@J~a!fvBP_aPdj8bbq5q!WEy;KCe7bvU?e zS3Pd(S?8uQV~vE7-nX5~gXsPRQIz?Aud}5U2A>OjX%INp8@OGV?k=E`;4_zNmqgEy zMT=YsiEYAU`%+>{rBM)86Xv;#O_RLj-tX?gwacA=-2Te2#G@QsK3!_3FT(?TU6yIC zw$g^~c6TiuasT`=g-X??z3iKGv4p%Zl!>yrzN>+}fd)%7Jf>2W;-h`Y1p?XLyBnW{+ki+`e{y@KS8x@X){aUD6SKmJIvvrrn^t}gAFQKYqJ(ig-qMd73L znB9aFs3iYL1-nQ3ov6H1|J|=se@+M!@A{l=vblxw)GiS^#*~knD5rJ&v1b$hAh{o2 zsmiND4uwDS4Iu;g{!=$Uvhp`leq!|8(SGtBx=rhkjx<^N={}>MRcPIvK!5QRD0nE2 zv03lj+npej9OWjOukKh33Og-x>bu$2mew+F{F`F-!PpEEP0Z4q!Rwvg0w4$Q{gfQu8c^sLpR4gfRLxmlKgn`>re$X%lwEIju@1 zhEgmw(2gn8A7s5nEzvixL25D7`RTkQalhumb)T#42pe9dI6ZfK?ed>n$Rjj*w>GHI z%u7Zx_*K8{=f^eu*PX z8Td$SgoD+nl>@EQ4Mr+1qRu`M?wCF(t9vjV(tVt%w34BTa}LJ`Z+K8ytCLbET<)_! zv=O}v0(SI&1EbB<<*5{P2ylHi-7b7uSMFo7sn!oO96-%t-;eNIw|gqF+|V(S^+(F( z{|53>?@>E`r*4sZgjQF9bOz1efHIE_JpN0RY^I-<+degSNXAYS_R5sJxuItY&GWA<4v%RVZS1C|IJjmh14chTMaiz zA$i%bj$t=+p=$srdcF4I9X?qs?&z8|_B%nV)rp}S`D>fNmI)*|fW0r``adC6%@6PGSE zKO-C3{5EU)#932#)sd!7w!W{o3sQp^fxKRr$hwz4_IRl)iCSIK~&7CeNYXN9L8rZcm&sb^kp$LzxsI(b&OLfxz@&^&F-;_kDc zju{Fn|Bb{AJt}$p3Z84@nM!xVZ`-(kH#)Pp&9L@fg`iRQGRR2Uo@?Zp+zwvnoOhU4 zhwo)*dK2cox4t1c`|z7nIfQi;N3n8ZpN2xstL(niIKY1pSuw0=R%Xhkx8gVSh!)&1 zh7*u$-^*D)GCAe29pusja%`(j4kE=IyQENh*q7pVoU1*XN5RvKBcpBfda}y{4JpmS zxaPUJOx*J?!m-<07Y#{e6Jg@!MA4^*qBm2Dmn}k(8dO;Aq^y_z6j`ZS6o$H&1Y<0QVy>w*0Vm{Eo0U6ZWTBI!LG6 zYI8fd8=*4w`}x-1%p$+s8M?DGINR8-#Pf(caq|e3cqk=q-~M;)oBCpJUOqne7VLCw z$|2;D<2iz2o2<6y?#d`u23BZYn7SnPrC#PR6!*F8g9N1x0#Cf_E|^g4;}f@-%SG2> zXR}^Ze~jqn$Wlg!WF*MLAAW*gQ-V8Pf*rsmyC>dXrzA&D+-z<>=lLei%8hf%(N~T~ zm!uoSuimact1lV(NX$~fUr&{|d|p?Dee9x_YX+Y zLoc(OYW<^S#Ev;B`e)ocD~|S2!-{fz!cunRKpD)%okQ)7|HB}@WD3{6Z!mJ7@Slel=L`0l{le$0QWg<&kK5z`~3FD-q?u*1F3r1 zO{frRY*bv~BmEAxQZwh7$-LGuF=x$q4l#V17(LHttUyn51sTrXuokXnaF?(>_Rjk~ z-N(x-L!Y=UpSY;By~&ulm`gF_-HXnZ%94wC+Sl1wvj>c0oaUz7!7vLNb0k4&OwQWG zhH?h$o#W$!lDS-CNJXvj`-lIV&fAf+aV>7Lj1Nd=1*v8rTNRiFUNcG_)Zw{Vs(k1B z?QaiUb3*ogpPxs8d;XFv?&a)4`XQ;Wy0AL)^IZGe$H$*e7Pmh%ta~pygJPmEnKYyN z%g9fz$t&WQJEuA(*qP>dU?8G`F;h`H0;sRrdjkaD&MD&n!Lb6kN^v+!HDUy%xjDmR z$YM@S+{+m|b__F{M5N#uJ1(XA7!SMPkvM+mOglg9$ZMJ!OVOdUm@A)RB5*ei0!nGn z-303*YIhzF2lu|A&0!p0o>wQUI{rKF$Q10FxPT(46S}gVvxf=Y1{=$xx4ekM=rxB} z(7X7MB)i9Jux%T1P_^j@MoFRx?%Vfa)0`Gk54 z1&i0O^<0m!7xuG581)Y%P9m6u-9DXa+o$K{+6it+x@o~xgA$Q4*GXLovE$m`J}!Q| z5C=IG6z$l!bt7?;EE8?o9pms7Jp}d#>1EEcGg_y?CFn@eX+e26WE_yq)a&nu?Zcba4V=Q!YLdKsOEzw(r2@~;;8|CnV-MwW;BW|`6UZDhx3dHB{2NOthYr^h~(+)d|0I1drqPey9Qqb*3Nc6VyN>`^S#B88#+v z-X?4WlTidr>EExxVDIK2jG^;D-Xj2~ITw{1FHh!5hF_eUoPRhmZ`RJKl|nu6rh6zB zvw`G=i6ui6WcFe7WLA{Z{h~;!Q&IB$q8zX5fqN2vMU?NOIy23%e*m*0_pQgc^PwYW z1CgcKeES9?Dahy(cE*R&m72Cp&5ddzojJ-!JINjWZgLSvql_K>J~kBT@T00%MYwPm zkIGksOSZrDXQtzw&ke|4oZIo)RN~`0CtQ_NxCaR;kK=Zlai*VB}YrUxv5E3cqi}m?qg?qf#51Ju7msSE=VlN zNzThXSC^a&>1aETOt1FlFX7Jadh+alGThbdgP2vx{+?n8boY0x&5|MR^QN?E#zX6M zAoNlGxj9_;y>rSiv68fJ`*tzV1vL7`>yrm z72OTVnR)=7pH*7v`c2*Y`m`XqW_stVgS#)gpW8{iv(`-Sp4$1$;N)DE`x1K!9|%qR zQ)0=K347L@t2p0X@qSO+4IlGjpGeM}GI8eg)h~B{G`U7^t+RuD&BDaYh0G&aCQPqE zqp0%E#ju^$n~Ir@S%BGqNnm{W*4?YQAxdG>bH)rpu|$Vwe14f@k4sN~!O=8P?!$-( zOdY51$y91UYDu1JUu_Ju_Y7EH)?a4YTkX=Ak$dipA)QACG;EhbW)__$ z@CZW@#RtrwyAXBnNGB0?w5_VPeN&55?;Ws|`Ur;psC4=xsF>-H=I13&(o@z`oVv~Q zO-P`S6{uKVVw&@IHBU>VPE0$;FD-JfX)KV@q$Hs3$Y>QRbx#R6`=f(F!x+A!t#_=O zEBFIO7VOg&tua<}gd6ue<{Z{RwoVRJokbkxPR!U3L-C;eQm71&LWOZ|8iiozIcVt5 zMk+KQ2Gu1mAGmRU>`YWi7l-cbnegZJ=eu5zQmOn4xrw12ZGWj^PIWpVPED@Mo3JE* z{YR72zd(!RCI%*Fjz~`5_TEv~qbu#8tmTwd3hW^r997{8*UD536o8u!kpv@#wGO(gfuK0+1amjn9}y+$v!4=z4qPbND`J^ds zN|r%nw3CWJ12KzpnS1N;(Os)QioIubJ)T>>dK0U`tmm;bU9=~(g`#P#p=0@8Hl&dv zCz@X?l~|I;yq#@v*(8B;88h%JKfiQ~+e$||y0T;0!c*)tg=wU--kQKtBi_Gw<^@}Q{Pc682M758)3Yz~Th z(wsvFw9FddAY}2tl)PT5=s2L?c0;MqjNH(Y-_t^mThl$ZI)dN7FN64WNnK5$<~(Dq z_Lyt6vQ+AxY4WFCtm)KdC%6_YRav%-aAn~Ld0qug%X`*EPp)372+z=vkI|5icVE&k z$+|vC(jmCs#N&0=dh888OlNRkgP{!&3-4;(TM#QL zIxXfSfLbl@^Kad#%X$5lYvMV!Up%qlu)YR z3TtS1#RdAX<*G)OIN1^L-DUD;8~+MCc-BdJ`_%Rz)5MdpFt-b$Z0J6NE&2p;0uK@C zLKUq0Q+&LPFtO?GK}kx=R{iW66^Ho~Q(tx{Z*jS?U!%mLg_HJ*n7f90M8=bY9a|a{ z)V(0ZCFNgDwOpLJG$%D;pg5r)*iYh$L7jTyhgoP`W@oQ$Q`L9uN>NUElp2uHbd(1*t-Jrki{!St`2@g?t8S1miZmayuol zRIiYz@bkmWUy?&@pGr>0uV&E_OGqj=^{vYlRa*-ts3Y3zR%t(kzI?)UQTm~+Q#v{t ziPrINKc$kD^X4necVMaAZX?Bam!=2$-d8Nma3-h&H!Vy%Vm};u)BIaexZm2+Y*1vU7v^&I-kH! zZ67lU{l71oe~`{)X(E_8J+!N(Y;PJRdbqdXG418W>r97{bk3(-{et^%U7KJ1zRoc0 z2pUpbg6vht309^&yV=$?N{aOd8ihGTX8ZX8qRhG!H{ZDY zlHAOP%rf83+JpsEywrg*#E@dY6a#N?d;^omdHVS7Gd`-#=srPDjNa~k_uE70IF2ZNduWvB-6Lzlt~HdH{8zXr9m}$_KtdgZ z`ZT3A{3VxD$qcWXxv@n9k7v^1375H%(x(Xsm!7@TD^d{!%Ul`6k{uOBEUCU!-FEpQ z%P2fULfY-?59NB?z#o6JW5dHNCb9d+4MB*0>I{>0bg?bmKs2SoMz9Ju!V1ThuH#5O zc9lv((|r4B+B}xeO34sbG-GV+bv>#z_tXvf z)85nz-RKWqs2b+KP(}0p#TvWkJnpQAA^W+0hPJuFJyJC+{`0qdKwv?Xb$?`m8| zLCjMuz1*wcTaudLh_&Cb$Gar$-u|`;MZA*{+IR*i+ig8VKYj0j-!ourpqQgs+#3rf zQS?4HmTdbDL^rWXuN~MG5Y`k$EJdns?fHd{O|NLYx4f5_a(L&IBa~k=%>^6;*jor4 zLVoG6H%T~(!YAs;dN)Mk<@1$>Er5MjQAqCT>|gCADPqGYmZV;>5bP4;Qu3eMSiIB4 zap{TrqF=L^ue+zXh`2h3g_hLE-3Z({!%mn}2u?28o2GwuNR_lVBGRvt^gh%OMY-s& zE$W({+z#IQV^K;B+wE-d@du&c&DdD6iRDlYoe>5rD(qf{=wNBXRI+6DO`(p;ti(sR z=FUU_cqXI0eTA+B3eGFqfpTk#uRGe}lXO$|pr0*OHPe;5$i#rWpmKrgCJ4-aV5w;I zZqWqAduWIVQJS=JGvQEnNR@0aeA{lJpSMH}HqepI#N?hC+Q{37v9_c`DS)JmHT*XVAjqF2iM<2;vCjHl)BuBmz1OM5Q$_><%-ixOr_DJ_OZ2B zJ6gr?df$?T+YL zxZg8yA;r$;eZ~CyK4QKZn`q?OXRbpO%facCDqz#y`I#|y5L0^H(*wS};AthULmKI) zR)&kYXNq8H+Q>Qa%bf_+v86vpqr9OS>o-^`iM>d?2n@6whLvl2no`Ne)N!SA~Y|h`5f=q1cN&G_OB37a0 zh>p!;qr^faQSfeZ?$~_)Lf?muS;Ni&Za@5{XchEiTGBmzl#`!yL~NT*V03jremgc7 z^roaH9;nWGk@ib&)@3ru;Vu>B6DL*9rNqbWv?7Uk%lk_69xRPTPyAJm%6)m$U&xmg zn(kHlKAG?GeZajL6Pw?DV>hH#SU#e;OFoj{zO6|RSqt9 zK6wvWMp@khw|-eUTJJM~>S7wKDUv8}fHk-|hIc!_Pa1AW$1l{Z!Vter+WvDuZv%cD zuFEw**PDcQoQm~O+pm-dOBAG3o2W?%ScB2G%TbCUUX;`Q!A zzXK?Q3Pu^{60Unhx?eiJay~7=oH3P8y?&`qaL-S>lJao7Py6aC0 zlolXBWi_;2JQBm^OxZre@$}R2VujB= zaK~=&!~R#EDB<0Kv{b4M+@)vi=kNUHm363W=O3j z%wssRNouHstURA>C9`@Jpn)3Vvw8)XA}&bP2$2}f>{K{~Yw6fm4o)o46W?dM0UJmN ze!ZoS>ew=#5-^ER?QF0H)D*!TH``Lp7ba*2|KL6xN>5I-CWfrZYR6E!v6mj72g zoL(QTef7+3t*CxhS0*>-$LMutw`u-gMwC3^Ll^HLuRDb<{9+vZhX?B(&PJby@Z z*oH2_n+A=MWBzMiDeT-dXzArU<^{oWKR8&2h|?q7E!IXDnY_N8%PqL=}#?nM5@3lV({iRUiiMHoMzY^lMy*m&BdSNWD?cGqkNP)PN z^5yp5gc6PUd7Y^tBM%X1kfsPZ-JjUGMFrHXuM54Bh(%8Ob0OA*^OD2zJ6}FI@!QT9 zk4yZn^R?{6F5*&{5s61TUmdjJS)vRt*}vg!xfvvA2*16%WyLS1jC?U4w)JH_ru&k4 zZHg^qT){{lx$%#Ue1?!0%VOuwPqVAJtK0*BU7sC`gzx^*$sMGLdIoa>o z@LU_=i9ecB&?-ayf+BMYDI`Z>&S@>+_3`m#peZC*?)YRXM_)UB@Mt zAbSgL(9Xo$gZ`d) z4WA){Qi&ad9!SRWFHC&pFg=0a_=~5;WA(Aw7tf3|#rd6+q~AiD{*9uOe-1tc8#zw6 zM(X3={Js6}Lqc1w0ZwlG(F?hh{ZP*{J2$^VQo@CEdcbeMjj#+DyBJ^#BEZFdg&|i7P7@q-q6}SsMf>dfuS3}!|(RL z6XRvQ^^lmC4>{3RbGhnIbDKxosefUYFUzw4azPZf-mbGT=F zd1y-wgPBenPM}_lpiF+*Kccv=lD}&PwOnr-cIl=~_d%V}`@#8rqL1IE-^b6sdjwvb z9f}QZfA_d}@!g-~XTo~f#ig%!LBqw?CV`!sg)`*tb?Kaz`*50lP%kKW`@6ZZliT0T ziG8yD-2w44T@Xv>WCshoy9Ya1=;m^A$RM;h-Tcz|EFd3f@H27SO0?knz}yfxHR`=F9K3{2Nd*DAHY8wzdF{&m+LLgS1!UUG~yRrs#|wQ#DWvT$*& zjDJXf=&hv4xE&I8#T%rb2h-uKZGM;j*&7Yc>UG_j{?M;&zM1~e8$&_5HexYkhA}p@ zucd#JP$RFq!~(=Yh`v=&yLJzAz6$6nc9KgmXW*K1jX%Ikazg*POG74l3TMBT@}1wU zCzfp2Nc`IN_U$Kihun{^Ztuw1qy|V>R<3Q8bo>3vdU)&Au=@MeIcJ4#JPCzb$L4RE z05VwiSN^sNF{FMtRb&C{hi3*oY)yl}<=4*jfBL6&1p89_uZAp>_}Q^}%~45z+$BAi zq}gZv-}L4$Fjvd>ADI1&sd0>-%y6steVF*g#QhVl%x#3bir>G&Rk||zErNbK?wyz@ z-}ZrfA7;MD_dhdspC|k$GF-tY_@*!eRyh5B2~$s8{qAq{UEjWo8+_ApwBYM~fBg>p zf-r%5A@LMWCh)u2PfOnfE3V++d!`%2O;Z2B|9(I0KH73SM!y9I-!onL2jK$$AT7Bv zenK@foAEu0yYN=vd zh~3yqYs$gh2fJ`%2j33DeoJ8+37ZNf2Y~4Nb_;rmvLD#D?^T6;x-0&P>xL`#(|q}w zT8dl+OY`K&a6eJN)V>GyckX-k&5ijIXxnJ=XUJeTg?i-am-p@2|GF&_Rr-8tcXK?ti`7!rXz5R4ISuEZ6$i9auz#b}g<4%03%znjG z_LQ#;FRIh&S0};G%<4S+^eY74zJJGo{X{4y!ZtxTpIg2c9~xw|l^W{Rf`(BQFhF z1V54^!O8otXPI}ygBnqq-aU|G!_4M_vKCi{?$QQZ9w}*KC**Uy1K@Ssp4T zJn`IyH~8k=vx%66uXEq}hEDw+^mykpd4sqlx@r4g_2$LC9Ii{xxpGHc==A9@)@xuP z>C$c6#)R4k!P1VlPhJI=VrD(uH~Fa^gtd&Y0^R&}NOFDtXc%Y#qcvLF% zBfrFME7?0}7gs&}eL(w@l4pyf@tqb1P1_Tl@0?!pM9Ciu|9Hw1i6fmyPA}P6(plJf z%1%N{GuFP}TR)T36Ym01wBq#>N*);W`}m2PkG9QP!lhuWny?*u-zi5b=b0yqGO2v3 ziOOL@>Qr7*`Ru@**(wrQ=O*50_jQ};R$zM1WNkQ!52Fq8oTezTFZAQzZRk-Z@#B$K zTW58bZ+O@L*)yPZLifdfaSL~9cj{O!SyxR8pCIu1GbTJ1A9Od}azn}QyK~>#Z{_;h zTklTTdHukh167v9E>O!U7+m}3{!;sQe?^=g${E%xLW#N(m=dF_e+ee;2EsO;~dvRBEd zr{|2{C0;$_05vAz-l}%BX3yvjS+z@kJLt90#`6gpy6aJ<`ZhKP?P~WAho?ImK>dv} zB=M&WDA#FWir%)f19WY>d%~{Pvl5SWrcMmqwadPrPIJAVmB+|EdqZc|l=pkOzD%9) zVgyG=Cm!$YI+1=-qwZFtc3-#QeJP&ejrN!#skA?nm9;C;*ZNvykTr z?ru@z9MS`8C*M%&3Uh<{M&qAsy~55ZiMO8kOUZs|p?4%YpLjL#y0Uwzhp&SU`o%hR zYWF~h1SRWyInOC32JH#m^?=+{PAxz<8p9sG^3#a zB+F++gf(enzNV+^~IR8A=R97217i z##hcx4(y)5s7d7{-a&&^@&L3Goa(s!3%YX%>`5(Ra>}Sr-&?%s6z5-xe|p>=tGxM? zH{9Nn8ynT$lM^drM8=`gLp9^y*iK_o-q5D&0P403?fNz@Pjpn|@Huv^eQJ}}Kps{= z)~57BGyABVJ_>DA zg7i~p(+>d>?}qN0<5jf3pR?w~>@WRH3ay^!P$di?UP0)tdUN@CbHY zBGe_Om0XTeKPMe?Tc4O5d*!G{EI(i6PDk%hh9M4tbZrpyZZae1+xo@N$Tzk$5$c}r zaN=!@eu7U}|$`+@lpvs^%7EtwKblwvU7g#9IL6v&Of+euF@u|_~$$g8b zSYQ}J(0&URahFN(_1$4gD$lCieW0VVhXb~u8((2Os7>hUF3u(N1pY%I5AxIMWZ-v^ z?>7z?T=@)@mAS!pBUJU5z%sw~UCrjF0?U;7?i~Dr{?EkcrBJ3~8h14P+h+_GXbe_r z4A!YvFKvG(XU!lUHi;y5j@V`)Ms&}$ zeCzt+JNb7P`33UJ)6GM;AeI|{`aZPpZ=)wcr*6A~63R$Mdk-^&!mGCZ%?0@NHwZbo z;8IS`?Cs-j^0-xCN9go6f_umKUYGPjcWw9Otz&#odOLc@^Mb{so<}DR$sm3i zq;cq#SM11a54wEFO^7C>o74VIc8pWs$HlWZXYJUUMUkd>`X0I~Bfua9$f?_swWBVP zwPTyUlViX5eC4C!Q=W1}8zxJH8m@AQuAL#eHrl5}6sNcRK0P|EFFm3^`p`!z;kTD@ zQz|e-4P%HIGFo+I_8nhgym>t@ZO)>3uOz%Dl}CSL@m0ZNB_MTM&r8&m_P=t+w*GPT z+u~ETV?~D-6Mah-vhp$G9=m-Yk~wSK-tJFlf9b|5CGwnKeH%aG50m@02l(8leZc3w zzmL^^>9#nREGA+u!$>|s#Jj1M&RR&v#q#s!!qwJ%+*nVoov~$t_L<4eHQfYerhP8WuzpQTZjqhkMd&?CUlpCU}cC9 zOuD@pB98Ld(FCIOJTLwcx{DmeJuV1+X-6!(E-_&1K0i;rO*OdS2t z@d0Pk_&5~mbR*;g#@JEi`OxvA)UModtg)u?V(l5DEwy?FZosOB*@zkCM9A!$H%Rx< z^K7z=YZ!C3C3a-Jn|S=B*J;f;Ui@_gEAwaa>g1pP->>`!-zWcr@27qEck9BSZqq2} z3e1g|pgbSeUr2N`_nUjuJ@(JGcijgxxa+^S_V)JRF>&CZ?LS9v-=ci#!DG|B|9k%x z(toFXNdNWyesur!{eE=+_5FTy|MmI)PxK$`_a;`I8SJ@+n1um9+FWn_chi8(_T2hl z_z~#mnejKfC-Y@n#_ytjzfbG;duZR^#^uueH=ewvV-{jE^E2_F4vKWF0ZnpYQ(ye9i5L zuj$`DzNUZs_?rIh<7@EyUxlxO`r&KuZ-=kFza75z{&x79{{1h)*FpX8HT~Pi*Ys~6 zU(>&Rd<}m8e}%7uz}G<^g0FqQAC0elzaNdSeZL=#uYJD%3-GnLAHJr4`}msv?c;0u zw~w#E?|&7(mh{8d-ro*idw)B8?fvcWHU0Zvgs&z2@HPG0$Jg|4A79hIeS8gm|9^$A zCE#nxhu~}9??>Zn-|t7`Yv1oj<7=PqABeAkiWA8zr)2l$Tz@;?Hdvd@|Mg(@VBL6h zoPB-B^IQnN=lmpVb5=fcYyA=5=GG=kxT&pXh1z`3^PC?r;HjBzX8sv*FGoJszJQ)* zKR`ZHc`f`$)AF?C_3Vz&j}9Fpj&>CUdC3*OY=6aFbW(+IUd;Iiwo{jNY>^^P`^`GG zY_A4lduK%sy0*J^=@$yi@%(au^OD~xMwe2WFeky4aeO|N&$eZ6%Xq#i`dg^#Y-4Fz za`J?yL+$@YQ97>4Yk%=jN6!DSAlB2qUB~#8XX<#xW)o^?;}Js5>6m_hPNJ*uZSG1X zCHDK}c8~R=PO_*SGjo*16h901)YBX`!;_?xtnNuqlJZjH6{aXD?M9mwjV+IgyBdFM zfJwJ-??+3r42^HjuPKKYDm~IMvuD$hc!bFU#T(u+{rGG}d3*r7N4Liobj;1p>U`^I z)*WWPr!BGDxo@I8f4Iu2+9X)M))Dh=&47mE6CBO5^4!Lk#H3qvrq%69PQ9aI{!P{) zETpFl`6<0#r)|4>G?NX=TTv)-apN~h2z@1o`EDJ>c{G zIc(WIF*)@;)nIlOl^!^A!p`VR?JN>jbzO)@&&cwYZ0t(27n;4)>}6(OWp=IE^=3Dk z-C}mk?6qdEH@nU3jb?8(`)0GZnf)cRziRe3%)Zs^+syvH*|(eh6SMCy`);%EGkd$) z51PHp>_^Og%`7)%F?+h%v&=3xyVC51W-m2+nb}vFU2Ar|*^Oqm zm>n~Ft=a3%ZZmtM*;~!N+3am*f645xn*9y4Z#DZiv%hcl?PmYP>^sc9+wA+y-fs4T zX74il5wjmN`wwRCHTx;EpE3Idvr}fjV)h}k51W0&?Dx#}qSpRqa|0E9F~saVvxk{I z-0Tr%ht1A6yTI(xW*3`1-s}s_o@DkEv!|Oq%j|NqE6rYL_ENK#nSGVnwPx3w-Dq}; z*)g-%n!VoaHnTUHz18fS&E97Am(2dE+21hxRiz5|>6PB{)WvA1cS z>UD8!vZtQKBd?3IGClQDEOl|xp{IVDphpDF6ZC+fYC&3auGh+9*N+6G)4i!1dH3epLe`o{%vt!hvGK|x%U*Hhmuh+7(a>faXh zl%V6Gh+V%I^hrUx1f3)3enArj-63ecpdSiq5Ok}c8wGtu(B}l*Ea*Q3-6-gGL2Cuw zBdAHxZv^SZ;QBuZ`m~^KL6w4z2$~`2c>1qvlAx0XjT4kFs6fy-L8l24GwT{AXpW%4 zf@%eMf?|T+WNT!7QqU`cz9#57LH{Laub^KFdQ{LK1U)E7n~b~e74*8Gp9s>TP1k=3 zIuV}N^$kHI1$|M_MS`{pk`T~!y`U=u#ROd~=xRZ2g02$u6+w#y{ZLT3p!)?)6SQB@ zg@TRle#2-+^_Q9*YKdP>mkf?gK%9YOC1`l_Ho1A#s#XtGTNyr4aT&Jpw{L19793p!cQ8-j)i(gwe-0fGtz z9pSK6{d7UE3aS?Lf}quco)o0*mR*kt`i`K71pQdheS+>2^fN)f7xaBW&k4Fk&=Emj z67-Q=pqm7pA*fAIv7pt0rU+^jv{cXvK}~{|3fe5FLeQ55O&9b%K^F7WA^9v4V7kL;Ykye-cz7=n+9z3VJ}$ zT0wUU`l6s83Hr96+XVeW(ANd&p~S9jg8nFIv!E9Rtrzq+K~X_D$nstFf<_3sQqZ}A z77Cgu=u$zK37R5knV|Cp#RQEO)F$XmK^=mI3;MdCp@M!WC`Zseg5G%>XqTWvg7yh| z3Fy@Fc(u2pp{Y8$F5DW6HZ-mDF22NDQC%CZk5t!2qF%fyvbH5s6N}V_BTcp5$kvO( zBU{4_P2rYkq^5aQOG6`HYU<-n*LXF}wUKbFxj9@LiL_W6@-d*HDHd5tYD&1Kxv4c) z-4yf4FJ2S#TB>WVAscgA8?KAUpK@4At@X{(m}jx0)s10&4v(x2H?)QutD__sj@4H; zg&P}IHN?Wrb$s%w8yi+Ot%@|o{BTXpv2b;`rFjj32{DeuRuiT+T-O|3RZXmxSVMDD zc+|+6QC@9ztlDpdjNDbDRn<-F!qG@;yfN15`7y7mDIOJWibQH#l|eMJx}iDVYDJ_r zbq!4ot@SjGUl|%qse3_ot)s&A)ve*C=5SrZS_MxJ5Rn5_LUTY*) z)f8W~A`-1~T@{Tt#Tr&c#@1Zj+T1j@ zu7xgGT~y6JyJ&C!d(YZ~a>n)>Q!HMkIMrTOAb zwc+L{QRtq!g2M2M_{t(LUfc2+Qg1Sh`KJ^QV&w5qUr!Jg2 zbN%5hbSY7q1hDHa~>UT>d5^btp6%pLp zTyu@VAZMgub;R@Cx@hw%vIK!;#hTT8b^1XYss9z%hww|M2%Jt4SZ&xGk122fHZ(hs6Mn_Rl}%`L4&!>2c| zWBK{X6Yi)C@H=J}tIuz4qFW+D7w;UdY6lf$#>+Y%;^5PYH4U+P=!bq+#~SGVFc=Dk z)D_ix8mxT-E?6?Pva)P?)%3ZGrj?gLsbY-w6;UHsk;b|)u}EtyTvu&Ws9gyd1qEBN7ORoAs-qX2Q|-Ia=0;CtU(vdzx`oK~k+oiN$++{zf9m`T zE}T%kqNX-dm*FvWTIuw%86GsG-fL;_>fH^ zX@v%Pt7{^mD|9q2dfDpPIIHyn)P|%t zHLqz3yB>wMG*mZ!rlzrhuo}Mh(}uFfU96e}G+Yd*ZEA%Ew!$}TXo#Xms#kfnE2G$c zy0kC|OI(eEhNik^H912*7|L?Zn;>a_`$#k>cr}FBQ34xC3KFJO!jx=vxTd;ExU?b? zUeOG?HPPsX0TkmJMx+;Mgrdk|pouEfRm%fH>eWH6j3Q_VHqiq$)s3Fw3yt_5jkH9n zHG*UDXpNLZqcEq|QC?$YEn~Pb4Ba&LCbrZ_S5ivH(DWlU9>^dmqx`=P!~ ze=*#vuBnN%Fuoh;M4!!gjSa+SAk@cWwIDD81}Knju4@oZKp%Jmtza?<7~(ayL{=6x zMb@;`890VGl!5-oe+)wqyhcjVFE|sKK^y!a#@Bn34}6v1iiVXM6AhAg;%omI25rTt z@dz!}JZI|Csf(79AsCLW!CzI?8ef48`NpnoSdATTT7}(6l_i-;s4$VouYtzgDv-z; zKthuj_(;S^qeL{`2uc`<2>SuRtcDnaKCEw+DijdRLH=qAucQUBUE-dFFf=u2QZ?u+ ztd7)NBM&5-D`o@o1}XW(8<~q!6AQE;e~dv6}1Z=w*3jepZ=d5^usJ zSnL(dMe3@J6p|Zl(3@LtBYbF(8L+r?>clC|=<5&c6>I--Vv$}$tNkcwDO9nWT$v>C ztU~Z~4dS(=n;@f54Xp^MnQ^VT8f%VO0}1NUx=1wQwUlJEj5UDsNq79zrgackT5?5m z?KN>|0a(pIlD=2d$0xzBvD7hBg75vobV_9#ltH9~90Gi$C{QQaCTC?6ee0jUZN z)jvFlpTgu1NPtEta0xghYgJwqi^|LY&++K9e;hB}e&9N!f;oiai;##F>QtI=jKm2B zp7oz6*Nq-Hs1U_*1x9fg5xG@!jOq-cVzU8-gSE2{jTiWtBW&tq#8U63cv5l7}l(86kL3@Tx~=U6`)xOYkU1>a0g z?eil*hLOeN8clQxdp4mzM;d{GCMt+*6%H3bsU7T%nXFH)JAu6!Q)idc6e8M&$Py+P zNDO|}gs$-dL_x@2)dEX1+U_CPXfp0JC$MHjq*&bKM|BW<(NGwc+f0?=RRt7rZJ~3< zIJmkI;RlJf1wDHWbHzrcx+`f>cxwxSi8L1=CQ_-oghq_FwBWPW1%iZLvm#Qjjz;D~ zebLM2Gd=}Ei7ysYw^%j2vxxxH_2pE5N*)eGtg}iq_9a$YR!F{$wA@+aj^ztA zK7YK#ALdwT{XkV!$(~9cGYM5DVI%x0QCJ0=B6xxa+ zjoAnZk1EWV{-lGX%dnj9L2f>+qad1hWK7!vA{a2DbPOL8$p*b94HF*aT5^;(=G^dE z#p!U)H(cOmwUoZDv3eyuD#$tbj`ojIo3<}fi8BL7JMp%IU`)>}$*Y zlxk7LXJqLAJSxK=Sl-w=4v4OI<+-qtUk z)9LrAyLp*j$<3ZewvG-nywQ7ji=5VJGy;zF^B&|k4m#TM0qnZ5v9J$c=<_Mw?^{h{ zHRNri7_ZUl0Hc~$Tn&;iQd?2b8fG%#Za}3JEvmVwSMfZ`GeX`=g%Oeh>>M3l$t)X& zUR6GK>h$v2(>(Q0HM8qRl)TUUo^F!f|aIA*4ms|us#usKKPqziY!P7Z|vZS zgD)9;#^5oMo9a+|ShJK(cdda~6^$sg{Umt=%!s5&Cxg?6h&v-&X-&T|FA96evuO8f zd~I(-#HlqPCd{a7CnABMS_rRejz`1g@#?UtSQ;BqD8qC|`CU=u=Q_$sFDL^Mj}+e< zJjfPa#E$!gy+X40a&K&JB9g^T`my+qgn5?)Nie;4Y7eLQ4y%^pAxIEXnwTW7#Rr(b z|MQ~3gM>C79dAN3Kdd;JG2l4q@ZQ9U-o&hl+-l%LKp3u#H!#H(T@9knk>oufkPZBL;++USf{sh`n3XazphPb?a>= zeFW_@+sd_dMxlD=G#628)7VN^QA?jpc8BZ8Pz@gb=zEmKfiwbN3f=hla)r^tX!n*Bsvi_q@kP!ed=IB>MpOp9wr zt3%{rO8N9`gjKgXrj210h*bnu2UNY)bgWomb4{~Jx`E0)GvRcB40R-vp~Es|1qIhn z!TpNvIDzNrKZ!MHZ-4J5=8~SRaC+m4N{WiTs>NmV7tEep;RQrHT#}ydd(#%pyePaV zEgIHE&{c#>FI_OV!p2m?%6QaKlVdc)vN*y{v1d++bH+L6Jm-ve&ZnGnzH=_{maXuX z#k^%r?l(W`929Ym`^9`o375EpOI*SwE@4(=?VC%u#3fup!isRAb0#>a+BsyRZ#B-T zb&kugg#6C*mW}n6Ei>;6>X=k8%M+48>nf@%gmSZ+>Yy}DXt!)d1q@=A-_RNv4J)i+ z_F&T?e`UawBWdqOb`%(D(C9*qGcR&;=I}KUbVJI?D5^hY5ZXHttA9>#S>xW;HS;N=iVY62Dwj8F&Ida9H>S@HIB%0v*H4I9jRar(**k2|QoGxKszdEEz zX(fHhMJ?#3#R!MxN$XOr+WP@i^BJ~6FEQPAFKGD&vJmWXVCRJts)$r*M%V|Dp3+M% zl1|Qg&f2jo*adI zpJ&jXrUUb*`5p`_YTG1XYS%MlYlNW zTMc1A1*)l;WeXQoE}m+@%<{R@9JFw%7R48oE%d#BTqpqdt)gs65U6~HH+A}SZ^5Ez z-ke3{-t^gv$#J?@Id_S-sDe8+<}UQg%PPFmxfP{T7kZb@sr1U`dFAr-Xz7J!k*-%d z6?O7L^koLjC(HR2-i*2P%jeFmlv_E!tkPQ;co3s}HnB^~=PoESd(r$dZ}HUmQ|He_ zw?>ou>(5faf{jc*S?ku4FK9@s*o0g%80=ob**8+>f*loE(_DqLM2e)dy8pydnA{V@BAs!tyPu4^wom_GU(6h?9#o))q={znFPKGp|DUZZF+oF%|;G zfb*%Pi9fYo1zIQ4@WYP_+t~niYv`4Kn;ilvTAId z!lW6NA&yr>20>a#UCm(vYQh^9x}irzx=c%k2)JTqT8JFOZa0R2mPz0y=oLZZV7pr{ zN7cMr!s%#=l`aFx65h%jiK0_rwi-@j{zV|}+E}Gj&2#G(u4(p4wdJZc(`R;T#^;$@ zQeN0x&SG$NbOBSSi09yi&GyN8RcHp^sEuv3oV1*_7A7HF?W;{z`VhDQy1)S&VthAO zO&^C&qgt5lOXR)uqC^enr*x4f3r2g>Q}iOp3loR}$%SmJ@CKjgu?UTdW@Y$H@66>M z1AT#$de18=9uuu8fnl3WZ+&a)E!u9#bXD^Ruk{-CooKOLLtQKMrZ9k;xD5yHdkpJqn64mHXZM0cM zBq0o|r*1Q-OCCEOFlwgA< zdV}EMQS7^c6{eR;8S0FObh$hkyU^aF5asGTD-87r;*KTtM*!;|QtD|~Og{S~&b>#sCwWQfhJ z>sGB`SDpz_;GkE%iY+y9+h*%ps32W#$qM1M?3Y@@Sb(8u%Ti%RwSrx4Y4Xsw7s3Ug zsx2%!8KSot3cXPm)8rJt0o+KJzCb8oSjTFfVB2uz!;F>|A6yw}5;1R%raw_QAEt}g z8VYejOfj7cWmv(0xW@Alz-_%tH#GTWP<(IB>^Ws&v8eOBTJ3R!NJeO_Yg_ogCd%f^ zCV9o1@X$}UVR7cH*_U2cKBrTivetug3QazZZT8Kl ziur)s1AaLXIC((nLXWSoWbHId%GA)pF}uDVH1UDK%Opk7#5ivOF9fSQT;D$`7CHi1%0`xRwa6iww{k zfgeExsRe9q!NvlO@xk<@{iZ1qoSN9@2~X6n^~SKJD2hu+HVatC!*XqRXy>z zOG2|RZ1qRIqX?~@%QbVM-q@uYW)v7|9Lh-_py28THW}M4RfH6`Q_xMrw3Ak})RFu& zF&#We`(+0Y@)k5TdZ>FmHo$tKc4_jifoeX+%G`OA@Fji2OtPJ`JjoQOJkorlfersL z^zyQ)f*jC=%^qO5H)D2r**R>%X77(Rmi7rD;ju&k9gf6SBMN0AzSuC_RRS{Fb8Yu! z`feu_Ol6PokXBh+nBL+9l56i)3s4&QjWw=1^#bD;hJ_-)5-M<6z{9k1AZZaw+d|>3 z(9}Y3Y*mXDL0eTAZerzDCdn`^zPAP)y`ng+e_HFy9JsdzmPXKt@)vn<3EHQ0H_&x- z8dSm#jHsbS>DZcVcn&WkqGS#!-1XJO9n*1X)b^5_X4`Gf-XfbY);84D+58}~mW`Is zS0+hz%0ffeEg-8WY|t@@u$jcF7Mn<%LuazfydJD4t#z!CG@*1}r?uHN`n^t8Lu)Nt zAf;kKTgD<0W6c!Z1ZKQ5^5HA!HQA12M9r8&un-Rts*Da}GiC@rUl%T*#zR83cDFM1 z(#xuuBGzHn_c(M>-C(PNvaeaKl~U$rYu9l?z~o$&jH$!Q>gWosBGxur!>_C{a-}JU z{kFM>EXPbqWi4B;L~+@tv&Qzj2!MFWq0PWPpJ}dj!CZD)D$%M#r1lI314l{dQf<4n z2GR^h{8Me-QVqTfkcT!MJ30_>UEBQ=S;=G-89ksx7DO^l8f`Kug2;H9t%W6L89f_W z3z1aK;C;dP^;MQZGHzf-GQ@Bzh9j2rgWo2jf{j7`T2#O9;AMD}?du%n4Wi82)z^ot z1>?Y`Qf>;ZJq3*RUShAAW#3q)q}H(!U)?HB%3(3(=C9TVdx5CG^?WZ0XJRO%bj(+K z#+t;V>5y2w7153TkH&2cmx9K~h#j!!Uaxd1(j-Ua@YCLD1t_?nKFQF=dCS{$Hb zHLXW^29czbg?yS*XY?`m-UYbeZ*J1kBxuyAgMmh+S>X+Wr1z>o;i+?mRN^#wZlagw z6&E{7J_W8AT|t`}IrQs9Wvm}sy~?Q-vrAD5G||+4@1Qvn`jw-q>On3!5EFKH5}Z@pLFM zIwl$$tCjQ>adtm4!yL;&2{ajXEETX}&B0DAbhxqLt9Xic<*bV=jkWc^VF4o?^XZ-Z# zqr8gCdcOsJ=JxfU^7$$9ZQEGn=c`{XUrx(Gw-|az879txG-!J-S>to@9(!y}bgbCxvjAQz)5Jk<=m7~Lzi%Q4LZ)gtZ56;(de^!8`*^ON4zUwawwP!%K?7rKmPr6?xJ8a*hM9 zS)n18U&nsA!?cLp&?XCYzw&ij2E6!ivTDXT}`nlO& z1!gH`1*Q?R8q=f~M$x^9<%?%wf#?nB3xQ z?<1HIn6oj(n2RveF%_7lm=%~t%xX*<<|fRSFt=d7kNFwqKFmXy$1qP~UckJHIf5Bb zLjPk<#)L8FV8&x6V`gCw;|W7r4ja4*V4Fkl@b6 z&BNVwzUQ5adk8m-JL&?@%g4PEw-EQ=af@&t#SQ+hV zQ^^BUk7>kQi&>3P8Lq?KfZ2q(3G*e)e_(!yxf8P;^Bc?~n8z^(FfU`?!3><1?R^yU z=6T>S?lqVgW<6#T=4OoQ_C?&UV!nmB9rIJnJ(%apz@4W&E89m7c-~+5{U+`!xZgPF zd9UOC4EHJA#uq*BkGP-5J%al-?%#1wf7$c?N?HqXubIp^>!vSfWP2sJ$Kf8pJrVZ@ zukgDRI{3fVBxZF}?jH=!@;)(<@r1i+REfH*g=sEm)l8J%xJ(?rXRY;SQ{Xrt)~_xzn?~6aOFf-aOo=s{j9A zd!J*96h&m_2$jf~nIom?M20jT!!f4FlqKj*rB*Y&-w&mZ?;ul3k#Kla*d&%=A~wODhO{S8C9P@xKAG$*5N}#(6T}5=& z(A7bgjP4e6`fKK~(z1$M{Qnpyt33Z-4{!Z{sLc2LA1cfL>*fC6{Qu`AFuMh=`Ov+E z?tOII(d|KZ5ZzI9zo9#WE}>9Wx6M_dsNJ0C{e z7V*!B2O{P=TaNf7`u{?F2JxLMF#nyfts}k&aXwZ+Y=8C8-w53;=4;AwJ@>lM1)Xtkg*ZFnd5H5N{vM6P7exFU`X9wQx@~>vilYC4 z4I!#AgNOK9#J?iucHeYkynP)(%_3Zm z0^+b5whhF25Em_h_L&g3LtGs3c*IvD-i){k;!dS-pNV)%8C1-TcvO;ew<0cnm2=Gy zcSd|K;^~Of5br|V6Y#5dVc(e>}!iuHf7f#7z*dK>Pq={VjvPdpp{? zMqGV|b6XG>*yh})h}R?Dhq&YyxEDeE_2;G!hfx3cL6C>N(c7t`l-4DcN z9f-Le1|jBh{s^)DK8Al!V=OPkUnBk+@y?r2ts~;wZ^pR-ah+Raquq7%^E@yP`S5QQ zcr7~qv8;bSaK5bhYh(X<5G}qUZkdYak8OBy^v`S?&qJB^@jT#1m}nkWBIZ2&jQA>e zWje(3vJElkC0klNFLe-en;MLm+tN(r$8Cwz;XJNEdPR(X60!bnME?_5C)!3*(BB%% zTz_0oPoFGlddd{Ac0Nl}FsPXy~p(d~@;8RYUw)30zYlzPnVY zY@&0UW6jj|$7{~9heNj(=buA}_4n4AC6&qZ7A?fnx&QwCcM1G=3H)~n{C5fbcM1G= z3H)~n{NG#x`AS{hs!^-twzGodwuO@0-jIA(qqZd)wY@R<-sHAP$t{yxHfovN_VVPm zC6jwr?wKC+93J!>koX|JHEo;R=>BNPrO9pcC$}w{+_ngzMWYstkWp(6tekvzqqdhf zZhKX7>*Th@liL>L|9hceY^Jqn^k8z^t1%InZIbWDKMrcq7zvjq-<8}lf614&dOJ#XXNwj+yFP+4J;ct9agR2;Ahi{~a*NYjaz0Yyw?^?g*CTY>L}~4# zs?yMVf7FZm)6%+D<>0nafAqQ?d()y`RO*YWVDXweQo6(`9Utz{^KmW%rge|gdZbw< zJ){2Kcz=&C&B^K$r(T%YKTgb8qI|KHSw3m$z3^_GG8hnKB%Yu4;EY6m;vsdomwMhE z6{q5B(WqiROlFKy;)?l@GCoe}dw!8jvJ|{QXY)5DPU)9<4reeuerFCj&5rsy@DszN zRw=i%sZzOew20@&={{zlI-^;BWss<;m?8nbT=`?!5vknuXE zMwOI9*%bA#qARRSjuP3L6X6V*?T-qTTU{MtWy z&qlqS@uD-`0U@);H%-xO503iqRbsT@hR1#QJ{{tysE6;MUNGS?QL??{32l7bkMH&_ z&?ZI6(dPz`rdVIJkIYaH>&1y)0*5i%68~*_^KAg?kB7E6>O)<(sJjEb>2WW=XF%Vw zsIO1Qcq>>H^+i>hT~M+$Oz+H^VDNp67TLNe5wFa9McQO(9hmnP>*0I*=>5ogS<_GZ z$2k^Lw_lJNy)lo}onETac3T?zwFvfEn%Zc%pw#DJ3{3NY@n^S!8Eqx^S9 zJ<*wi!*)l#ah)8g+{Mu_LDx?B-UGw-`NQzZa;m+Ik3swWK@a1*l>VtYD<1myLHsa0 zK4l*E2jZ*2Xn#KHC-Qp=uMEedVSP~p5k6bNgil(3bSOH_9yavAA!nl=ym^1Yau|?E zg*B?hD|T?)-=W_H)^Me=%C8HCjEaXuA6jD~W8z-zh2z(ZA4PqAdf9HVUA^&cu~WTv8r`k_-aVt~ z?6dyppn1U@@3$e*r%o3PIb=idX)KF<*m`j>f^VDR$sWx}i~Emf^vApBN$c;~zE^aV zKW+V*i?h~`;}|C~ARE_dpI&`>T(~6-&Pb0>b?1Ad{!tnI_!0=&jPd%Tgz-_r$U z!YynP)9s>UigC0iW<)*wq6^v0j(Y5qHuTT8er$;xyqLXxQNKZ-XwOY&Z@*6GPqNFH z@NcIw7o_67>WlHRvU@si`6$&5NI;u3(NV@NNa*TzC&U$wrMjs(xKygRmvi=U={d34 zrMh2p$5lMU`tp3L`61QK%HP}leHrTv$7LN`IapXcQ#Beh%eVrqQr+JH4``|G)v!&f z`#syesqXE3jZ@u*EAX4gi9&ZGtxStlH@0lkRJZr4dvH8OeQLej^zyA!-Jqa$p3HS_` zwdqa@tv#=)Vbp)(GCZlj7%y3my3)Cedb_W}_U`qBhuyk_sEvz>IeNO$`QysezA6-d z5&L_&xW1g9D&up?$yIUf`EpGcVte{IjP|5dH!#tK`1sGA3Hklf8~O0^7~b|yh_^F0 zIiYiECsdC=Jt6waWp)DI39g0`EUby(ms$wU;^(grAHckwz=}KgW74ZFk-~~JKTE(i zg8GtB@8O*C_`wlBR)sxM-M0ykxapW`l;aJ(Z*)YN*Zf{~A zw?7d-V)aJ`)(p+5MAe$-&S22K{+Rrz$1z-&DsECXU6{D3+3-u(<1n^8iC6zSxc9Q9 zp>cxvTG@S-&6+j&F&i(?-7!ow{zPndHdDUE_)DL`M+2h<1PBKYWH@^e!{vkVqe8Z5 ziM*ISuF&k|?A_hs?7iLA?6?6toE>9LgcDZ5@^W*Lp58do?TM1`1!i=$w=p|Dmu|;x z#*NI8=ypz`AJw@K4?mclUsCfE)N{yg;$#kf4B2tT|Ct>hB@V$@%aEMtUVeq)D^nPb zdX3?is~GP803%@`V{tCc(bcWW5iM%B4I{pN48K!^{1$3!j^0td@b1N&iEaav6L$!wfw?8NLx_?T<^+axH?DBQ(?cUABz0ZA{ ztB+fJ5kBp7V{`X#b8`1`+X{DbM+dfzi~4o! z;HDHowdZ}@nj#(Ch9ceFmqq%zVZ~9VzERC&(~4)*`s0?Aiof%7AC^gU>z+kMi9OsW z7op;#`GryYRdfL`y%gpi<&UmCx0T|C)yMsPQ3u;kzAxO}*7|^=ss(LQQ7hl`dbw#u6W#DZm|>T<-+(cJyq=cQD8 z?8#E+%l=oXzHUJ2sPVjq@qy&D(%s#{(uwYqVaO~Y-jYV-!F5)uOV5Mir@Ap0yAb{H z*M@F36O9+{m|B{#gt6u)EGyl<- zSpGj>8t;h<^4WBLji>Vurt>+bljzn@XE<;M!`V^zbrhb7!c{YwzB>vhyh>gkg})-i zYD;x%^QOA9m$+=Kr4aQ7q(<$;4ZkF+Wcfm6W!x@Vi&V7yH^w$}tFJbs`6s}uF{wfOpio#{fnX+aD z!)?D~n%VHtcX#(wK1|vU#>ewT2li9>qK5`&^YQSBS~hWy@oat^=>FoU%g-=85{0AB zl8;8=s=qlK?cLP;c=pJT%>TFy$HVc7*yN+5@c#TbO2l<$f1kgPJDMNMt4iE*#dDWM z6)w9MF5{u>oy)Kz#o`fUF?n4grZE#C&dGK(7<3s9An^ve1j_OCRQ}osB|(RYMVG}{ zth_9q#y9Y`Y@#>xJ%)P_x-fF$L)V^IjC;O=z3qK^N22h+X7XoS7>?M=aQdg5nq8Vq zyF99NE7iSMHo9|(ujcRzc%H}H>C2cyCyOD*{L;>C3%q^(Nq+fyY`IY_;1^T!@3*aob3gaD! z#yfR_V=w%b%Py)5g=ggP1@WPNM&D$}i+-c_WfVStlKfT_ejbIxPch}sQ;7kZ%G?Nj zI2&FLJK$hk5LX1hAZ5Xyi2-jU-9hwB`-}dRGYnrlOO;in@S%?zeMLLgt`aYmHC!q@ zCQiE|I=RfgBGJwIn`51d!p;AXk4NFC0olN>B6Qh$yTe!TtL>W`x4gp*Db&f0EYu!V zlXk^nHoXvzhYz`}g)mKAIO99|c>6ea1#2*vT?jkHKxXv%AY_EAsHooYX@yYDM&}N0 zAqI~_8_fU?;v~J%WuTsb7MK+^otB%9G@+S>J)LiFyyWAOglL}Taenj zU8j!j2-4=yK?d>l?P#9$@p94l!u(E}v)kLPz;)JvT^w!g?rcH($8ovtUd1W!_uWj} zv4K4^jx*J%&e59CLr+j&5bCL^tnCj{U`6j*S_#GxOLh z)so?_C0IkEU0QsLQ~fwLVx6;}+j?bmrEuoT4&B|rB53{qHEXlR$Crw9a+`|A7aNO< zJ>q^W_OP2=5(~J4+k0g@RJ#_{p7C}`e(&|;l~vubE33KRuf#PT^2Ofw6~j?qGo1Mi zON?92BKQS?HFCa)@~+s=K_4Dqd8@dEMXI{=BGufAA~+ZwZ!#}&d+hVTE(a2&4t zvG8y)!DdOf6-!HVKa|A4<54oxzAc7*|M%jF?#!+N zq~h`BGz^>5N5isX;F94CXFSJnHA1ZB&iE-|V{z1I7@ccYmvPzb2KQL;_>lcZiH@jM z#JydD7vfzz#EF|r^mLm`VrnChiN;t^A|ALr9%KClV|-i!S9X^50gSnC3=1)HEW@J{ z8IGC6aM)Cai=yzWS6M_g&UCaybO4Q)`udW%+L=XlV-%i3$X&jZ8;yz}7>|eX&0HFD z=W`gU#p4`wbjwSs;wNfzu;~n1Ky7UlZeJK@WJTQ@)p_9-!8)**R(d*yC+aHo`BJ(h zUR%bt%J<4dkM?$8HNU=uV{AZk?uqWXI4sy$LE#xc%Lv((x8Op-jB~U&i{M zv4zg0tqeCJ#LasMOqbo+KNDXLhiYnmHU78O;+4^vXz?8cb0UzzpP-x#in z!V^)r{UqnIUng79etY>dua@PV;{3AMjLtEcn~hst zHa>r?Me@>tIWXq2K{@c%f3z$96OA$WD&E(euTONuRcJXF574f%d>34WdP`7sTdI5G zDjX>XGm}$87`{K0;hCX10@QTQCtbWam<8#;Fb>!|98(G{dEHffSo1yxP9DL5zm33H zs7nVAK|V*~(UEYo;c>#Ca`9y2O5Vqpi^?*i9Iq4SvO-O_qnr!zKwxya$J}JxV;>#G z+;+Uc@Xv7!-+2jH;X%%FHXr2PE9XAM7&yGFE$5D5gqag5&6vdS+bEp$N{*1npKqfP zeuOjSRSrEGg)3%}KbymF-rEd!u3`Afy9~dL!c*(W-)~|#Y7fK3vvXo8<8o(zd7ihU zQ^p+-mEawjjGVmjjIq>2k2g_faer(-K;0k@?x|=|H8ht<>Q>l^ubJZeugu)ktK+JL-md3zMD@?@K=W*0T+_#Wg*E_=);(X%(b#&?Zwj5$zM}CJU~KUTSb3ToXOSM@0$IZ+1tK?^fjdhL`V`buHgL z8TlSTzHdI4D~v8c-n}NS3~$plxDb9W7Z%6|QTTZjt{B0|^M?ZW{WYvS%B`%4Wj%`C zPY7N14sO}Cyhe%7oQJRFiwDt3^p|U+DjVaTzpjmHb&Y!lRE*+>dv|t2E8=bv&C8$~ zhPckhXw;L}Vw%{ka1*%i+Ni4jgV*8+JDyX0ZUV#cGa2ri!|=6v3=c%%ocZK`5W4Kx zprYyU`fY7R{3L}YJKn3<%Y9f8H$ixS#>>v(*YR4{jlQlYDpSDmei27cU(A_q_ZVg+ zqe>(9Lq+@1=jV#JfOw5YoW!gz!2L8+5_-86 z*Y)5JJlF{0Nsq0>i#;Z6zs{;pvWLPt2-JQIaO-s7k^1X^YJt19u(VLk6+Iv;GN{Owk1kGXA? za1i;p9v>(3jQw*ZGdI@6)0+5N`8#YwUw!~RdvtfTs4~}Lyg(M!^ez;3a`SUj>%}#q zEvOgQ!v7h@es()2`8Ps5XT%D@!~RsayE4Y*Z)>Tj2mw`Ov0}+Xm2q)!fbzbB4CjB# za63Ym$fNp;*LQLsUmw4pFuV$mDA7I<-So_;;u0Hk2r9{QZ(o1AaQ*f1y~XD1xq^GR z(N*wRYUoACcIYsMM-cMa8Ls4c?AU)j5BlFaW|AoalbUG;uzC z0aMQXh&x=hgZrmyH~vtOUJZF|K((@8R_p0bRqO3mSLc&){4(0PBOa9Yb`xr#DzGZ< zl^VE6{jLTc0OJ0yqkA4dMc}QU(^aEm@ojEjbsYAWaDnx3W2&9s4qmH{3*nB9lHH7I zeAmaVspi7QZeg|lZbh|3_s3F}YVn&4|A@lb%a}(Wx3d~HGE`aHv2$q-3PaHd8NwxjHZp_qJ_;AU1wYxjJ_ zI}e$y!w89P$O?wPtYo-!RXo{^)jPU_C^FA0x4AE>uYe^ z+FawV+uX;P$g+3oezu2rz*f{6r4x+=stF;o{fO#04*dgN%_p@4dO|hqzP5+x(=Z|t2 zVKzp<;U)@)&L_Wv&?Uq*Kn|>p1CHBNmsei{aa8+(!=j50H?elKA8$tLss&8dRm~f< zaSQC;K>Cb@NY7~n7@n~>M%U5Ij<2H|oXK_0mw9fTj1n%cV@qRcot{0oID5HOb#Syn z##r@>82%K6uPi2yd5z(y*BP#i!XKjW`8QZV?A0IFiLbCeLng!1sm+MO^$0VrSO2WT z%C9oYFcnMvU}P;{!ZA)n;Y&-&pGDzsZ<1eH#&Ag#evZ)Y%ipcbcbN7gle5vFoy&6v zUEL?>AGd-dd=iB-SCW5?!f#e(jC>{h&v17Xj^99@5rs!Lk_T^MxFHHZc#r%;6#f&1U%k(i;agagj*p-wJ~yO( zAGfq2mJ&WvbNd@%;8qMwjE>E(*XMS!tUj)!>qn13|E`bwV+_Zm+O4@0qMv+r)W-=F z75MF{A7A@_1?BLER2F^2a0Nna^1XPTh4x2%{$A<^HNf++PdI$wHV)@?bo?uto8ABu zRnHuFi(ugK%yxQu*s-Po9(J5YX@CEe1Ha$NF#U6egT9~`U7!8X0HwJ_+B$bNjBlm>Y#3hyoNE|8w;Ixj?Ocy+WLx;yM%v-0VtTW8A@>C3u%n?#6Emb) zkk;;IK_>2DLC#++|HjGS%48@GGe2M$wzDr8?%K<6+&+f8qj2h1s|%b(R~+D=9Z~r1A@b+nGdy(IpNk2} zb`W_bIjT$3ZN{koKuL7({m5K#AhaI>-%dtrtM(vlJ**=bj*|Yw@Z1rG{~Trb{4W`f`kLXY z!wk=!VtDiqhHIYBi?o4Qnl*z zgcXU$gK-JB+;GFxaC=arMu9?wUJIUnv`V#BtyRHY|v!!rA3CKEH4E=Cfu_!VRmpPX!26{arkTkGg*vMpg7$>4*CrW(u4GD z&nN5)h6JO60paev`+~E%UI>~F3?5t-yd3mj5>|QjqG7?Up9EurZxcoYZ-m>g9F=WO z?mM<5l&(4=ytiEKu49AJrE4Au76qLfS2!9xF)(;G@9@M)$n4Fa^|T;IrD4I5V0XgY zoR_tIE$G&&>6Tzq@K*3vj>e7e=+UFb%i)BedDEu1Z4KrGZ{T0UlD9W3Q@dC_w25A? zWRqg8l8e>Gze!=|2|=Iap~2(DPKL#beSxm_@ZkMmOn4}m8x(x&;xgUl=B&OYD6lyA zD0nm25|rAUxGzUqhq1vEP14pSjt|No3+{cob&f^B)}UUEG7sK9D`@gI*2X^pT7bHN zi`ACN4c)MM_9qMqAE{GwTrfVUJSdzKyoa*Q34RYh3EvENhKtbEtab)V_s+e+-e7g& z`0%qJ$F^WZm{Pw*zoPwm)f^Zc%--qtbqST99vch_#)q#4_jP+eI1%2}@uzG@6ITbt za+aA8R2vvns#>wgo57|i(`IGVj{r|O%6BIQz# z<+?h#@GIF0zk;EQ!e?sKsQOU-YE4GwSrU8~-nTsGPuYhC4-O6?PSpChFq85oBVvP zbKSRv_5@O!W!NJ_5yW4JkZpzhdUY`87q>G26S zrw4C^Pc|vmv+=~>({Nol5zB3UFeB`LO|2Cut^WNORDU+Oc4WdeSJXuTs&p;acud&2 z^IWXMdmgQ^8rqz&MY%cQEo;MGy{Z?fmAX0DmUw^Z5#hX`cK#i~JK=*5+}^Bur+=*t z?s&m_q^eJ`2V`d{6%e4W>VtJ_WsTHZY? zsD4|;`>N(`Qnu5BH|8IU@~x+`-&eI%wI;37z7Bgl`pnj_{!JZkynSHU>BHcmN3LmlU)8R+w;31S zdRyyR!Jc47usxg<*8Mc-I6bUBFL>tlplti9Nq+<{U`9$lJ~X)O^4eE4XfQ3f>5HJ^ zwMp03sCjksE_XG&;rhN$UQ_w1CkmA+)uL|MdNYDDMUu+3sb9B6^M|Xq?bCZ~Fg$2D zJSg7qiN&6Gq>y(SFGQx{0%b-9M3)` zxU}*B?5D@W0pX?T!SP^!!ttQTHJFcQ!yBABfj945I$>H=;f`^cQU!MAP4Y zOAzJX=gzpl=L2zn|IUFc39sQ>tOpg>ZXd_-mOt<0Cviu6SLiAuzI1vR&ClUi!zjP`bK~^g^W*fL3sA=iyzPtPc-@ttLjV01PqO&hE8_I=7UwJ! z_xG{*xW#n~$LRws-eU3WE93Oz7B?&s_m8qTt!UiuipB8^i|ZDT`!6pM$LSU~D;f76 zwRlshxW8@bICf>?c#6e+lH&f87GGP|e2c#;i@GiB6S{&|o#&F^P6?=^?@W<<@$#EP zwSZCGv}2H-WX$v=bf^w7sxKe~v6%isJS?ATK3RTy{KiM7FQ%X8V&@i_PnM52Gc$ZK z{qk^DnNODA#q-7V@m`hNXg*nf2hSJN{|(MI^U3nNdA>M}1M#;TzLw`%kF%Bg_vP6( zuXAW`ELxsq<wvxK+Y@vixbDFQ$JrUjD6Q zK3P61gdnp##B7@`#y# zr&8E1%_k!%TGuu3`YxHinEsS9*jCIZ%RlawUrc`#Hk>=nC(9oPATxh4eb$q8zxiZ3 z-1ctq@)y(Z45y3vWcfFEzL-Ai-Rf^XIV*n`oZ;q^>cyTS^2Ct>=X0J@(XzRiN^T}EHtWW)0^U3mW^2#G-d06lIG4sh; z`K+J)jQQlOeAeTh6ZvxelC$zz-+Mmu$yxcV7ye4~$?~<1Qjj3#{IdS|vgVWJukn@- zxiTDHC+y2~o#0;&*MXyL`zA2A?Q6a3Vb*uJ(xye$v}SwL60>Zq%lgt+Lmf!q8EPu9DaI^Vj`OQ3E%<{8MgBIqK<^QMr+4e!I`DFS3X@1#8!b9ehv+_H@ z>1#e&{*zw$#VkMDTzJNOa#lXuW_Zs0sGSDnn}qIOFMl!fXB!UV%_l4W|FnGA*26UO z$?~<$q#!}e{MjbNeDlfj9|w@>i|MoNh~?&!>9G8`49W1t^x4M5`{tA7|EKj;4g+?W zPtM9`n-zP_C(Ezpl}F6-ux*R)%_qwTM$GvY(`OqPC(I}RC;to_9;zwOS)I0FQ(6WUaOf; zmVYP4A=4MrXML~@%_qxOo|*G!y|K5OPnM6(HY0yA^Jo3C_nA-5%4a>a-OMLv<+Hxp z{^paj@>#F#AoI!cwZC(I#VkMTzkR`cvV5$%i0PAOz~Mdq;!M}r{Y05a!Y%>3`H zk830I$#l4_b^ws+i|H?Ifb)X+WIFWkMJHcOKTkuf3-ihH`+L5a{$Mz>%qPn)2_UmP zV*0Zip}t%5$w-RIGZrzKzL9>XRy7^@J*XE2l1qovMqgrF%G@mTLh?l>Z{yaFF%qPnq z>iJ^&74Jq{6y}rVPxE{+{SV>nF`q2|CC?YrZ`TI*`{tA7{|F$bAQ02P6$d_EyK{RZ z)8Y1ZkC(rg{wzAUwx%Dk`76=SahX5)5;!H%&p)PXU+~XUMd4^)Cy)fAe2g*3Tqa`9 zW5rJB%qPq5=lNp#v*6S)pDcfn=ZooI)fv~8=9A^8d%l?d7jT-IPtNeem{X9DZcLwT zDKs;mEdO}`nZB4l+gxa4KABDux_w@G#Pr!VLwobd@`rf7m_FNZc*K0N{864Srq8w> z`kGIcPavl-Fpm5l&JB<2lzZTAX^U3m?dcK%`j;C9-y3Ts`y2^1lU;QxJ&hHy(lWvH4^= zT%N!TUrhgF^xS7YS$-t|nfZ(9vn`h{=9B3#|7I7T_r>(t=1WiW$@1Ae7n%8s>9cK^ zC(S3zXKfJj#q`;R%uw^mbXcA{(2<$HnEnSd@g9TuWF$rY766&PnEtp~*k{Zq(_#Ll z(a9InXWKP%%qPpoWle@JrvC$+*UTr&*LzAVkC^_6*=V!Ie6oB!PoOWRf7=|kKa4UP z%P;4ZM@+vL{7=j$%dhSEV)~2W;A5#Mf3p0po-d|fU@o>-^U3nH&8HwiOn)vMK09Xl z$?~<#>5J*J?Vq#ele6;KMo`Y0asFiaNQ#*GiJ@L5wKJYQN*z6kFs_CY&q#)bN#9YAt!Jg3L?{BOoxGF{vI_t$6Pq#FehkHZw z$@05-zL@?IIM16;mfy8}^U3mSc=?N&e-AjN z%qPo7^YRg=AQsaf{sEr7nopKL!OLGvzu1R(|G|8+{N|o7rvC_>o6IN6Z|eDC`YYfx zGoPH5{|}sd%_qyh&C6fR{BQXP*Xrhz%`j+S^2-=Gy@x%zU!^+dW@QpKY(UHJ>cMq34U~v#r$L=9A@@@q97;BsfFOC(Fm8k2nPh zV)|^i@fGvQ@{4)Cm_FNaOgEn_zn92yb(R{M}lAbT7zZ=dM=9A?s&lDtx>9dX5 zAI&GrSDy66^w}2fS@X&Am1pMsd%?M+ZoGYxOH=j%=30-Gzd5YljZB2!u-YbyM2ylVdj(N_wn)<(`Vbwwaq8X*E(hX zV)|_JxuyAJ`9r<@#q`-m^TXzoAwJ{r1@m|x+kJ9rvE3L z^5&D}>zF`%mS5eQUoribaO#*(mXAyIh?&2be$gY?-pnV65s zzUDCn31a$(;2brdEWe?*{KfQ>{=`0JK3V>FuRLPLv3lEIIJY95_vU0x>t6We6a-?Hjcwe& zZa!K5)1EJ;KM&43=9A^O_Ixq@zu|mrK3RSa&ll5AJd58E%qPoV-uow{u+^#mkngY1KpiWKK)WvMq?rIs9{-Pjox0+9uk6Fp^#q<}1foo$vS^k}#FQ$JQPMY~-`7JzOO#e14 z-#+G(jt*Z9ZB4Ena!V zEKiUfjW#uo_ZPB!ts|C4OurVK%grZekyr@^y~OAbwNi;UZV-!vWrW}ayb@aO;L@&OzjOSgeDA4}`t$Nt(k z#@hy&S+H!6pd)i$#GID}aBec6EWeKDi|HSN)6#sh{F=9A@TUUy8V-{<1M%`l%Ve~y>Gn112B zfm>=mS^j&TFQ)%BoUP`Q5J*#59ev~$?|bY zo8gP;-;E!f#+Xl*Kh5*S^nZu*s`+I3x_)4J#Pn~xGH~hUljZOA@)y%DQ6zBhm`~2i z{|n9z^U3mSh3Ds2%>1hs58T)0ljUCyAhY~p`Zt#d-1p{_>2Q1d%qu_nXE?kk+Kzjo zv&OF9g~wI@{wTQV{Bbo8IP-D!%94S53h7ChAX(GZJqXJwW;sj28D&0M{x+|iV*1D7 zOgEn_ABWh8nZKC+U!`!IF`q0y#miqzziH{fy>C8Qetpju(;o`wEAz?nb)Cubi0SWv zbHaSG{C-~kV)}QM30(G@WEE2jTEoayG1LHU)SL&ND$L6S}AZpnopMhzL&q4{y{i@m`|4fD1glT#q?WT4+l3f+#Vu^!}WWY zm%o_)9Qb+6CnG8HJ9@sD{zX-AU12_1{!iX{M@;`@wZN4zpDe$-=aVbJ;d^e)@Sa<3 zGR`TJa2~nQI30Y4@uvUf{Bk!O9Ut0(Gw&~LYvR0#bS@vV%Cp*=Uop#H_=dpkH=iuO znCFY>*MRf0`DFPyJzq?}KAbb=ljWE3d@=oYaB|-om!B+ug6E6rpMrCx`DFRJc1l5l znEutZ0$0I&viyNw{$l!z;M6dmEWeWHi|Ky}=T`H{@~e8jnEu7J1J}-cviypkFQ#7` zPEYg6@{4%Bn0_lb1I;JPf7A2D^mEn;+*tF;@*nklG5yEk%rKuU{{_z%NBP$c+-u4o zEPtlwi|H?bv&MX~{Jx$qreC}s?t{!H%hxeH1qovMQ{a4QK3Tqw;q=AyE7lL(Ve`rI zbZ{d|+O#c*|+_%NsKUscr&ll6bxk2DcnNOBq!SluRd%~$)||XK3V=NUU|gK|Na&@-x%nI^U3nHz0nube+bS=^U3n> z_wpCh-wY=KCthx=Wcgz}Urhh*ZhK|336`y294izCL1r#^!twg9BCt*G~~y>t>DbZ`2#3J_2%*N zA*(!ErzuDfv-}OZ2d<&{WcfN?(HGP23+Hz8$?~<1=#w9SQ<8n@+iem?&1UnSrupK@U3L!af}fih1(I=3G()05EULq}%$ z#q7l%Y3qYT@TO~(=XEtzi*mPmak<( zUrc`$oL=UWv-0og9k^%BCuij!gfrHBvV3jBERUGwDc2`(bIm8qzs6ghV)}Q%S!q65 zzP3r`FQ$JVoDa+=XXU5C`O189R{q0qj+jrDU&<@LnB^G_=dAf;`6_ef@=t_wam#r7 zCuil)fK$SJvi!%q@`zcUEBXemlKEu$l|5ff|7JM#%_qyB?)hT+-@{2UpDe$U=ZonV z=oh#L%qPo#(euUh=fio}e6sxFo-d~VKAb1bC(D1s^TqW0K8D}X%qPp&v&|GFi0O}m z^NRUo`L}xci|Ox!lWsm)emBn-)4!>I;MST?mVeUo#q?`G9=L7hljS$^d@=ne;OsY_ zEMM>Qq#!{||4leQn@^VipSI^UaQ-x(EdO$^JYwd*9Zrr`@%B%auXjON9x?r^|Apte z=9A?od-;p$cZYMe`DFReC!RlFi|POQbb$M}xIAR}%9G_0)35Uk+GjGKEPt$*znK0< zgK+(CK3RT8ul!>A*AEWdW9F0P_wal%{TXmZnopMhpYEeq!zqPgOn)Yv1Ll+E4*-zq zi|Lmdf$J0V$#j@ME*Ud?G5ub2TF2W%#OC+)d@=nW;9qJ!S@~xJkXarv{i7psZ*D%B z4$H$%zL@@{qXKum`DFPO0P@B3Ydw$a6Z6UP%X+?;{)40O{+0P;`4znKi0Kc5)75;k ze3dx`31a$-;Pf}2EdPv`znK2q7x25S`DFROd%l?dD`NsT+kCS84W2Ki|G?P5y=^{O zzRH|}1Tp=AaCVqamak(1eKGxwa1NMHmS5E?kC^@`I48^}%g3#1#LQnzKlMd8ccYAA zHj<(@9mgRro-jg5J09creAR;o`srE zrbAz4pf9Gs2~I!r$@0fz95Q_|{Wh-#?m6?x^5=WLn7*48xM}8-<(CAInZKBR$=Nu+ zn@^_0^7lt4Urc`zoYm%&!l2fwSD zPtMBkG8gZc-V<-1aXK|%6zi?O95p1V)|%}+ohUMro-b^XRkbB`itQ_Vm>)5 z|FZPJ4KSZ9f3BCmnE9`U^St?F`IiF7najU*N#G`$PnM5Wp5cp`f9a)oPsV(*{6{@s zO#ekV@0(ASU&Hgo^tZzKQswdd)t)b=|LmLi{l$E;^4Bpr1qovMH!Q>Ui66MQeUjzt z9)!M_{sYVLyvuyD{1#q$#PrkQTxUL6zP3r`FQ&f>PJQ#q@>K@mIz&&9;nGUz-US9rU`lsN$U_SXj`Lp2gHMfvC6PD(wlY08-kZhmN88AGaPK@U!R<624Bl-#3cTNV4EV6|cO#cL&ndXz_r+U7aezUg%_on$|`I|joO#h0v@!ZdRviv*4^W_)Q@AM9S$1$HQ zA4w6XAVExj1Dw6)ljWE8d@=n)aDFzQEdL?^nfa5?z$uA-{^h}qBj07M_V9)4-Tw}v z7@V|NcNM^y*ZVK;;(7q-T<>H=(R!bUn9S*lSMvi#bfFQ&f@&O7Fl<>&W& z@<(vEzZ7~Z!R;Vpzu5G@{I0qSj^^tCIP-iRz_gk_7|$13)7{}sSIlxQT^G0q%_qyR z2Ox7fi0L0&kNaHn$#l5CASuHaYk&0L|9JufRsO-?%;mph1D=~9o$H0H{4uK;`HNYe zg>W2p2>N9Cc(o|Q7t=olC!6_X`OQ3EO#h~h_#M!EvV0vAQjj2~{{)4 z)8Y2n2pyTen122(c+S~2&Yw(&erEugzL@^wTXA1+KA8^vr_jk4(?12Laoae5vi!lG zFQ)&m4+7W1e6swFo-d|f??e15J)ifHTZ|vi#9rdBpTjz!_^kS-y_F%wJ4@(#QDz#eA~-eqR1!`guRWa|ZLt^7AH~ zUtePSMRx>liTPytIwqtbK}^3poOjJ9%fHntkC^@nI3Jo%mcP&Q#q`I08n`daC(Cc- z`Q-g@qVGE%x$vCm?`ucla9iNtskZ-q?EMV+cWM`Jt7J{9GJG=UUCgp2d=|LA?P8xy zCkb6G0GYm+e%+n;hO}Mmlj+c3g^o;LO#dXDVeMj{Oo#rPo-d|9?{jQR=9A@D^L#P= zy>KR)PnNIkjpY&3fA$OfhGjlk{zqQ^V)`k&@J@pHWcf=xUrhfToHxuT%WvxWV){4l z#`}lnljV=_d@=nUaNahbEWfAci|IGo6S()xC(GaB?K@)nxxNbAC+3soPxJC8?}5W> zp0>E=p`-JH|9;dVINDZ!24_Am%tQY7w~x0CGV|fK@ftdE3IZ|9*7EDXbuphTznABW z>Aw%BzxibOtvp{$zsNT@51LPwul2?9i0OBLGr@ea{L27j`eOS1_TzcJ`D8kr-x>fi zeKGyT2k;%A`D8lu-$Ex}Ouy4X9LLNjXZYT__UmLW`8|F=HJ>cMv6sJ?`FDV`&wR3c zTU3`3|~w??+p~b#0k~1Tpq|_3u?yWe^U3n_cE@H= zf9UyQ`h&8CZjSk6`JDme6a-@WKV=Wy67$J)lF;cGLSIb3PL42YSC9J(S^gn!`H1P4 zK;t6sTmEGE-92ASem-9@4M z!+f&*dY&()Uk^^sj`8t?EFW1!oPq=~{h4qsF`q2IHGoWCO#hGEp(|`YnNAWqEfe}; z`t`6eC8<1M`IuBj{$lz!=M7yI^U3m4z4D9c&xKRhe6swzJYP)zG@Pd9ljUCtAg3S@ z)6ait=$e~Pro;Jt+RI-|e+(S9o5<~xEPo1s%>2pS;qbnxd#3v)|5;)`I9yl!dkUQS z+;MIG(EWsTPK(U^S+<7&WKK)WvQ4}!bbp&qrb9o$TNh&blM93{Z>KnavivEYFQ#9k zQ0PjSPnM6zOBv-6)Bm$@=qj5}mapf)DM%30Z(1~T4b3OZKL;Sw7t_DFc<5S~Po~59 z9R(oM7t{Z&MCdx1Po_hEFn~;7O#kjuq3drxnGXGL0c84O`nAi1?m6?xbm;3|iN2Wr zCOG5GC(GZ2ame(=^oJ*fZkqXI`Tt*g?*S)Ob-(}Loi))Y_8uE3)+it%c16Gj2q*|B z$~e0_yE`zuv&_s=tk_FXQL#6O4HbulTCkL;J-2T&p~se^kmb28tBP) zLBq6tGSc>a;#0tnl9xdp4E@YclDk2BW^MG6@$A~@kH%+Jw$Z{m)rZhD;6D8CGjR2H z@$g3Y2AdGK2q4+QITU&_L){Ui}YmE zTmK>T#?*fZ%>wDkrnj_2y)pIEH%~>6OHVfa{lW7ZQ@`UDspwVd$)-Ox&>K^~0GfBD zC!79b0GZ)2rvCcgspxa*$<#1@CItQ)Q@>oFRFrD=@lQ5=-<1>pjj10nC>5})HaRVLjUzna($8Q_FbJQJNot_UHoQh79|73c>@LN5T{u?tqzk%jL>B**F2EQRw zZ%qAfp}9(Wvgz@8#(HDwABE-)>B*)yKdb$J4w^;MlTDuq{5Pim{dYs1N_w*Ct>1(G z8&m&FX#Olc+4Ls{{u@)j^6shVuhNrEKQ_=CQ$LZKoKFvqp=11iSewL;G4feB7s`O;j z4-Wh{rhdcGspv%M$)>mQCi-to{SnZdCq3Ep=Lh~9Q@_T3sc4?`WYcdK=#8o02b$kV zPd2@!0fxtz`lF#)AU)aiy9E9lcb1<#j^8#w%m1DQSLY}9!p{K{eR?LF|JF~%@E9{Z zea57seWfRx{v7yErrwzPhoG4tJ=yeo1$txZR~Va$%F>ffe`}yOcK$2k?4)7fBB$P z^nmna(;pOs$C&zUCm{cno^1M;0=+TyE2fcuN>4WZg@N9f`fH*2lk{ZMUm56)sULlC zD*8lvvgtE{-kAEEq4`#Nvgr>C^v2Y0nMp-UPV(uKZ2BRA-kADBp;<|Kvgxl1^v2Zp ztV>1fN>4U@CeRyGe;hPhNl!LCzcKP~{9{c0yU^?-$?zC6Jk1TM=w<22rau(^lc_hR{*TbSBR$#lTL*e$>etAoqA#Q; zn|@%RH>UmoXll{v(o<~u698m}$C&yz8dK4V(vzv_3G?f~e`D%rHKn4pr6-%d80d|u zPc^5aO{FJ)pS}!DKk3P)|5@O_vAy50UB4@SYwvdmxcdDb4nJ>~|77$3n81HyhCj-o zk4t*8>7NejC&tu2oliy2Nl!L?0YDy(e~hW$wKWyJAwBs6@UhVGKkE4|=85@RWB&GC z=qI=McTG0^<^VGF#?-IcmWmFSo=gq>zdG=rd@M9;6W=#D&Xx5gVYujo zroQ%&RP+z&$<$E4W1u&teivxEp`yfmjBNVV0=+Ty`$4mo^kmapSB-bE{7V4H)EiU3+Tp2afb?W)sBeHVy)pHNK(mkZWYcdL=#8nr z1e$}TC!2mqkS`fi|L%-bl$V}tdW-Yna4@ER!=unHke+OME9dlp=sCv0;}DjL}4(L!tl1)V~7FS<;hDe_G(bG4+#!l}~er}*QroMPQ+HTU5O>ga4`fp7A70^5_J=yew0{@Mzj0o!zf5LAq zJ$wkRP7m+G&x0oW^guTMZwmZ3HvhviD39No|LtJ<-#eHmdC>`}=q>qAHve}6kommE zeBL)tOhq3{Po}0PjD1Jc8&kj8NvY^d>B*)a6@=fI`op1F0+qX-V$)lFmHr!3eB*+=6X=bpe-N6T zq$iucSD-hh{;$yNE9+~|H>UqbLo-==vg!8=^v2Y`0L>B7lTAM~&>K^~{wb;G zcN%d&FRvUO@CbAzcKaiL35GxWYb%FivAl@zxk=?o06Vv`X>Ybjj8_{ znwzC3oBruQZ%qB;ry+lno^1LJQpxvXO#LUPr=o|YC!7A!z<*=v?>r+FJu5xg^lt=u zW9lzF6JrO`lTB~m_;5HFQ~wk+??_KJ{icEc#?*fW%_q{6P5-ArZ%q9kW}^-%J=ye@ z<{2Ji>c^gi{Ho;hE3)Y~3;Z{x{wQdcm!53;wm@%8{U^|@DLvWrn*@4e>eoCw6|FBl z+4PpD4Tpm<^`oKbB|X{n*9QI@Q(tpVD%wVRvgz#^>Ax}czkp^}>B*))IPl+?`d>mb zOnS2Etv`hR8&kjOxyY}iC!2nB;J-2TheMN=o@{!{L+C$wA~dYy-Gn;cRPh4v3FM_w zk3}8tRPlx2+2RktSBSp`-zn~P15`HWM~ zOGSgEC!5~BBR-=s_4A?GM|!g9EuW;`nEJm%bD;EO({B-k$C&z_=OfRTo^1N@f!>(< zBcYipJ=yeI1$txZZ-nM3>B**FF3=lOzW|z9(vwZUTc9_l{wLT7c#iaB({C8)jj7)Z znj57jo8IcB!{J~|{VZq}NKZEXgus7e>OX|$5$VaM9~|h7sqcFs`je$6n|{4OZ%q9@ z(0m|0+4S~|!{J~|{S;`vlAdh(KL`FBQ$OJ%6gKTXJ(Epu`8NGGrv3zImXn@r`q_d1 z#?-HMG3t2IlTAN5&>K@B*+IcQhOh#?+qy&3@98O}{IE zOuaGn&&z8wAY(vwYZ=e+bR`(vwa9K%h6K{>E!l(H7E^O>b#nI2??r-}$;!w1f0y(;pW2 zZ%q9i(Cj5W+4Qy!g8my*|M9O=(KzYJrnhz_^~ThXy*?E+NKZEXPCo^1LF05bK))US9O`t+nHQ_~Zs0AqS%>SsW6l=NiNqgyA|8&m%YG_#~9 zo8I~f86NWa(6ElZ2=(guWYnuyK|T2da~)Wf!>(B*)a7U+$s?|T>KG)hl4eGPy-oPWjCZ*@23q)AVvhVf(dSn7?b zKM$I#q$iu+$`R^~sc-mgD*CPTWYbRy!f#Cd6VNP_o^1NoKyOU_PWPmu7o;bf{uhDX znEGaD-jbed`aJ`^G4q$>Gy`=&AZ%qAPq3I(%+4SQA|Bb01dN1bfOHVfaN&qtbH>Uoe`;cc! zPo{?H$I21vjj6v9nz0uCKtD7Hk1_S1Len5U+58_9=#8o0^M3RzN>4VuwWApxW9r|B z<_PJ@rhh5$-Ca>^kmb|3G~L)H#~@SI?|I(KN3J@c#NsP>36Bq$iu+@-*s=so&+1 z6vlUb`X`%yJph?{W9lb7im_nn$<#3XTf>;%nEErJ`J41)(_1~C{u@)j{X%??hxqW2 zObk_ZCorG(P@gu)7Pjutlld&he3og@jF+BF4dW8YG1ePX{|Pjcq$ivH_&{$={nRH> zH;|re`jrE{G4&@ybFB1a)2|Zfjj6vFn$x8xn|}L1Z%qA*(9DsZZ2Hv$y)pG4K{H=^ zvgvmT^v2ZpdMXv&CO!H4^exalAU)ai7YF_u)Bk0jPDM{hPd5GTf!>(=Z~P4Aw@Xhpz4eg}hl4ToqoMh`^kma-9{6ue{S0c*z-3+6F?39C_Wja-W9l!1 zetGH1aB|npPwI`Se-fJR(vwZ!KM0R8^*?Q3kXm*sIZ2HXty)pGo z&B*+wHqaYW{~k26q$itx%Rp~T{aVkXE+IYH^zDJ(nEF}JTqix*^l)-K91h0RcY6Wz z%A_Zo-s;cP8&kgxGz+CCo8I~ys5hp*37VIsC!2nwAUwv@p90Oh(vwY(PslO-H>Q56 z7ct*eda~))2=vC(cZcRDhvOR&o4!Y&H>Q49=vS4V{C)a5Xf~3bZ2D1w|HkzHW@xsN zo^1LZ1HCczpFp#R^kmapePcKrjHzGkrBt-P^kmcT6!>pU{U~TAN>4WZoIr0({a>Lu zOnS2EHwg5`EK^~B{Y{wPd2^ffy3coO#Ob)+$25O^cx5M8&iK6 zH1|nQHvPCjZ%qBO&^#$U+4R<*!0;GTztYR8=oRV7rnh%Wy)pH}p?Oz&vgs|&P;X5A zTxhJ^BPm1eg$LJ(vwYZ^>g}fO#N(VHkO`j`hx@i zjj8_(nysZLo4y?Ajj3;b6=TrSlTBX=^v2Y`49#%q$)-O&&>K^qe+}~_r6-&I#6WNC z!VgW0g+I^_2=vC(_xl6JL!~EwpZ|A3bF}ni)2|!&Z%qGx56#KalTB}77!C(x>VN)v zDmq(wvgs|4rQVqOv!J;|da~&U1>rHK{zYi6lAdgOOY`*KnEF-Tz<7}KWYc#G{5Ph) zJ2dx5Pd5FcKyOU_2hcnuJ=yeDMld|a)GzTS<^)PlHvP_l|Hjl0gyt3L$)>k7L;sDb ze-xTOOHVfaI)VSj)V~AG-=!y;-sy3b>!6`6K1FmlC zoe2LQ)V;`dud(uz&q96{8n!(bRJAL^xt*^D_j;$3d;J0akDcM;nQZs6vW)jKW;}ca zO;&oc=|2p@W=#E`|CEY~(vwYZ-x~clrv4Xir=nw|C!2nmz<*=v`$Kb<^kma70U*bof_2l)T;aZq}-?0{E6KE{m_61j` z+xB-;(XZgnZwp2e79YkUv;_DD}Qy?v()n=$p*Lvy$EWYgR8Qg2Ls?fY2s zC_UNqbA#|0Q-2vWFCOK?Pll5V{{?~GnEG8lz}_j+lTB~+uHkSnrv4mg{vkct^dkfR zjj4YJn&po6;USwoALxy#AN7}1)I)l*>5mQc#?-$6O<(EBrr#mZ8&kj1hnRCBJ=yfu zFEJbr#?+64W|Z_~)9)7eZ%q9~(9}s!HvOT2-kAC|KEj$`>B*)a5a^9vc%V7f!V~Dn z2YO@be*?`q(v!{q-htkj`ZuAOCq3Ep69c_5^}{|+MR!V1{yzOJ&^#(V+4O4#{u|T( zr=WRBda~(T0OaBL$C&z^KgGOO>B-bEZ(JQfrrwzP{r-wFU3xM#)GrSpQ*TUt!)MqN z;~1Zw$<$E)a~RVbQ-1_BD@so`z2(pJ-eu)i(!ca%(_6chdSmK$f@ZYzWYhNwp4XWANzi1ZC!2nDpf{%eTWDIPCz~F{ykmyP znEE3=$DAwa$)K^Kz~8Y(UV5_WCkJ|C>K8(Dru1af?~_WxV@&B--xe-oM;q$iu+`U!`_!I=K9@ej1Ar6-$yy&ycs)NcdL!_t#YKOoQ> zQ$H1&m!v0~e&;}MO#RK!{8@Uk=`BqThl4ToZ$k5l^kmapJB4~=>dP($| zqHrK@vMlCjh-ZP<5&spuk-0C2K5_Bjm9f8ocp5741H^ZtL9&;4=9<_qL%bP2@{D-o zy2yjXXMv}S7lBU_uZ>7QOPm2;DV`0!UHlOEA#r05?9(g0a0AqV#4~%MA4iNu|3P?O@oV5^(1_g_yTbTmEdc|Lk>XN7GDZ} zNc_!#NYCOg58@g>AI_a8V609&I*s8n1@n_&U;w>7n?o@m!_(t(YO<0d4eja?k_;^$V z7m8O#CH^__N8mTapt#MgjZ#IMZ27_)e}qYyvhKKPzyif;vUT#Ecn zd=t34_#N=(;!iF^U$A)S<;ds7Mes23eDE0Ys#oB<5MKc51`9I-##ixPK6n_c6NW9*Acy{q<@D1X%-^U)8;w`}sieCjkExzgld@tey z|AM)g;+`L(J|Nx={Iz)I$LJq9)yGNmXK34t7lC_-d;bmnapDEwoy9wRj{H+R13Xsz z7Pvv&^Gm#U@onH4;@815#hd;EWrX-j@HOIpf^QWs@iq3-7ylakn0WlRsN;#}fZrCs zj9Tv};%hK@^jq;&shVh+)BN*(0bWZy6l>8p7S952BYqgXm-rj-cyT{;CQcMj1Wy;w z0Us|O_LG`uw)kl9CF0w_*NAI=it{YQ+kqE}Cxc%VUj_a^yz-JY(LcnSfR~x&pJf1e zE%7+;FT~qobFpp2S1nx=?IwN;JW9OQGBr`X_*(E}@vhx!qNBuHR;-D>6u*y2nLj(-hksox8d*zRT(u_ZE52wo?BOr| z1f32Ci8sN7!h-lf@KNHiYt}?(ivI?lD;|uEn6DGBw^mJbpZF{A6XLDbt%+U`?|}(_ zuZfr05b-Z=*`y}=Li`MPi8Flo|FBt2w6u8nU(`e^i%$WsCti2+nrJieT<|vHo42Tm z_7IQlh4&)95qyw%?cO!fB=MWzcJZh!YoZzA%fU0nOZUaOFyhbp;eCl8$KtN5#BUC) ziEa`SLr-?TigY%5U(7n}Ty5#qCpZcCh#r@cH8H zrz39>=MTYoDB>NCtcji#_c;OQl8AepToZjRE`on@wh!k!;MK(2ol+BRBA#$6&Zre% zaT?C)6JIb3XVVy8jPtg{JO}(VG0)UKU(EB7=ZSe1?X6;-Gy8~`XTm-s=6SF0ig}i6 z>Kq?Vp3}OTnCG$f5%YZ2A!44LI$q3kQ74Ld=IJ3~o@aWBm}iyF5%V0HX9I>6nJo9UJG0)E$ zDdu@q`-^!NRh^jUOy$KqL#im|`B2luJp1V=G0$~6S1Bc}UE&b)FIP+?+p%c_z;LVxD*NcQMbhsYU&MIn?2KPR;USo4p85aG;JfC8qm}gH65%XM${lz>pqDjp2Af}0V*29tFx!{w;JfmT@X}Y1$ zR?M>%=8Ji5!fj%niEyu&=N&vL=2-@>hJ>_Y#%+}C$CG5754DdzsJn~S+u z>h@ypgE~;mJxIrjxnF2T%)L5W#N1bNn)r=IjI)cmzvV13_oBQ=%zYr|i@C?+ZDQ`< zc)ytYF+L&YUW?C*xi{eJV($C*ftY*xeIe$4eM?;ApPhU0ttjR`dp*S5L$9xx`{V5@ z=H7REi@C4e{$lP~*C^(GbW_FLYwmb4_mMk8%st{R5_A8z%f#HJ=vZV zbML8_#N1cvEiw0x`dG~UpuQDzucxIi_Rq_GoK_KYkEV6R+<$2!G51#LCFZ_K{l(l9 zX;(4#I~pS9UPk+fxlhpqG4~*96mx%}$ztvubhw!N0-Y%4o0iG1n1qDdrmC9mQP#yN8%-d-oG_-R=Z2*W^wVbG_|!G1t-_Bjy^_nPRR# zJx|QFrI(4hZuELF*M#0F=6cUZ#azqzf|%b=9glwul&he|Lj~lxssUcBD;&Z z=5Z@A*E0?jbFJduVy;7+Am$pwiDIrFoFeAhz~f90K10kkeV2&2UT?mbYw_+7bDiB| z;)VxN-if(B?tL-WzI`s{y0+S1`RC%AwH3r%kG7_mYt1$ga~;`MVy+PzDCYXFeZ*Yb zl@W8@R-2e>vJMw>z12x#uBDnS<~pg1#ash5U(7Wuw~9HR^BythUOp`5Ji6z^oSXEX znDdVQDdsr%(&&3-`OY!!)x{kD?Jnln?nYvc!)`9-80gkwj&JS=M$#IG-18=Yb22c<_>NY zcVDA6Iz~JTJV(63nzhj_;*sD*;yK_q#jk_E5HI*S;s^ca48sa*)kZzV2ZOg4&jF7V z&sZB_5O-gvHabka0DOjc4gXNp}a<{3;^iFpRo4Px#+d#9Ltlszow9%V0zxv#=|Vy>55@+yRLY4m3oYois! zuYlJQ4=&*u#kZC5T;es_k@mzR!TX4x1RpGprqo7R@wwoF_w%MyDAc ziuIe~dEk4*Cmx1$D_#J8Nxa74wb5&0o(24_n0xSkEOvYFUhSWkd$lbk=3Z^fiMdx> zcQN;B+gi-M+IA9iKZ@PN+>hcwG1r_nin->rXzrK~JX6dyr{{<{Pk0V_8H}ACg>O^b z4Sc_NKKK#wBJfkbbtOJ3vs9|rCr9tZ9%{sO#>c#UI`R>hlu z$BUc64W>D+Hkv5z1D-1W0(`i*`|-8WapG~{Q^d2tmxT^Ti9m*MZkv7Gq`LROIL4y?%8~w37JQdob5U%yXzW z6@S$OeSP9R*ROH=SS^pd=p}GY?vpk^|A}}67+rL3uHPHr>%={}*F^VaQ|FE-xOjGy0^&OThi_rU#?@#f5n$7+n^Q zFWVJ+qKUU2h`D0oV+Ua02l0)&V2-S~8{G5aImaSy#Xs2=;TLZLM$^gp&o$tei@(?l zeU;*G_pFIf)pVNc(C7c0_>6&wb8#PNJ{GS$1mjBL?ZK$txZi#;0OJ?p!Gke=A?8^y zTZ?(F&0sOl#2GE-`6&mBdDaZFedj07wLuo@m}j7zA?Eo$^Nh!$pFzxXd=`p%#?Y%` zo*(qCm}iT8CFVIMOQURLntA0|^reWoXZS{9?x(%2n0s;WDds-met46oP4Jg@3gu{$dY+5N98Y>(N)dyZDx;&?hgR3(W*^cW5Swr$2)6BXRzB7(Ws}^-xW8hWOma(B~;$ z8-8A8dhjh`?)UhRn0tFZC+0q!e-v|%&5y<0&v1#K`e)=`e=CZ)ui*M(?qS$Z%>4rg zin+JjNHO=-OpCckU#pn=;~ggE-gGC5xsT|XV(wXbk(m2EUL)q-n|F%2ujXT7?pgPH zG56DZN6ft|zZ7#{(Ap*ab8(Ns<;2`CZf!C5e%xHleIs`ga}UE|V(xEwfSB`~Cy6 zJpV1lTvISm%=H?>#hfcXLCksYlf|49ewev`h4r&y&JDg$%z3ldin+#Nftd4SpAd8I z`m18Dhx$OwIr;w-bN$6~Kl9<|T7Y$p5pTW4oZ~$}%=ynl#GFgNznJ^mH;cK(WU83+ zpN|o9Ey-zOp80aInCH1%E9O}(cZlD@IMKu6i*84rEN%wBDZUN-7c#z?O;9KQM(+3F zw<|2|pKJ9yF}^AO1p2MTBk!n*b|vGtx1nx7f(-Kk>ahn&bK?T!1LBYF#rT)_4UAQt zAl@a9F?4Y|_%hRAjPloHn8R2%mix&l#~&4ULp|dK@f>^~Z;5%f<|ksFyi3gW)Q^a{miz@V&;5MM^x)6MJl}Ikyl=ico@Kd;nCEP+FXo!=eqx^2 zIZ({C?IXq9r{zE~*KFp=NWxre}0V(#Dax|n+@d@ANXB+>Fd{9NPTO}rA` z#hPNSRo_s|b?AM?+|y=fG53=hD&|>!W5ryz+bHH5^OATr{5(p`vt>^ePet5bDCQZd zSBtrx{Vp-r=07UtK0MEhxyJTwG1pUnDt3F1tl*!K`+lq><{l@4QK z9D9qor^k3P_XC+E=3Y1LV(w#ejF@{Oohs&eg6E0bZpV63@%o!#Pc-poBWj}i#q-ce zc|puGw%!)=tdmd02WQa;TG2n(1HF(xig_k`4>9*m-9o(HrkE!n-T{rKA>t3wcu9*# zp}jCge87R2e<pR4^J&7|I#Lqp8z2L?BJ%Kz~Tm#M1;tAk) z#Ep+*jf42s#}Jm4eR#G;7}giR2>sUL$6my~65;^}TZ?$Frx70Ux8TdgXTYC(#D_rt zjCj2lFt1X4J^cLHD*nFR@r>(>=fR(y#IHSvd6MEo5uS;$BC+@#3=BW3&*8qhcxUj&;`Pz) z+d+Kk&S+DZ9^53}V;9Uv5_f}srg&NSe}Q;S_&HC!1%7+8_^KT-2T!~%8uHJGGtj>& zo{nevNW2vE--xflbFH+R5C8AMn~Jx`eYY34A#6j%2X9jo9U#6C_i7fG9;}HD6@LJp zE&e(9YVo1>qfIS-1N^vn@B3<^m&Koh-w}_00R0%^-J$Qcx)0}VDEC(rbG`fqVy;!+ zTFiCsdx*J4ew>)=@f*clt3F-Kb>e4;xyJk&G1sTxE>53W6Fn&22%R3!i2GcNcowe; z{!Dz`xi!&G*YIIp7w)Tzcb|r|A)b3;O|+eOg_+26#M6(%oI3GG7h-;_I*U%U{S1>$26x6g`8 zc=q?jzd;!OE}mOJ-2U8$dDSVHwMBD)WR($SdnAeK_ zGKTZ<`>`HM-0hm0sGoSFV-^7h?)Kw^%b9pINViy zDm43wHwM>>>+$R*@pc!~M8}Bh5O1f8KgYK@SG+Rjf?h{P`|2+A$=@M&KKBD)BpLjV z^=tvZ9q?BHFSTBxUoqgd0`3`bpMZA`c+Y^x1>6+y^nhmud``e~1D+r79RWWa@CyOI z9q=ase;x3W-IM2CDc}tP-Yno90^T*?Jp$f4;L!n(4|rn0Z2=z=@W}z6AMpHuZwUC- zfbR|Xp@0_!{A|E)1^iyXp9cI@z%@ORcv~vq8B$p9=W(fd3NkR{^iEeiA<$1>85_0RitB@IC<_7;sa- z#efeF_}GBY3V3e7^8>yi;M)SeC*X$zelp+}1AaZ=KL`AAz^M(AI9WO1H3Qxv;2i@V z8t}+~#{@hf;8MUR1bjijHw1i7z|RK!YQTRC_}zfN2)L$a@{B74yg|Uf2zaZ2cMN#% zfDa6~CE)geX9UbO{59@>>`U<@ce*p4ET;*FfW+==sn7v_! z!;F9#39}E(zA&R;M#Jm}GX`cX4BJrq!yEuJ9_B!pgJ34Wq+t$*$-vaX)WbBuWMSCe zYJzEo$-zv7nFN!EX@O~lDZsSBOol1Klwis*?J!edrov2vVSDWmm_uO>gE<`L2$&;b zj)FNF<`|e`VUB}29_9p?6Jbt*IT_}cFf(CJfjJfCG?-a1r^B!fcqYtjn6qHchB*i3 zT$uA<&WE`G=0cc@U@nHa1ZED*T$o?MTncj;%;hjwz+4G459TVEt6|u-oDXv?%ylro zhPfW*2ACURegkt8%*`;jz}yOR8_ex6cfi~Ua~I6rFu#Sl2WA1xy)gH|+z;~r%!4q$ zgLw$%VVFl?9)(#5vk2xfn8#tBfO!(;DVV2Wo`J!C19rjRelP>PeFoer%#6jj?+W*U zy4Dwew}ROkra#O!Fx$dx2eUoQ4lp~y>;$tj%pjP-FuTF*4zmZ$o-ljC41pO6GYn>L znBg!ZU`E311G6v8D45YO`@xKX84EKGW`CFiV8+872y+n31ei3;!7v$^I+%Kx2AC{N zBTN%aGfWOCPWiXe+Tmf?>%siN@V6KL_24+6YwJ_Jg z{2JzZm>Xbjg!v83O)xjZ+yZke%xy5Y!`uOLC(K@F!#dT2XjBn127N5 z{0`?B1n5ST#hUp%qhi9jiM;4}Liz6CG;|Th6x>PRq z%@_tNY_V7Q+h zoomgN6H6)E(pH`x+gq~b<}|`oDrd@gCjG>@7PIx)+>~skV=3F(Q0-FnV;}77wEApY zIqfZtZS{rLDe0zkV+(>Jn-7;Pc#d)bKIdAq<+KHgPtuxcK@cjOONIJLfwRAbQxw|D zjhU8Q9?xfXiWw(zDHo?_>KU@cUYFw|IX$i-psm^Z;BtL2n<)oBZ^)GbO|INhXlT!8 zeZ;|=0(@e81Mp0G6Z!VcuIaY+QgfkhqVpUMgVJ@GVlkI3)@AA^Md{F`QP%oQKEKDH z(R<6aD&rrfwZkq3T;R#i8pPWX(13I63XqxR`a7&E)*G&dIr276fr)y!&q46y^Fi-9IEYzMa2y+SkRBEr2I$y{%SaIO|rbA;c{xz)?F@`UQ z-i3F76GF>k$N9i-KcBN3$mUC@g5>I1$YrWl@F&Mnv_SWQwQ{xo8w<}6eLrFV7_lEB-*EegqP^ioK?{Wm* zRD0{BoR8KK>BhRgcsBR55%{pmeH(owj7aATO?~B#FUyy!-op{Dq-_kM*t<-rbV7lY zo!p+uk5IWX!c`OfjYlFzbUVr~Whi4*1~}ixq}`)f?gi_#Y<;_u z&lnesIQfoA=d-0!xtaA^+A;h9#+&GG7PQz z;W)-p@Cs;G=`fCW%(b?)`}Yd#^wx5w!mn~+Qnt0P#ql_V33ea-`=^6y#R15sRed=i z3EBZwVL8CnLQ8F#djDPyU;^~POlQh%nbw@IMkRHj>ii<8MTF6wu21SjX89IcJn)+t_2OPtH_Qd~bXOMRhTABefMWJ0T>K?q}Dlf|6)47JM1t8ao;>f?%Gzw&96mcF5hag?S79dr#j2_vt(CsSDK3qVF3+|U{SICkv%R>D=dQt_KCHTR$V!|; znB6*ue6FdvTzPZ)9p=JLXLSH?Nj@`Y45#W?h51=KTVT9^pN1(F)+D9UlB87Fl9UQdK08H~Cs!F^6*~5^ zDjh-{q&(Uz<$)_w9!tn}pDQ4TsCbd(LRIQ37b;#_xlr+LD)Kz|)#lVbhle$M6XinX zdyeZ6Y0Jd@gH21~b9x*vEV| z{_A#}Z&U5o*;+E?=EUcgTuT;Nm+F*GQ1DUb70O4}_EuGay`wrQ>@ktj+u6i6yWTgdDa>8cbwzye^%>TP&8eZ#T1F2IOEhy**<;pR zTmN(mDlj?zFx^~e!_#$s4FwhI zQcR7Og{#t!tQ@7=y5aOuT| zt&?{q?-n1f;5X$mGAqU{e^m80=@hSz_rk zvpy?XeV3Jem%fL?Y}S8ec6DFLiaISmB%~kNn=+`~TStMpG4n2!>!$k@S?%ikKIBSa z2M=-ueVh`p@fkc!#gqA}n1tv@Ld7SrG!_e}Kg+>KOkicdU3?8qG~|V`wOohV&Lr12 znz*$VT01&7x0f3VQ-iK(t$+* z3|vsEGSdlMh>3#_id}BW6xps0e_^?jB*`z`1%$A}1qHEy@<2^bl+R?fC!LL-KKpp! zA1_vPM8qy=+4|aI>|zlqhqyPw+w0J}ZB@T};F3jE)$ZdY_H70l)gwa}M7!$@uJ|cy zDLGUs-I#&Y=$KbDx<^589#pJF`|A}=3Gak7R^bKgVIX0xyfqvU7aiO>35-5fe;afy zWzj{7nmFIM3mj9Vbr#4auGf1z(v%CEYx@UI@vDMBb;I~-V?KjgOl(DwmM!{*OYGK? zL3_e?f+TL%Pf~d=e7vy)ZTdJOabwjj;>)fU?JI4GTeiM$;KP(GHn~qcgtebpb0t(G z`v=zcD*Kc+3}pDWw)Z~IuJ?)vWdf~?P<+r8-moR(8$;d?+B*p129wuV6Gt{=O72~@ zWKe=9ZWX@pvqP^EDoTj}UsioSesNBLK9cIUW9}V)9LBy>h`%^?6Q?+a6Q?*@=~VS4 z)2UoUtHh6%Bmr)(E1^~!XI{`6e< z#??LQq>LRzW_yE`)+0uZYRk0_Lj{H=N+4Xz^QIL1%^&?ZMM%wc=-tnJB@OsRa7Or2|2`AT)q{f6%~u5X_{h@VV7+r$~< z@%R@7vi}#ER|Yr36SCSJ$T2()$9hZ=UdZ1f2> zJB?ie7@xvOIs2mUjvDJ*%lY7UjoAX)o*3MB!-XFBSBVSghAo8`e0|*4N%=3^0KO9uwrXFBK9m>>Ze@5%*({P!V>!#nYIODF zz-u%$Sglo{5!S?OSkMKFe_h8X{)X+3*y<^bo^gXyck^o*$Yo@hO%A+$PxKi~(+mOtIt8E-+$3OV7rI$9}7shv0YRlH=8rgSl zj+3&;MbzFjw-$8TOye^nWmLMgD=RZs3~3{&n+?wv+@Kv}q^$ZgwMOXdWXq2!H3%%M zoJv6V`Y9Fe^;6i4tZ?$3b454kg0>W1NL?!;-?uOWC8xVoS<8hAhq8NF2(5p`^uwh$ zm$JZ9P|CnDX=LV_TG?UdG8z1X@7A|Z@z*~WlAC+s{L2^4zb^YBl-iK?0PZUa15z%! z?4#1j6^~FO8!ctcv(^OKeA~3Gu86k-U3_D(bHJRON*|FC>H@!U$dLCYK$?!Wei+#< zAH_d-P@m|_Ep2`@6o9W1)RH{f3FbuI@+M&ElslyjxtnTD2J zYwy9?(j;_u^>#%m=Q;2;y<0N%t%ZrXa&OcvdPjLba@MQU-Zo& zDl6PZxH&zgEm{j`!Q^}Aw%WEoZt6zrdimbjWZ-TX>i)aO%_jsc8Q|lkf&M!oj#38z zc`q~#f50P0cpd0h?Xri|?ff$`Ct-SU9lLeNj`+dX;oUmwy=z-r9-XZ0r!4gz$9WyS z&~wsz5c+jdu`l5zVt@dC6nl?Ei>VP&S?axarhdezalJ4Y;T!_ZsKG<+@|JyiZP~Y1 zsbNy@_ENDo8}scA+1~Z6jP*j2tHX!J;aGf*9*_s40}QuvL2;SCZ|tK!%OUn35YMic zzIWtju60>#>vo9ksws1_b~d@r=Sk@XWYkES$jVWj`yo$=gy}P--VrLLUG|8)7oIPv z2fH34)qxy0k4fH9EsF1B4F1y4He`E9RY>o6gFM(~R}+<9zE)xA9hryc z3SIUJaVxyMPG|kHKO>XxvXJO@K~nNrI4Y!mh_)iHKxA?7@VoNXATMP%EYl)?!VE01 zR_3A=d1gg68Ruv|IC0Lz##5KYk-Hh+7iXEX#uDTA%^P=*9yBoZLvv1w7UwnRk*ghK z_R4AF9RKTNuDK2K*^h#$>3VzUmO}RBuFD01N*dDP1I`SAt_}XM9Lq+dofkhe`$DpGQ!Lz%kOjusnRker_k6rKZ*#2< z-$%oYQ=(q{2`gosuhV6(!`&=+9hxk}S#xdd9Ks*;Ah9uy=S;gMJ(fn{FFPjr7g5j7 zSP*(_+b~}|OKxv%;UE4MwKXC$N#_&hV4=?jafMC+twF)mO_n2WhPTTt`uYiEWz0%Y z2Nt>kGI>As6WN;giCz{;xpIq|thG!$|r&PetB z)9xGT%Uih$u=Aw8xsYS86PA3qAy2+$dafsg|NQFw>~Tbao*Pq{U1bCF_VMWKBS$#- z>}qd;@Yt?8#0RL$VxS0V(|(T2jRo{*;4hpIub8j|cFV#D_N-(McVVoPh{`hLB-D87 zo0$S>fg9$YdoRktEfk-WpkJxUX%Q;g(dKrqmbo+Sh^>;|dPAWd^W0rWK3=`Ez)yC( zm73AN=3W|Ng;w1Q&+0NECvzcjgm(saAm4WbrW(OhpI5mEbG>Gc;zZJfDNhDg!$)o8HEq1FEC17_A=~#cpbpFs_vZwHzbqLjX6Tq zd^IRKaf+wc()ajR$&|MESBVo<6|>yzj=Cx*s;cHJQdQ+dRVOn@tDLCf zWJeTti<$b_=@q))w&7GoW!m-bJGZq)hFN{;+@X~&T67u46R^u*tE-E>Vr#LzfL#pvc229da0&AYK1 zos*%O=;Wpjqo&v7Y7buESFQ0!Hd2Ia*A1%EEf8W!fd2&+2BNZn8WROB>m_LT-3{9) zJnoiBMafqgtO|te6J;J|Dxg$nO%k;j&X2=jn<_VTnCgQ$=bG|{GNdV=Rd7(P;^4UJ z8+1RpyU>vnjf6)WS_h)22SCW^|cWzwvH z;k99^4VU;MMlp??gBiMsS=jsa@3lC!*??8=I7`^rN?Eg4jRPQaNji;86Lzd2Qwy#C z2d!2FVR6k^r9zV0LSrGoJ0YWIkWzFa+-H3LHG8qO3#nxUK6t;&H1W ztL564oOae=J{QRktqo9>3dVZ2p?t+Hsu)x5*lU&Vc8?|9!>SQ(r^e@Lz=eMqK>!-?>6tG-d%T>Qg@ zE?&dCRBGrF#}IP8I6nO7Y~{VZ8wZf}G^llJ^A z$XK~dY{iqREQ_6zR!8iF0_%rvM8l@LW>UpJcdd`=+u%cUPMQ*0Deh#`noc*T!B^`2 z&9j=(WijjT=D$o^6g?OL*gc*>LE9+xE0D)v#98Lbpon>^sOQKo3nk1zPrD?c689UmKKAvA_XS*0;3DfK#{; z&z4E_(D$z6#%Kv+s~UH+c*-s+U6_uW&7&&OhMAm@qjKhNLdeUhorP5wj?~!w5TpLi z>8e#Yz8Kdv738v2uW_ncH)I8q)D>%~@R~X<5W;v#C+mi+K$bUFe8u67yQ(Fy3Wn)j zWjC+{tC!H#gWd~WqoraQluDiWGOJdy;A0PGPFB16gdkT6QDi6+kz)sk>ZM%adNFK2 z)OA?_?&ZI(LHL$B?r4M=eA+6hvkj9aT52#!cuuRhqwXL z)G}!|yQu5pHNInzcO}b^eP}p3;GTvbot)xT$${PLxQ1EPogXsS$j_!i!b86%XKcBj z`|5)%^^HyPFO5wc(E3DIxZ7CBNrS6w8a7~WFY|?$yibVhj+cC`CGE%8nA_H)w~}*v ztNmp^l=^r(Ud(YhNe<0xx11k&X8dd2x^qDzid2lh7qCnRZ9DfHEhY3Te?k{Tj%xvi zZvJ*rS5K@%i@P~~ONv0>piN?qBb(?D#g-j>^Xu;oZA=3Jw~pC4%9H_q;)^m zE0G_HN6gki<hg$uN15B`FBcbd1zvCPFr{SJG8Y)7_ zX!9X<{q$WHyZ&wnkslrimM9@dtyrYhVTlz+PyIlT{kY>gOqBNFDlTu`%JklfFUH>+ z)^ITytid`z*g9Rg7JAR2o9|jA#_Qo7+z?^qa=8xoK+r62^P%LAs+<^8m@^cvhpb%d z*vZl^ed+e>tj<>`F0 zZJ#yy2WJh|b%c6rvTIrrFRH0|hYAbAgRItHKzzDR3UAAmIxI*~eq^ zzOmhdy09CZW>wB-%Kj-4sLG(jL;X4khhI|dN{)(XaW0)l0sQg53cO*zUA*MmTPmMP zZj1G?!UONIn!4zL4{{{)ke%gkb;%t%w2=!!FWHR zl{ts6)%jl|VO13naOqfxR4$Z;#E+DDKPn%f;|l#wc0q_&Jo|hByWsc*&~fUBUHmPy zyf^8?Va2%-4Wwz9%7hWNLSva*Q+rp}eSsNJ9WLZb9o?ETE%;Rd%}T60)uwjd8}C#u zI7P)3zck5>9r@r@eFSwF9t=Ny+VNW0#b^nMPWV+PPSrUP-xhvc@m14}_Y7A+yFi=w z>UeUY({gD4Rr-Ez^vJuPqp9S)#$Pqa_VT3^OK}x4+6=PGDtUH4U-7Kkrm|uK%V5t+ z+pi6a$6Pf#+#;q3*W^lEN?a4lF1)_-ohSAZO&IF6)q0-4sV5$a-IQA_n3j^ai2Z=2!VgsL-8P?S*5LiNx3o-W zaMC_LyK=n}-yiN5e9D%iqk4+j!JOENKGJ%0zzMLuB%_D1FpX^#+aeSl&wdRy9~?34 zH)LqQ5Qf`R8N*cGiT~o^xegk)vcU*ML>JC;^xJ&!srhB})d-|7NU?LN3kuq$s^xnKt# zc9v$V7h7uhX)}Iy7iSaULub>`CrUJ>@Q7|4h`++l;jE`IQP&}HbGtJnbj~A39gzEZ z`bFFL0^oy_vzCW6-ChTukrlY68wcv$+QmWxzIjY(M(_W0w*Zgh5=!>yf)=^cK!Anm`CI=U7i{FZoRfeE8)NpB=pkcpyLA;lwfGJ9Ar&FbrEF zE6Sohq36K|T<5~-edgXWn5Tdnxxc;;!DAG#8{YJY+lzMDyLLAV@}OXEQ-`WiG;mln zbg1LxgU}(%<)NX&WMngy_Nm;vCUk0V?chy&YxVEkub}fCy-|8HYCY@@B~5O}@fb)- z{rmY|Y`Pf@+IQIQQF^z1{9m7JC%37eVsabq?e>nvZ-x0OUD#EOd-+)Z?oGnO{l?iq zAH6q9SXaz-*lRr4iJV!h+n9nsNxS1KM(?d(C7YY0EODhle96ik_bUwL#uwrp(0AqO z8WC2nV&B{@OQO1+k1p09lHHK;2pudHTXyqm<*weyak!fTstznn-8b(C{Dr)LdjvMf z;+?-cJwJrGnop6X>6n^}?c$yPd$?wxIv3#ydRl!i8g9|y3=tpq5<5YMlT11sL*mr# zn3DSTBKBV?w=rk-$o8vp&|Qm7d-HqAH+0=nUf#>Uu)&N?7g9XGig~{(!Q5;c z+l<7sFr{#V!-e|fWkKloq=}EWsXkJNsWwgwIAI6*zw6PWF8&efj@}hf9Gus~O03(N z+yAw#z08$qBH4I4KD`H*dAbL_HqNS20pmQ5AIF!ZNMM*(#xk63FN|4t-M8a!=U+v| zfj&OazL|qCSDyaE3b_;b4+W*8^M}s?E$abDTdwSvJ7dT>z#XxU|C{QOefZfTUG}uP z9iG;c>p_bf!Zvk<8vvn>lI8?ce^?8#s|SCvw@+`ELEukg1BTY!fPG755=P`p=vZ)d zeFo8$TzSmN@3LrgH}gs62Oc+)Z*XmyF53~v-_8fo)k?LKdqW)}((UOELYC`SM0)ml zgJ++gdsa^GE&hZSZZqudad){n#GB^hIx@ES263_E-4jo7q0$pLgr2ypkteYrxVASw zgUZzfzI3x@Au>SDVy>TL1M#SE#y$<*ZU6M1BSs8mI5{I9ySBrRUi{Y&*5;Xxx-JR1 zyZINiJ39h?$gy6U*@L{K^W(+B>&k4L7Tz<%wYxF%sSElG^EP~KM51*+&pJL z083@IsOijV4(@=T@fN<)Lvk1J1?kSt$t{khTXIW<6hGG)I-tZ$U(Uga8*Fk%Az)kV z=${Er@g8hsH|7V>J&@9JdJ0Ua5iyqC5mx+HRX!g#Zbhz-C>KGpyQBeU_hAQ0|7E*) zP2}dN&z=?2uKVoW-F%`7Pidoba`s$skek1Nb~8R?9!lpszMKU`vz+<41_#FBYhC;y zZ}COf8pq&Mc(clb%Z4Ixph|{GNy(9KXgHy_7P%<8h57(}J-alx1AGf||Sfmo)R$+3&j|8-xjbCeXn{w5NG-nN zvkmtN3=9s%0&~5R+-;aLvEp?m79<5(tfAt(hqEt|%@))qos;V~#sM?>aZ-HxtFAzD zXp5PgWtxs$V2W}*x_lzPrn4!F6D@P~uIP-ttuNSAfA@0^H^ygKG3L>R$F2exO4enz z3w53pFHbFU;|q694Qae-^8y>Pg=$<0UCx~@dz&HN|O;nZT^0qv^vE^gAnIakaWFi7T$fy$HhP<^n50v^}38-i24up@!@ z%rYF8=l9LWcH)ChY^XGb9YiiF+RTYjJb+XQ60~vq2F`} zvIS?aI5pExt*e%FJTb50Y29r)KOirB6nxccH8LnksX-gwf#o}59a~p1M@_%0%xo&M zNtRu~O_)!`XS2~`I4B`H)=l7A23Ik+{OiXTzOv)}0SEf)!fv(N(4$$m7O0ax5&{4?Z6JxWewwbwrJ+ z3pWY%ck@{f54N@QNf48$2b3Z$SMIW$(C&v22{p;WY%Wy>7Gk2sRlL^lY$Uk&sSvS$ zTm)1l@-+?f6-m!+x+r_%ySo4nJ6zCrP#G3Fy4~N=CS&25M*`^5x|Qx{FE^RtjF43x zx6I5tI8-<}NLa@O}?Tj!qd}y1|NSDy2wSJNq$yw3UxAX(mfv9 zhLv#whaevxR#9blzd%bXJ|sHZ(pH|X>2(@u4xozJrUKeQ?Jf5ev0oO$}=?#h@1f*wy7 z7eJ%M@2+f{e4rDN-{1Fs2I#VJ8hpYh{A}0s9A|_Y}K``3*?^b9Te! zuCZva{qODD`hBr&%gJ4w{x|KAnrDywk6VuZxaH`7z?P%F#=&M3rZmP|Rbo~hdxcQd z|F76-673|ntzz8hmL0)IXRP0?(Sv(Vxm0hM*U3J5sCfOj)f@&h{{5}yl!+t5`!{!Y z>rlx4d)fYX)JTyW+zNRss=v2}`rXAj2U0lG#(DQc%l3*epnedyXf05c4#`$4RfS}Q zwI7B}|AlSJ;!UZL>N#raTOEF1#Ml;(!s_ae8-B&xd-*A>|K}Ti{h;li(1G?Jz2}nO zq9)js#?Qz0JJGO1$ZtM_igwj*GZ;qt?hRyIce&e9g|#f#i2ly~S;Fl!w0}jgpURKB zt=RGI*0G}nwMG9wa7{m3rWi)7xVhY_!}LR!izf@deTTNX zvUQJm*>LQA?DFHUXT>t6ZLk*WecACF||V zHsJDqxU?-;J7x>Pw89EqtMO{9|AJ*-E{XdA28|lX?vSbD9uK*eHcT8$^W>RALk^vH9!nmv&wXosLu0e| z%GpY0qsNVXo8>XWS}wGp4VTAIKYfwa73qPU0mxt>BsMQ?=J9C3rB0maSsDxEWAB`U zd#>PiX&3C!VcXy*zETl-;$1>tyi4efcM1Km;8lbtb_{)s9YYUe$I#E}*r@Qk!^Q9( z9WI9V>TofDtj>o^lwzLxlmZ z9sQ-YqrY_R=r2B@j^4ttqpxu6=qVgK`iaA`JMomR9et&1M{ns0f0d-UF&D~OEWGH% zi8X?JuAaF-D0lm0@R42azql(Mf6UD$aPT>*emtL1zw`4&%@J8lOFL$Nar}mnt*uDTH+OSAoSVz! zzwd}eM3)nHa>mAY9u@nX>l2$y&hpv5g3 z#n_Dt_P?|842{a~T9EQTn844H8^OY3__Z@gj`i3ACXdB=Zk)Egp|ewR+&6<{i3HB| z;XKFNjjRP{=~x0yQm$X9WA0(X^;iCtBWiiKj^}KugXiBq+2?<2qinZjr{=RNOnzaA z|2N1TTt%xFW=PS?+f O3KgnRNZMF75&eI@4W=>upz<&8X~D0ry?Ql;7oXhRb?kwj5IP(jd2MXw6B$pxkKVH)Wn z9>oV&?)8P&$3-tHJ}6M3G!&ZhE+7JeyoHGoC=Y3&(tN)?bCRZ|a_@hw|61Sr)}m{r zCue5Qo|!#+_Uyf9&tyYGX_-!^i_q(IF?dGmbO}0L^zuRY9*2)ei>}t`qUQdfrQvb) z?UiEHtk8KKinnl#2devFnF{zx>0zv*<^J2?)b@S!LDO`2q%GSe=;i}$AZ z%G--PwFZ^pkKUVLHs}g?hW2mLq#V2B@tjan^Y-0qpdRUTdE%j?clbC$f3X@qbd~=J ze3Pb5d1m^QY@{^Dw<$&-I!v9yAH9o~igz@&K>NlYlO|>6*t4H{?ny1NIld+F0^g2Q z0YLBJ{cVC9Aiy{6xtvAISJ%6{zGDI&Fb`wB7zzJiq^pWa1EIF`om#CLsB;iO3> z;}~OOdXT?#=~`N%*2{t7o%oILHje9)(;BJv=lB+A=m>v!y9m$xU>=^6CO!Aeq?{L? zeSF$8lcw9VFKgcdtv&Ff@jrTRj&G5cM~_L9o_Xv__!epS7HQq2_i%jF-_M)iYtAQ4 z={Ks6K(wU0C`9j9=94ELvp?2Y!DZtyOq8x6!9jm`zcRkZa~fyu<>OIvuP8lF66olE zIKJ>XOnJm7GCq?gSuOXDG@C3z88uleHC^M{QR02jRPj!93&(Z6PFKKL2yiq$i}0+$ zGx)dQeuHj7E1hoOBL>~>UT~NqgQiBR)1X_{S*QCrGFmt9JDsi#(ne{8k~->i^f``- z5&-jWExo13qJ}8l-Qf+=fV$yH_1y7#uPxIogRWnEhs*J9X=#3Mq;VdLZH-D>>uw6Z z<4J!s9I5zFS!%1k^#%|?ue-&OlYPrGPd!eb(J$oKr#w4g*nlTqz#D+@cOyQ8H+Hr` zHxSI9q`gx=ul`-7z*P!drNC7RT&2KO3S6bYRSI0Cz*P!drNC7R{NJO%SXueSIL`Q> zam;Ah`CGcIY_up1R(GF%aR!~u-MhC{nX+3diFDR=v$vB<%AIxT_9$oFP)D2`sPME4?tFsqc)!F5xWLjF4 z2KF{wVMyE*O8E73gw9oNPmd%1>;;XL_CNp1rV){1|C4vh;f4PQRAeE6>R;f2wkYtV@0>S$jVuC z+v2`US~g;Gpgc<%F zvg|6CCG&2JGAW&sI)Pe7w2QvC7T=$cRmX->!b6EN%FH!yFcy!Pj`WS8^npBmBhsHo z`le8N7oNTe>Dfr%97-p5$z1bhq~{RY_wi~})}jkW=O2OGE|$!Fvgb%d^7-WLva*Lw zoJ7N4>6h4N;+vLlQD$^8D^HFB3L3lrV9W>`c~O)KXFaF&tG&>6Idh}zIbWOy8ajVRqRVaogb;v6y1+)sb#ovP@W-=Jj}lczaFP&g94ZLXFz+crzerBM>WLgO z5yTts+MD;VEC}YT*W0@)yH`+k7WcSB*=yKU(T=Jx>;zVXHeZ1=G5{_(<2CWEku&;&GsXY~amMR>fNR<9 z0vni&cq8u_OXj8!U(`+D{Thg36U?roc@vWNnv_FY?=*HeO-&+XX!$_2{91ZHq`fPq zYh&qsTjP72?5s#I1~xgo=-P>}3J4C9yOG3?g_HPM0htOC%OKnXEt5F48HqW02{E|@ z(ZJL&(lXQ^j@7CJ*xzm?N$7y+;XDbBw1aWMzHj4^T+Y;w!+0|FZcqmz$C;i`lNFFB zTa`M9ye=g2CJLb^_0)B|6bL+z&-M7&@OcLx5`*5D=8}4ZVPXa4j2gk==u3_h=G^zntaG*@_36)9?{V=D}PTqUzX3Ci*_Q3jq8pM`nDGmKVskddwNd z=MQ@u>@B;;GR!#FcKbk%JSTz8MQs+Pl5%9_fK@rqp5uV18YzJdloEwG3G4}v7#|I9 ztm-&dN|T2TK?%3{oU8nWevNHT7Hys=+I&w~o7wL}BXocdYcTp~nQ5|0~`QlOd+f3AGQU0(hpUkYM4n>_d7(fm1zPXwUc?h<@Z=<z+@@WOd>a z(B7n+WGk_L$?7Uk;>Y8+nO@@@UDC>+;$pL45rajx{I$?j-n)%5qKx0e$%_e31 zVo^=K(Jqg**J(@ACQGlimdv#leWj~BZ>TY_HdH%rU}MW(K@UQC;VpwWfc(+tS6bbC zFpbW@XzA5bkld(_c;8vqR+>W+74vXCMlZCCXarS<>lN2@G!EU6)v-(1!mT8>yl6Mp zhb30Y#H?v72lD>7dnv)mYDYa(9=3fW4LzqZ^dh3MWmkmGS)bz=6l!L(F02PYC@;JV zmcTkUZ-i0t`gVzyFL%~OWcNX5hS_`Kztw)NZw015zRr}2Zg1e<#z?MDkmi0*<40{c z!Dp--E8H1b>Q|K|^{qN1C3IZSHxj%wVFM+4WFim!70AieS<-+tvNX(-C5>B;?^Uui z!o!!Hw2h8#X4i?lTV-&IN%^%{FMC)l7NEce$60@O%Ia*%+>C@`Q~Z}AZ#@(xef}w9 zz-!6e8RS9Lv4q|HV}#D8KPkKUY~r)TwHS>La$XVgF%O^8i+MQMTyVBTi5i=@EB zD)2{n8O>>06lU^t^CB)kgL(rqg6v>_OJH-jynsvz7Asq#i3pbjZnP=C`Thz~A-iXT zz>p4OQHiaZ-HuHd-(5VzyyzZv(7+X>yg*Ba#(tQ6b`*>@yIRl5vmypL_U?1XL@k>; zA%1!Bgs5f3W8#;~f%TZ*vYM{XJ&NHsFZUhevtL6;0yl{6;U?%%>3>0YR(crd-qz6F zs}8{`Ft*&9bSC*cErUBSI7BelUaR}rC62aa3Y>yuR!?Hqys|z*XHBZNs+kaQr!a9y zn`pZX!f6!YBf&DUilj;yMHs9a5OpnNiq~0}Y5$AOb@Y3*QfKceXHNXVns&q@W$csH z3?Wo}a?(b*SA{M?MOK8IySF2{b3ZDniExT1zaU#GRWW zbV7(g?llUL9e9BdVc|jqEs@<5mq;!JnPuQQG~oa{`88Jr&~v<@=g$+?H>j#0#KYf4 z=zu( zL6hUMBkw`d^#UF_bB9I0(;E5gBA6DQ!?747dwhf3>I^X;iGpAK{X%7~hf-$IZzgD{ zf}sKq9pE7YVIQ1;0@W=`mY!RaB|RQ>?uJN^X+qQ={Fz(s?_-4q={Xb$+}?6d%pC`1 zWt-f~1FNe_ZnX{4?IsTmCY${o$(wT+o+=VHHsu$|^)B^|mKeTLT9sqW4k#M3j$dF( zl{Y|_ki!H`9VpiepO+vVM#A>@%n;9pX%nUzf z#?P`k5{$FK+Uug6v_tN-k!FUoF2~V1$ob`9o>qP^Ps3UmO1*)}(G}~TqhmNg6aoAU z0JLc)#6GAP|6P5MLtxwXs`AH|QTUGunv3ordX%{rquC*>yx3(790(7avXpYCjs^V>QbhS{_5&2j&763qUGoedUyjI+UNH~H@> z&r?HqhFAUBf>b#I> zf53U6mt%YxUrErrnP{9+0dpt@lGC-@4jnM%38uMjAe9eQKnyCA4Cvg2A@*yW7w&R& zGkR&Y(fMQWg|jIc3&LDM=@FsQ8`!lNJ5GD7m9nyiE9o52_m4Hgmm|Alq_SA2r`ma; z)r?+X@Z|GqT#2k8byPsL-%~Aek%58DKC09-cFw4|fKn~Wd5dyMcK5jTLL|gqH>@7j zQb|I1wxm;LSHKSUNIkqMiIA6xxmI~KVdTWn zACNtPM7C)^=>Ti7HaKpDM)N@(H7!&82+? zI4fImgUH#?K05)*;`OR2c3`o2|eD|HyhG1rQ5>}6HW zrDchL<7nUxOXr@Sc;pQuYkqJd2+X`goH>jCzN z;%&y_Yb*iGtcs%T4rU!Z`=H|{K?&}1#BkjWjR{3G|@BDX}({6A5f%*!0#hF3zY6o(4R`V&Ej^H>En=?9=>AK+hTxq*9F zfv%N8&{lP5N1()XuqqeXiF4p4wNC`KlkD|ll(?HG4sGBH91=O?r{^)oA&>=l1E!-* zK%7lL9Q3B9FjPj~#sh5HqnwVbP^Of)pVF?wdRwMT6fdXXX)D7r$<>?ZAvluDi68km za2j)`hMF>kF!27qR!b$lY-*gIcslBAH&7pFi-AcP4J4SFco|au5-NQ^N++Ku_!{U^ ze+FL*wOG{F3-HdFiPt$=p!=f@^$w)dzR)l z-#CEFKjn`j!LHv3j8HI$#&358AJb|{gj)+Cj>Pz3NQ5F=4a<^ruYPOfFa_2_3Tzz| zSPvA~3zotF4fx+6J_BqK{0#6HSrukgr^doufTU(~uqR-1op+3Ykw^`rir)L2GtY49 zV~}|cA--|Yt1UdNrXdp?J9 zuj0gj-ciW$6QiNcdbAl7+IB`zDBDIYO@cGRpJ8<`6-8><`OhMBXzi12^_XE;@G9Ax zp+;&*vf<1;#ZJKo0CX>D=&;#Q?dWJyYGCEksD#VmA7BxOrn2U@+6@?pW5|MZV9*>^ z7_qd&!4cbgmLS&Bi2c$<8!?iT?L1<{<{|OQBgV85^H~ZnQSYzDy;A=Sk`j(YauB2N2tAea9(N_Ywh zph-KT3Goc2eStK=Gya+MZWe_~pcUYi2JCPngc&@+8?V&Tp4amn-%{Qf6kWkzS5c#q z&zDkzIX}pmHH7$jj)vB>Ao(!v0agoNBt~s+jTkj@Z)n3#LmEEpKmX8t*s;P`6p$mu z1U<&cwJIT)PMxONSOIG~R`!~!P$&95Ht1{!upd^^n5`r2;AYs^Fw-%+ZB-a6s24Wn zAiKXcjRFYSiQ1U_Z*pKYV8u~Wj-V=k|Fcq_86Kp^qn_?0EU|3<%q=JIZUFap!MHz< zIRy$*+IvV7WG0?&L2aj9OHF$lPpX@mk_Wv-bSDwr0gDB@BJhND=oE|O9a_tMF3H=8 zEl+=sekm1PXBR04kV5KImXu^(LjM-hzj;RNjVQLayygWY!@TBs23WN~J`WTr21SSk zia~l#j-G`2`cFAuJ&Q!VQvPbB`2LRKqyaiBIMZ)msu9+0F1EVU6HRUz9&_S=*!W`*LHI#n>YB>W9&=cV$03G~;LKLs-ASkZuNKc~pDfSt` z^YQn$H-Xx9SpGQSPqE%;njrc3FlOT7gIh|d;6~_@g3zO|qXFp~lICxMtY@Tt9!O$M zO(_f&{SS&lknu*+$kwtb$aLZlHDwrRMeLRt9I&<_mZ)X>SAdXMp`)$?lnu`2*dRN= z)tO`#jNvtN%g^Yx_fAwC-(d<2#!$)5%0w%iom@^`ghI>KA(R{Z1#gyp0JS0hW2zYf zV?X;EUpW&0P!7L_-9W%<%3>(cTt#>bUpVEc0U?7}!MLX+jj5 z_m2eeuuCU+bHvmLktV=?MMH>KBzK5d0k#_{f8KBRNKA(Byyhje%0Y34M=U3i%Z0<# z>uH@ry@uyIz&fL?cv7#w$5($R>PTKY>PUdKM~dJ|!GKLWBX*?JltoZc1s83nKB&`a z_GlW-A?SSJ8cl8p_S4H?N5OSQu*v5q`mRIc={qOHL?4|V;IEWE(T9KhRU@ZSsRfIb z^+hV{2EC6)RZY=RRRR3bkPJEr$q-3zvN|i4`uKTUntgq%*biUP{F;?$TuBt88JuCn ztbqbf|B~0EGvs!!YR5$wt%7`uc>jl-U1$|~>0cn+HGpIHMM55MJSOE}lac4dqI&N{ zy{r_4%Xn*0=zdf)bjEF;kG1z5iYWgK@OKW_0S^Y-V`A3 zoD%x67p-ls?-F@Nk1~=a9blgKNfL~YT9bf&%TgZJ21hRpvI$mn=l8f`xahaJ@2vrr7go+sFDJBWedQftu%}@3T!9}K(Nx# zjrj+OZfAW&ZU?-APkT{bFK=KYHq!HdJ7bh?;&53_ur{{18RjGK?rE4WE@+0?OL?s> z!yNa&VOAP3FKmwaS;|Yk4D&Z1gp)0-%@2+ak>XYq#WG0DNaVNyuf?7nM?g%d*0pR} z5JgD3W6(o|e~0lER`?iRQP>|WeCrhpFK=4-Gf}ucSon8v6lb{>Yo67#@H3)tMX>Pl zD;B=1Y2jN$;f=wLAfGIL+iO+7meA1G)FjGd%y*o z*u;7lQ}Z#M&6% zFuu)du3>-G(ERbv6`R+Ss!Y>htFH`u7V9IsS%dxf%CKI7y+MPWd1csl2=;UpMgqOC zUKw^8V9!X8MwPb~%+TY?;OT_=OAYnue_oLk9SC-@2D|Rcunc=^O{xDQQnbA^qP~VE z@5*RCL?P^do@38z@b>~<&UBn3N=%}%G;zbEL73>6a#<73^OOX04O~(mYX~nv8eD;y z6H$cyU4z|rW!Q7rGiFa{u%EO58(O@W?G4Bv#rr)ik9^jU0Qe5&i9#?nB4$V9o5$Z1 zG_)NI(At2t@=XAoktUfB8q*FCpyLn~8{DL(uw{oU43LTJ!0Rp4HvGTU)`!f#wm8=Ao#?I2TUfty%!5u@M2QFbnJ1ZG?G&{8SZ2C>^_U zvgg;kWzU77`fX3GhiJ@C;%gF3v`IipZQMJdU=7+jtM~cdt3Ec6J8{US$V_F((jUqd$XDnsm;r|AX|TO+>=oXQYQb ztn)f}smHCS)Gbg8J$_RNe}uqqcAd{Bd})M_xQ^;BSp@QmGC@q6*Am6YM_Hl;srLW9 zakv|oBWSDSs8nyfWx8LYt~J;q3gzuC~yGP6QjR!FpSOm6aK=mBxX6 z?(1SzVnlzP-U!a$Y2FzLGPdj0_;FBAWVgYCodPxLmu(Tjs5fr@V-w&Yk}y!CBKal& z^Y0@otm7U^6%l(Y_ftwr2MnTc-1mN4Yj~sT*2v7T7KG8qM;+mEPr~6zCg{vWQb7Z3 z8LjYKJ)%(}AC#{G!)D&+Dxc{MPTdX9}eJHJq}nY&1D;;p|62}W*C3!}D?M~MyjYJk?gQynyFFA?#;lRv`! zO6_?pQtyi^lDD}nSEKmmv9S5x%5`KRKkVYeSgMhD1Ke2cmaw-m8F4X zt}9gd^VVQ*b)GT^hPT7nMoE|^N(As%3Dk&9Kr-W72a*V(Vf{|M}~swu^r z!Hg6k;qQyL9C{zC;L|984RgHoKXcTh_YzsBj>ABlpl+mOHxuH;k6|y4%-w?#s2gbqGA-RfJQ3bM0r6fzK^C{iHhUVN}3@; zv*ZVD*w=7iLc-B*FTAkM`s*Bh;pcMP;58qmRoO_)X**h$gzu%@D1pbnFa`Y=(e1%d z5kB>>Zw~3R4O{1b+eHf(#ctFjmlKb4CKeeA7e2hT@M<}#OW~^5`Fm<9UNgh14%-9= z`I7*;;~N_d_cR)K_;+N|&Up-`XkRFQZ0`4sy$S9fEtxu zva-br-3*>k2M7V2ck)iJL*!UBMKrgCKUgX%K^X`Y-)DFtYzfx4`;opp=S`%L3cVE8 zuxaotgCoZ19MU`BxRsW{Z{gE)=Ky##mi282nMkD6SFxU9uZH5TmYdwO43u^wC@#Bm z65XQ{@M={~v*}_C0@$e+z&xPE-W}Rj0yO&pQ7ir+YBR|-9gHK*eH#B|x2?*gqyZi~ z5Y;RP!~g_n(>$hXv|RYx0^X-849kI?p<%&z*by^zouiA_^$ai)wf&vMcRn<&#rFd0 zw#uu<_8&pY%8yoMjYTPEPm7kD(Q-aGtub?{G8&&>SF|`jYc0xVS=k{*DbP4dw?ihR zYa04v7@y>Ti%wnDQ_QxS(ib@v$^1K*5$=z}?Aua4f-^bEDE1E{c+`FkAE#n803+zn zGbbNK0s>a6?9Z77=NKH(M(5oD$4xZ#B5_`+`FI7`emHcX?ogD^^(LOJjZ=UvMFH^4 z!(u0vYHOo$hT|i@WL6xYe}GxQ22?GL$pH|6ADFsqOtdo?L0290tN`g%!8w3)8Kiam z3vmcs@N_4xd&Zl0FUHe9}E+lH3GAuU7Fm@|S z@P$r5%!8`$PiNgJl|;2j&7strSTv<-K_$SJ0gc(;fz>FQ=oYY(0n7FwEu@hwLPMHW z!M+Co;3@ts23SL|xquD5OrstI*4fYONnY2-+kMH<6FyyU;~-^GyHeR zf~+iw_LM=A3&k`n$5}_d9nFVjJ}T$K0xW+IVxd@vc9{0WK(t_M2c4K7Tc~`of!c@j zMq#|({{72&y#%Ax$m_FFH=3{s(naI-uBh7IP4N0a;^m??FJ&c)Uv`yFEvugmq_CKWR2u zfCBX$mfb4BLfkLJ!-!L*&!M3~jP^cc|05*e6g&4a$u`7c9%K1vJZC+gj~SVH`5fS0E4 zzwy$tG)9mwHZ?ENaI*riIT7WaJT5fBh4wWfg_>(|Lnl4OF1dITZRgn`6aX|v13H2n zyvo|^4|v77+}I!|T@UQElBILkq6OLv4g-L(#b(PXb`9VyZu>qQ2Rp^y#!G0N<4_Oa z_W}DOddDW@Q|;%0FNnJma~N#U1uSZ}X!!5e+3yNN|5Xv8Hyx-0#cu~GfrThOAiScF zfD#oQ5EZQv6@hM0JA<;umk*eE^MaZ!*9Aet2IF^noEB00-v*uMUiXljX?^a4ae?^Y zXH?cO`8hq#WVA{&6;EzWp&!PEwQ^zoA`G@;OVc`nM<=<`Tv$&mmEYA_pFg7?9Z7X} z%-bK*$DT(DB3w8hYsMF?t7X5j)8Vcno#5r_9uyH}@C_b5w zvp0bO$3|1#BMqpfCr6G+Zd2;mk5A#)s^XM4u{uX0KTe^$mb4r6y*{DBLPgnK6EVtjtRFW+e9H5@U3_?9CVmQVAiTWEhkT=G#vh;b#6 z!dVYZY7j~~>s#BmJL}^e+vFNz>Q&>9<4r{GKY_m# zF0!KTzylqw8EtXgB%HQge7A#nSoPuy-i zmlge9FXI$i3*{$^^3J+P9Ec4HutJawC&)o|BPTnSmmd7IoU(>p3wnnSi7y{h$LNls z0f@ojhq`NKw30rmkY0Kc>6bO(^4iz4!&v71Yb=>}t0StNb*-eAzk$ER8OWFB+z6U2 zCy8Xd!L(|KkFIh+^RNT-4K&fqa7#t+0H7&B2l`$`nsyo?z+P;*+&?cXr}NRcw@}45 zEr8;bcT1q_TL7hyBBF3lj1Rb?n6BN#JM_J3&~_D4jVrH1nlBGpbqm#}gV&n&Q0GfV znotGO{zJUxh&Q|cf-}aGBv(GNjI@*nSbj?gn-52-KZcE71m^P^mAf$nGbA~4>vB3J zg%MDP_*?T6Q*7Jkyq-^BbWXB=z`4OqQiV@QJ+vK@R5H0Wj1haXv2YU&pzljeELQh# zpsqA3cckr?ihjo^!_VIh7BNEm7b4#m#d~LiOG9s5*@KGBpkf{r19L$*JGnC;z+MJh z(xl1(43eMGlBbE}`Q@npAZqSJCXL zY{&yGH{@&!ymAz2?D-&uydVaIPqoyQLoHy~jxYp-aWat8)*n?$O960`Zt8-rhpL|MUALy zZNJq&NtNGlUWlD>w;?j zF6{B(dpCNIWedlzZJbv*H zi+e(EsG%dF5{*ufRij=`tNz=a@^avzzkE4uO?F2N-B>sg$U;8O)}5pN!oR8xX=ee? zSlqe2Qyp<^UMDEp39>uV-${1kRKW$-7b!CKC6!r7Mh)uy(BDSKnu-T;10!@=No-!3 z+_(Ktir?-3!eHX2u6VkktF>dGDXqqS^Z!)xj}NINR75C}%1Fad_#^XkJMn&}d`YIb za)28LM{v@Vn-oD68qo-FdYj#YdXu6~w4qL?|5qK=jS7v5p*IdL<1(@D!EQQ-DS2-h ziA^HqbN@3YqlPI^0YvsP^m#cAk4ZAu8Iuu5TNm2S3AUL6RCnRDC(If5ZOnk0{wEsk zUf6`XJo!-=99|bgrZty|nOwSI5V>@F z4g=|E z2y^`Z(!^B%r|i&sXrkBuo-ogUyr}VlJC$3CXk72PBgf0?D0uqpF#+_#VJNo71aPC1 ztW-O2!vNXxu&~dwm&fW!0e+b6`4IP(j2>@XGJq`DXlx;v=ITtv8RIqJ5M~^tMqmLj z17X@WN0h19M3_P7nkJb0am@Bsp{dTzX16hx@b{A4t)!CCXd_|D)d$jcIie~}`T%Oz zFyXNJ*O&;T7J)WFEWY1QHu?&LdxtzA@M{4W2Uov2L}4Q5$rbVI3R@Ka96jT!Eax;)PK4+??_ zi>u)$Cg65X*^UvV9edn>ahw%D&z-;*c5}f?j<7!2aQcyRTgNx&wIH11?AF=viSZ*d zBj8BV!flSTk*lbI2)9`aya=~}qGMB^qb9T}r{*FDo266*s@5O{uKbV{- z;#*!n$jQdzZI;91Xi@X~(g7OfCpL8)-2p+TzgiBOISStn?-#4$RP(YAvHeOxGyMco z=9wN&F5wX2ZVZ0kB{m2^rWA_U6Os?AVh)W|BN1O4nmZ(&JJebt#n~$^8?1d#lFEFm7wvr(5uLfDQN&D9{>k zIJP+g?9=BkU17#U(%&;p^Q!wh5|700=Q->>KyaZRav;uZ^z&A*x8J#ZOPT0}GnmoK z$k&SMD7YZy7PylH1AU0?n5N`<%NZh9=lALBI*ap?AeRlrd<)Ro|9{AJ4knyNE~|1@ zF03FPCYeucfepGw3gR9vy2A6xCRCifnNyJw!-Y|C^0Of-8bB@>^;mf5rq&UQ@dn8m zJe?L`Y2Xzi?`Qi2dGA6|(CVk9f>v~1wJks9(}c>&Xf`d_!FaeZj(}=cSqnk#aJrIIjb{Xsh z4VI=CU7bRTR>u(h9D-LWglr%x)$hdy2T_xFbvd{Mp=dQUT#INRNKRuT9zN#3auIX? z4h~3idN%svr|75c@c8hq65LAOTgX44rFRd?3DG9xXmbxWg~k;H5isA<<~_f2Y}1~P z55caw3^qumP|Te<1e}C!2PXt|?wOaa6mu6JDtDS!lJYYAIVje6OtgMV(`N1cEI8b& zd5LCGdK+JC+`Hq^fUk$(&qKE+$G_U~DAKS{J&d~efKWS+<`EfdLGF}If~$Az;ewV; zeOhBBt_kvepdjykh0(+=+CU5t(7pk*Wi`8nGCT_`3yLdL70|DR6OfpoK||UeNKs@) zcoCTw>39TDd_oDcfk}X4GH-6jk%Bbr4v~5vQh8_=p^pT*(D9m1Q}6;+mn-FKf+8<$ z>V&TcI3>ObH#x(0r?93=HZ`|*jKy;*(t==NTPAk0&NEC#&dG%hHIY&5WE(MT|=g+UOO<5Y5v%fSu0ClK|QOCLhR83CUcXo z0)_H=THTHXnpDEh;ePf+ClCt(t=%h(fz6IzDkCEWM^t9$vHLjJ8nw9C8i^Yr%VlR> zqT>|zoRe}<(-S1DJ>V+0W;#BWilC?J%+gm4R5ew(lT2Zy!lsANB zz_(=uJ`$^sqFSRmQBRR`%E_SgrD>7NYqF_>DgzrGxC`f?>^TTePpzEfHLCXBdbX5z zXrHk%IyTF!WJMS&hwF8|ThRje1<`yosnV8-dpR&(!~qTLG#RLH(^W>tphRATMLEC= zp`V=Bb7F%HU=1D6&&(=WHEoQo#3wGxYubpL8SuRo@Naf(snoT}@}@^1DV^U}!KR=+ zz6$ivSs8(A!L)i=F4^dcdEQ7h?wp8a;;liC4zo^OXd&j|DM@@PB8&YogI`Brbx)Z` zqd#Sy7yxb$u`FuW0-M@8+ylN85L9S2pfhk`MkLpR0@`5{dqwQ zr?Jws7Tqx`xocYkWNj-%*v+E|f!i>U^qfV6cSq%X(Wqv02x@{G?3b^S_#km!&G{(gxDg*>l z?n0lM%C^akvMqjI<1#LyyD&_@iDBAEbS23@mW751L1j8=SsQ*4n`Cb*EgP6Fl{7d5 zlD(rd5Dke;64ifA(Ru{gU5s|fp@P3oY}6A)6jr&N+2>#U1*bn^IO zJtt%JTgWsd%5Q`O_pbwm8BPHHChHNlRLhbta6$$9O7iHzwt^;uDnew+pd?Tr6XW53 zDWnPuDeXjqaD_cWXX~Qu?WyX1d~XB3f4&6}C9Vad0Vf30dHCALXDeuHo!XPZBd3Yy@ZUFroK7U%HGsiB*4WnEv zV=!jEhQ?)@7h?ic8fXGkf=-wKm3lp{bF7SnRHVXBqi~4d7l-rvQB!fI5LpEGB6vVv zK&&3mSsf9L#ZOeULP7$lWvT$DQ$pLO2dTrB@Eg@I0j1q=Gu5K(!sQ|qPN+Ov&T>Fc zT;y06HDeh0R6NQ9|cZ&7nyFrd> zc-^F;OW=#-^~Sj!uBkLsK{Yg0p=|M(Dm`5Tn|3<;7vEk$;EwQ_+}1zE%EwWo%ms*Y z4u*Q|eO%)&)W>QcKkP zrWzh+@n9kfeLuN5Lgz?+@s=`F4`0J^_VdSPED9hN6NH z_*b9@QhSFGw~q&z$?uF}m?b8V8z(kd72HIjLLZ=VNNrNHm;as*CP}I@rmf56w;ofW z8&HV-ol0O$r1~*#y(n!Ol-^KHJJe((G*`J%*=mH#lqh;$ zdQHI>-y!_-)Flj4<5I1eo?-4Wm330dMQ0!ekq{uvFx8YA@LWvLuQ944^l57(7moAl zOlgQiF)N$=Irpd?5Vtn59P$-FF28 zjsRhCtuZF)0{>08tJw;@)orMhN~)X};vCl~YdpUuWVyCW#S<_QfEN4KX32EQC@qVY zN~%|ocB8(C6*VHeo%3Q_2gLFwrzgT6#lz)H`U`1$&|kB1DEA{Emr6{Pb&y$-3#KTU zf(uD4K;tQH(OOvtjjo&%?>v#zj7!D7z_d~J0CLe_^IMp-P``_%S6%~KDz++r4{db9 zM#iL0*29^oaV+WiJs;#;L^Svo5=omH;6lukGbUUrsLh;H?77igf#quLnSTZ?**@Iy zb+$6HRTeJoi6C>uJ-Z5cJ=A|6^=0 zXg^FU8B-7CA=c5$sNSo;N43|-%F^lwp-iop_1k21&_=1G!$ttunN+gDc_B)g?EU>>0>xS zFysYn)&uzN=2Dg-W^rVXgLDLKh;;*16xze>;;CU8w6U;354^bpLz3aX8kj@1`;*rf z$C5rkE8cWHCMRhJsJU2fj?kCa=i(}N#0(Z zfLR^!b)Xm;RC+A5%IU3vqtZ}A%3}?16pyLV`}evqoU&t9;zPjbH`drbnaZo(?n?>0!XL`)ivM1J&lV%XKbTmF<#xKTx7Dika5oh}cKv*!hN8 zBR$LLoQ;zjMTOup-g~`N6oqsQj^xV27t(x8@v%jwHU`NBZHs=038r1oJm$NAYJ|Jx z6nglNF(;x@uSu*b+#|uOyJQBy*CfxQ79Sz427HaC=ab_SV zP9}o$Z`x0N>j$-x}&|iM_O?Mjc}58=Y5RnJ*wdsGS@9h+@|P*=3@Cp zwNbTDa%ejUTO1-1?sD0wRO5F~lx-eg8|NX+Tx%P6Kd@*>A9=E$Bd3Wa(|~g!<^oiL zAZ&9nMakg&s43|pHNm8u#$B5hWsePN(0J~l!DY_o0$CkWVeuS;L4!@>Gwk2+u0u6} z&~V#|ld6o7hTd6j)IC$PF4HXdi)`|$2OnNXEjtVgVR8pB^dCy+M!o(ReG}iJr07M0TpkzE5Nir|dnH zJssIW^OW{+wkT)e*`O$#NL%Jz^b;Ytd!@Xvpr8O!JyA7v2`C)Z75Xp_49y%_B6;1^)eI+u2%62 z#VF-VR0+uT+QA*%>v+$f??R#N{Co>q-Ss|dwTEJJ=!DAKaMbx>a#4`ZOIDH(v=Q?* zz7Y^E_(VQgRPZlv;QcrSu^b#S5wU?qh5xqWAEXNY%+Z@+pwjPWv0Ly8iD~hij5Myo zAO!FOFIv_{@HOr}BCoRNXyQn9Oh35GF7^Pu$ed*(z#3S5?4xmvDeqp3=Z_v1{l4Wo z!#SP14OYLZoNJT~P@L^CCjG@MWpsp8a$0?m))jsp6DxEBU!iv*QW8sx7#Fqs4*dK~ zc3EhfE_l!=6xl(6Yd_-ZNg8HqE^`M7&qw+UdjkqA|BA~aq1bUCytAh;91yzH;%*#)u8n+edu!Vb|^;={$ zt`_QWEmwz=D&Zc^j)2Y4RVvxYJ*w*ce3fqJyufXaTDYze{z}3~Ujz5IRqe12y4)6Hf`nXABz28M=eU(8t-Z5yW~vQa%XH zPCUUcTp>YBmo7scbO(-3^03g`Fciqh>l3I5R-^pHj)7IfUhlwA;>Ik;UYM5E+zhVG zLx`2R+5}H6e(g~Gt3FsacJ0|Bls4(lh9Njl4Nrr);dgB3yL{9vKQRcj2u#!C?6u+G z4q)_m4;Ev&ND94_0a&|=By`A)^B&*U6dd;ln1;LIj!&h*!nYvBKXN zIlC0~4=5)l#Z||3l+709M_E}KdxE%Xl@1TE2;A>0=7-$x)yd_yw3AZNDlE4Ux;Pm+ zkf7Bb{UMpHYL6dRf?V!S+)C~&&FKnV04zppD{e3v^1ZA-5IC;csOmlV*^&sZAWJVH zxLybKSaL1E7uc$#BKuzF-!H1;LNio)X(nW`GXOyBpu&Z`jb^G3+ipU?q=N`q(92$3 zhcCv!Rv+23(lThX*c{8kccXhaOkpw|q&cuZb=-WA=73H(R#=Iw>ab>oGk#G&Q6S#0(P)^&Ldo)xx zmIkr18*ntPXkD;gq7(0c=rsHvXuifT?xoZKjjwFRY54y3 zd?`R;+>g!+21h)Y;76i^??dFGiS`^CY1&)#y+)`m{`bz&qi?n)p1ls>!+UrFTw0HUnctKw$yNmoZhIES>SI#|NAe+4p zaLUdX4wA~k?9A#;rWxzXf>Mf`4?tHJJSDW116BARXe^E}lQ0N#BUtG^4yY(w*zer4 z&KH=uTnO<6hJ6kvH%9Ek*TsnWzrhN0Ee8NAuvd`l{{TsJ(E)yhG?(6A!#h6@47Fev zdy0})K?RHe2y*^fOpo~cq41YRf&bYn4!BR3;U8f3D;#EofH9y%DOtm8s>og~vipkc z<#;PyNZA&Vy-;Mg64}2{HhGuXO(MHcWdDj&=4ik{$|hF`Ya_BB7ug#{_EE~-O4+~J zdDAjP_F|EJjIv{?`I|*{Z;?&s`GMR)+2vIFOJx5AN_g;d5mV%8ynFDWtEqS6xfRPp z9L8)6K6K#!I=s_!7}osx_)c)c@T9WMKLis}x9B7Q90PRqvn6v-Z#i?1tl!UW-%nyA zTC+$4EE~!@H*xg4$+Dq6NK0h2@Z;?cZS-+n!Yw72Ba#Jul0MpylV1qO3|ufXpi6Nr zN`15eS2VY%OJV8Xg{9v<9I|ZJ3NrkmfSd=K(>bYJi8!m~kgGRv|+l7%rml zMN%LtILkweaL3>W5_xkxISJ4a;)Ze$M^u(FBZ4n{V4@fK_@_j?%!gtI-b&MGq;AM* z)J*w$%J;D_Zx>-|xHCeF#jAK7N*$HvIPn#;yCr?+T%*1dRO+GrvwspU_?KwinejYF zGvjHPjMmK4@WKvr4>}7vY=O9Nj43L&8*;#mX?{$Mqu-S ze2!-$8r3`)(nCu*kELACU2E~*w%$u+hoQlha;WeP0CZlQ#N2rnJ+N zN)CKe+F9w96coWvQJ+BgN~ARBFL;wmX6OqWPSG&V>5O+AfeY#cv3S*n`4aNMdDuoa z08id=O0sbq8E1;RF?4}4qJQy1{dpdOzAjTmv-lC~~? zlRrM-fq%~TAHW!upRslN1M829aA3`C{(%-P7jpO(NiDvZ()`jZC-KEuCrPjULWT7E zJO>Sy%u95;fI5!IVc*qCUui7HL(nq6o119y2AK3{;qs{7`3mLKHx`tTMU{ zaPxBpoFN!+I)2{|hzwZy%TIzh(b-Y{3HUv1lX67RmriEGsf}XVe!`zRwe=eTi@LoW z9}Sdi3f0>*a13l%!uc;H7j6&;#Qk_HolR``-Zajobf*MXgNY*hpOih5vh$G5MUO?< zfm5oGKSoj=K^ff)hjBT!b#=xhTr37XD0#iI1%AF4u|Ph=_d3i)>m5;O*FAduX;Yd< zx^GKqi(#$98$(Ms&Kz?C zc+Dw73qify2sJ{3dY7Oe1O2Jc#JRXZ25rN=0jIy)w%c>aU}|-`@B&2v z&VB+L--e2I@U`VuL=;;q^nSz+VZVT9jzB3?1ZP~wEX0YJigSXS=Es>C$i$|3C%$Qp zy**O}HuWHs9w0wg_z3`v@ZSsg5dM=t;#c8OiXSx7vG1{46IznAOQuq>8B5f1M~zcL z-s+&E$|~6|0Mcu~jfkb#ce zs9bC!8hN7$H0MgCTs5lVE8fPL{0Ql)>3Dcu1^5r7 z(CL;I(>6RR2h!Qia zbJ_;S5S|(E`d_1j;%(S$;S}6)EC}2c7b8a^)7mb!*A{ym;QQj&8hsNmOQ2H=jk*JN zRYxMhmqDQvqIUkHj+V4tIo(hg+hD@?20X1}Lq6M|37fAiO2YiZ(N6hhH35XMBzdV> zU;*jXa}ZI!->}bPRo>Gf55w+WN_1wnp8*g>%8*{by~zGmqon?t2S&* zvH-am(_xKo*Cir|MwcCpq`7s7Mw)rFg~3Tvz+>xgC+!Uha)Z0Z$ovLN=E8s zb;3rRPx7KV)bcSf1^MA$5Qv3`bv3Z~evNCu?HrgywX)~9!B{+IXd9m&0;Ji*g4u~g z_%Y15Z1UArU`7H^^8&n7LGI8tAdF9PEd&&13vP_8#}E8kZtk9jn~5lbTYAk!SXEP6 zn?OY|XAv82R8)J!p$$g(Xp(83_6eG76cMdt%)bPs~ zf68)aUqob`y|b)7Tq7-ODCBZ##xGE?Vgu{_KL$L0_|R0EHbQlclU&!K^(J+y-lTkS z4onZJw46kR;-V>#QE5tOjjC|8^SvsOETgcjyqC_Y{K+VKbGwM~R@;3m-Hmm^qK?JZ=2GJAn^y_`xPSmK zez8HLz--$_k3rA~PfjX6asfGMm+U!auqe4H*o#z5DX|5IBxA8PrL__2+Tiy{eCPH> z-PkQMfw|l&i4mLfGn)?`Y}2vpiE zbaOO8Z0;{;U@b{MTRbNW?xn;7Nnj@zPlacx734lGk$Kp%L`6{aMqoRZO@#AJKr6hA zHIfq+$ceiY(qjS5eoUruTuR7bO>|Kw+@=>4gV31W6VMDf{^3E%DntnKd=aousXF&k zf@q{G&4w-%+9{9%G((N+rl>Ruxc!hS$JDbxpj*?>_{9mSd%=`vimO!}g)t9u@E!ik8uxr6L6&lVEMh@&$Dn02AB^hQ2>R_yd{uKApsDK*n37JJ zlD5j3e9{LtqQkTe>p5bOlMY~$EwxQ$jNYo`|6VyF5SOKly9C3^=}ic1aU934sJ=BF zlhC)(->VFvsCQpGSn}u-)x`!4!~lx51|s1CH~^H;7P+anYl3(XMw{d*iBJkQ*#~)= zfTb?hw;k>uF2jRm2B8ehg)X!>y0CeHoxTdV3P?$aYOS+)q5IGuu;9|Emp~Lcvxv=i zq-n|we#u5Cv_8zsf|;##_Hkel(t7X^y3r@36=6U%Q7{j0Ue^NrC)CP&q$trvZkno8 z%O1g=uO7Rt91Edz`0$HX8Q>$*iqK&Svz~^Q`*GE4uqRKWdftmq(R(y@XP#&*AXq$L z`N=stb||?b0fA7P!nLHYhPlb0?M{9H^uUk7Ip`7pFszQ!{-6rm{CI?pJ4S;dX&w~R zGAJX|9QMIc>MeQI3Q*+lj~MD~2j#y$&v=uBjPjRZ9RMUnj_WuL%G#oiIwk|_O% z$R3BcQu2AST#;P^hb>AE5!sJW_GZeSD6;cFPGt8G+4(daA5->S$j%)$3}@wtFc z6XOP3Sq-=~19em6_WB*946fDehg$YbDoNT}mU;~0K=H1o16%A2s0$k~FVCv>uLD^E z71;AphaSgQm~@{bSK}W#Uu%S{4!*KCZ_!@hhmNDIEkr~^So+)1w<801UD%$j!#8jp zu^WOlx3F=95}g7|*0MJJ#5R|LDtFDoU_ZqNyGOJOXX(|H{vajVMHl?ol;eJbO&zio zv&x!uO!hR83LgWn4jN3T0w6YS3leGpY>Wc*4iF>smQ1Uvv+8|;L(;Nx=RpZG=1HKJ z-Gk`b2gHM+66T@Of{>}Kh8fFjT3IuNQB-!oIx)I+IzTG3e)Cbg{Ag#FI4pavua4!PCTZ3aB z2z36hG^w%`XQy~;d6Vv-M(C&!ufc7{ldhwr6O*yM@B&aFiSNyZc95l>x`9Z)3!nS( z`42vHH%RbPg6|J&pC7}%Q(6!v_#|tlr4RR;j0#2|upJm^*u%XzGX`%VW*0_)7l>QQ ztPdoi2iKCv0+){9JMR03;Nw}k6h6Ur&@6R#T>k<_4?y363Yc~kBK3PM^?i~0tw{Ys zODz_uABoftwA5^o`ld*IT}z!HQk^2zsih7VseU+a(FTW>I#8re6tGWfsa-`Xmr3r9 z4{50ekvdesj?_|5!csyn`is<|TIz13a&w!HT-d#hf?VD;7>WQJ0MQ+y-|D_Zq>dxu zv)0a^El2%-2^75_-XtCmEMsdtByq^4Q$|Bij2Dzey@-DVUOdi zbR8XbFi=1$MT%1-(M-4=#(pf0ejs{%A~?{_OE@cG^BiY$Py|jgxA|jdd8Brni6VYA z3e3(D9;^g}xf|dV{y&_Z3w%_?_4pGKAc4R}AR2rI44Mci2vK4HS(4zcYygY+s6?wM zYJDN@0@eV*O(e^9E!tXbt5$1$RjssE1XK(UlYp-vKJW$jsLZ-3h?WG9?Eiaa?!CJS zfnWRQ^9gtF+%q$0&YU@O=FFKh;!@UwvrhIgrX6a*XA~f3KeF}Nk3QlF>tA;i3Arwy z{p*gE_x?K2fO9%+RMKp(3NMpx9rGfFEXcA_KYD%2!x*?e{<$%5X`3QKe|yZb(Fp(<>!cFVLp|hqvfae@*;p@8M4@Xkb1>gDpX#Nb|ZljaD_L~(?z|y z4V4pZd9QjDcBY_D`!T%?!{hJ9PsQW!(^Slo`uoN5ofDVVTteD6Ds=>Dq0eHyrSeZr z<>b(Q6UA6Pe+WD*Mrj-`tFXeA*Hhs7jH3m3y%?x?%e3bv&g@Z`Jp?-*L^duELPE6< zEdaWzs)E2H;0~g(j!#N-*;r(=*CbpZ9t$|1_Z5W-uGBr(n13YI0zA~0%g1lRJ3(<6NdO^Nbqy_Gn zmiTB<=YAxuNjgAc$sT=XaX3viHet?`=retN+Nb1&;EfSc1o4+x+{0_2|h9ir~Af7|A6oEyRZ;kG!hBVH2LUhh}mgezEo|cDr zsddJ)6oZlM!|YvfhYtVziXfo5{AIlI#m98fH`#XMh=@;0&-Np4k8-(&}jB^g&ravB1zG_ScB282gUf)M@;( zQMB)C1NuXt)vNZm4%|gFo?PR$h@@=hz#oT^(#2o#L?jOal*2kbJ%t#f_oaDPKl3;9 z&*ysndw68*wKUB5W$senF;!aH`!03OAl-$Q^xUNuvEXtSZ`ENNUcb)Fy}Q&X2!rY8 ztl}-M$?JSGwu`H?Fe}GX#)+r*>BvYJp<>2fzWm30={Js+dcuJwHS8kM1@J*@Q=bgz zk}@%pel=QwbQ(fGmDf4?wf%OTElzBI%{N1vO~41-U~xat2oAi_AlRbrFYc0pX^II+ zOk5&T{)EL$M$3%NvW-CXqKrQ=jn)O%Gk3Je0h|i3G56FU#M*PaxrNSL=v@&$1q)|> zHVzAnnG5rK62;7a458t&y+kKswfeTqkol+f%ql%_e_bz~FVMCe+^NAu$gx+F5|b7&#;UFE<HcD4!N=lnwFs^qlkNh-Ls?DQpO=)hs)RS6-2lkbPgC0`GBYtvbGam zKjTDFO6Fz+F40V9|e$6<|h&RPPjMv9DL#zoswAYmn+}pSEq6{^WfvH=yim$q9MevUpEad=>_NSCq zoO^;$;A|axTP6l5Xd-v>XuEa!-%ozFq;$y;Cw6 z0-huisi72O+WZPuf5^&d^e$Dew4mEbj}{&eU;W)-ieu&V*_sWm8ZUFA%#-~D?b?4a zxUnOLK3Z^QSigkUwQOcyDvew?2)3sq^~LM(8(kV-N5t$@nYyrJtY7$v$x)W7+!)Qn zgBIOj#)l{LMszGK5p30Oj?>dKtw};&+M{lSxl98NfP{S2{S5BY5STji&&Vtm;UBbP zCmmMFMwAUmMrjD?Jl@le`=#S>VsoJ_><_zR-z~JkU3egRrNqq&_kq6O^3X(6D3p9_iyyP z%@Ar+;vy?ta2;8qOLS3JWS55n88%lglDhCzk#o%M>iNfFPnDP?(&{U9XSr$y@-D5< zvO9Y;m_cD}U%j#1_1fO@lDP%`Q|v|}Rm7M40JE^21S#sFSb1n}fyf<#1%p!+#Bn&L zlFw4<&iz=fXC(rGtT4Q(~?p!JVSgzYwjZB7()?R!B9!w@cLM~RE8L;*pC3} z%|^9xdk8kC#Qx1txE%@enHkCARLn>oK2wimq}w5b`AsG+wTRYQHehZvx3kWuV9I0T5TV&Paw)2X=n3VHOJ`E&G=zoT%fM}1WHCjZS``XiZSucm;% zx%BO;{O#ax8w2_bhUY5&KITtsk#F;N9CT?+wz=if9Ia{k zLNC_Kr|+mXRQn!3xgJP>VbfeeCGzK7&EXF&;~)&qH(!0?N?7hZiDY!`n_6GkdHlsh&ywepLic+#y$v zvFc=rG9fmxi~Av+K?VapS4$ovno!_$C*hl;b%!$(#`z_xUZm)UUx?7tY_MPbo1H4D zus0psQQeihd2vm_iZJFnHUeZm8yCvsu8w&FbtI3g+o-cOo)(NCg_R{iz0N;p8qm-J0E zn2eVAqrt_Nm$Y6rtDJxQ4@+iW`U5%XF<8ckCC+=XjQ}I`e4O%<( zv#MVE^GRhzN#Gfl6G#j3%Y^U!`RX8g9c?bR?^kP4ALU3&c7@vGn%=~xo)XaUIf|9i z#tZ831>4!3UV$0hiB(=s^r@}cjF0kH2!h)LINUw0N#idH(#4D+CPXRtLJHQnN_vPb zxjjDOh02%n<%{S$^5qumi$d|rQ@5Wg*zDsB>AY?j6_&+%$^T*+<@8E7&X#^_ephu( zt#Ek{0;kPzUf1Lgyv2<^*W^~#5#GWNUB4#$ChC+9O6!UgeWOb z`NCIXYP~cMAp4e8W&&T~Hy#24Jp(u>b7n>~68w&^o(ac5c?)ZiI8Q9c( zX*bCkxIov6;)AnSa<=*@U+N7Rax8Bu2j7>;klQ4}Cd@rm;ZYcm<5P0=q}iaZLq1XJ zBj-oT3gGtxGd-@G>xI#NtTp}plYUl#FV{a&NNgO$-3<4Gi(SLEACE`H;O5?r5b&37b{<%)WV)=_ZRdguZ4Eo?g|PirrClqdBOr=&u) z<_^=G=T1vMHNtF)07>G% z8YNuu2KkM2h~)IX+^Ptl7G0nW6x0*J1&<+rCNAo(yF`8S7IJxTt+XFk`~uuDmhw~I zUaN@$F;V=U(x2~>Ncw6nL!bR?GRZ4Ohl;|leVF%M<1z8SC~5eim<$#%_NWXf;Y+=Z z>orOXe0W!fN(($CrNd@(1Bb4UXd2oIYsKk+Q`oDhor1uqNd2**c&F>mo0##UESBhk zoYO0<#)$*lE_F*Gu3!?q^E6j&DlKBNP1Tpo2w`;um>XTS3X)mGJ+!$#E}Di=h6wE% zyM!89ta1_R`u03^dnJyUq349RiMi=-(G0bN( zXtbu0<_X=?k^6)SY6eK_)xRNL*sy^;80degu9N=%tGDqy-SOT=vDT)}f6b3w0IglwEg8=MCioMTfV+y71|yRcnIWVsf4(7Qi3=8B5Y*M6_f8u}{bQK79! zGTK}xJWZR?s_yRtT?IQ4GE;j&P@bC^$WAEVSy@Q2V-mU4i+mNR=d5Q<4`?B`n&u8R zqGi!~kweLAfPalOdH`3FFiy@J=K5_te4H>$i`rt{nZgY>1>CPN44Yl?#@Rzf2>ZgN zc?e=p=eLb1^4vAx6EBaVI+1lN{ zN;^~>&#sZ&>=CZq?khgv_b=&L*OZl~2im*+W^M9 z@KUbJcr9fdU7pG0w|xmgOxD$GnAZyrXfDmTi%TFEpgpMF7g?P0EW?1{W&XT$;KGZ7s0n{F# znPl|q9Oge8VM22ny4ZJ%tM#y;IXB+je=bK`{l{>`CBSaFZvFjWtu?e*nL{j>uzJK? zN&W@R;lLWaR<2^htxQ`%rVh(7UCiAsx}1ZON1Gv3tcP80+X22cWla4lSo09<@)hr!b0VMm+Mn8oP*^RN@HL<3`BJ~9KyjR!N&{`xvE$yW3745|7Eg`k zTR=2LZDNI07S2-}c#3W&JD%vEEUMRno;cD*0$XH|+{;oB<^$234=)nL1tu38x4N6G z!BGPPd8$SV3*~|ENCje8&ZY6tZw`N(P>9fM1(vO1`8c z@Sl=_rx@TxWd?XKz$}v6?2^T9d_yvPo`Iizp@BaDTWPWh;P_;~7U{)E(a$WvcLC(} zd}bX(=A2~UjRyEM3;1yZJlz3SpyhPnLk75u1w79H-|PUtoD4k60DnBy;5$)(4R4L( zr&FfafUUH^@=cjUan+?Txr6T?0Bk3n6H`<4yM!FZuwsPVzZpB8aIU4EwWx8_?@3+9 zxEG6C3~R8KGwr7bEAP`C@}^7PLObvCN6dRuhrCTN7V+YdLAv7Eon>|;^Dr{|!Y0I^ zkRvRaL!4IH?fHYJWgkhR9-V%~GIn-vU&eW+4DmKNpNY@b5#7^|MNjO-i`s{;v2H6{3tIxcz<7#nuv({{Cab+{or*7lhaTa&vEw!B=MtV~ zyTQD5ubz~r=r^H28>MnJ5{NxFMGzwnT|2~Z4-u@)_^X$8m(1TD7->&&9_Wn4jO`9m znJ9BcQ;J*?P!x0&clq3a$@X*&XEXIb!x3 zFx{ddooUlc-AeDsvKt*+0$k;V>V=W&rRe9u)OB&aa94wb?9SOdDM4t>?7c9+0U^M5 z8esW3m!B(O&vsTgTmMZFWw*P3u*4`o26ZY>Mi$X*U+!Y-b`wmBu3;p+VgVct>Xsfy z;5(hCC|yQYN=#hS&H_0rc@DNT&jX3h6O*@fc%No|ppAiYAmr8x8D-{%dOfgEMsna9 z*-{FRz%eI`T|n+1kr)nQ)V>aG!l=#J9q!`9Q^5@nXHc&%a+AfwLus}Qu3dzeQHzE{ zFChfFlur&>4vqUvjVc3+kd&go?2T`7E|f|(3aJScU=OiQTkyP9o-cG$v)zKJbjo2{ z@WhBiTQH&Guq}9PSjQHOv0E@f)cXIk1vM04v#<`tFRLJJq*DDV*r6-m$pt1mSIJqL zl}s2ZZv8*~C^o5&WeQ0)hbG`ECD3O=&^DI;DDREsyQL6{{LvSw*sbQ^n?iqOhXX%S zB(Dh@tL-Qnwi7(Ck^F?Z*P30!6LS~S_iGM0JUHRKJd526q?V9Ys zRYrRqzU0P<9dH)gMZ1zChm@>|E^w967g$0Z2IrePmMkmib|sJKykvo^j9z;9lKXZn zIj>{MA3@Oe)X+E!TxB%QV(&0G-_n+frF}@f&0d9MIF!BaIHYu8o@CBq_bhavbKY7d zWro(MzBC>d>%+xi<(kQEhYRef>Ih8s=D|)-6eC7E(r#gHX-@zFsf<=0o)cd6I-D^4 z-IYB%mUvgk5-p(0=<_W04nxoD6J_dlA6l$jB;6iSO>?QfGCJ+>CBL^nmHD8n{{+3s zC4=;HQnY~Jg=@Uj>C}yu^@>M}ceN~@_^f&|XE-azkS;3KFO$JNK--0=2eXr)R{fO9 z@n$#!m(rraC8p5Jk_%m)ngo77h0?uJ=B3GHdXmdbp-f>nU9Jc;Wdv2VCcca?OQ2=S z&*agqwZ!n)&<7#5&DWHNn$$Z(ML^FxMmB2hxyhh+3hb;|Dt5e3s14Qu`PVFpJS<;f zWhvQaIFV^=#lgEfrFu}>jX<>IY&9wRQZ5=c#di9VR)+&x{h160)86yXgAR;dy)54e zrE%KU9R4p|f6jNsN#Eb(yUq2vb|exbS_ue^QX5WVFowr^koHz<<#x<9gLP{&!=$F+ zHltl6Pc-ezp?*<9SMzGOFUdS}sNBAtzDgSPF!mwisgCxv>j1}L06U^)7*v2hvOo{5 zYb@Ump@h;NlxiXT^+N<(f4;HJZBxf->@{;tp8zos1v1sE!K~mR`F1dn9ycS}%=D_8 z!64aAlhj!vfP_dDbXWOK4mwGG^{3M`m5vS1->shGw;mY{>T%dEi7j><&}^}_+#tJH zzFKTy_lQ0>l@M^+i_{Jk^MTo3)QwPMS~?EP^GUHslnl%J%Qb24v})^5ZT4s7ha;U~ zSxZK11YH5J1Jq4c_HdWAboLO?TFg#j^ITUb?bURhl$>QVi(tCrQmf9#X|PjVN^+e? zCF(pYxqy2qps`#u?&PZ9YSo0hsz?aesDhf>{%pd~gpAVCy}kON2RF)T`EJl>G2R_5NxjSt zC^Db%{iFKB6+%^Jz6SL=9G5h{yBjubV~<0+OZd?q-;UUyg3M=x+{Jbz5%3v z`LdW5;U?#HPOg~oH5PEZC#t#=BmkeAktYeZx5Ch}-BkQ#Rg7C~xIO>^z@xUmjk9rN zhsU*?{P6;KWo*I=U^Cm~?BcKuu6K2rdIt106<;Yw=5A`H3LTMq1Ng8er2h3~#oPTy z=~PhOHVzv}6($z87tO}7n%&plh`gJ!taRM@*c8_L!)0}O90v(JZbOaJP+bREXo>US zF{Vp9I42-zlh2v$UtNcZ%iY5KT;`n9w#@~UK1_mV{$j{3I8Q40t4!2pAwuCp>) z-`gxP6CAl{XC3P?8DzwLz@kWh3;}b?rB#)JB3>EtA#&eR9uD%WVG%Y~*sYgjtHWd% z&tiDuR^z(c&04i0^&qoOvwaQk5A+v@!v_V*DpY z+bGGsq__1^?qBsprZ`*q8L=~+&Hv96nPkhry@b>9x^HFQI(hqFZ~M(m zLy>CGFL_9sSarO3aPTAiq9npicOrJw>0PD7ZZ-9Cr?hT=CXS^3Q$4QLO`#1&zHq-u zaNoIeb3Ft0`1=xBQg&GD1D~M)c9ju@+sjA3!ta6UHk;TiRyFjgPbzqo3YKu#t3FuI zz@3^iS9FRKEBkx2G02<9)Kv5b^ZDX@-FH&0cN}5b`8_Hi?ojejns8 zh2s%9Hz&FJZ^u&oSgLQ(-YSC-EWSdbBTY?RDf_Z?#G~+-aOUGD0aSCsUwGvJ-s)q5 z`>$H?v&i^|f~`4t-9G}k$_&+9ixx zu&1|&T@0*TvDB`7J41G z)O+b+>Yd&h@Q?&BZU)JtHF`0lZWUA#t`f-%_dkUDIgy`bjgUwTlc-7&@6kark=y<~ zpU;NTjDJrfAD7@7e5iL%bPw}zqRVWm_JPBp>gv-?MZ$^dIvCo6c6brq^g^x~b9{-6 z>Z@;Lo;TIWUT5rv&RRPbM6C3r`9!*8bb_xUugd7K`koyMWUVSbUJ%-*x(gB(Iq-W& zxji3^!1yS+?tD|!FAIrhNY}FTmnaYBf# zQw_&;Nx2j=lOOecC{O$E3rH<#^6dEcs+GP3c=;wr0OV<>+rLH4q~>N_b7gb~<4Tee z`$nup>(ZG2gbB>{;_ddU5F`4v=xg#TA1#2AzC`iWmt;xWXPgW=ykfOz=R8PYyb5nT z%bCAm0P&g9LR)1~87hNSy(lgFyGTldtw*WcsAwN}I_X@5eYKomcj=u2iK0YLB6Lsm za=%{iz~x?7Ij4AP=aGtU9*0#quo_R-=gM2fmVmrMe`--X+oU~~O4FhyiFzM;QMiuB zb^7tRnS5&nU0>>U@eL&1wR~NuR^}p!Gx?mrqEazm) zYc}g_nub5Cs|G!ns7^A&ky~oD5R0o*RccDabC6K4v&-dnx*FN~(a~i`@WTQ7V22(J zPVsxxC9F6sO*M{Ue>4l8s5pT$gq#W>zWA-Fa~VtGf)RXGUOBb$H%*owe1%`)DjPe+ zwR(53fynt5`d=W1RUYBkY}S7Va>Z_vQ!QtRvTz2!%Fe)%@Ac4{;F@M+*KNmZZ@^)J z7p*M%;N-`u4IvyG>Bxy`%|z5pcnL0Ivf%6shZYZ&BNXl{(Qb&d7h8mn%D$A2X=liw z(Y&2m(xK91xOO$;f-Z=wd{_y+&Fv&ihK7inNlwBuu)Aoj91G(Yn!et`gzZ1o#+i-k z38skHiF#!rC2ssu;P?0nsabkiR`r{S*eo|zC_$C#zwqV+OxlVq1V`IscR!BT0r8NHLR zXtJ`=_Plh8JCZCgYYVoW$NYjCjTVk(rPj!q{AvSgwlyN4>Vy<^zuxjXlzU`4E_q0peKyoIlSqu>QPYpGlo(8DA}@#Ut&HX( zIrOUCoNZxYF^oyloQaMMmnP-sb0&HVZ4%5(n}#4|M4E|sl|Fa^0W7*ifd8+S1U&?kp&+#mWS8Yga`OvckJ7l3-!{K>RFN4V20*2Py- zIAFjVIGSkT;4v|bqzA4|hMTtC6Pe92{cS?Fr#5(8-nUt(8#)t%0Ab~EP2Nbv`;Y1b(-CE*-nd0NoUp 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 z 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

vw!T0wVw{mV}N!OXw0_k5}U5I!NU17&IJ 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

C&s~dzG3RmUI24=Pt>%4vo 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

+^sJ;rB&@7` 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 {?_wOXkb+c;(ppmgV5{k^WY}!~J%q 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

sw?f)SK65?5Zb4qgYrkDWQ1PqsgWCj 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 MC5J8jI;u+l10IPxHvj+t diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/x86/tolua.dllx b/Assets/Script/Core/Lua/ToLua/PluginsRes/x86/tolua.dllx new file mode 100644 index 0000000000000000000000000000000000000000..724eb8bee10aed001892403a8df5b2633badcb00 GIT binary patch literal 1015230 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%0D{t~|;_pvOPK(a%O=W)xN%bAm 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

If$h% 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 diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/MacOS/tolua.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/MacOS/tolua.meta index 9d2a99dc..24ab2f0e 100644 --- a/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/MacOS/tolua.meta +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/tolua.bundle/Contents/MacOS/tolua.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: eb8a271f0b6ac374b86658e93616e768 -timeCreated: 1524378253 +timeCreated: 1497605580 licenseType: Pro DefaultImporter: externalObjects: {} diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/x86.meta b/Assets/Script/Core/Lua/ToLua/PluginsRes/x86.meta index 4cf1fc0d..ca5ad248 100644 --- a/Assets/Script/Core/Lua/ToLua/PluginsRes/x86.meta +++ b/Assets/Script/Core/Lua/ToLua/PluginsRes/x86.meta @@ -1,8 +1,6 @@ fileFormatVersion: 2 guid: 7ff29b6c9fc818544bbabdfdb2c425c2 folderAsset: yes -timeCreated: 1524378253 -licenseType: Pro DefaultImporter: externalObjects: {} userData: diff --git a/Assets/Script/Core/Lua/ToLua/PluginsRes/x86/tolua.dll b/Assets/Script/Core/Lua/ToLua/PluginsRes/x86/tolua.dll deleted file mode 100644 index 91eb4d5dae042b3474f900f46d2b85f51503360f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 993455 zcmeFa3wTu3)doBR6Bsl)u?CEq;;5qrjhI-}L{g0fDJp6dR4S;kDq=-UVFFkYBa0up<2aSTiaTtRU_VNxFuY?L{tbOg4XIDgBr9#1ZDpB-IsHl38?-4=lh=j`SCF` zXP>>+UTf`j+iUN0=Io1`0=)x)KnVY*(}BPueDYtV{JZ-~&yZSKmP3`Mm;xBhfh@|L5`lF#Z%w zmfw3Rx`SvT{qoJN6lV=0poGezE>co+vQFFpS-;T z`9u7T&UGlTcc8$zw7+$)*(-22=7ldfbSaBPs$oH4}1^(re*YN89eO#F&wIx zf4Xp=GMtm8Uwo3JFUo$H1KIEPEd8cjHR<{*pg!aqa~U`hpLb;R`_XZwS}-}dUxj{@ z_Y!}<${!tfd^v6e0zcV~Kh@~hjn5VSetADSZb&J+1xE9uIyVqF9-l4f@A_96K)(}C zkS%wejE@EASAoyZvh+LgB-w8t(g!<{^bN+R>z~ATQkiUd>JRwn!u>zub4ZqcWr`0$ z!&#tgCh%5fKZ)%B|MUM@35-r`DQFAD>cF6=-qAN;Eww^1abaWMK*NTIimy0q@Cj)}z@*3?dUFi?5e|P$Fj9Xgdde&CP`?%EoLdLrR>Ou!{c5(3d^QSlm9iG^_;wen->_QaOlL=Kq_f@CEtNq19eOX{R_I&IVcAZ1LEzn+B1Tddaj zX%AB3Y-&N1wKUNgDt~8sB-tASevXTDd-*%lwpv4CqTtKEfwmm>#_;$?RQy)j(w0Lx z^80N$=P377ACNJj={6~c)X}(TYK$KlAUAnkhfRjO!u*hk*kAk%qoua&N~g`N z+`@(pYyeD1!36LjDkWW{fO1K-qKnP%1s7SbUO3unwO&tbDQs9{^?!6gbaL$tT5;l| zMe+_XJu?<2Qa}gD==R_C4M3vS@`erZoW#!FwS(Ei8XpVs?n-ml-FW5K=`=u~Q@u(* zZp+~)U@@IoR%i*R&?QS7pFEQ2#laY_aah^~o9GTsze5~u5X4_}-4o;0V3?`pwTCBm z25TSWT{p2GeI-Zkyj{wZU1~)0Z4OfuCdod`!4zq@7_|8j1vOtj{BO-y!tgauRl}y% zQ`-8TR7(u?v<6w8dJcCRo5{GbpDl%LIVC?)%0e@SLB$VBj*1l}hsUDgZ1jiBU~yVr z(DGc-7wn*KZs)qD3#@-j7f_r$AqJa+ZUmwbHO-qg^a7b(YFhhOqD!)WG5+HILosLw zCAU8ytiqUe!Taeoi7jEPEqTHFY#*fBW#dDEJeXWMz8`OdU|7Ie^)5zQ_h1L+7Pe7_ zmeZWEng0ah1K9ms;t9pldf>3Nq+w0GAG#AVy#`+@`xi_WKW~60T=gHR9k#x<<#1r) zdXaxpH(;W)0A&OChX;L7Qr9ApN~+o)By*rDR}LIj9Iv$f<@i{Xlu2DEgugwecOY4o ztO-F3Z0E#@)6n>XvLDohN?Xv}Z+qnK77O>pmxFu55!+s6sb@a5Klb6@b~NypBxi)S zzmr%O*uH67P8eMEsy$DS$NW!}mi7)sF#Q) zqaSe?B{+H##Jh?SAEu)}HA-cIiQFQGNMe3U{V4}Nk{Mtl!@A#1zI(#K( zPGda(PrU;36U#<<=f~WA|M1>{^)q9GBTo;H4Sq6r0wh(uep0M>)67^DpM$B*QoS_- zLyv)f@&~=)ej^QElZIuZN?S_T$blZb15;kD%vePmI!gJ-+}WV{ z`iS0?S(phStT1FP2ZsPE6tB;N3m6{D10faQJimN-r2Y`hf26s{N+sUiRQKiBNc|>) zeN?|Deq!T{pw(e@TFX242A+yUTQJgmSvu0p@SN^n^@a?W|F(p+5fNL|gYq?i1#*yS zEe5Cg_@0+2KP=L)0u!cg(5$U6z87*{uTka&qQc^;KSH>v`_YrsyJw!0+4p$G6=$B1 z_(-$;T+AG=;VRRR5n6tCFvOUS)IWo+MkY5DLHVje$w2B9MF~d_bIl_q1P%BNJe^xM zkV)zb^ku$)u5K+D^>D91sz1il`X=?gCV5}14){omF{$1d^;z1H)O)K#%%(%%5s2LJ z4>U&RK7_v#Z*Bimj%@6mbQXLtAQXQ$3Dh6eWL8%Jxd1Nvk zD@e|a6>4*eG~BO=piWR6?;NX5ifs6$`u7qgJxZ0GUpuL{$#QC-drMXP=nh0~8^a#2 zm8Snm=K3v;-`Ns@=2yCiGDHl$nrN>9*1|TuP+=ddSbX zzBAd~%+raaj;=4;JoN*0>}=*~5UA4$m3BtjL$yFk@Et~`$T6k`r2lA~1e>Q1$#;B+ z*MGQaf96nSZPJHKl0K4(Dt>u4Cbt#VTTxEEU1$79p7omXAA`XlyvG@sn!?73L2DC~ zp}=~*GvAJ97D!1fhcme()0wLPL z>UJP#ehEogU)HaTS7Jp_O|{>NRVN}OD6dBN%+UC?SQVr&iPhF7`VFg_;gjo4C<6$F zwnO#u0G%Ic_?^;v^3h}PEPBA6jnsAMPhR}aeiBzghQiHVQI!&+dGVG!IchFx{f2qGp zKgUBZHSWQmLZnaTAwgxMHd_RrLNRH8R$SH{rQ*(&UwX$+M^}3&4I&yb)co?b&ycB^ z;hQgqCo7yf4s2VapsR<(=s?Fi4pjLM0~|O=YU?Qs$EPT5tw0#AKsYYJ=P8gy2{NA{ zo%e$gy}l`3+4-Q0X7SP>rL%pgvqM7Yn2Wul|MkRdj0tW^G z$ui-K;d@jjeD^^=)D1|Z%woz}Oc}U6b^Jaid{dN;WoYXFWC!F9w>{c=DQ26Pq_)b0 z@6r8K!naUiGP)t^Vbdz<+ZT77`Ovg@(!Y64UWqaN+e9c;kH}D>k@rGhd+k6srf19bV(`|jd9wxaPeXTm+zt`77q&)Po|E<1Wsr*b9eLa~47lzRP)B3t> z{_ga3f?js{_4P5#wpU-j+BdttzJY}Co9e4TqU)B}p7eFzyglmc1st9WbW&@4Odf1Y zCb40-59wRq(Z2Nt8Yh=U?(U@+W;c0wH$m6n{x0%|@2QIrAA#cb}<|oLowF#%&Cj4)t&oD zc_6zOg=88T$x@`%mS=Ik9%)1o^68aGC5j^r+Fyfg>8}ehY=QLGBOz~GkRRi(qnuc` zzh3rh>ijtI{`#>zm;Nuu?251UhD<+>)IX{)*}C>dfzkhGRidinC+H$A zp8Qzc?#NBbtT~)Dzc6|-@18yDKZnoIf7t4`(SHmxe^BdzyU~9{g`V}F#^I`P{Yb8m zcdP%f&u^mtZkoLM53YBo|Dfo9ME{i+%+&u|oq7B}um5-LR{sy_LI3y3(Eo4``rrRs z=s&CZFkaXOGrYpcp7j4$e*Mp=S6sm1SpcTp8@tJatxEkbGX8&;^8b5l=& zVkm3z;x7-eRz)6P7kRuZxOV%8)|*ya@C!RC-0O=9ydu>hJp1AiC`bve4JpL-wX8VW1t&*;nQ^lZbLQ@ax)f_OC5l>qB zYJ0jd!=CPe$SGRCJ#Cx|w`0B5Z*io4A-Y&YVp2WP6O87HfxmE-Jgv2nhC^Vx+FWGW zb0d}jJ(fKeVm<4&t#2lHP_Y+LDTAuOU+uv%w02joj66 z^wX^cqz7A8t0)M+j)icK?S35_1%FB$az!XJjNkUAj>YTUn5V(QRCdjE;&({l9?n(6 zduyUmansF?D|SNIhnOljWhaH>AsD1^r!j>yby4PUxlPR9da8%|^0!|C3B;S3zr79S z)eY!zncQHBl6!al7HVYt`UiRb9>RL^tr@pCOqzHznC8=ieHGmS z`#N9Qm$HvyWT2Hul4YsLmSIIq{BRa_a>vICLHO|UO;*r4FBGYtBgOXvt1Gd2Q^nZ$ zDC;v>k%5mZO)L%Ka0O~>o%^Y6N0cuL(HLo-nzp)Fb3_Kb4)wJUtu9p6?rupeE0!8( z>Qx@zK)`)M`U!ZPIFTFna@$(*Q-RF73OtR`1}XjxrIRK8-Y{)x zqS%mVmyMzLwWi@!S|iHCII0p(EUS=cfq^u+^<5mmeyZKA@8UAJPmZ`05K`mC-vUtf z4Uv1mr$W~_Ue;P@{5Bn;pG$dpXn~u8V#!R&d2#v6k@|6%tVr{IR=bk;IrVF##3S_= z(uh|lkCh_d3u1x1izChZN1B(+8527MlBdAmL=|#)?ALh@)-mpXYX3*)3Ye5=GLA|-3jVdHYiA<;S`Jdm9y93M261d_r!;YTd}a$r%-+b^g|;AFlZ#>##P4FmV;^K-wR-E!;Oo$s2Gg?CQQTjAibY z+9;sOy9vBRD6YPZp-LGPZ~7->x?a%uC*;MTYeHl(eV?x}A=~1=b&qV(39s$9Bz`(v zF%u4=56C^>!Wg!HL*i*9PMD#r_wL0#S{IXase|i30Sg<)#6s)GW0P(sZm$Pgwh`4N ze|Pf3@!S-(L3tZtkh~|A0NWqSSrNzod1C$ym}@*%T>eF*{#mdbX+8zkn`d<^XK}XN zzo4JJt`yXkYQ zgBkfsti?&YUnL$*_mbnu{6wn6jvZ1Z=Bg2;28(Gsp%N7_=5){rd7O(|>Y}wB)-V&2 z0B^sC7Y8+tTb2Hc<8xg9l>SHg1~r|;AbtKT)1)+`oXTx-DhC*!KZ52w(KCtr(%)kT zPR`$j+MW+_+4CXFo>|LD9ScymJ#$RVU&Re-#7Ogi&fnoa&wD17Z?jOXB zF@Rg-gA;IFdi*a4HzyM=?;ya{`QR2ha61WCl?m4}7;qzfa5EgZ;Guvk$b@U>0k%9J zT%`lomvEc=7`knFwiE!a!^WrN5_aJBA>1RGa3y7cTi}ChXHuY690i1{=>cw{4{n|V zcPQb?GT~~-Ux^Q{+JQTgaDhy?yeQzh?RLdqkpp)O;Z`uMQ~GT5rR6ZdwfNw=;Hxx$ zC4_6T;gr7DIoDF(Tb%wUvVXOG-;qD{WUOzTIS$;(ge%H~tNA|QqCU7P2ktb&b%hMQ z_IM>H0#4ZYlspO?xRHcgWWy=DEb6xHQt~C>Yqh-Gu2@t9PhwdCPK7)FvY#iKfb=fo zyyJOj%y!w;PoufG&O08A$!BPizAWGIg$yZTh~&*7 z!o(x^XBi!qF=2HPY3?&#`p!F+Z)cE1Ec`tNWNv#Cb6a`du?pfh7=JnoD@GK+)GEcC zcQ<$cgDAE>Cw5qL^7@qCCbLzF?QW$)~ZXE8jSxy zrow94LBNDQyEy?_xVsaOI}tP(5M>@?0w02Ek@))*xs3Ikfczl_^PGVE3Uqzf6Odhi z1&8_w2fjq=d7M*js}#y@a6YJzZ)7Ut_r~?M)UwG8@&ZWAfXMR*VYi~d4upUrWy?KE zFws;fnS03H@>!p$^#OP2jodFrhN5aC5wwDSK2hM=AD{7aui&`f*nz%g{qNSA;+a_c zZ|BV?j|A^-=7~3SAvFw(EDRxP(06`nKFC92p!a(&y0A1oTAnjZY^h9QRYo8tkpVAP=lvWkibVHbMC`xpBTYf z@kC=QL$FF5g4JRXK2OAgw-{M(QR8huS7)`QjsRtjz9>kgFJ3sn5LTXEmHj(%ieRJi z*tq-pCk9`3|2P867SDOhr9{^>3}x^-5ZS(KbFBQr69W=W zXy1cB)93k!#q2Wurz$sV44AlX)Az+R+&@I!zu+SI zRGfXN8P4^Y?VimVjJQ^O@rky#jPs(WkUJv*Gsgok!u-;<(zT^6{kFrV%%dcaAy~tz zjIX_9snjn6)dZtVXJuzF?~1;8WE-u((>?yVv^BOkITNZk%a+JixA zQ%YS%^@RSAFTX>agBlv!(Z#dB*A6A1e4#mM)ED3?2Y!V70;fClgB-Txw{0^y#&&eh zW&`=xII?4O=N{fV49Ic)+O%RS^z|zeJWcZ~`OUD8yg2iV2Bp|Kzfkcb<9z7_BrxpV z|3>kvP~>jWiq7-7@(dIo>|(+!&zJg1I~Jr_i=_!+6TJMDNaAmFOYJ72y?_#fXVZo9 zGy1vUQ;)tU8UQM%Z;vOO^oiCfd6C=30UP2)VI*-LzF8|$xA^^&Jzga;8rs8HX%DHf z=-8ypfzJv=o!EsU({7G8SzBG^;L5m*#i_^;fQd)-?W3soVlYp}J&pq6QPg3m9lMUA z=1KpJq~n{ON7eBQbgTFkjnrQX-0AkAajZPX;3$+@K1F6vhVDde>j!?(TvkqXn|(3b zQmlzh-%E;b_K)!$=W{FZ0jHy;zyuNRv0uIIX-5R2H|sCzuiu`^kTvvd zgRP%GUFDq@CiFL82-p+p@+keS#--=va1d ze{aIoXFV@_htT%7!q^|5aq7|j{&qb~-dIC;`p-F))31eVlIOcmg_V1(&wIW*3R`!_ zn@VWUx10LTdYt$ErF*8{M$M5n76UFBb1uU)IYwsAdl&ENymw6b+KgpwnRx38Ihj$n zk&VD;9wY0AhX3}w_f`lVgMegZUqz96o(GcoVX<7^%C&0hCTNoVyw5lDU#T+yBki5~ z=eL(IY7J~hACJ9MK{qICXrq4o@BV)&d-)Z*x@Tcpmx(`{l}VHlpW7tv{;5}rG>O#; zONKp+ybgN(8E&fhGX~pfEGiJECqHXKzxk=jG!}b(+e7?$6RuybY+Y2ta~3cZiaGz* zHW0-u${4gw*#HuBd?71-lYMxSof`JWLsk3ZfhxTa!XqVsfkkj6xjKFZX?%~X<2#(% z8^tfUpW!hf7r|l^Cd6$(e7DOU3}_~fjNoBHI{`n3bE#`uT@Z?AEaji<_*Dnm?0k;T z|Lg}~Xv^66_LaE+GjVqXvK9)_&gb;=KV@Q8wO1>g=YLA9&&>H;=5y9o9Pg0N zQefE6)pjWOs_E>@02XOJgy(bH%w~D*M_{qWdMC+eDR@qy;ordFv#rn2Br`fz0_0Or zRycJWCSeaI1!w(;uUP`@7I)mUU_+3ah!nZLhQzU6nhO$WdB!8PrcAt=sqD*n#!lPU z`{Nv0N;%>TaGS!C5e(){@Wm_jOcrr^;?-vKo1fZ?mgS3A8TGa!NTC0`@aA{4eU)Jb zWt`eqe!-K^x59EL62FaoeHDykcjtv+b$|0&T|a~c_jzG=x**=hV#IBAUm-?#DhzHh z9|wovGPuMPko(Qn%h?Y%!{|oS=$K|>HCzHAdB*m|uNKfsd!xAI`C+a|9DDo5^@#BM z+3YP}wERTsh_4>;3ykJE#}lb9N5g+tk2ne#5WU=$L+%HudIYR&lsv0mC{Gf%1zW8Z z=1h3%0I2M@E9sG|Zr?AiG61d^Cs<=PV9 zdF1c22I0yz&&CqB$8CWq);Mn4WqsKbw0!ncgZXrs@9cJPv4?ci6ECe*>ZCHyvg&c~ zM@dw4TrS6z8=uq{_)7?n-1tZ1?NjqmVUmNS#yXf7Sxaw)k8(=CxS2 zs6DuOK;WdXtq`=cL|of*3Y&vOjl`WA6{=D-SP-1z|&VAl_vut#ocix1BRS)N#-S#7nV!tfsov-hZ z?XL6AFT4)p+0%LFZe&%qF^q?P$+K_&IA3!9zi{5UOpm;$^Ufh?Mih&^Ea#p3BOvv- z(hyj7XF2a2MA5^XcYYZDLFTJ!y;OmbsxXp$-uZ|(IiJX1x?r#f3GwMHvF+x(^M5ck zZr?jx`CfJY*_27WC!p~@3k;dZgSBS4Z=Zy=?Z+%w{s5kk8`b{;X2`j8>kE9f_>W#= z`2B4Kbda7^`de8;z5O*{!YiRl=;d`~VFDtDTE7ltYnC(7Prj8+hZx`7XQJQ6@UC1c zK9z?kSvGRcMDP7gPDI}g5c$HICh70K)hTjHM^>_^={Rw@>Rg9L?xI|y9GR#7D(9bK z!mKgmiX&iG(w_b2r*q{ECDP1DroC7yj*s)XnK^pTn8r~krC?$(E33wky7Q$&Stet!B%rAwfbZ1uC?wnr8%~{{7OU+0lCMYX{+_f-L@|ECcYZqC^BQJ7+=QTj zaajzYZ;_#Yyo{IT_1qJhb_ZXT1-=3+VbH+0e9L?lZ)wJoE^6>&RV!|QBVWY963Ytl z9@mWfKY<%7ZQ)HU%Xp9}KdBx#krd+9m3-JoJaisXz~LwY<8_saiI8{^P9NVn7|K|? ztYid@)ZYPk^a~%TKIJiR_TNk6Gw=tYKk<#w_;1(v&8+NLq3-wA^!x(W%Ki)q#P^oI zPgUUc&wTU{KO*`8xJNK4h!L&!tmtM^BaTC}x(@H}qFP)8lhOLXVN4>$C&(?iSU7~(7@tj_!4-CZ{8nKF{B!SwRJkxUeL z!TDmgnLeX{me(~S@ETqWQ>@n)=6_u6~4hg_f5+~60lFazkBpo zmZ1_cKw%0S(LsVz(H?{uyGIE6M%aqk;eDeBf5#dy^)3i^zdzb7?-1U}OddySjWQa| z_(()XPKS+#1D0zZ-n?E9H<-cHwrL*f*bpirQS}n zK^3d#Tp^O`^WjZW*ZHLWv7SCN(oMdRj+Gngkq_@p0MYzXB>uBu4%#;P2hn1zOJLei-Ap=fg~R(-N=5 zs=z!w4WDsv^V_Za84t2Z<2OPZsmC|--;Mi}{9k-{q8g8}m4N2M;0gHfP+z2e{Ma{Z zC;13yLqH?JhJfi3u#bAw+%1`1N=Ix{F%p`Foi}IZpe+QFb1`YLavS+rXgWQddY*fJ z47PdH510NMc}IcEP3C5hO?h|tJshv@MZHJ}mr zoiG6sU<7`r57DU-5e#yKPvEV3<_zG4KEOVPf_(t!5tCb%QIJDRT!9sutCLy?>H0%9 zc|L;CS#vs^%23b!DPoxoEIQ2dkuJTSa?f^?Qj0Jjm~zX#4C;Y8egD+;kg!`G5iKtx z*yH5Dl!xwUW~5oqkdem-?GX*&Hr%HLjMs8B{RY11oseD7DmMYUwBs{)9s?dQ9WQrx zTK`W4WID~q;2i9DG*B?tV3{Q!2+`|BsmQz$@KN358?91~)+bVbFhuMg@oJ1H9}!XK z;f$Uygt$8S5PHaH_$fZp$PYDqnorPw)cuS+CuqSNIc?LP!Lay8+$W2(e0W}Y!7Ij3J=b2Y7@8%;HfVRe%{DC5Eg_YG>*aBvOvQAa#c8JWaik zXEktjp1~d?b?)}cYA-+U=xT?N%UnRv^6UF+!I+77>Upn@kRMJ&lW%6fuSqZ@U8e;- z9V56&U9Kn0$maqdAvqv~6Lc*$JKPg+tfs?wpnYJp?)&@r@VtO=z1w(krbkKEkddV<^&{nKDtu8J&l|CA}7bv-A#JiE0_l6eybW{J-3*d=k z8+m+Rjcu#+4<)6Dctf;9F@jvC71IEY(Vo@_G6cYe78mMB1Kt)E5XFm>ER8PY>eZ>i zlk3CtJjS6eoa90!K787%FnMxN(|HEV;gv&Aa2&} zM#_(4wdO|nxOO~-_sbN*_{r{0w?E|-(3v2R$bSkb8t*}HIH?P8Vb1f}WGvLPZ|JY| z4cCSHGCKbWJ={YcfFV;efO0~U*jo>8$}Ky6*9UXix;M`d$oGqtZj--)&c%;yk1)X(;GAqLjh>v*HPV2ZER`eDYu(Kr4vz7%yF21(rrG>RUwl~UOXkPXz% z*+^tCDvRu4Cg2^+uw1E}?4?6orKjG^@CEwXuy(q-wiVB`bH6|JF`^Vkv2PkACckpW z#==wRKvT~GMDKUQInr(GXUdC{<71U1Sxd;;BnC;M!;$*e)bdJ>V|I!kMF4?sT@tB( zL){I1N@?U{pLGs@FfTsP^qdXB;%#vP)%91<}L|0^P9ws$)2>$5s_xw?S!O!4TG~$R4@`7~# z67{QMrE5?}EyDS){L(eRB476}-)4mteO=jcLijJiH3(=G>#=GumCDQluM5Vqb8*sjE zeM`qme9zZWo{Ys7_`wPD3V&nQ>^ooz#m?J><`jwkf z8#|_-v$2E!skd-p3tsGiaGk3yo~w6ol~`7^h?I?!^<+S<>dbZ459?QvjrA)rxA>AL zh4Tn;xb~#ysq1|7k@x3#uma<1fEH*>L;^1tKL+m~7>-u*O`cb+UoB_X_kOi(@*WF6 zxBip$Et@`?S`F+uUEqFGYU=Ry0)Nk6pVO^oF>GYT@s^#8@wDtnBxn_zVT$CQ3JdO~ zzw6lNKY;Fh+pO<5uJ3Hmj&X_$W5+&U0jlGOKoMXUXazO;V%{%hOkB)^fv?XAp)cqi zOsc1stj_CrJ9gwJchPC$Hh#Emqm@ATFS><-SPk39QDTi}$zmDrAa1fS`4V*FS&TCJi6d}F^L z*G|{r@6nB&py2`04o%Y61QOL4ljpS1f83?1H7E88Waqc+aWCyF^g_Y#I|KK@FJ2^L zwAAq*9Na|brbiVXvlCSfS-WLYf zgT;TK?7VMy7^Cl-wB&tVyE6BQAF|~+95DmpPepJ?uZIi`3;!x{diI{!zr$At6Ms|v zOrSJ6P>p;p^)#?CG0sw-G_({c-N{&YwJUiQkS{}1A!s5E%b1F0nIE@*FtQq{=(GJ* z2V%QhR&#Lwo6PruzbH6UjH&a@cbyM!3Gi|)HqJe9Bu=z>Z-fj$`t z*qu+P0o^Oud$F=qFaMSP-Hp0h>!XoXmro}a;J(Zr`5PS^&rBGti9&rG$&q|U+tGKA zy&A-QrSe4Tj{^cX0jFXBE|eqnZz+uCCQ{p_YU0>JofN&DJxdPHc7BR+SX6=*Ueniz zgPm)VD{l1R8OlUXWqbWK9{GZ=AAos{hh&S|5`H)kM%xZ_{JYSGRlnq5U4oyVJTQ7 zEFpyZAcjeF<0SD!Ahnhx-upVS1C_M1aE0QZ)+_w74Xv}5TA~jdugB0Jua;V5Lh+m0 za~hWZtxH)ATCtz<-Cqt$2yaC4Fv5#ZRVWSdHC?)MVnx-r%pi4tP)KN?WUmT?bUq`> z6@6E^={vzU{^^=NBl21)@<_uBG!V`V@qInS4SI-={{fH9XW~r$%+7rwA&$R5nG(e- zma!v$1)f)(?|SMV*J)%6*oQwG?~2!p;?Ou2O0|A_;sHH22U-VZP|{MTYFfpcYGw`T zqCZp;tJs*;M`cg&w)gsDu)~R!4RkU{tuaL)Fv0PbLXvwbn^G7-(w;_l=TipFKBHX!K0=k z7w_M-mV&h?@Yn~PTJcKf*3b_~zSW@$&02n`VE}N+S3NHvt0u`wvEdk19*O1X3@3Qf zd?X|@id0-qo#Z1o_+CrGRn()(vb!|>kCB?GcBwMrZ_uOlhv*hEChld+K%~i)02ak_>JJdbmLi z&*o@+i|e zY_Vs@%}@M+-SWdD*e;#QIzK;0vCPfSEtv3Z{CtVbL(hcd=NUMKOnx3htB;>1HhK7& z#g?r6{NaAZPgZ|59g@akYJ#TjdoJe0Us3NhF6Ko{vhG7`wKeP{hXbfYS{wzjYL2Ai zZxu&icsdjAS^-l+WKE6|iL=D|z5$1U=WTcED( z`dc^)9ZVM`9XnA@*$w}D@0lKuQVF{9M8HQ^6S7;kJnGc7O;?S&wx4CG#}(U;Is(!lkL9@ExxHsbkKFoML~E($p#Pi2I~VEJ8mSqML2WFi;Z4mJkhGw4x#ecLQhRtVeZ% zCT_==R$B%sQ?rw@nWS9gBIUVzy`&sNQuHH458$5pzLdjAwrmpV8$oJ_wl5BsB&v0x zTsf=r1DW)`H7_f@OVOM~bkRwm_fMori*9chP3hk{^c~(aeNu!8WNT*Knw>tp80)=862i8_}*nVx&oT zKVLvsMmRAR!$X-#z0o?URW-ph=$Ge)DzB2+`sKW4mp@>g^5P%$V&(HIK?L5#^b8};=YOotNqiiP{~Tl$ zBf~fJLFVXA|fs zz5_QG@lWTxCJjpR{-y^27|8&5SZsU+Yl(YY_Ux`t(kW4%VOwq?S;wCD8(Y3ou3?0D z$j|KScaO#O`vCf!={ZX^sr}h`^{Dl;oWz*B}S$aa{fKM~v%E^^0 zCvmk>7^{^)%t*vN_h4$aNgqZpfq}BrKT=8{Vx+TJ0mmvmmnL^jVe=EQ2 z_&>M2wrYIcPNHt`E&K)Wb=l*nlsvk7e0EmMg%;-_0JbRxa!Fr#$tYu z?wKbzB<=Ng+d8gUl5+Z5HJhn3@7FF&>h#Pc=5nnU$7_@DW-*dd%Tz+m0K2Gqhq{*3 zE*DdOZTFBPJ%QxFs-=w^9cD*S>>!feMnNVTFVdVo=$in-~ONaCcJV%J;)md)84>@ocJ#P&R?wrFx7L}+jogYkS^2ArZicP*xRy)u;vEm>J6aoPsfa5bH@%mg^ zK}-A?ciT|3@tq8;UDa=epi~@n*Jlj6s$WTTcG#v=iFT~5-yxci2s;ZODR@v6xDEOq zuorl0-bzrGH@^Q3d#NF7VqzJuHCtmr0LCHJa>3M%6h>c@G*N(gcHi%C?&Ee^bl+v) zm;JjjF1S=me(6%TG=2z)vCzz4FJil?&z%5rcujpH%Q^5sxDLA~o$ZYXVXl5s1w_Fw zP4Rev!-;(I_EJ#hqD1C*_Va6`)k6NYzNwee!(@LdPG_IGie7``1qtl1E>0{C-q7Xf zI5V_|NE5%v`j5^phT|m?NXTHWMF>Ll^&ygbDOSB?!=5HRqqizW@;naA{&T^$Hi=06 zX|xBwI?u$yj{-3JfM4lruC<9_lF}iW6Y+WrbjKwyF-qSzg3iSj4ev`~pg(_qHL(jt z*Uu4+OrSLm@l!bHhIE`Idl`UD`#Q9{k!;sUSt}$FS7Ub93w)Dl_!+nz;BIu_7~jOfnQ$_=?eBvd z1~?>XtO#7@iofL1%yktMJ@qNBB;#6EL)pk*gj4$=xMlN2tp!V>149u65K_EhfbiN( z|D3^a(ygiYfZ3BD8l7Uibc<#l(toqwQvP@5Ci~Tw^O=+StlaO_AaJIk+tM zWOX{psMO;m;MILwPx2;H|G6$wHbo(cCmcAb$D=dhnr@)}``~T_99*{hJhl;fQzKM$ z0z^)UGE!kYaU&bg!iCabcYbIl$F(0ONh^>;sP(?=KisQ+k6A#DDP9keT@$xy!z zD2qJ_eBXM;B(x%7CedaRMyL@&M*W(V`q=7sqP950`LFeTbA6!-kG9tyaJyH{Cg}dg z0e=ADJ4&?z`6{U~*uol{QL0Bkt*1w_n!5s0P=FH`UmF`iu(^q!vX6S#O(lxl|UflVz3A88M1a?LJ}T5^~Pv0(>3YJ>ua3 zsUSwy`#okoA|J!%8U%Y$Wf;AJ7B^o{wlS~yJ|A}ml#$!-V<~IXDSn&Ohzy&Wsgap8 zG!;JN_gPAljJc0zF0AVo0mzSI*!Bsw4DV)RY>VpS;h#*rp<#^;gmj){=v{UzQXQoK zeAzU|Fh}C=Q)AeC-KRp8?chg&-VEla1DPSrP4LYcnL&Q45BURgyv$$5JVrC$o9hbY zZ^^%Soyz2&f4h%|f3ePPS7z0hc(o!@0A_*rVgnUhF80j&%BiPOigVF{jOBm=tBtIg zz_yHTU6b0O=H8asMCC_qnH7LdtO2hy{U1Sp%^J~(q9c)C5SM&K)$P2iS1zYGD-XGH zImKQXsg=yGdNQDsBAKsiykIgd+TkVjwN$TG@k&O2$NsR(Vpw%Ex`A=cSujh2+f=L* z$06C)15nSz0|*rUzGsm+ZHr3ww8hgwh--gY-M4G9M#z`hF;&V^oQk|xk0)r5@iDfY?>(%~eAt;u|O}VO*H4)SgZh`W3 z9sy&+LyDSE$@P#}O5YodPpcv(*5GZiIFzMCqi4FRi zg+WoMmkt_}cwYM>vSVS;Nf;EmYEcDDpLw(8P;$M?cAyPJPKWac08;_+8>%UbiBw`B zd0HpX2Eo&qZ30Ry#QnbTsHtL%i1S;ZxcefM?h5*~ucVVVzggp}%)2Rd*c zbyfLm=d#Ld73VW0gZ1=TCVPKBWtae^U6JV1?=mrS^cHHv{)7oPTN=Sas^1 zoUf4=V!np-O>M>Y4C^9?@w# z9b0cW2VxlHkIVoemc0%1%Qq_MGL8Lrz~0#+ZpEM=?5FH%2%GI2_*Xh|5<3T80wM6Z z&zo`W9^z+uh#T|}Cj(FFVsw)E343w}j~Kcr8m+7O>@|d_(V>U)ie2zaDLzKm)B4FE zdm5yIovS(6SBi{(0xT^aQ=ZKh$3L~h=S@;{KPZBCIEaA8+J5^BDM(qcQ0G5Q?;3h92R0T>I~U2Q|FudD~bD8pUved(w^Efb<<2%mWDQ zOYZTh&L1{9Nh6M(r!gGU@orh8l=163Jm09EZOnYIk&iOE>yNfTC}xT^Pl=br(WQzO zd!6BQ{W+=!i^!15VxgksLe6rAYU?5U%_!zUMP1##!{VB zKT`&f{TA5$!eNxQ2`~GH5odIN&&1boaOpDO2s8J0!+98#!m)KMo(|qc_i?_gId*04~yv zZ=rLaN-hG9^{~G!KVdJ!>;tb--X%Wzs;BLqKI$!z@)LB3s!YA(Em3B-hfX5h0y(y( z`xIVxIM-623!G)Cl+#F?F3%RYs6#)cr`hGl!QJ#NwC70{1b9pGU1sBv=iTh{T9q!L zk-sL}KEs}sXE)?&?8W4>Kpw90!B+vEgVGp?uZ8oELe#-p7-K1nYtuoE%$+}`DXQe}@`&g_Hw*Oc2*Nsfm z&0pAo+t+P>3mrJg-{zX#^LLhyzb?cBH-FXCZx?@K$=}{R^H=4gv)b{O?xU+h#$RQp z(*6p3a77NB=V-aBo+}S`vl7^5L)Y;cub-8v4UWD*CSl{?t%} zZ)d-|z=wYhw}1-RW%u!Fvno4zf|cZ7)8~&*j4vMkC4D#+Wa=9XP(;wy9h3s}2Y~B+ z2sUwo`3kJH*k~hWMgStXRU`0w*ug#o_ZtLzX#{k!L~y!B;CEpkBNVt~|&5vY(Mj+y_^$;oJ_GaK#$V;2#fiQu(;j=l9&SM143* zG){N0BTlowWM~n{%iTP5t2&$~*b#1lj>m?U_Md^4A46T-MBM8`_E(L}oly|kXpPJe zafJ_Vs)loC6ofn2N5okq;ue$)ZU1EJYn~5fRHJk!Z$!C5$6-TC#|*DL1mX!;^dxVD zYtnE=9xc~^l&7F4u6l|)|AxUyIhQO~<%>Gd2RuNXaYUb8MIG$Hzn(xLA;fpJv@h=7 zfW@YEQ{*1?0()w^%JPe>HeNY^}$Ym_j*($?EWFS7~P+=tMNHM;&2wn z)HN>CVk-1T3N5V80O%Q!f%SvKDa9!IL{(}ZwF5DIn<$xN<{kkDTYC*HD8|gW9)Xd7~X&+Thl8S z!>gTZxftHtmX9h*47JDiE{3Pt{hVSE>3Ghb7w@8XnCdTX#LG1>zIbB3{G{D^=)KW~ zS4F8~Z2FvjEJ_{j$WPME{W;CoRxVyYN3!jchb&5U+W1sK`(PW+Ta>!XY2S=giE{oS zKE<`Yr6rN>I=q94?ZenU+G*!C+hy@+wOwoqoxy(NY`WxO5;4xlN0N&grH57Qe~i9^xN!-eGTd6PD@h+92ETumj$&A^qX^qm_qE#+_*5U%ju{kc(8v3dL?&T8UP= z9`WOxK7m9II|bqY@C3NCAC|hdS0DFzpVV`{>kZy(&wfL)cjH|gt-O88UUcA}262$R zH;=b(wf3JA*0s7P-S4BY;W?p35l#L1Mam9%p1wkUvI}#2RTh?B<72q^^}}WDSDxj) z2`MbDivT6BufuhgS}@Cw;ucthCdsLH?3SM6G(ATtdL$iT_i8{~!jO|$dnRLIzi&O> zi&&6I{(oxo&$WS@e|Q%U|43i6jL!;<_$4eVgI}lq?w$bBi|u%IzzY*F0gU6m{Xou< z`kER|0&j&P^S-$r!F`Ezd_3E(f)%jOdmxS1#Leq}fH_>tN!NS!;uTC6+c-b$%hO@( z+pOAc{2#zs<7eR{{%bV;**^T|yYcHC(aAmFztD&ORt5u=6sPFSj-*)SwXLIhbKwLB z0#5gn#(jquj33GMS8a_yIg}HtR@y(k$c_$%UYc?YAr=ZtS_)`{8Cr zh^0njnKv2FGcc%kzUto32!*hr&CzF28-Pd7D-lHTiaa8aCVD0vzLKR3pg#kX@H&gA zljGF$o7GAD>MQ|FCGmp^t}{8V^EjJk;?0HXJWd`Sd(FoQtaZWG$RFB*R=f4t;_gFA zmy~wnSsDr^xAq4RQ0hn) zTGf4ZUSJaDp$_!hG>0hH0x_6$=Y)&-cE}B>NMaWH?BN$3hvS8r(zSaL>=oMku#EInYSVR})yIkbcGlZmDiyA37V}`1@6O-8bK0S{URDQ;IwH1zC8V zVtIRHHr2bXV*kL5PtlOrk%o>HN9vzJYoxh1UfBJ?&DQqC=|d7bg40Ge7Qc!10Cvda zv!8?B#M~8__>S(SA15~7JU{aAlGitHTO5s?-X1x9x%EZA<^9$r7WW0zQ2boF^-1lU zn1>Q+9;}@Ai1zN$fkJBZQS}R^61Rcx zo+YUN_w*CGSpaXu=hv#S`(40-ETQ-R1w6<=2p=^k!T|sv$p_w>|}<$|l2&X!pqQ zo5(NxFUW7Dl3zzoE}~QCUB(~D{I3R2!`4ApfJ`}E#L9=NDM{$5^rO;8>eHixkd3mZ ze3$}lZDKn5Mw(v_b|*eMBeA0>a@#f_OULfH557eHtUbF+_XSrB*O@C_8%*zmV-b+4 zHW+Y;WUa=86&+QQRD2A=5Q#v=Qx;M{cf(mHmN~r*KlX6ay7h3KciQ%{k&82l;d~zk zC7<>7{o}LVPx3ysT4aaET{4>l=c4Id<_`{y)ORWGXp)DW;je9hlTgUx6$p}TQrz-% zdEsSL-NxKLR$DS2E9~q`gI_ykWL?F6ff=9M!Kg5PicEV(seJGQxRKs4P2gl|E&hn> z1m5|pg8&Ox`n&{2E0peE)yd@7Q7VaKBoHrcCJzoI?T|Nfa*MFbqaQ!zjXzgu%$@QOnk=If*$*$#HkwhU#YMc>73RGwfjWo~1 zIqO&J*csYifF!8z;*a_w*MY88OhOC3scR=a_s~iRSM?xx%co7T)=7dwLansl@=jb;6x(41({{-4;6_0GC8l~Q3 zH(t+E*8%jB*K^c$jk%touA{_)?$@ZxU+T+?)#Va>d6v5TTwhjbSY||kJyu;h&-1y? zx0zKAxq#mm=OHgv%OLgZqcZ@xxDLgxD#<8TFRGO zOQ(m1_MMi;-j##Ydgi!|!9e5i<9e&ZSc5v5!%5%t0sKh9eKOznf3E!8OAMH8LQW3< zrq_s5Bo4DqGxM`M_$tEZC0e*7B^mTcVw@L^_J8W}2`>d;bzfkRK}UKzE11GyZ@98?r7c+Q z8Gdv=ksR;J7$Ay=f5M2?k`QMkx)IM#1S#oQ!$ioPBg)8!UZ0MJn7eypzZ3UMw_yd> z9g5Ts#07iFIff+g+6)j=A%f>&8HA@Wa8GW{89|rB#p64hp-DEVSd1b8V!d9?x%Q*X z@GTc9RnY?>s^y9Ms^rS~=*ZK!NKwpBnIVQH8AHsYmtv1) zGPFO-cmc!iZ!n@^w_!hYP9A#)ehVV~CbS1ZI{l_H12;#8=J60L+xOC(l4BSTzzRj) zt0?VaMW22%QFd6QelbP?O1uxp%1iwf_NntlTl_5-;`v1|4SYt};=Xg`GmT6V%2IOy z#G7XDJF@^>s{!zawX)PlK7dOB;KD8?d@=yAs?I85JTFv638x+eB5D7GW-+!kMe_zdT}gWkpMLbVV+5Ay&b*Qd8^83mI=g$%AnP8U9?(BfPegS5{N(E{6y z*EUX)Pu-Mm!qHEF($UbUo8un9Vv2!KWyF%VHfx;sSsLIs1iHSaT(Ly7uFo zKq4JL+}(w^JCMdn4)0JLu81V~J_7Z|nIYC^kwL%*oSGf;#Gj`p=%B z{*eh40g-zcYi1_Yian1tA`=RU>Ym2R%Y@?Q?H(w63%1~s#;^Ab^@mKTpYIuJawgO$ z4YgJNf)QdW)G;-}*e4Znj!^oVIs*JrO^rI8i-_ZtBc}|9femJ07;Frz7|yC#hlRnq z;O`jN!x)74iwypqXpjy>VNou?i^DjOYtWVci16Y=P2W+Vj}7Zg!)El79->fsh$6p- zIOh$=LmZ%~`KiuKP2X5I?0SUsN zz_B2U7pFpp(GNmkZA}nWco}n(ygyK_EJ&8|CqbL)q zaL-VmLBV}|ZAT!JT3~D+s*qYmL)fO*?=WfgYfGsnhu#?g>GVzc&OBt6F5vPvg za>pz7d`^XHuoJHw(R1uC-H*`X*9dE&hEcL3;qPx-sfKTc>$o**;hwaKFN+RUsN zmM9aI5$9m2Hp@=(bhRVBRwlw5&@H{zD$>13-*RDXhBY&#h? z<&FVooh6gDY#y7Bwh!+7b7U^-LeM-%CXvJtItg8u!E@PruFOF7Szg%!J(sBNRtZOY z1bZUi4b_90sPHVoccSXTOjNbs5!K!Xm6K7;`;MquF#A5SU;3?4$*Rl^J~Tz&4bAbs znfr{^vwI~#9{w2eaN8fzV7fOc{ZBndZ-IsnO@nkFXjp3+egVU#YGZ*cH?H;aKwR*W z4E(SIEDmt9FqP(-LcU)>%rnqifq&-S2^0-cG#ZKvsivv#b75fib1~XP)Bhs+6*OFA z8e~lf4I@lLo9=OfY53aqJZgVapH4<{9VVW8&*c6sa;$;SlfUgKzIX>dPu}ycZH~nf z%j5G5KnMUFrt|mw>soHir7B`TyL$roB6hy z2b4_;7#~s_U=}jsZ^xHZlNv_O@p-yy>Jl^>dm%n?fI!!G(SJgdtlmCP(3{mYSCxy1O^3|d{f61@f_ zE9NGP@3)HQS{3)>eV**He&$EGw`SG>P07MJ$stYFkU3Ui6K{SLEPrk0M{?s{){`(? zq`6>Q=ywZFj7|>4`%XyA=oN_Pw!szXe1B=(&S2vd)FD};uiM!xKC|sd@^unzBlL%Q zBzlD0Yi%3B2h`JTBl6V;A2Y#KAwMF`;kqw-MP~DzI(1+6j@)UT}Ft8PXx7-^u7Y3l{f_3wcF9x8+ReU2k{zEZkU$CpU+_;6@W z;l7-!FQc_xDMk<`f;vBU_6tH$Y`oG$*Pmhk)@|X^NONA@4v4TDBVBNjwfw@-r7KZK z-on!XlDE#EL|z=*YeK_@`1s(?q4;A@mh=j)Ya9-cFU@$j;8rsK9%|9HCBfQz%MoKEcMd~q;=O33{$vSR z8Eg@uib$lnBT_F@is6kRR3oF2=D@a4gVaF&GV(seg=VRXkp}K7Npy{;Kp7f`ynt|= zZXA9BNC|HXH4+RX^vAtOvl*ej54(;!A&44Qv9${kKbFKgrn4~8eA-SuRy2M@r1{5R zB~l?tRs4WRb1?AkZbc z*7D9FoF?E82D{2d1X|LovxT#xW+pKS>Y#9XC!pbG+`t;Wwe--PlyR~$z`zuQ8wG58QyJ=cd4kp0IYTCm>?Z@*&p`yu*~ zt;pOmFr2ywe=t);oVwI-NQf8K;#4_}O6s?J{|TMtQioGUzh8|6M*Dp>iKdgxb$AwO z1C8=TV#oR1SW)l$cj2@55JnD{rz!IZU~uPSg@!k6e2?P@+;`#tS-Zo9o;@x^g2;A| zEh!|WY`=e~#QdzL5`syKk506y>xrh0Wt7cR5aV(bM|KmrIuu+j z7QLi5#1D#0Ok3UJSa8HNl^nJirXUp&Q%sF(%>66IKB)72JKp|}@dI8gAu}siyq5OW z+IU*9G53tbmfYmP#^T$Pd$*mAqt4K~vqOz%g{^%f&ExvkZ>T-dT5YXEeC>mvaHys) z(cN#>Wpy{=%}t}j@uRE(*6XT6?FTkw^1SZGF$bls3veJNSB{S(PNtrhSQ@Uou}`4( zdkt$E&rHWFac!+)OZ*dH4dUc)=i7BVa^jO3^D7(kf1~m~>*5fGn?Hks2|IiBO#>WqHP$GcpQ8h7Ajo{#XJ&p zOt8-C)jBNJr*+s7fzp+U_r7ZF-K%XF^)oQ2y=_>OUlJ|R#AYOc++GeO7Kh3gPx%a^ z7QVpglbIln!cWJ7yjU9>&lyR|N5g%gl2F{sYK<2dLjM3qEIWdrNlZavd9WP0%uN=;y*b?m zm#gHbo;Sg+38h6VWqsl(1Q>i8QCUlQQ--duDM!~+a^HtTE^R4Y(>g5FXM!~hvdK~T zYHRQPY0s_0fQ)*!wJPX&n*j(>fw2 zFu@wpN5fIxq>^$LC(-&9l)S#0TA}dsn*AiU#}Ovo*zW{4(mk~H$!{GI>^;G{uotM; zLX+<|lj@e2)B+NZL080=cg-0Pa{y6=^ zT{pu6@^F24sgCVttfQX^2BdUv>?H|1nim%A6 zBeUO=U$E}{ll+1O4IhC4Tn@7A#v%9M0w>I@4onDQ)H|Z4>;Iwd-Q%OG&OPp#WC#O9 zcGRd*V~uvyL{N#M5{WfJK&li`5wT*m)kCdXi#kD6F2P9xyW;?-)>e;N?WuR|(R#r< zB!CH^RYXP5;n3A%cXwsh zv56%MjX_)2tNus5lbT+P|FJ7L@xuV;iH8MFXTgSMQ)M09_>^es{k%D2qRtbS!GQWDS zt1fmHtYkgzg@>12R>h4sSN5&HcH1sa!!|ixu_>AHxMvN;DYiANb{Y-^lyp4h6=qKF zXk4E3$&jAdkf>^}dz39#@=N17Mv7->@t;Mt-jxp((2d%Ep!8l{)6Z1;876(!QXygo zT|=+TaG7iI{cs9Zqj|;>dVo%0#~EA}?n?q6umSu`9w zhCasibdgMH${%gBDP56?Z2ANIz-w%O%Z`U=`XV*)H3~_2HzP|74`mEJr^MQw`C4Jy zTv+vm)9?lO9IB?Etln=?3gxJ(DJ?YXcwvy|F`6FdEa&d+a#6+_RQ( zmSJs{n>Ul8lPdni$D@(@Yh#?D@gRWC+O9bxXWqer3Pzm~!}@G_H?OTWR%Tir7fT2; zzc1LD_>lRv4P*lThc*0D^(;Cgk6Jpb5ScT@H>8%ZR4ppMPhIAuXLeB!?&w^X^Om#)36-lPRxC|YyQE?UrT=fUNT^DUK(1Q z1TE^$>teC`nx{;8*rj_nr`|2g)aJ+PhoCML8x2|7P(>bJzLv&gOXGmJqq`EfXtl`zSU zmoU6~e2!m6nJ>}B5{|uqTy@c`>LPEc_ffeiTZ$!IoGG2<&&Qbv_$T^FepMuJuwRqz zh&^cNo#zjtqRfPtKT&0-bkVBrN~b{!WdglAlvkryYXJe0mrEp?ZsMzAMOsY^>3iWU z=(L3BtA1ZSEw|L6D zjrSo@0F~O_*+&n4?ZC^JX0J|ktmZh=J={(1W;3R>Y|6(%e)awMxcpeEEt=|>S@))(TZ$&g zh2;eLm41gB=pb2hd0^7TSEyY6-QL2{Lkt!{|NH*P ztmuZ!6}Y>($ed0jgx@`|q`Vt4qc98quaK#>$YjUM?~l*Q9DHCZqH+f+E*GPEYjyX4 z(Rj%Ij9OWF_r!x@6DHNn5sMQF#EiB4>ePddk5P zIO~muh)i;?4E<8D2=VETO8V%U|6yV89GJ|A9M2XOm@CmL(-Z=l`hlkNRKt7q1&WSFi#vx3`>*b=Wg| z%Ddq+3da6l;WPSwjnAh!_yqkw7&<}@)gQGpjK*8uWjQnj-sWQTzwQ6&qsRWQ@%btj zAEN|T26{Kd=V8JWJ#(nZ@-B3D6Us z_HM*_?}3=uikDcSvBcze8a61RUAb!3cD5+tO!nK>8o{(0o7Y-H1abBq`Z#iXYyPgO zCGk1KH&-@erECG3Vt4p9V@6(@7=43G69@7=pMFz?Fg%X z#Li${WJMwi>pPHGunNY?QESJ27|oIi7+U9g``bJQl@FIqNosla*=O83Sq z1>n-ml^svds;{qiH*EYk`bEq3{ad#5uJ|I8+%;+`Y&WnO3}Dw~)SW4QTx^AVW=e~7 zE8ZbJVbCi6erx%V72W-W0Yx&kdu}5N+DT^!SsL9iYpYl=Ll<`h^INmp^@Tan%1>-! zYt1&y#EZ7K)_mJB^F3B!bY#ZHS_wwEqw?lVh$ex)WlNsBmu3rem*u%jAdZ=tH%I%2 z@+E$i693*8q20thurqfUwt8l2-mDHISo7e0BvWmCD>5>#8S`ooRx0aiKbd*9J#*2d z+G8+6GPTF=z@#|1WKT3{!IMGBPLH*Yi0m=R9g){MBDzbeEk+Y1@*7MHyuE}OfajyF zCv7X9d^4rS zb2X=s80&(|dRR>hQf9*HB}TTYPsNMrccivQXY5k>O>1ON^@B<73-H# z?7L9(H#l#A?aaFi+=vd%(@JH3gxu56-pLGXG|~%8p^EqGo%>VKzgVaO33ykCyIJ48h!(PR*K~|Rrn#_CE z`nlbOtvcb|cbFktRx2!L@Wy=_5ie*R(FaD2=o^A1!W$2iQfB~~!tm0PT34-Y1VMN!DKJh#s;I+S@cSgs`J#WK2`k z?5+8snMl-y$ORlk6HMae=2%^3+~>xj)_u0~0@V1D^~QT3!kw0JS+JJ^wur#201!ch z0{x0OLBB#7TlvgwwZ4SGM_Yw+KW_bjGy;=fT-^77cwPjzPk{;u@d=^tpL+Mnu5@sOt95EF4;j%L$x)}o_1sOPw z24LWs=&os8o+<6;G(0ZZw(D`?mEYjswGP`Jo#Y;wS{$2m^46*~bszb^BMV?Z_caQ^ zyK4_CZR#u{o}SE@8?0)*CxU25D697%FcPRE^xTjclSdI9q!yu}g`zh-NW*QpS=zFqD-exGJ zyqkc4`c2QzZD$aoqxP2-03qp03**TbCO{?lc33b{m)&lTD9(nt9;O#C;qESRy^1v) zwlMddprJDYJF8fzLzk;|@2UaLveeC1bkCkPJw)b@{0=%P(=It) z{d{sU%TTgyo`Dj=)e8LibiNnfDZ6OwBfa;xx=))r}SU8D=MOXkD$k4WSlwu{PKq-l7`S0pQFJBCA#=u?N$wQ|=+KhZ zVX=7YuwLeZ&l3R$cx!_|hfLK$?(^C4#(mTESvT?cx{eMkF2dBQ=kqef`I(9NvC8Hu z)s@$4k~=J~74u{IssVO)G$w{7cXXAAdZ?nE>UV%=+DrB`wz$4JUP z{x~zbQExiqO1i6@C+ppw+Xm$PM8E%&puQ|W{tU|FQ)v}~h<#A(WOfr**o&Oj+QJ-x zSb_BLJ1f5X1j>W#hKqfXy0z01V;nY4j>%!KUEDvKh5e)1_C1Q{m^4pspIwpCw~$hl zl2kCNxR3iOV_f7(G=HS>EiKr5leaEQHJ9^2iw3k*^Ht{Pik!Kc`Uy$bw{E#er{)8= zK)u+TYbOrOO0~}Kac?y^^gOzX{h9o{Vh!sI^2|!)pCiDmL^gz+ zQe>7QkKvPqE!CVCWrctwtv}7w-3U%$M0c_HrG9_L^X_* zXe3bPgi8ixA^5|d>F2T9Qi%HMrpb8B=vYA z{$8B)0SZRMgBAq6_oZz$J7@y9>8@KDn>0u)MJ|+4m4<`n5mXp{3nz%$In07@#eQ5& z9~F47%Qk+T8QiyJ^ZqT{dsn=KnhoLu^FCCk>}m>K%`i(VJy7OUM#fx(=$pXz zl)pOJSVOKi&_Bh;jo_Bbl=ADpR#yY>r;t50G!d3-X|D{tSb||< z3@aks=ON!j8HBK-18cB17A;OLb&M!ru`nDuGf%#A|1d`3A40`~I~)qz*zfKa(2zcU z6^yQr=;OZ3Vo|+4bgNJ%j6Azui=I)4`?=z{(n`s<1VF+8XS zGbqx$WceppKCA*OWzKt*rKz1FpwT7Xe0q-H>|(FT==3I85y*CdCiJq2sEyR5+W5T8 zcqY|G9-J8&YaPj?T7j8V8)>Z8wvlBt#0s{ZOsWB-Ss}uq^myeQft5VjSbJ_}MmZxJk9^Kp*)iK+Ii{JkGAWIf`|bFSBkvwYeyHh*sbK zU90ceKe1~a`zSCbUe@aSMbx8#wtaz`k#MrQ-)vFIOvszH)rR@*BSWV8Hly4ICn`Tt z2*G=pV8#yoHEYJ2EaxqMSu=Jw<7=jN=(aSXk`0_Sc9;NP<6#KYEcPTS(3H70=FHP> zWM=_}h?WewTUzt?m@_=eddlY45X;zX^}RjAzQ>w;|L4u1TbuA^f$!3pog zH1p{Hw8KnRjjJ=7K$Vu}eTJC=14}g^N-6A*APOC25>d=}K)zq%4CVel3HJC`lWOk2 z?6L8szb(jtw==$}YC>AC{C8-5|91g6rW=4W`t%H7Ywi#!`GMMI16`N%l#RBczuiPF z1R|Sf>?dTw)gTw9-j7y$NM8DuyK)X&_rvIqmsQ9>(=d?T-j)WM&W%C9)qWpkFJfK`X5Vy|suEgH(1ait{aR^-7S6%{F+pMs`tb zS-D$l6q=b(&|0I7g`>|gmY2CJJsYo{l$yawWQ{ssqnbhKuYisJU@k#VkBOml%hF>M zYfYrb6!Iufk166YFg>Q2$Ds5W9nd&9J*Je$ko5R6v~#st-Ctk5CtKdeQXRKs_pP6y zEpLig3jy#po+4YnZS*=PXpeY4#g^X8Kog0DC`Qjr!RE{*U0arPqxTL|Ea@)AjO56= zPCXM+Er=)BX@t0!c+;58M601&Ys6ByMvIw8=fsFv?`4;<0(r!X6iA-BrV9|$p8-4q z;C^r0pUY%ZkeCRb<-t?i{`6f-TlLfxzj|tWlAhIiUU9x$-N&d2S9hGekNRm%+6cMO zR?awrB>z@!MP+kaZLEx+$O8)!%C6YpEEp5DV{kZbzt6ZG9~UdDpAjplYc`6@tWxu} zU%lJ<+Ox)+vUG>CvqTsUEUcdzBd3Bz#KV%DDot1+>^IZ++O6MQ9mL|gnMDx%RKxf4IFm2h{--K z2q7ZDW*=1&dqb>uzc4%wjEsQ$AFY6JgPQ=M*xi`9NGn_`+METwLz+1a`xuJNlqz(1 zRot$(KDocawvJVHOmb)BwH7$;8fjkdmoG?ea!;tw>eC!F^Fo=vS4_>KW=z4mSaOW0 z^?=y51k-Y5`W8BSb}R^R>pCD5cOMYEjmu5+j!neHy<79}yG}Ooy3DxVF$C*AsDbc5 z!kEzo2{XQTk$-~B{%{B^NPAjf{?05ctTnKpQ(lnIYAS!c#Y$)6FHllJ7b%Afl^x#w zc;bAqmz(7F>C9zuZ#oPQvK!8}d$(X>GV3@d#wKj}IC%cX>0#tsCTFK&4em~x^>wry z>O?ado0VPJo!V_ze8Gv(HC5}JKd{#izpU2XQq|(z&>W|;$g<>9SyhWP93S1bs=q7a zmiXf24ER~YML9AON6O=@H9yMSk#aXjnI8#vWFbFBn;+%w$Rd7>H9rQrBee`*ocS@x z9jRHS3FgOOcck_(O*B7-xFgH_%Pkq7RIl+T%OC=p%4TOlasI|t2Np-?jKl5Hy0o&o zcC&TW+CSRQZ8V5()aGIZ_*+GgGO%3!L}k?l$>S_Z)rpO4T`2STztt4271 zeo>je6OqNqYQ>E1#7=rKlDXQEIT;LvAg{Wh?$GvA0)AEp zV~UpUS2zoXF&Np=YK6&}{Gqd8S?5@EI1N?jUAe-JJvK|-I?yQ3{4DA`v_^qAq8ipq zpQ65Lur>oeSf9{fEbPgl=dO8wK5r6tw7F23yGlQ)D+n5e6&d;G+rJ1B%73q11;O6I zdJo<2CW%+^b5?35M@ciE8^Z!%I_&)?mQn2Htz0IV;gsB2a$2{~kzR@AQd z3kF#sA|FarOb*B;T^Mf)>G#@_uJi-*%vG`0-o0B-qAPvjdK=dnhv_8E+D!KDB6}v* z)EX%ap>fx^Z+kC2E7iGs<#Ozx-;39V=r?VWKI8iXWASQwS}Y!D(YR7u4OES~@W_J+u2Y&4>0iS^i*hb#|)c zX@<$k>h@6~{$Xzl`bTF^LO^=UX{|HnVd%8Rll|2{jQP(NCC-z9{~O=NCUPG7v@_N- zdl`_6P?=I2@0n=1|0y1|*&yCyPiRIqR47zeF7omZ2J}qr{@a+HVV2Blqk_zNF$sXI zE5bklk3Lh6m`@PMV+p?(TWm}iqui>t2Q!eZd9cgcGIgtojoF=>t;4tVV~N}L*5Thq zFpS@9la9-wYzR`=%g?UItl1xRYMr1t8tJn3n*_24QwPOS;%%5}eMbLIhG%+dx%1H5 znc;oR5~3ZI$rm%T%A_1>YE%(H9*BQe2bxX|evRE7d=^)h3 zbnXk}Co7U>^bGg}vUXi>2&K7&9%XGDk{F~}_Ycxe#!AT4?uVHOg@`bA1X`v9dw-*J ze`)(ZHb(p-j=MPyF_S!2ZFlBgA%@ZtMdjCpQ>Cw{tPn! z&szVidgZg`qBaEmv^R}qZo}wi0^uDSzlApR_fJ zRz%mm_BQsNF3;*?cNv?FU|Mg6;dgsGe_8CLuA>F+3n0Jy(u}?QE7f3@zjhVY%srXn zBf1?F-C&De@qT7x2c5A2t1jYP-$IwnjEUN+X8Zwc&J{f_1_1vZlmQ@%^_ zKFinG=fL;ubCAa~^{zva!JpbsLpIuH^|$s}6N5{n*Y0YcqxQ7V(LdmcxRyYk1g}O$ ze*}yYI>~MT<{_lngPcr`QeolZoGKedPYsLaD`7GT*1rn3bFPs`CVHzkaDWI!hEv3Q z?Rm1V2J^sP?VkRa(hu%Tr`!V|NS`E5FSwd05@ecp14+ zxnD%FSnC>dzkN-tovKZ9Yd`PW{LiV=pGIxsM^5~HAhE<6dCkNhj(%P886F1~OD3(} z|8;h5aB#pc?ZE&4cz&={^Mks|FK2#GXA6X029r4 z49jyjwdU=XT2?S;ShNeE^K;>wKLz*{pOqkF$4fI-%Bjtjhl5`I|D8Nsr&vLcG@X!@ z6e|x?F)6=~JoH5#9$e6aJiPJH_mYRQy6-Cwt%_gt2>Y#BNwKg$i8PxvSejnMJk|G+hhE6Tt&jB}4{d+_Uh+_M<@c3` z1zUFp`}J8#v9LebYiIKC#iKjQL$B|Yhsjrbr#$4&_x5_(jFj1#e+)7lT|#i)C5%MJ z8{@9knTM}}ZF+?3$vXWxnRx5#G!SASkkh_D!*&lLs)5RqAd5Zx%+8U#&*5jUb_r9h zHSu>UWbzCK61R04V6537(m?b^?oLT&YAo3BGh5T&-KI%T)%cEqk{eaGSR91#NOfW; znCX%cjKN)|Ni)BRhu%`)kf)lN%ogH`AThG@R@v-++cv=c&Lgme zRbFP2N^4b^eYRWC?CkTXf?)Q!Gt`mQ;gI*m$?)iC>F~!6rUe7!t+*5-{lla|ZC}^L zgz*lcS5La?Fiaxfrr%J1ZhHAB=6-}GG;`@sEvW9$}W8gB)wE$UgT?lc@oM9v)nv)jwk1p`KK z;hHvF#nK~8ZO>q>rA9>JhMo2r5VN0(*jS8g@$`s7Bqyi9{SYNvp#ASA-FPdgY-V{SCq0qb zUDm!DtiVFeWyaJx>NY_vDU<)DsV?`&4VOxAoHedpxx@O5qv1ZhT8YjG+39A^*_n z#mP!|yd!n4=RhDsvRoSf@t>&6>BT#Ie`llZ#lYGT)c)d!GM=4=p8|nliGPsfU8@7(@-2h^jL#&Xk9EmR^AH%=PVQPBMG)pE~%@WA85&aFHp$mpb zCCpMCb9D_Fr}N?FZhTW&(`TC70Iz-@8uQVAoAiK9XTAqVTOo{y+oSNO;B9((By*CH z+68AB`CBi+f2)3`f5#@)Jz-$r_mB2Z7bj$)iP zg7jE+a_F;Z2Mb?3ice)l{|a|rk(nzh!FAMgq2b6t+%ZXp;L57 zBcxG4{>e}u$RDC65hTq|BjHWdL*z7Y#P6VJ`;?*QN|$ju)ef4znM>Su&{;1)GxuES zGO7uN5^n)=n9Hh>%H(-R&^}p6F@{*!ZV6^kNX}W7E>_h|*V=u?^K>M=+YY^T*m^te z`2E2&y?fdo&$&akeaYsZj~sO!wTgkzHc~<(A*|}*@Ww4hzpMi&_3}-dsJ#7?1VGUCKc=!YG@p}#?IDvUz7p0s z84(ZL8)wxR@ss&sj7zHuRd%S{jzMB{5hqWq*bB_6jCDP7<-R2Y# z;AH3H;3;Qk#vRQLvV-d0=8N8)g?X7#E9*D+x#~rZimKu!J!kGM&^i-49ZNnvIyQs@ zE`O397pqR!#%eSLP@3qJLht;mdPP+6RrlC{uCb%Z0((lm-APR6OS_rdDMJ5;)c|Ew zR-NtxJ$0a8nX4s+lAPM=zICU#EAYu=@t~W^NaprVo<2ZSBjCi?s!ub&|v(W`vx{Ble6Pci^P6MeoWcSV~J_#2(J)Bg(fE3>S7?x zeXw4jx@=Wm33eu!k2Bn@PH@(wZXdcyN0>Gwrt+$P#_$~CE{m>={+(LNGYtt`)rk9` zeMm>Vi@(U{GSCAfvmu@5z%rE%ux19BmM}InRWexi*wDS4+4qve&hFJ8t;rRpg2kK$ zODX8T+GrbAbhA5vvEO2%vRdlEvx~J^O<6Vb zdzzWGR17!cjXeT{u(8Ene8|P`Zmim>R;TGp?AP>|uecwp!PBce^~=6;M{d)skxqft znHhA65=}BSu5#uc%@ihVE6Ei9oiRmgcM{Q8>aWJFZakd|n1FIWV>Na~o4aX1^myH5 z;>@ce0gX22#NO>AbRK5HRJ|aGo|na(?2Byz9&vRv^Ht zV68KEJzks+(bQd~3X6BGFWUZJIUiJ>TGjTj-tE6P_P@+qGsLLxl|hy`PqPm?I4idw z4VcYP&u1py5cglSswU*IE@uy{#b3~ApkafqVG?)#j&$a5r%0Ur(^(2$E;^PZ$nxBOGH6__c4gp)^h7bRzk1?jUuivWzFtReqqq^CfPsZn zVTk>Y)lu4Ce_W@d4y)e`g0ph{x| zHKN-i11?3lNaU0s9cwcQcJ0tR&Hf(MvLky7sI01WO7HZ@uNYg*G2pLsg>jI?>jc60 zvrVwvPsrWeX@6gUbt7>}5DZAq_)4cv?aiyGNnv&Le`<>-<@G6`mlbsN4%FgMWgA@(je4X18fQHa9PHWYF0iIKl_Xc@skSJl+!0zZwT1u=k*c2^M_{Kz@I@ zw!uJTN3F`YfT4`xM&lO4R|60IBUe4IA|9_A8f|?UTiQ#s8yCg?GLH0za%`8$Q}-|>WY~W>W8(|mesrzT8ZgK zBNI$OVifL;q7meopwQ@KR959DHX<>X_t4BD+507%gQ8lxHNkMMUF!E@@^F@joFu-7 z7}5EKwCN|bcsR=lC{~Tytf|-})xeS&@{bDhlc%qYi>VzsUp6tcRCp;wkD`Q*aV6bv zhfYh>PAlN;CPXiQyFwa=3U}) ztrH!JOwdw^lUa<|4iLCVS7utvCRS$_1pL2~B()dtKS9U#9v+Ji$SEH+>;SK3?b%7O zq;8_Bb{A((Vr|~bz12S#M_VIN_oB_MH61K=9Q!QBzT_oY$9pD%#{k2r9Jgh9= zA zh~clLR-y>c$=>b^e~b#kAAy*ULC^Yk$SQ!X>4?dk-nG-^LbgnIIGB9APw;_X1Gbf(SSew_$*dRKy-hRn=C zy1c1lkQ?@QSNnhF-~{RmM#Mo#VXm-lz%{985hIAl&{+8oVqA-YZ~vPVRh+}9JH|P5~3yzc$gWAO|JO7%~F>~SK zy?IW<#~|%IaSh`-cF;QgSoBWj3{5E%WhUy>o_?I#lk8Q$xnEt8v*?t(=n6s~#Ww0p zprx7!dNsR(lqjawD>v zL_Q8SiTJNkaqb3@!*-l~cN!idQ{->A~XLEzZ>8X?G$5{npdsXF3Jqf$LeoL%puV|mXS@SLOjUL0^C4#)RUYUcYFjH zqEv~u4n4(i6uSvH;~Ia7{}f5UzPc504%*^VS{`e~hDmPiBir4TY$G(rSkNAcV*7a* zyP8etW5rUCWauh*cg*F6=M!oDGwXbv#t&$jI?etzKq*c?mN39^J-BT)x;Tu^7F_|GR!w?|WzcpgkW@OGX$MT3znQ{GNPa(#{ zljfU_R+MFdNO!$0IXN#R-RF?*h45^WTWKIzduT`{YZRp|QuSYB{g*CuA|NSJy$=~R zcA2q&ym`b(44GDCYKO4q-fT)W)C$P-w@fFQ6sruxGZJla9R#u{SeD3=mexq`VDU*Y zM!Kb0BiNaxqu$m3Q9wlX*i7=+SU?kldTXSg3I$YQi_aRbLyUpG8`oxP=Wg;=-e_s# zPeir?`_y?t6V$d}q!pOF+-SKoA*Q=QCm^JyQ#b*EU40UGBemzoxMP_05dFEY+K8yr z(10lw$ZoPdAT!h{O#n5|f$FT-CK`>^vx=e{cq`{rr1n~O1F~&|=NJa$1Y=%Nbslf! z8Fq_bcZ$(zPE$%xcE}Co=`0u#wSM$KyFx@5m>THULU@3-j2F?7MIqDWHIhiZYt4Zb zBq-~dnJ63^mH-gxj6LZVA*iKrz->u=v@JdE=xr67-Eo7qxgS@o$d_EKZt?TJylYa5 z^VwjTFwv^YBCO@oiq>dbCiV&lH!jcme5j$0PzU=0`jJQJvpcyzmq5_#yRP9;)A zyoK9l9}UYn(19-y3=H0Hn<7d1OXwKj`%MM9r&g?jcOBPq1;`F1&l88hXa+}xAZku zbQbf>gg)w|JJXJnR2=UnGuUpj`2=w@(bxSLLJ7vZ3vCObOE$`>K1)0ISXKHtkWyb9u=ePr5 z&Gv0=ORRcDTNIreTHKd)ljYW`WxU5<(1?+&<8Q6mpIzhpVF^C>4U6NiCeI7x0)1W6 zZ+r|{9+#-?H$Lu;jitvI_8XTN<&KT>ZFIl!Mef)_-p2MDU+j)mzH$A=m$+k#d7IF0 ze5pIOgtv+PIKO19QT_g*nzChF54uw&5?8xdtZ!`BIkkJn@X=CR%Ien3N?^8hJB-MV zXF2Q9!}Wzl(9{Iq(NMQB`2;e>od;>8`4S$aaR3skGcy)oE$GnJdL5*pn~|IauY{-0 z)E!TCW{-P@r(^=v2mAP?kdJzOF%m;tyK4Hd%W^U7Kf4b8+4{|>I^A}sV-Fj*@sdH6 zu!^JVjVrZHjH^##(0TTSK$ISELK3Q+8m}%R(JxVn(4G()m8;rfdyxZYnv=@PuJ~Nnv_GfX+!Z>?>|=A3*(#1Q zE8NShZ>P%tSLe0(y8?oZUzydN_0^zd>_!eg3GRE}mn=e3VE8AZ8G`&$PTcptDjc5{ zj4q1JDcmcNu?_wLWrcA;yq0zC;rVHCN*d*J{+@fA^^zO#JuT_ty@LDh%<)2_7}W!k zs*`(964XF(9gFKwnpj7O-MbsFBq-VCCTrOP!T0(i8<$d}-bj|41>c*4??tre9p3pJ zo817nhrTb!)^8Qbf`wtdG4xr7SAav8S{k1DHb3XzS>xSSa4t%1IUsq_j3ZN9s*|Ou zEkCL|3^^}r6EGAk!unid>1jWU$iZg>Ah`~yjAMgIbWQ|qujvKaH-~W^jEd+gzz3tjDX7Eem|z+qM7PjoQ1nN3n$2c%~W4&3uVq* zIpw{^w`TNCeOB4{PVzalg=wrzbjKcCMSDTD?e}EmSNrj2t)FI%kNG@+*)TejOk61V zjTkc`G53rMVS#e#EqxVfza-DjeHg>@hX`j5<->T*|OO+Aa+U&<5o#QXqr@qiZJ; zkYErrr&&6U&r>YUKM&bz}pp-c%qsOBk&dr<5H z)uw7Qyf_O-MFVhC{-D(6K2Foa(9wXM+)e8)UsDIq&c~=ARFf)~w&w>aXb@ih|CLI|mXdNC2G=q%Q9K#wb(hCOKm&<97kjZ-*_zl~+Iq`9T)xNc#58(2k5e?XviI_c{)9?Cb-1509vh8lK_hadvm?-rp|rX>zt%i+DXi9_G< z?E%K+&g}bXiQ|jQ-$6I?Jd`@hFgQCn12|EGi%T;7q&PFJM60t;nB%abw8f8CZK?ap zphr^zyK+2A=TdVvg2Bt+G#c~CKSb)+@-Lvba0uu<`+VbB=FwwOqh{KCFu6MDvYFCb z)MF=}y)x+M@1?euIde}HZL{5~u#CC{hkD;cbzYF&V_1{}IQ?E!O}!^AtUkt>tQ+|(i2{sFERW}dZjyva$On(bnecfT@}upOjU=W}B~qeVS1zPE3-k; zFeFqgSDr2XV~#mB{8$cNl2i`dE;W*h59FUgHF#g&OMaN6`u$@62UH`8Jv9KU{bu`p zHCT2#Z!J787Dggp*&$v1Qkd>Xr*fa?G@piMLczq?boH&Xa8t?~Ms{ONR39THPX0)y zE_zjxP#$ah=U0_oX6BpSuPd8Pk4|-50BFeznE5*o8pv`isak?68To2vSjPb^6)O%{ z9DOy_f%3SB)^Q3t_RxKcxX8aEY=I&vVd-?k^`sd{3=GxB(B_ousoVY9=n|T!e9Khw zLo(teJ;9l(kJ6sO?sA|~FAA|c;YVQC*-+gd>p9cm0HF(rhgmB`BxCVo7_R`>7Cmo}+e#L7qtF?3I~ol(VDHlz*Do zXer91xUpkKzm#9u_%cWN(L(^loOW!?8x3ACLIAa6j_B|c|7kK!n!gib8NIs#C{zsi ztkV6uyW0H|m9chQchd6EtcC4Am!c@@!HAMObfGt~6_AWk=*rO&J~7`&iY+1-pRie^ zjlx>QVCAN}nT~iN9&cuX9PS{8sfQerRpp$hrz*SVZ^o`0WlXAt`uMgrszx~r%QI&# zblb70oY}n@qO3Kw@;F2|^j|7hnN4A-Z?UHC09091H)%Yg1$QHd1&nNwE%iplCTywJ zOm%&t2Saynm5=gVnp$r8f5UG9#cevI+WxNSW(&^z0}sB8mg zQQcWx8W_))@oGSMPFIs>^5smv@B?V{WgK6|@#Tzloj@26Og!ue0dYN2->Dz8)NBaM z6j&k9iX&Up-R<5bDl7yd|vnbQ7j6=%NT z@Rs-EXsbRSSAALcx#IJWkSkO8cevg0r2f46ZsX!)UZ2I7l_hVXUi?}=$<+u89P_b14M<6BJ}UK$iS=dL2<;O9vI7|4f}dB>(nNW49mUV71GX zFdn+K-Q`@?QwmdPFvfd1&tqU-xug*udh;H%%*+aa?9$FA;#~v)NKR#4kzxK1#BC$L zYd`fr1oN!^>nt7nz4Rib?xU1BhB7B@L6DYFn)dg&oBaq>nXh&EiVUD_?x?onH;1R{ z`S%|OJI+!|OP7Qp2J&ZW6N$idDB~IX^PR6Acv-61j9%Z?7evf&#$ugLqt9gVZoH1g zZn1>Ai}woeS@=zSh6))W%Q#_s1oDGOv2<^^9him}0%b?raC6U1+i>fI54YjLV(ypZ zL`@WAJ{OX4*L181&B}qv-k^uiLxdFU0o>dO52BptHW7Sor^RYMki(C5wN}ERCNP0Lo#Mc$1 zmX@EhWIkiWAieop;SANJ%|@}}G|N_rSf_^6a(2UG(65>TWGHI&}1)FUSOa|#$BS0^;DBuTIOz2*y(=+z$5|i=Kz33LQeck zK&8PjZ;)0H|5g}t+Ua85U9@7_uIZl@Hoi4=LZ)`_j+-}b^CCsU_qYAZV2&u-rM zt@F^P)U}<+6X`I>2d;Sz@*QkKa<7faU1TQ;$oJ<1$hXn4&I82M@M1PigkbvT(Un5{ zv7NibL!i$-?q}|@jqg~lIS;iN`n37-MBJDCi+O}pdI&`nQb{M_K;K;Yup$lgBuy(S z7FWG7eK4A5wDDO-@rVqQZPGnZiXsRXcqt$-NeVa^Z5uJt6p(e&kX1^ z-q7h&L#GY7bh1;?g<;3Yq0<}Fq0^Ny#3!KBzorH1=LC_++}2a|%JeNmmNe>y|=%Jw^S>ZI)b4$?~-?!*#jo0#l^cr(!Pw6&1< z>fv_!{u52^@%yNI>~E=f{a$jH`K?7IQfmMl6$1KpG0KkqP@Kw~xW*(R35F z?4sl*L@IboWZxtNHWgz&cw3o$n?pI9`e63$vFuxO_HAkQZCUp1#q8V4?AvSEw>8e&^zSM+3qB4yx!UF z72h{Uc)jx|Zp+0bbt+#*x_2y&VDSCm-26xEn17)1_wLMpWN!Wr;v}i1(~J@@qvWLd zXN_Mtj4W6&Wob+^nk?3DreSrqZ^=+w+;}NK;O!zi0`dtBfp`85wl5xykD~8ua+*{A zj3P5R=f|a3xyI-5L6;UuRn5CWm;O|M2ie2!d@@y}kA=(r)NtkNJLb}XzC)m62i?n!7NnIEq0F8<3&b`=t`Nw zfGAz@8JO^PMaVdCGPP-!t18?lOd}iG|44~=M}WC;)M@mda=fbJ$j*5am)baM2<7!8 zwYLa>k`t`r?^{9UqsY7y`uy}yA$_Edgi{q?&$%KaVm+2>Z#C!hYc7$KD0EW6LrCt_0aX0(gkVFzo!*AR$} zhkX%erG%pUXCrQPGt*`i*Amqx^+6UsdzcSg#9k0n2fFg-I+ZK z;R_pB0f+sQ!~PelhY+Z0JNQ`k>e{5Nf!9Udp&q`#s$~7?oTr7(!h~dKlYfk)JkU5H zMSK($6@8B?Z#Pv=J;hxpYl-SwP|89tR5*;LhIGeZT=*3>G0U&Z0o@|(pGuN-Bf9su zZ9hbwZl@y#{(SfJe~|7U1{O4%Ras}Lx%cSqljfWFNt$4dIQY=bhRQQ`^Ir!rYp?Tp z0xDL?^GWXBAE&_>`Xl0|D|gjM$g(4mPW08`=_Z+gFmK8Qh}xPQQ5%G)5?u*&yB%M0 zYuIp$0VjD89}88G=MIvQzB7;vwQ|*Mp;SC(#4cNR)?Zf@A@xIsK6xPI*f*e22>zF{ zISlB2O*itDh^A&V3F1#7{eE*(kMt{nMxx(XlDpHd8uimN{l55*kbW|pL;B@*)eY(t z-$B2Jsey8qemm<~ryymfXQ`D=`X#&a<~!*(^?)Ae_b9`a+oVc&px+wh59nv&PemaC z5C5Yj;I4iFd@%8D=(YwHi+)9H-&dU z9I&ZXZAs2@sk?MmtDGH|3GAP(*Al{_(E7mN%&mK@?Jmh{__$Ne)s7q)`Ut`fUZH)oMfRoLmOq1^6Lz3&Tnzs z#-HJ?CeF?Qv6m(k2%W0r(?k5&c=8N1! zE>4M6w4^pOD{vj~=jW&YAj8T`@r)y&f%$mN0bSxZ63A*|%?!I+v+WUs~ z>AE#)Pc@g(cuAP)Hk*mr zrxF|H>e3YV{L!^@o5)ua`C;kv!X}=+?C079QPf(KcNq=k`-fA`=*RS2@wIVzT~W}i zcPRW*d!j0n`}*u1jO6le;O>hSkieWM`w`xXPZRWBo$wa^AQ~~S{-=0l?QNZJ=)U2; zlv+PpS!uWfvZlGK(R=w1lC54>{eTq@>#4%pYc>lb+PlVLOpZyg?v)|vYS zulf0Hk>nM1|7MsuSNIbgG8nJbMJL{m7_-7kgRmN_>~g9XLA?nyVfHOn(@ZADnb?s$ zS|jH8ij#Q;cBOacaGT0++*6oh$U87i70CQP?KQGzAu;SHQtKT6LYyp6ePy|`Aa<;~ zSUbdqm9ZeC?oH94A9+{-=3Ww?Qyf*kD~zbB>Y(B*q$8t4X9q?*C*+(h2(m26=vS?s zGoCEc8+OFKM@tQBIHGnf{TdX@=wGZ@;*an}KFqmCFaBO4!2TgNxphf+6fs-->DuLQ z`RmqR!y;qGtjM}zD~^9GEHGlGL%Ac$;M~&ejA&6jIzqO!o-O8FC!>!k&@%gb%7LtJ zJKSNO>~K3jHjoLifvgqMsS;T#@?8gu5( zL}b(XnUh0VD!LZ#c@-G7L~_e~MSUbGR(p~EWg*fjAo9Aibjb&BF|uJE9N-SwV7?ME zr01LNyUHT`0=FmTmV4oMod`cf9YXlA9uU4@AAo0JyP1*lKzkwWM7&!Svd;nIS(?xN zU25D34j#Z*YW&7&_%VdeU2jMT-}Jvg9!>vSgXrzF|2;rO-TI%|U!MFi3bUkr53`sP zru+q_AU~!99?Gh|W8IbM;u}o|Ttx?j4gE3~o8A}OwS9HgK4C~J5zRZPd|($An6VfF4>qd+vt=b@=Y1n)oC4$)a4 zZ^pU#`3ny`PQ%9_D$Mh*B3Gxqo-?3*{!dfT--y?c#V6I=3tkxo{YsF2Hm&5O=Y{Ei zv+3>gH0K(Wxh*Jj3T5ngg+Qsp4MwQD$nuqlgOOz;7e<2>ozuQ6vzRk33(*DHfnj)w z3dJ7@{4#7XiI!9}4SS;$)X$Nri!!7K{Xji@`u)`E%zZD1kkou`s4jEBfBOSVl51(q z_Q&Y55VgfY+7Xbelb&jqUZzpadpB)VO~X8L_z&A`AshyR)mjlvRt3IfuZ-pR{X zls-J}9}fVX>7C{O7L>mjiOm7)KZ0Vr)2!l^genISsjU&EOwa&3cL6;XE1Gplw~BUr zxf9ySRNHYbg~Zu=z|b44R!W|hc}C`PTgt>-DbB%i904eE<^=6x=Rj8mWsY(*`we2= z{aDTEl(k4uX=K~^gyyqmD|Cemr76Cf6gMG-`f$ z00Cy2C~51hKt|h1@fh`Rl7|0t(Sh{0ikx<_aLM=BoXzU?%eNE6i@rnI-7 zRnFXJ)Hq9#5rnw9j0EBW)iyYh-mjT8ARVtZHZxolIgP*5K$n;PX$)2t4`A^l!*hw9 znrW+vU!p=2V*c9*Zd;y#YnXv6B$wGSKOp&&`ppKA(}A#lGmvO_uisqdu5soj0RMXe zvp=N(MO0w)8E8uN=38jHc~9<62H;+Io>pNFtm34w25hJZM~3;w0i%FVE$P)3DG=5* zCZyp0G-faLSvWGv+Wh5Z^_!)8HV)&c5BBLC5BJ+W*(G!aofI_#o; z=z*C=GlxZ_D0zrzd^JQCjdz1w3>FDdjdKIMoBOfjk{97LES|X}>RucRplaVIeR4c~ zc065~VR_)y@j0;{q=#wW0a>)gvid-$;SaRRLgTvXiFNGKW49;*h{4*sx-NN;EV_O) z%VJhav_E1o2V!m45U2wH)mbdxWo4OBx7Tm(s}4tSugqZ;zXFX1@TfGZXZQt;srp(wR-LgM(29NkaMDD>HSayV)c>WfK^o zid+6w*z!R<`en;|vFKV-#=My)okpWeI9 zY5a;eXW>ucEC;UN$~Knspbc`8Is5kdt-YMtubbrMnal4ZQ=cHy>{2piu3jmn!sotv z-Kx^F|4Rs%gi;dvbtYUbX#GKHI#~ei+q{>yd=QI%8C~nXFzbT|vwE|(M(E#8<9W1t zkX9qjdQX3!Q|D`Ww{M?i^atJB!2Jczya52=wk#w)(z3ZQwfx;V++dH8zk5Q<=7Q9+ z`qXqZ`P0cHwBdj0`&XbDvSNU(|YFem1fU|(?u!eYkW83i_>Im#WnuFuv?5~Iwk7= zCwTmKlxcXDOzAw)AAREALvaJH|2nNAD(apsn|Dhs-(W>WV)Nb!fq?8FIY-!p!_Cm; zw+QfTJX+&1rvSW~T0b#W)!Uh^!xz#~;uT|0H1P`fC7non5pR%u*`*WB2ph(K(!+{m z%M2?@pI$ihI!(OH)WoW_@vs55&64F(Hvq%PCD`;=R(If^4airXJFPr`Wg)BAc*MPP zcVR69+qX#0Mv~PwV0iDzbzH-(vro!w;WkL@pSoZAXR4=W@nKX?jtm;BQDfwzFVv(q z6()P9iyLcBG6#lM!+}CI@3A^0TvF9Pc4q_*16wf1H%zsIVv|Aybk_Drb{``We`h`qCEE+Cd}NN|H0 zR48Hywnfn^iD9KZ>NWg5b8ctXS!X^g1na$o=M|FJ z;*(S6-;s$hv6KGvBaII9rJuhJy1b{O67FL{;XYBD5kv7lIS1WPwm0|btapC;w0QfA zJJ{#b(hr(dPV&-@n@RQ_Jq;4~qb^C4aa8!d%k`n7GDjn85PT5BsEQSSV&9CnnVWKxk-PD!Dj4DqZ+!kdpiu4`RmPCIfU@IQ9pC??tp zDqubQ1a=VC64cbmZoIO@HBswTe`#cKLf_;`h}vlJVXYw3nStXH=XX;x6GJ}yDTfbG zB4ov7aib1QHNT^pE{j)8JV3;qOkr`NM!6xIzaCi(*E2%^jLZ+g0|YsOfMh6 zsSae%wr{LYPQ~y~%WXe5hamKiB2`2*PANp(T7Xk}0opIOX=9m`COT*|nO1}Fy2dTm z&^ICUT)ZgugVF%1hTeOA6&~deA&ex~oHLwS+)D+F*8+h+PyX8||6y8l7IIK>)^8ak zZ4sCV@~qnDWqyj^GA!!91-Kjwky{V^vGrU;J@v;Oh(FJGEXhv_z@GdT@5Ak8!|7FvT6m4m zB7B>Tr8F$-v=GY8bz1hP>;Sr!a14dX_$*?k&MoSmXnYnW{*pvs9UZi6926o`8c|29 zwob2wt_WK$@{blM3;Nb?9*`UJ4RXAy^%!YIt|OZPAj06ah-4^1J~(h5zx3!<<7!k zIj)mJG9)kxl>axbQ#Cn_>!kC6>aUUOG}XMxb&~n)EIc{uI-#C(T_>$>kTEUS>Ex{I zw3$rSLmJ5E9M`Ein*g*Y=eSOnsaoSY4a{+!%6H;At%WB!uG7;!x=#Jo|GK$OH9Hu< z!>j>(qII1nBK}=`C+3gF#cI0vPUZQqPR^4!=pjUSPcx_CAJjbE&2xG<$2Zcpa9kPd zIhFfkp<7OB+@{KN+CNCidQR&lr>3NTgrTde4;s~4dX9eO@-ZM()d~GWl_A1E(K4u1+6nx?jIuHJ00uF z+|+^o24I#}qPrN&AV;-24Z0wOj#5kCELVpyo=sQPcq>^#)u^3s?n?hUc~8=hCrABZ zd>UZQhOF{1y-6d{Nrd*hdq+q^u6K0e4#F|q3db<(9lZ_smVS5f#`zs~zn055|M@Fy zK!p4lWm;_c*ulI;{)g*J|4JRAj*9Zkt}lJP(b!QttS>!GHt>$?OTYQ8%`RwE&AY++ z(z#RO{qM zV2^ndKV{&Xh*4b2r4(PLzTMv~nNe+~{wefJD$?|QXjS7jI)8b?Nlnmj+#K~!V8HdidsfuHlpn_4{RNm(sM-JuYw&4FyGC4=gZ7t;=(GqLcv*4pCZe%V?ZJ5EOW zaS%w}aI8!%frHcVd)~Ohu4a)Tcq#ic=nl?;!&Ct|$}5|#zrxI4zUvQJ;cj+Dte8_+ z02w(`%7vp(^jjLQK!3_74)3U6(_-!N$g1L~3;OiYcxL>H3*j4U# zAj<*0VU0HmP{PVn>#NuH+C*;9FcmFU1yrOiCbV2cYcC3L&OrH~x>6p89$mKwj{%Xo z{@Mp!@t?wpQ23H83l9r`30Sy{Dnk~=ehdrm;ZM+iDx1UYBF`Q|Df9vJH%0V|GMP+B zVmXGIIUeTyly#N1QJb(>g{LgcRZ0Nssqb5^v-x79Y`*)+7uNA7TPEwgzm5NBwj`b! z>LYam)soDqU0VPHKlImxW77HcL(b!ab7OOANu2XIGPRMdrt{1Ts;hg7WWfa8I=rj- zN>?o7gPB2P!4-V3R1SY2Cp_`?4=kSqyndN_VUGoNo2LkTkH|$N5y6 zNy)-^!E_5xUo{0AM6|O;vZphLB_VA05cGuth03Qob_u|HhqnC-$<^7Pv+FhK0f{t+ zW-5PhV4+zMG1RJPEn@Lro?*~a7Lm@oU97hIDh%a2{vYNk%G3>ZD5h8i`M zs3RsAkyNxvi5f7$sDP+|_-d&S3W|y_1E`>hlL)8BSU$C_ZT&3P*4nCHZHpM+34sJq zE1+m11o3@_0gLz`A~5&=UwfZ3XC@QC_PgJ`zx%uRGiT0ztiASn?X}l_94zu-((Ivp z-sL}xK6?{V9sNn{&qHHDRHo6iC(cxJ_KO_QY^@X&W-bf0+oz%kf1z#r2EP-=giWC?PWF}kF@!^1Z!KnNvWrm=V`10Bx-o#71IAo3jqN%ISI{;*Il%) z0-+&b-v^h?LSD}CC|0K8n^O6;CrnX0J|7WE3Ki?jEgY@6a z@RM%M%&<>KIs`y>W+|}C(CfSC25+*IHDv}rqQhYeQu!tONhz{yf)9ieLyVZBUt%9rFZLM1=!bL!fLES*HXr%zXBQCRc6F+~-97lu zMDy%CyEBZDMhNs;A2z3INyLm$;1Pg_?35HGT+M0*qp%ycw;@_C;E z;P~xhpt#ucHOP3TDmVzOqlVh~6$Cce^cCFj!(2QDu|5Z2g?FO zxP)rQ6%TkDJRcdh{A`H3;R>pCzL z>roiJYurxCeXliWS9}rsSy=E++wDRHZ5B6?`t5-V{lwJ}f=@+I-wuH;48!iXp?IDS zf)2&Lxy@4V6QGN3t9rUHBqNkmft;@7Ri*Y++;Y_L6$;eMo!mG+JF{U!*)4%KIU;8cn%DOaQotuZlj@!>*rg2US-u;cfA=&iw!A?1hj_+tefk$WVD1Y00YtB<_jNHn+ z5a*jim!T_=GR_kU?ai|x^&p#7L%mWE=*q`0E)k12@B5A?z$&PLwI_r($L>urlIF5!AgDUq#ZO2wn6L$;VBnLWD0&WHCY^ z{=+nlh*R{Bkki_-!MH0I!+fH=e|k!}*AW_xO-K}Q+qw&b3iL;UU@JPCA+8m; z_Js0%CKxc3+eyu~ccWb$#+?&MD$oTy8(rQuhheMnBt$`?GkpDS82m|);E?3kvwk8n zT2{B53=n6&xUI3e&>E8uD_n#fx)5Nix&SwbIQ~d!ynOA<3Jiwhtm=R@fop+&3LB&~ z7h)v4K{z5=0W&Wcm-~;$neFY>`J^3oCQab=C`HAq%{Pj-TN4U0uguNt#4Q73@@F2_Uajo9hJ|n1XKuoFHhi>i03*9@PhZv;^Vvz6RH-KcnhSYgVZGdFySC&F}B2L1FKsvd;5FfwHteCF$_g4HE zpO1!jK@v{L7xER6d@Tw85%gQV5Be2B`Mfy$p`IT4tux0In6I#l#cv>jRiufQxe3*L z_M+^Z3=k~)%6w}~LHR3K4!p7_*;bXVBdKIPE56rgcoqHTcBSWmcl2evBs$weehu6O zEf6+{IV`)9D)sOWFhFQm+Eh!tRmFyw0d!Yu3} zEB_`m9Fgv0n12?SS#fYE3JW&A@$TScC;_;$mh>f$16dFuWU+YcdA)vDEn?Z7IX}02 z4Lj?IW$8K>8StzKt19)p)0y;%GO*7dr5mDaKnSlt4Q=q@+UoLg`NnJyux3pXvd> z2=G~n!00LvJ}jebO+=CcxJDhM-m0b@EH1c=PT+!`$L)2X#+{+>euvA02S2&@QhU0>=55N9O>vgRhbUQp#SFptZv$KJ6L=3ADUW z9_$)aSMP4HLgZ##f|r6_Z312r)+;gd((r`mliYHuSCiB<*lym!DN;UW6|L@g;_08; zIFTfk*1(O^aG7LJcHjN=dSn&6Y|Pv={tjL~gnaC$?sMDI+O$Z%pIx{0Za9*-=wmS+ zpuH=%JP7M_0B=7%BP|WCQon4Iutb$4td@eEetyM$90_A8%jaw=#qz;=ul> zO-nc^<@Ck6ya3&4*brW&g(rF`sEwOIC*q;#qrPutw&HXjPzSUmM%a58O#nAmT&cR= zqF4v#z6#&m{w;`uFTFc`TSQthK!OU_z}ApfZJO61F$@upU^%8K=)KxE^q-p5ZMaJY9em?0&i_3}Rw^JL&U}er7ig-SNAw z1t==zT9BTu{eEcQnx6|4F1L=r-8~bmldk|z1d&Cl?LP>GV*6+upRWP)*GIO}TNfhS z0p!?e2a^kk2?}E{dd7>%_r;8sh=!z}Zz%n*Rr>F;$kF=~mGLg4?%-n%Re4II)z=)h zW3NaVwvX`Gjc7G7Vo6{Np~{7);rD8ETd0IwxDWF|6EVp1?@4I%U(i|j-l&}r-gFdf zCv&y#9t6{)csMWkqv#`OH`09s{5jx`b0zg$2PO!;Nx}EJmX9T9p6Oh~C&IQ$2bt|( zsVtYOU&AkEQFe+&w`&kLvj1`LCSA6OfNnw@&POW%cRocF_Lz6b9H$K&U-9RSGkw+HM)F`>Zxx7%l}N3hd;@?>q|I0a_kz#gYyZ9 zFpWmE1M=6F_xe^L@^3U}8<(F8O^^%VvLOH~*~UpEclLe840%UI78dE`|X? z6-k3E;+_1o@4ub;8ma;nP^`ob!3_moLv0!C}}IdJ|Xry_ILHcyh1&7(!3*e}o^)OaAZThi`r|KR$#H>+oX|@*L{! zzNUA6WC#q+kIGz&A7G<6aJ2J`V$TAEW)MG^>t#^lK0V4z_PNThTZjs1A4y5(&VCA< zPD!t%-`liM@FfV2ly(tZKkawx{SI{Da!b@wZ;$-|&rSw@zJ?;S&TRq7`V5l{vPk{H zUh3bX>gT4d&-ifN*4v$r-;Q;b(?MS zEQs^ngp0QvzE^Q-`9d%sjb|D4eelq47<*qud7#WZsPvVZCEk(NJ`L6Dmb2S>O#p7H z?EgezdoHyOc6JTyjMLuzi3-ZDq5_u@G;r@wWOtx`PvCm~3i$cR_uB6ok9{dg(~fS# zJAB!pG;MhBAhq-7eye}c`wNq1w-w7UPCGmJ= z5|1y{Bue7(g^>Fm-9|zCfgdUUZf{8NcS)k~e)-#t`aJ+A=KFRT^1b|>Ixo@A=rrx5 z>T)myccyeFE)18OV!458gFR;&mz@eutYzH>ZhMBvCJT#NB}&}1cjcMp(u6# ztw0Wt)%qIyc#Q?83Iv`3kTO%T=xorrB)LO)(y~v-lfb5$q?nE~;J4jcC)SGh5tLz4 z#wE=prxbOtcBQWz(Q}XEzyK&qNo;}}zljWwV+opJTABF6i|2HbjoP2xq)_j?g)QOx zJ?LInA1-2W34?cHyo?k*OZYwe4jZ`f64CCG@@ik`5h~AbZbU+LF6OoXidOtuTk+<% z&(uxKmL|d%MdC+<$AAi)oAo9|oFOSG;x)&v6j{}@2c&}CgcZ}1-4X+^?&2sr#9&X+L3!QygHm}?I0y|kBT#g5%GW0`8B6yJ+T5aPMg?7W3!g=;3lUp|>fa<0X`%*b`1X zLN;ZoO&bsc;7eSmyFzn{+4gcj4AnS3@XHqSAI7~c=I3RvJPQyRMpaA0x@Y?$)2LdD z8801IE;L|{E5W1LcFkWyd~~yHHk4vL>5FMDVhiKoF&nS`vK+f&zJY!<858 z57-ddT1A{dnsH#0OpC}?^pf^!D4!4q&W#vZRC6VnHi;QP7N!m5AxfniWD+#zLNq_LZm&#os=@7Hdh%0F-1X$=WCRh% zXFN}Z3LVSo&-U~aAygS}W<{1)$wmI?p#BB@x@2N$Gh)D%Kty)FR5!iQ6WN+;*Zc%wCX5@ovL6NCQvfjv z*-^1n5Sg79ilc9~*^TFBVvFr_qyQE=jGAQ;?iBKjH|~BT`_3s;l<=7Z^gLRmbv<*E z@VxC(aOi+%ArS!=?LS^1%jL%y zSS~-tiy>VpwS3O6YVca50&Eb;$MYD9zXk~#m`^aF_CkIZu6$GII9?&qKfID;CK*y zkNZ$@MN0_zP~I~088U3n2P!M}r$s4pu?;y|E*@dYg8`%$x%l42J>_D`q8|JebimDQ za5L8AO_!s3{N$30oEty3xCzNHe|RK2IaN>2BB9$Y<{8c z4zlQdw>RoROarEf4S{M}(-GxdK?k!C?O+p-Y8Rn}VKU`FvF}5U%VV=D@BySQz#7(g zcd!yo;V`hV^vZbo%30Ur(zx1h4u(TBY+-)r4mt90Cvd6#rhjMzwrp$(ucU!{`F)`# zV+%5$&`mkp1c}i`$XwlW_CKL*uJZgTpsIV&nNtL*b1X)Fnm#!5yI$=x%^sni58g@$u`rdfcrQf9Wavh_H14c$9n=rP zU1+wVKrRcgBFze(J{sf9c2Du)C=MH0;3R1~J060MJ$3aTpnUl^vo6L3NPA-^;CxTK ze~1oP5Ih${yK>faMe5)}>~DpI9Rz!7ymVVU5Y7I$05l+%vf5>A}w2TJ(-Yi^nfm@4|R{V zGd6)=>wr-MIidP*zJW&V*~mfB0q|_yD+CT3n@)cI$B{n2i%6Sm<@=zKZ@8I;6V;41 z^z01$IhKEpTj~blMJ|G1E#bz`;BLsTQ+Cm2&0#dLbTjeQXZ?R=wSy$ z#igO$yb<~UYSjQGP^*9f2tvjw65yb{{TzrX(&4xU9Q#CZEE)~b#Iq33RE_LS#3*2! zYh+)|iP)y~AbeCIeamJa8J;Wy$3{m24Tmz(NqBMEPv~1}OL`D=70pVh@K4ZiLf_7% zVdOC8xW7~bDj+r#!p{8q3|HSp|B!SE#0lfuiI9I9v!xfuYoDtfb=-}Wa{>#;4=cnX zZ)C5}s9y{?ExHIrtVD6Av4YcyRp@T}BYrj5&hohQ#0S{N?3V^Zf*7Vt<-|=Nc z-{y2&#drQsxL0UkzcrDrQ2Be9c&12>M|sZ zq+dc<%D*x0#D1-eC^j*9&QD^_Y_6Yu3)wJ)5^+ie?(t{`L}Tfq+H)urCLguC41B0l zl3OC(hViox@!O)S_k?np?3u^FBrF^qJO)CLZ=crT0|dOucq|2{X12WV%Uq3#+c0 z<*SWIHwyBS+HK|Uii?*Oe$tiqR4S8J9PJzmfjZ}cok|zwLPDW4s-0ZULw)(iosFd0 z22u^{L+R-S1k%uJvm`5ey@}sx=`|4aI>yd2=J$>2+~$^a6?pMlbdyg1=EdH!qURyeTcaq;$zHeiH+E%)E-&2%OE9Fr(ZE~FNIJ^3P+CS3oTqyWT6QQh z7vYMU(C|cgu$E1xmLDYLY4%?P-7@6HLDimm|BCHM{DkAs%Jo1TA|a9!-GQMc;g8pT z4YcHY(%Yhoki+s1B$p>F*MC>#kyMKE%+bA}pNzUtF({mU7a&AO0Nf%6d*&lk_jd~O zPJqo|cPHyn(xX3yk_Lhz=$?Bhv?&2||y4e0l<3ZFr7>NR|K7hz!aBbv8h- z^3ASDJ4U#3;#75UBCiOZ92@QGYXvT;qSI568M;)|KusmfR~nHPNR+x|1(Qf)=@m3s zRl!pt+cFmd28JP=qsQb0n%K$_t>(BJE3(3WiR{5;{=h6liD*67!czeMDgn4H0=pfNK*n^1CkPm@C>M0P|gYlDHejZ{4NKWH`1_V`eMx?Pvruk0u z7GQ>JGVfJQdNKRmx?V9uv4Vtf_d^$4ev~6bU^LVyO-LHAM89Joh}V|xIa6#YW_H&D zJIYw*p7K4$U70A|JNw5Z^pE^M3M@*)|Id)TKmIqOOd9^IEuK^73I$Ey{)+bDWkVPjVK_uu8X(fnTa#F;TUSId1*GlG-UgOyeDm(9+CvvkTC?Uv%p05q<53N6D|}@ zGQB&;2Rrqwgmr_l3*t2uSwgOGn!bv6uOQ(hCt;XQILb-jO+qZu&q*NqpiNILOV+Vp z4R>^`6lMaGsh=SIlEhZuFgk*?Ixl|0~Fet23~?Fvj&UG-E97tGQm=L`zAB z5&{-_g_Z77l{{kMTAf)xN;XIPl$W9ZP<%@xFVPvmm7UMkWsIc*qZjM6?$=bk*nKRq zMZZO-A$!p!Sj=+PZ``32_;TZp9ft(bmEb$szL*OqNbh^Kdas4K=KC*UrI>H(_XYYL zk|jH^+cATBj$~=d#J^`N3I6TUb)P@}>>rr;BL1}JJWR6TU*x^r?K#itm*SO?&AZ!u zhf2mWU-`0`J6>Lfyl3P1gE-|UyPu;w-JbK3Q{n6OoNx4R`F5qOf0=JfqcX{C%Q2Ck z-IlXhJsR=AH!d|+Z8=W?UPfEaU-8In%lR7~S#3Fg#{*TC;Nfe_c^Z$Lww$GS^l8g^ z29LgNIZb%@@vY39XYr$7TTTle{Y#tMa^B;Qwwz^n9MqQczIwFck=vH@fqE>*_>@HS)AW< zcmHVe2SZ4PDQn_IaO_L$m$BWJXNe?K2A4vZ{_9f3OeqZJlfiE_E4{B|tRL@>VpD<( z5bv``s(0{P82&L}aBB5mG>F)YfwHa;Ic4656M-R2CR9t`gT|r!4^f_Qf2P|xGo_tF zQrfv)x5NEy?YZreTb*7524gTs9h*ZJ$3Hz7@J!f}#N;37m3?1A(C| zS8I#(u0Fki2b++OPMj@)wtlzcz)yJ!qm{*07- z`)TC!PA{E5IwgN4^G{RxI4|;=d|wDMb%l$BoE(wWdn8qoa(GthXN`W2=F>iZNE(?N zbc#ow&;ye2s+W>w?t37q+aU6@lyPzo#?1r_$`FcSW+_`FddS?3!@w3D;eosyL4*b? z>ej!H7s7XBZ&`VAd-r05V!k84cb?4l!n3TtNDXj(1(0(gJ${zr7BKM7-L3eB^qCrwo{|v@1MbG)@9NfyPge=Kn%7&Oy;w0>)jT1VgWC) z280s2vUdm?*_WM)-na1#MeBx{L z9tm<75^y-l^qtYLSR5BojpV;U#JO zgnqUz*DHPpOur-y_d~ynlC;B1zoGTerxCsr?Y=Z_tNh% z;LCFVKK+s~+zrlBYH zk8nJe6Rp1k4he31<#AF1JJIL4f`702(u1BwgL5b(9hQW=oP;d`&jhkzUe30asd9# z4B(N_m<0Wb68MQW*X$3!Z%x16^w~?lzx67A3yYKK_n7WSFZAo7&y$Wpzf;3Zrw;T? zuQ6ExgY26is5Go+bJB+Qv(S*&&>9#x`0mVaW=

public static IApplicationStatus s_currentAppStatus; + public static string s_currentAppStatusName; + + public static CallBack OnStatusChangeCallBack; //可切换状态 static Dictionary s_status = new Dictionary(); @@ -36,6 +39,10 @@ public static void EnterStatus() where T:IApplicationStatus public static void EnterStatus(string statusName) { + if (s_currentAppStatusName == statusName) + return; + + s_currentAppStatusName = statusName; ApplicationManager.Instance.currentStatus = statusName; if (s_currentAppStatus != null) @@ -48,6 +55,8 @@ public static void EnterStatus(string statusName) s_currentAppStatus.OnEnterStatus(); + if (OnStatusChangeCallBack != null) + OnStatusChangeCallBack(s_currentAppStatus); //ApplicationManager.Instance.StartCoroutine(s_currentAppStatus.InChangeScene(() => //{ // s_currentAppStatus.OnEnterStatus(); diff --git a/Assets/Script/Core/Audio/AudioManager.cs b/Assets/Script/Core/Audio/AudioManager.cs index 61178986..118fcc69 100644 --- a/Assets/Script/Core/Audio/AudioManager.cs +++ b/Assets/Script/Core/Audio/AudioManager.cs @@ -4,6 +4,7 @@ using System; //[RequireComponent(typeof(AudioListener))] + [Obsolete("AudioManager 已过时,请使用AudioPlayManager",false)] public class AudioManager : MonoBehaviour { private static AudioManager s_instance; diff --git a/Assets/Script/Core/AudioManager.meta b/Assets/Script/Core/AudioManager.meta new file mode 100644 index 00000000..77f7d34e --- /dev/null +++ b/Assets/Script/Core/AudioManager.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dedd6e2144706094795277041570a67a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/AudioManager/Audio2DPlayer.cs b/Assets/Script/Core/AudioManager/Audio2DPlayer.cs new file mode 100644 index 00000000..1fa9037a --- /dev/null +++ b/Assets/Script/Core/AudioManager/Audio2DPlayer.cs @@ -0,0 +1,169 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + + + public class Audio2DPlayer: AudioPlayerBase + { + private Dictionary bgMusicDic = new Dictionary(); + private List sfxList = new List(); + + public Audio2DPlayer(MonoBehaviour mono) : base(mono) { } + + public override void SetMusicVolume(float volume) + { + foreach (var item in bgMusicDic.Values) + { + item.TotleVolume = volume; + } + musicVolume = volume; + } + public override void SetSFXVolume(float volume) + { + for (int i = 0; i < sfxList.Count; i++) + { + sfxList[i].TotleVolume = volume; + } + sfxVolume = volume; + } + + public void PlayMusic(int channel, string audioName, bool isLoop = true, float volumeScale = 1, float delay = 0f, float fadeTime = 0.5f) + { + AudioAsset au; + + if (bgMusicDic.ContainsKey(channel)) + { + au = bgMusicDic[channel]; + } + else + { + au = CreateAudioAsset(mono.gameObject, false,true); + bgMusicDic.Add(channel, au); + } + if (au.assetName == audioName) + { + if (au.PlayState != AudioPlayState.Playing) + au.Play(delay); + } + else + { + au.assetName = audioName; + au.SetPlaying(); + mono.StartCoroutine(EaseToChangeVolume(au, audioName, isLoop, volumeScale, delay, fadeTime)); + } + } + public void PauseMusic(int channel, bool isPause) + { + if (bgMusicDic.ContainsKey(channel)) + { + if (isPause) + { + if (bgMusicDic[channel].PlayState == AudioPlayState.Playing) + bgMusicDic[channel].Pause(); + } + else + { + if (bgMusicDic[channel].PlayState == AudioPlayState.Pause) + bgMusicDic[channel].Play(); + } + + } + } + public void PauseMusicAll(bool isPause) + { + foreach (int i in bgMusicDic.Keys) + { + PauseMusic(i, isPause); + } + } + + public void StopMusic(int channel) + { + if (bgMusicDic.ContainsKey(channel)) + { + bgMusicDic[channel].Stop(); + } + + } + + public void StopMusicAll() + { + foreach (int i in bgMusicDic.Keys) + { + StopMusic(i); + } + } + + public void PlaySFX(string name, float volumeScale = 1f, float delay = 0f) + { + AudioClip ac = GetAudioClip(name); + AudioAsset aa = GetEmptyAudioAssetFromSFXList(); + aa.audioSource.clip = ac; + aa.Play(delay); + aa.VolumeScale = volumeScale; + + } + public void PauseSFXAll(bool isPause) + { + for (int i = 0; i < sfxList.Count; i++) + { + if (isPause) + { + if (sfxList[i].PlayState == AudioPlayState.Playing) + sfxList[i].Pause(); + } + else + { + if (sfxList[i].PlayState == AudioPlayState.Pause) + sfxList[i].Play(); + } + } + } + + private AudioAsset GetEmptyAudioAssetFromSFXList() + { + AudioAsset au = null; + if (sfxList.Count > 0) + { + for (int i = 0; i < sfxList.Count; i++) + { + if (sfxList[i].PlayState == AudioPlayState.Stop) + au = sfxList[i]; + } + } + if (au == null) + { + au = CreateAudioAsset(mono.gameObject, false,false); + sfxList.Add(au); + } + return au; + } + + private List clearList = new List(); + public void ClearMoreAudioAsset() + { + if (sfxList.Count > maxSFXAudioAssetNum) + { + + for (int i = 0; i < sfxList.Count; i++) + { + if (sfxList[i].PlayState == AudioPlayState.Stop) + { + clearList.Add(sfxList[i]); + } + } + + for (int i = 0; i < clearList.Count; i++) + { + if (sfxList.Count <= maxSFXAudioAssetNum) + break; + Object.Destroy(clearList[i].audioSource); + sfxList.Remove(clearList[i]); + } + clearList.Clear(); + } + } + + + } + diff --git a/Assets/Script/Core/AudioManager/Audio2DPlayer.cs.meta b/Assets/Script/Core/AudioManager/Audio2DPlayer.cs.meta new file mode 100644 index 00000000..22a365ff --- /dev/null +++ b/Assets/Script/Core/AudioManager/Audio2DPlayer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0724ddb9fbb5eec48af4287a6cfbc81b +timeCreated: 1495619412 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/AudioManager/Audio3DPlayer.cs b/Assets/Script/Core/AudioManager/Audio3DPlayer.cs new file mode 100644 index 00000000..76287938 --- /dev/null +++ b/Assets/Script/Core/AudioManager/Audio3DPlayer.cs @@ -0,0 +1,320 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + + public class Audio3DPlayer: AudioPlayerBase + { + + private Dictionary> bgMusicDic = new Dictionary>(); + private Dictionary> sfxDic = new Dictionary>(); + + public Audio3DPlayer(MonoBehaviour mono) : base(mono) { } + + public override void SetMusicVolume(float volume) + { + foreach (var dics in bgMusicDic.Values) + { + foreach (var item in dics.Values) + { + item.TotleVolume = volume; + } + + } + musicVolume = volume; + } + public override void SetSFXVolume(float volume) + { + foreach (var item in sfxDic.Values) + { + for (int i = 0; i < item.Count; i++) + { + item[i].TotleVolume = volume; + } + } + sfxVolume = volume; + } + + public void PlayMusic(GameObject owner, string audioName, int channel = 0, bool isLoop = true, float volumeScale = 1, float delay = 0f, float fadeTime = 0.5f) + { + if (owner == null) + { + Debug.LogError("can not play 3d player, owner is null"); + return; + } + AudioAsset au; + Dictionary tempDic; + if (bgMusicDic.ContainsKey(owner)) + { + tempDic = bgMusicDic[owner]; + } + else + { + tempDic = new Dictionary(); + bgMusicDic.Add(owner, tempDic); + } + if (tempDic.ContainsKey(channel)) + { + au = tempDic[channel]; + } + else + { + au = CreateAudioAsset(owner, true,true); + tempDic.Add(channel, au); + } + + if (au.assetName == audioName) + { + if (au.PlayState != AudioPlayState.Playing) + au.Play(delay); + } + else + { + au.assetName = audioName; + au.SetPlaying(); + mono.StartCoroutine(EaseToChangeVolume(au, audioName, isLoop, volumeScale, delay, fadeTime)); + } + } + public void PauseMusic(GameObject owner, int channel, bool isPause) + { + if (owner == null) + { + Debug.LogError("can not Pause , owner is null"); + return; + } + if (bgMusicDic.ContainsKey(owner)) + { + Dictionary tempDic = bgMusicDic[owner]; + if (tempDic.ContainsKey(channel)) + { + if (isPause) + { + if (tempDic[channel].PlayState == AudioPlayState.Playing) + tempDic[channel].Pause(); + } + else + { + if (tempDic[channel].PlayState == AudioPlayState.Pause) + tempDic[channel].Play(); + } + } + + } + } + public void PauseMusicAll(bool isPause) + { + foreach (GameObject i in bgMusicDic.Keys) + { + foreach (int t in bgMusicDic[i].Keys) + PauseMusic(i, t, isPause); + } + } + + public void StopMusic(GameObject owner, int channel) + { + if (bgMusicDic.ContainsKey(owner)) + { + Dictionary tempDic = bgMusicDic[owner]; + if (tempDic.ContainsKey(channel)) + { + tempDic[channel].Stop(); + } + } + + } + public void StopMusicOneAll(GameObject owner) + { + if (bgMusicDic.ContainsKey(owner)) + { + List list = new List(bgMusicDic[owner].Keys); + for (int i = 0; i < list.Count; i++) + { + StopMusic(owner, list[i]); + } + } + + } + public void StopMusicAll() + { + List list = new List(bgMusicDic.Keys); + for (int i = 0; i < list.Count; i++) + { + StopMusicOneAll(list[i]); + } + } + public void ReleaseMusic(GameObject owner) + { + if (bgMusicDic.ContainsKey(owner)) + { + StopMusicOneAll(owner); + List list = new List(bgMusicDic[owner].Values); + for (int i = 0; i < list.Count; i++) + { + Object.Destroy(list[i].audioSource); + } + list.Clear(); + } + bgMusicDic.Remove(owner); + } + public void ReleaseMusicAll() + { + List list = new List(sfxDic.Keys); + for (int i = 0; i < list.Count; i++) + { + ReleaseMusic(list[i]); + } + bgMusicDic.Clear(); + } + + public void PlaySFX(GameObject owner, string name, float volumeScale = 1f, float delay = 0f) + { + AudioClip ac = GetAudioClip(name); + AudioAsset aa = GetEmptyAudioAssetFromSFXList(owner); + aa.audioSource.clip = ac; + aa.assetName = name; + aa.Play(delay); + aa.VolumeScale = volumeScale; + ClearMoreAudioAsset(owner); + } + public void PlaySFX(Vector3 position, string name, float volumeScale = 1f, float delay = 0f) + { + AudioClip ac = GetAudioClip(name); + if (ac) + mono.StartCoroutine(PlaySFXIEnumerator(position, ac, AudioPlayManager.TotleVolume* AudioPlayManager.SFXVolume * volumeScale, delay)); + } + private IEnumerator PlaySFXIEnumerator(Vector3 position, AudioClip ac, float volume, float delay) + { + yield return new WaitForSeconds(delay); + AudioSource.PlayClipAtPoint(ac, position, volume); + } + public void PauseSFXAll(bool isPause) + { + List list = new List(sfxDic.Keys); + for (int j = 0; j < list.Count; j++) + { + List sfxList = sfxDic[list[j]]; + for (int i = 0; i < sfxList.Count; i++) + { + if (isPause) + { + if (sfxList[i].PlayState == AudioPlayState.Playing) + sfxList[i].Pause(); + } + else + { + if (sfxList[i].PlayState == AudioPlayState.Pause) + sfxList[i].Play(); + } + } + } + } + public void ReleaseSFX(GameObject owner) + { + if (owner && sfxDic.ContainsKey(owner)) + { + List sfxList = sfxDic[owner]; + for (int i = 0; i < sfxList.Count; i++) + { + Object.Destroy(sfxList[i].audioSource); + } + sfxList.Clear(); + sfxDic.Remove(owner); + } + } + public void ReleaseSFXAll() + { + List list = new List(sfxDic.Keys); + for (int i = 0; i < list.Count; i++) + { + ReleaseSFX(list[i]); + } + sfxDic.Clear(); + } + private AudioAsset GetEmptyAudioAssetFromSFXList(GameObject owner) + { + AudioAsset au = null; + List sfxList = null; + if (sfxDic.ContainsKey(owner)) + { + sfxList = sfxDic[owner]; + if (sfxList.Count > 0) + { + for (int i = 0; i < sfxList.Count; i++) + { + if (sfxList[i].PlayState == AudioPlayState.Stop) + au = sfxList[i]; + } + + } + + } + else + { + sfxList = new List(); + sfxDic.Add(owner, sfxList); + + } + if (au == null) + { + au = CreateAudioAsset(owner, true,false); + sfxList.Add(au); + } + + return au; + } + + private List tempClearList = new List(); + private void ClearMoreAudioAsset(GameObject owner) + { + if (sfxDic.ContainsKey(owner)) + { + List sfxList = sfxDic[owner]; + if (sfxList.Count > maxSFXAudioAssetNum) + { + for (int i = 0; i < sfxList.Count; i++) + { + if (sfxList[i].PlayState == AudioPlayState.Stop) + { + tempClearList.Add(sfxList[i]); + } + } + + for (int i = 0; i < tempClearList.Count; i++) + { + if (sfxList.Count <= maxSFXAudioAssetNum) + break; + Object.Destroy(tempClearList[i].audioSource); + sfxList.Remove(tempClearList[i]); + } + tempClearList.Clear(); + } + } + } + + private List clearList = new List(); + public void ClearDestroyObjectData() + { + if (bgMusicDic.Count > 0) + { + clearList.Clear(); + clearList.AddRange(bgMusicDic.Keys); + + for (int i = 0; i < clearList.Count; i++) + { + if (clearList[i] == null) + bgMusicDic.Remove(clearList[i]); + } + } + if (sfxDic.Count > 0) + { + clearList.Clear(); + clearList.AddRange(sfxDic.Keys); + for (int i = 0; i < clearList.Count; i++) + { + if (clearList[i] == null) + sfxDic.Remove(clearList[i]); + } + } + } + + } + diff --git a/Assets/Script/Core/AudioManager/Audio3DPlayer.cs.meta b/Assets/Script/Core/AudioManager/Audio3DPlayer.cs.meta new file mode 100644 index 00000000..3201f59f --- /dev/null +++ b/Assets/Script/Core/AudioManager/Audio3DPlayer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bf2c195f7c1e26e479f510637852eec0 +timeCreated: 1495784366 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/AudioManager/AudioAsset.cs b/Assets/Script/Core/AudioManager/AudioAsset.cs new file mode 100644 index 00000000..41644a9b --- /dev/null +++ b/Assets/Script/Core/AudioManager/AudioAsset.cs @@ -0,0 +1,103 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + public enum AudioPlayState + { + Playing, + Pause, + Stop, + } + public class AudioAsset + { + public AudioSource audioSource; + + public string assetName = ""; + private float totleVolume = 1; + /// + /// 总音量 + /// + public float TotleVolume + { + get + { + return totleVolume; + } + + set + { + totleVolume = value; + Volume = TotleVolume * volumeScale; + } + } + /// + /// 当前AudioSource 实际音量 + /// + public float Volume + { + get { return audioSource.volume; } + set { audioSource.volume = value; } + } + /// + /// 相对于总音量当前当前AudioSource的音量缩放 Volume=TotleVolume * volumeScale + /// + private float volumeScale = 1f; + public float VolumeScale + { + get { return volumeScale; } + set + { + volumeScale = Mathf.Clamp01(value); + Volume = TotleVolume * volumeScale; + } + } + public bool IsPlay + { + get { return audioSource.isPlaying; } + } + + private AudioPlayState playState = AudioPlayState.Stop; + public AudioPlayState PlayState + { + get + { + if (audioSource==null ||( !audioSource.isPlaying && playState != AudioPlayState.Pause)) + playState = AudioPlayState.Stop; + + return playState; + } + + } + + + + public void SetPlaying() + { + playState = AudioPlayState.Playing; + } + + public void Play(float delay = 0f) + { + if (audioSource != null && audioSource.clip != null) + { + audioSource.PlayDelayed(delay); + playState = AudioPlayState.Playing; + + } + } + public void Pause() + { + if (audioSource != null && audioSource.clip != null && audioSource.isPlaying) + { + audioSource.Pause(); + playState = AudioPlayState.Pause; + } + } + public void Stop() + { + if (audioSource) + audioSource.Stop(); + playState = AudioPlayState.Stop; + } + + } + diff --git a/Assets/Script/Core/AudioManager/AudioAsset.cs.meta b/Assets/Script/Core/AudioManager/AudioAsset.cs.meta new file mode 100644 index 00000000..ea4fb42d --- /dev/null +++ b/Assets/Script/Core/AudioManager/AudioAsset.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bd3803721dc66484dac11ce2d92d7091 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Script/Core/AudioManager/AudioPlayManager.cs b/Assets/Script/Core/AudioManager/AudioPlayManager.cs new file mode 100644 index 00000000..3cf169f6 --- /dev/null +++ b/Assets/Script/Core/AudioManager/AudioPlayManager.cs @@ -0,0 +1,195 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; + + public class AudioPlayManager : MonoBehaviour + { + static Audio2DPlayer a2DPlayer; + static Audio3DPlayer a3DPlayer; + + [RuntimeInitializeOnLoadMethod] + private static void Init() + { + GameObject obj = new GameObject("[AudioManager]"); + AudioPlayManager audioManager = obj.AddComponent(); + DontDestroyOnLoad(obj); + + a2DPlayer = new Audio2DPlayer(audioManager); + a3DPlayer = new Audio3DPlayer(audioManager); + TotleVolume = RecordManager.GetFloatRecord("GameSettingData", "TotleVolume", 1f); + MusicVolume = RecordManager.GetFloatRecord("GameSettingData", "MusicVolume", 1f); + SFXVolume = RecordManager.GetFloatRecord("GameSettingData", "SFXVolume", 1f); + } + #region Volume + private static float totleVolume = 1f; + public static float TotleVolume + { + get { return totleVolume; } + set + { + totleVolume = Mathf.Clamp01(value); + SetMusicVolume(); + SetSFXVolume(); + + } + } + + public static float MusicVolume + { + get + { + return musicVolume; + } + + set + { + musicVolume = Mathf.Clamp01(value); + SetMusicVolume(); + } + } + + public static float SFXVolume + { + get + { + return sfxVolume; + } + + set + { + sfxVolume = Mathf.Clamp01(value); + SetSFXVolume(); + } + } + + private static float musicVolume = 1f; + + private static float sfxVolume = 1f; + + private static void SetMusicVolume() + { + a2DPlayer.SetMusicVolume(totleVolume * musicVolume); + a3DPlayer.SetMusicVolume(totleVolume * musicVolume); + } + private static void SetSFXVolume() + { + a2DPlayer.SetSFXVolume(totleVolume * sfxVolume); + a3DPlayer.SetSFXVolume(totleVolume * sfxVolume); + } + + public static void SaveVolume() + { + RecordManager.SaveRecord("GameSettingData", "TotleVolume", TotleVolume); + RecordManager.SaveRecord("GameSettingData", "MusicVolume", MusicVolume); + RecordManager.SaveRecord("GameSettingData", "SFXVolume", SFXVolume); + } + #endregion + + + public static void PlayMusic2D(string name, int channel, float volumeScale = 1, bool isLoop = true, float fadeTime = 0.5f) + { + a2DPlayer.PlayMusic(channel, name, isLoop, volumeScale, fadeTime); + } + public static void PauseMusic2D(int channel, bool isPause) + { + a2DPlayer.PauseMusic(channel, isPause); + } + public static void PauseMusicAll2D(bool isPause) + { + a2DPlayer.PauseMusicAll(isPause); + } + + public static void StopMusic2D(int channel) + { + + a2DPlayer.StopMusic(channel); + } + + public static void StopMusicAll2D() + { + a2DPlayer.StopMusicAll(); + } + + public static void PlaySFX2D(string name, float volumeScale = 1f) + { + a2DPlayer.PlaySFX(name, volumeScale); + } + public static void PauseSFXAll2D(bool isPause) + { + a2DPlayer.PauseSFXAll(isPause); + + } + + public static void PlayMusic3D(GameObject owner, string audioName, int channel = 0, float delay = 0f, float volumeScale = 1, bool isLoop = true, float fadeTime = 0.5f) + { + a3DPlayer.PlayMusic(owner, audioName, channel, isLoop, volumeScale, delay, fadeTime); + } + public static void PauseMusic3D(GameObject owner, int channel, bool isPause) + { + a3DPlayer.PauseMusic(owner, channel, isPause); + } + public static void PauseMusicAll3D(bool isPause) + { + a3DPlayer.PauseMusicAll(isPause); + } + + public static void StopMusic3D(GameObject owner, int channel) + { + a3DPlayer.StopMusic(owner, channel); + + } + public static void StopMusicOneAll3D(GameObject owner) + { + a3DPlayer.StopMusicOneAll(owner); + } + public static void StopMusicAll3D() + { + a3DPlayer.StopMusicAll(); + } + public static void ReleaseMusic3D(GameObject owner) + { + a3DPlayer.ReleaseMusic(owner); + } + public static void ReleaseMusicAll3D() + { + a3DPlayer.ReleaseMusicAll(); + } + + public static void PlaySFX3D(GameObject owner, string name, float delay = 0f, float volumeScale = 1f) + { + a3DPlayer.PlaySFX(owner, name, volumeScale, delay); + } + public static void PlaySFX3D(Vector3 position, string name, float delay = 0f, float volumeScale = 1) + { + a3DPlayer.PlaySFX(position, name, volumeScale, delay); + } + + public static void PauseSFXAll3D(bool isPause) + { + a3DPlayer.PauseSFXAll(isPause); + } + public static void ReleaseSFX3D(GameObject owner) + { + a3DPlayer.ReleaseSFX(owner); + } + public static void ReleaseSFXAll3D() + { + a3DPlayer.ReleaseSFXAll(); + } + float runTimeCount = 0; + void Update() + { + if (runTimeCount <= 0) + { + runTimeCount = 4f; + a3DPlayer.ClearDestroyObjectData(); + a2DPlayer.ClearMoreAudioAsset(); + } + else + { + runTimeCount -= Time.unscaledDeltaTime; + } + } + } + diff --git a/Assets/Script/Core/AudioManager/AudioPlayManager.cs.meta b/Assets/Script/Core/AudioManager/AudioPlayManager.cs.meta new file mode 100644 index 00000000..74d12545 --- /dev/null +++ b/Assets/Script/Core/AudioManager/AudioPlayManager.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 916d1737c8f842f4da0a614796bf344c +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Script/Core/AudioManager/AudioPlayerBase.cs b/Assets/Script/Core/AudioManager/AudioPlayerBase.cs new file mode 100644 index 00000000..d9c1cb47 --- /dev/null +++ b/Assets/Script/Core/AudioManager/AudioPlayerBase.cs @@ -0,0 +1,81 @@ + +using System; +using System.Collections; +using UnityEngine; + + public abstract class AudioPlayerBase + { + protected MonoBehaviour mono; + protected int maxSFXAudioAssetNum = 10; + protected float musicVolume = 1f; + + protected float sfxVolume = 1f; + public AudioPlayerBase(MonoBehaviour mono) + { + this.mono = mono; + } + + public void SetMaxSFXAudioAssetNum(int max) + { + maxSFXAudioAssetNum = Mathf.Clamp(max, 5, 100); + } + public abstract void SetMusicVolume(float volume); + public abstract void SetSFXVolume(float volume); + + + public AudioClip GetAudioClip(string name) + { + AudioClip red = ResourceManager.Load(name); + if (red != null) + { + return red; + } + Debug.LogError("Can not find AudioClip:" + name); + return null; + } + + public AudioAsset CreateAudioAsset(GameObject gameObject, bool is3D, bool isMusic) + { + AudioAsset au = new AudioAsset(); + au.audioSource = gameObject.AddComponent(); + au.audioSource.spatialBlend = is3D ? 1 : 0; + if (isMusic) + au.TotleVolume = musicVolume; + else + au.TotleVolume = sfxVolume; + return au; + } + + public IEnumerator EaseToChangeVolume(AudioAsset au, string name, bool isLoop, float volumeScale, float delay, float fadeTime) + { + AudioClip ac = GetAudioClip(name); + float oldVolume = au.Volume; + float target = au.Volume; + if (au.audioSource && au.IsPlay) + { + while (target > 0f) + { + float speed = oldVolume / fadeTime; + target = target - speed * Time.fixedDeltaTime; + au.Volume = target; + yield return new WaitForFixedUpdate(); + } + au.Stop(); + } + au.assetName = name; + au.audioSource.clip = ac; + au.audioSource.loop = isLoop; + au.Play(delay); + target = 0; + yield return new WaitForSeconds(delay); + + while (target < oldVolume) + { + float speed = oldVolume / fadeTime * 1.2f; + target = target + speed * Time.fixedDeltaTime; + au.Volume = target; + yield return new WaitForFixedUpdate(); + } + au.VolumeScale = volumeScale; + } + } diff --git a/Assets/Script/Core/AudioManager/AudioPlayerBase.cs.meta b/Assets/Script/Core/AudioManager/AudioPlayerBase.cs.meta new file mode 100644 index 00000000..95927ad1 --- /dev/null +++ b/Assets/Script/Core/AudioManager/AudioPlayerBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 837e20ba1303def42b96d4a7f5fbe142 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Data/DataTable.cs b/Assets/Script/Core/Data/DataTable.cs index ee647757..cee4b84a 100644 --- a/Assets/Script/Core/Data/DataTable.cs +++ b/Assets/Script/Core/Data/DataTable.cs @@ -831,7 +831,7 @@ public Vector3[] GetVector3Array(string key) } catch (Exception e) { - throw new Exception("SingleData GetVector2 Error TableName is :->" + data.m_tableName + "<- key->" + key + "<- singleDataName : ->" + m_SingleDataKey + "<- \n" + e.ToString()); + throw new Exception("SingleData GetVector3Array Error TableName is :->" + data.m_tableName + "<- key->" + key + "<- singleDataName : ->" + m_SingleDataKey + "<- \n" + e.ToString()); } throw new Exception("Don't Exist Value or DefaultValue by ->" + key + "<- TableName is : ->" + data.m_tableName + "<- singleDataName : ->" + m_SingleDataKey + "<-"); // throw diff --git a/Assets/Script/Core/Editor/Data/DataEditorWindow.cs b/Assets/Script/Core/Editor/Data/DataEditorWindow.cs index dd0cd7d0..2c3591ac 100644 --- a/Assets/Script/Core/Editor/Data/DataEditorWindow.cs +++ b/Assets/Script/Core/Editor/Data/DataEditorWindow.cs @@ -261,6 +261,8 @@ void AddDataGUI(DataTable dict) EditorDataGUI(dict, content); + EditorGUILayout.EndScrollView(); + if (!dict.ContainsKey(mianKey) && mianKey != "") { EditorGUILayout.BeginHorizontal(); @@ -277,8 +279,6 @@ void AddDataGUI(DataTable dict) EditorGUILayout.EndHorizontal(); } - EditorGUILayout.EndScrollView(); - EditorGUILayout.Space(); } diff --git a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs index 1ea58aaa..ffa7b013 100644 --- a/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs +++ b/Assets/Script/Core/Editor/Language/LanguageDataEditorWindow.cs @@ -646,6 +646,17 @@ public static List GetLanguageKeyList() } return s_languageKeyList; } + public static List GetLanguageLayersKeyList() + { + List list = GetLanguageKeyList(); + for (int i = 0; i < list.Count; i++) + { + string[] ss = list[i].Split('/'); + + list[i] = ss[0].Replace('_', '/') + "/" + ss[1]; + } + return list; + } #endregion diff --git a/Assets/Script/Core/Editor/UI/componment/LanguageComponmentEditor.cs b/Assets/Script/Core/Editor/UI/componment/LanguageComponmentEditor.cs index 4c8be236..7e8d0253 100644 --- a/Assets/Script/Core/Editor/UI/componment/LanguageComponmentEditor.cs +++ b/Assets/Script/Core/Editor/UI/componment/LanguageComponmentEditor.cs @@ -47,7 +47,7 @@ public override void OnInspectorGUI() m_lc.m_moduleName = moduleName; m_lc.m_languageID = contentID; - + m_lc.m_text.text = LanguageManager.GetContent(moduleName, contentID); base.OnInspectorGUI(); } diff --git a/Assets/Script/Core/Network/Json/JsonNetworkService.cs b/Assets/Script/Core/Network/Json/JsonNetworkService.cs index efd0da99..a2c86fe4 100644 --- a/Assets/Script/Core/Network/Json/JsonNetworkService.cs +++ b/Assets/Script/Core/Network/Json/JsonNetworkService.cs @@ -110,10 +110,7 @@ public void CallBack(string s) NetWorkMessage msg = new NetWorkMessage(); s = WWW.UnEscapeURL(s); - s = s.Replace(c_endCharReplaceString, c_endChar.ToString()); - - Debug.Log(s); - + s = s.Replace(c_endCharReplaceString, c_endChar.ToString()); Dictionary data = Json.Deserialize(s) as Dictionary; msg.m_data = data; diff --git a/Assets/Script/Core/Network/MessageClass4Json/CodeMessageBase.cs b/Assets/Script/Core/Network/MessageClass4Json/CodeMessageBase.cs new file mode 100644 index 00000000..7eb69f68 --- /dev/null +++ b/Assets/Script/Core/Network/MessageClass4Json/CodeMessageBase.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + + +public abstract class CodeMessageBase : MessageClassInterface +{ + public int code; + public string e; + public abstract void DispatchMessage(); +} diff --git a/Assets/Script/Core/Network/MessageClass4Json/CodeMessageBase.cs.meta b/Assets/Script/Core/Network/MessageClass4Json/CodeMessageBase.cs.meta new file mode 100644 index 00000000..f49d304b --- /dev/null +++ b/Assets/Script/Core/Network/MessageClass4Json/CodeMessageBase.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: e02c42770b983174daca37435e751850 +timeCreated: 1530165748 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Script/Core/Network/MessageClass4Json/JsonMessageProcessingController.cs b/Assets/Script/Core/Network/MessageClass4Json/JsonMessageProcessingController.cs index 9ba125c2..ab37f146 100644 --- a/Assets/Script/Core/Network/MessageClass4Json/JsonMessageProcessingController.cs +++ b/Assets/Script/Core/Network/MessageClass4Json/JsonMessageProcessingController.cs @@ -12,6 +12,7 @@ ///