From 7f1ae21a4270e3b05b350f95f877617b1c2eb7bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=80=9D=E6=B5=B7?= <1464576565@qq.com> Date: Wed, 11 Mar 2026 14:18:25 +0800 Subject: [PATCH] 11 --- Client/Assets/.claude/settings.local.json | 4 +- Client/Assets/Scripts/CustomeModule.meta | 8 + .../CustomeModule}/InputGlyph.meta | 0 .../CustomeModule/InputGlyph/Editor.meta | 8 + .../Editor}/InputGlyphDatabaseEditor.cs | 0 .../Editor}/InputGlyphDatabaseEditor.cs.meta | 0 .../CustomeModule}/InputGlyph/GlyphService.cs | 0 .../InputGlyph/GlyphService.cs.meta | 0 .../InputGlyph/InputBindingManager.cs | 0 .../InputGlyph/InputBindingManager.cs.meta | 0 .../InputGlyph/InputDeviceWatcher.cs | 242 ++++++++++++++++++ .../InputGlyph/InputDeviceWatcher.cs.meta | 11 + .../InputGlyph/InputGlyphDatabase.cs | 0 .../InputGlyph/InputGlyphDatabase.cs.meta | 0 .../InputGlyph/InputGlyphImage.cs | 0 .../InputGlyph/InputGlyphImage.cs.meta | 0 .../InputGlyph/InputGlyphText.cs | 0 .../InputGlyph/InputGlyphText.cs.meta | 0 .../InputGlyph/InputGlyphUXButton.cs | 0 .../InputGlyph/InputGlyphUXButton.cs.meta | 0 .../InputGlyph/TestRebindScript.cs | 0 .../InputGlyph/TestRebindScript.cs.meta | 0 Client/Assets/Scripts/Startup/HttpHelper.cs | 22 -- .../Assets/Scripts/Startup/HttpHelper.cs.meta | 3 - .../Startup/Procedure/PatchUpdater.meta | 3 - .../ProcedureDownloadBundleState.cs | 0 .../ProcedureDownloadBundleState.cs.meta | 0 .../{PatchUpdater => }/ProcedureEntryState.cs | 4 +- .../ProcedureEntryState.cs.meta | 0 .../ProcedureGetAppVersionInfoState.cs | 6 +- .../ProcedureGetAppVersionInfoState.cs.meta | 0 .../ProcedureInitPackageState.cs | 2 +- .../ProcedureInitPackageState.cs.meta | 0 .../ProcedureLoadAssembly.cs | 0 .../ProcedureLoadAssembly.cs.meta | 0 .../ProcedurePatchDoneState.cs | 0 .../ProcedurePatchDoneState.cs.meta | 0 .../ProcedureUpdateFinishState.cs | 0 .../ProcedureUpdateFinishState.cs.meta | 0 .../Startup/{Procedure => }/ProcedureEntry.cs | 0 .../{Procedure => }/ProcedureEntry.cs.meta | 0 .../Assets/Scripts/Startup/StartupSetting.cs | 21 ++ Client/Assets/Test.meta | 8 + Client/Assets/Test/GameBase.dll.bytes | Bin 0 -> 5120 bytes Client/Assets/Test/GameBase.dll.bytes.meta | 7 + Client/Assets/Test/GameBase.pdb.bytes | Bin 0 -> 18524 bytes Client/Assets/Test/GameBase.pdb.bytes.meta | 7 + Client/Assets/Test/GameLib.dll.bytes | Bin 0 -> 5120 bytes Client/Assets/Test/GameLib.dll.bytes.meta | 7 + Client/Assets/Test/GameLib.pdb.bytes | Bin 0 -> 18432 bytes Client/Assets/Test/GameLib.pdb.bytes.meta | 7 + Client/Assets/Test/GameLogic.dll.bytes | Bin 0 -> 59392 bytes Client/Assets/Test/GameLogic.dll.bytes.meta | 7 + Client/Assets/Test/GameLogic.pdb.bytes | Bin 0 -> 24296 bytes Client/Assets/Test/GameLogic.pdb.bytes.meta | 7 + Client/Assets/Test/GameProto.dll.bytes | Bin 0 -> 4608 bytes Client/Assets/Test/GameProto.dll.bytes.meta | 7 + Client/Assets/Test/GameProto.pdb.bytes | Bin 0 -> 18368 bytes Client/Assets/Test/GameProto.pdb.bytes.meta | 7 + .../Packages/com.alicizax.unity.ui.extension | 2 +- 60 files changed, 364 insertions(+), 36 deletions(-) create mode 100644 Client/Assets/Scripts/CustomeModule.meta rename Client/Assets/{ => Scripts/CustomeModule}/InputGlyph.meta (100%) create mode 100644 Client/Assets/Scripts/CustomeModule/InputGlyph/Editor.meta rename Client/Assets/{InputGlyph => Scripts/CustomeModule/InputGlyph/Editor}/InputGlyphDatabaseEditor.cs (100%) rename Client/Assets/{InputGlyph => Scripts/CustomeModule/InputGlyph/Editor}/InputGlyphDatabaseEditor.cs.meta (100%) rename Client/Assets/{ => Scripts/CustomeModule}/InputGlyph/GlyphService.cs (100%) rename Client/Assets/{ => Scripts/CustomeModule}/InputGlyph/GlyphService.cs.meta (100%) rename Client/Assets/{ => Scripts/CustomeModule}/InputGlyph/InputBindingManager.cs (100%) rename Client/Assets/{ => Scripts/CustomeModule}/InputGlyph/InputBindingManager.cs.meta (100%) create mode 100644 Client/Assets/Scripts/CustomeModule/InputGlyph/InputDeviceWatcher.cs create mode 100644 Client/Assets/Scripts/CustomeModule/InputGlyph/InputDeviceWatcher.cs.meta rename Client/Assets/{ => Scripts/CustomeModule}/InputGlyph/InputGlyphDatabase.cs (100%) rename Client/Assets/{ => Scripts/CustomeModule}/InputGlyph/InputGlyphDatabase.cs.meta (100%) rename Client/Assets/{ => Scripts/CustomeModule}/InputGlyph/InputGlyphImage.cs (100%) rename Client/Assets/{ => Scripts/CustomeModule}/InputGlyph/InputGlyphImage.cs.meta (100%) rename Client/Assets/{ => Scripts/CustomeModule}/InputGlyph/InputGlyphText.cs (100%) rename Client/Assets/{ => Scripts/CustomeModule}/InputGlyph/InputGlyphText.cs.meta (100%) rename Client/Assets/{ => Scripts/CustomeModule}/InputGlyph/InputGlyphUXButton.cs (100%) rename Client/Assets/{ => Scripts/CustomeModule}/InputGlyph/InputGlyphUXButton.cs.meta (100%) rename Client/Assets/{ => Scripts/CustomeModule}/InputGlyph/TestRebindScript.cs (100%) rename Client/Assets/{ => Scripts/CustomeModule}/InputGlyph/TestRebindScript.cs.meta (100%) delete mode 100644 Client/Assets/Scripts/Startup/HttpHelper.cs delete mode 100644 Client/Assets/Scripts/Startup/HttpHelper.cs.meta delete mode 100644 Client/Assets/Scripts/Startup/Procedure/PatchUpdater.meta rename Client/Assets/Scripts/Startup/Procedure/{PatchUpdater => }/ProcedureDownloadBundleState.cs (100%) rename Client/Assets/Scripts/Startup/Procedure/{PatchUpdater => }/ProcedureDownloadBundleState.cs.meta (100%) rename Client/Assets/Scripts/Startup/Procedure/{PatchUpdater => }/ProcedureEntryState.cs (91%) rename Client/Assets/Scripts/Startup/Procedure/{PatchUpdater => }/ProcedureEntryState.cs.meta (100%) rename Client/Assets/Scripts/Startup/Procedure/{PatchUpdater => }/ProcedureGetAppVersionInfoState.cs (84%) rename Client/Assets/Scripts/Startup/Procedure/{PatchUpdater => }/ProcedureGetAppVersionInfoState.cs.meta (100%) rename Client/Assets/Scripts/Startup/Procedure/{PatchUpdater => }/ProcedureInitPackageState.cs (98%) rename Client/Assets/Scripts/Startup/Procedure/{PatchUpdater => }/ProcedureInitPackageState.cs.meta (100%) rename Client/Assets/Scripts/Startup/Procedure/{PatchUpdater => }/ProcedureLoadAssembly.cs (100%) rename Client/Assets/Scripts/Startup/Procedure/{PatchUpdater => }/ProcedureLoadAssembly.cs.meta (100%) rename Client/Assets/Scripts/Startup/Procedure/{PatchUpdater => }/ProcedurePatchDoneState.cs (100%) rename Client/Assets/Scripts/Startup/Procedure/{PatchUpdater => }/ProcedurePatchDoneState.cs.meta (100%) rename Client/Assets/Scripts/Startup/Procedure/{PatchUpdater => }/ProcedureUpdateFinishState.cs (100%) rename Client/Assets/Scripts/Startup/Procedure/{PatchUpdater => }/ProcedureUpdateFinishState.cs.meta (100%) rename Client/Assets/Scripts/Startup/{Procedure => }/ProcedureEntry.cs (100%) rename Client/Assets/Scripts/Startup/{Procedure => }/ProcedureEntry.cs.meta (100%) create mode 100644 Client/Assets/Test.meta create mode 100644 Client/Assets/Test/GameBase.dll.bytes create mode 100644 Client/Assets/Test/GameBase.dll.bytes.meta create mode 100644 Client/Assets/Test/GameBase.pdb.bytes create mode 100644 Client/Assets/Test/GameBase.pdb.bytes.meta create mode 100644 Client/Assets/Test/GameLib.dll.bytes create mode 100644 Client/Assets/Test/GameLib.dll.bytes.meta create mode 100644 Client/Assets/Test/GameLib.pdb.bytes create mode 100644 Client/Assets/Test/GameLib.pdb.bytes.meta create mode 100644 Client/Assets/Test/GameLogic.dll.bytes create mode 100644 Client/Assets/Test/GameLogic.dll.bytes.meta create mode 100644 Client/Assets/Test/GameLogic.pdb.bytes create mode 100644 Client/Assets/Test/GameLogic.pdb.bytes.meta create mode 100644 Client/Assets/Test/GameProto.dll.bytes create mode 100644 Client/Assets/Test/GameProto.dll.bytes.meta create mode 100644 Client/Assets/Test/GameProto.pdb.bytes create mode 100644 Client/Assets/Test/GameProto.pdb.bytes.meta diff --git a/Client/Assets/.claude/settings.local.json b/Client/Assets/.claude/settings.local.json index 2fa1be9..f319bb8 100644 --- a/Client/Assets/.claude/settings.local.json +++ b/Client/Assets/.claude/settings.local.json @@ -2,7 +2,9 @@ "permissions": { "allow": [ "Bash(cd InputGlyph && ls -la *.cs)", - "Bash(ls -la InputGlyph/*.cs | grep -v Editor)" + "Bash(ls -la InputGlyph/*.cs | grep -v Editor)", + "Bash(cd ../Packages/com.alicizax.unity.ui.extension && wc -l Runtime/**/*.cs | sort -n | tail -20)", + "Bash(cd ../Packages/com.alicizax.unity.ui.extension && find Runtime -name \"*.cs\" -exec wc -l {} + | sort -n | tail -20)" ] } } diff --git a/Client/Assets/Scripts/CustomeModule.meta b/Client/Assets/Scripts/CustomeModule.meta new file mode 100644 index 0000000..a402214 --- /dev/null +++ b/Client/Assets/Scripts/CustomeModule.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f2a23416e80d6df41a157dc645840eb1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/InputGlyph.meta b/Client/Assets/Scripts/CustomeModule/InputGlyph.meta similarity index 100% rename from Client/Assets/InputGlyph.meta rename to Client/Assets/Scripts/CustomeModule/InputGlyph.meta diff --git a/Client/Assets/Scripts/CustomeModule/InputGlyph/Editor.meta b/Client/Assets/Scripts/CustomeModule/InputGlyph/Editor.meta new file mode 100644 index 0000000..3f1f5cc --- /dev/null +++ b/Client/Assets/Scripts/CustomeModule/InputGlyph/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 241d5382b2b4f274596c73f14a40cb8d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/InputGlyph/InputGlyphDatabaseEditor.cs b/Client/Assets/Scripts/CustomeModule/InputGlyph/Editor/InputGlyphDatabaseEditor.cs similarity index 100% rename from Client/Assets/InputGlyph/InputGlyphDatabaseEditor.cs rename to Client/Assets/Scripts/CustomeModule/InputGlyph/Editor/InputGlyphDatabaseEditor.cs diff --git a/Client/Assets/InputGlyph/InputGlyphDatabaseEditor.cs.meta b/Client/Assets/Scripts/CustomeModule/InputGlyph/Editor/InputGlyphDatabaseEditor.cs.meta similarity index 100% rename from Client/Assets/InputGlyph/InputGlyphDatabaseEditor.cs.meta rename to Client/Assets/Scripts/CustomeModule/InputGlyph/Editor/InputGlyphDatabaseEditor.cs.meta diff --git a/Client/Assets/InputGlyph/GlyphService.cs b/Client/Assets/Scripts/CustomeModule/InputGlyph/GlyphService.cs similarity index 100% rename from Client/Assets/InputGlyph/GlyphService.cs rename to Client/Assets/Scripts/CustomeModule/InputGlyph/GlyphService.cs diff --git a/Client/Assets/InputGlyph/GlyphService.cs.meta b/Client/Assets/Scripts/CustomeModule/InputGlyph/GlyphService.cs.meta similarity index 100% rename from Client/Assets/InputGlyph/GlyphService.cs.meta rename to Client/Assets/Scripts/CustomeModule/InputGlyph/GlyphService.cs.meta diff --git a/Client/Assets/InputGlyph/InputBindingManager.cs b/Client/Assets/Scripts/CustomeModule/InputGlyph/InputBindingManager.cs similarity index 100% rename from Client/Assets/InputGlyph/InputBindingManager.cs rename to Client/Assets/Scripts/CustomeModule/InputGlyph/InputBindingManager.cs diff --git a/Client/Assets/InputGlyph/InputBindingManager.cs.meta b/Client/Assets/Scripts/CustomeModule/InputGlyph/InputBindingManager.cs.meta similarity index 100% rename from Client/Assets/InputGlyph/InputBindingManager.cs.meta rename to Client/Assets/Scripts/CustomeModule/InputGlyph/InputBindingManager.cs.meta diff --git a/Client/Assets/Scripts/CustomeModule/InputGlyph/InputDeviceWatcher.cs b/Client/Assets/Scripts/CustomeModule/InputGlyph/InputDeviceWatcher.cs new file mode 100644 index 0000000..b184865 --- /dev/null +++ b/Client/Assets/Scripts/CustomeModule/InputGlyph/InputDeviceWatcher.cs @@ -0,0 +1,242 @@ +using System; +using System.Text.RegularExpressions; +using AlicizaX; +using UnityEditor; +using UnityEngine; +using UnityEngine.InputSystem; + +public static class InputDeviceWatcher +{ + public enum InputDeviceCategory + { + Keyboard, + Xbox, + PlayStation, + Other + } + + static readonly float DebounceWindow = 1f; + public static InputDeviceCategory CurrentCategory = InputDeviceCategory.Keyboard; + public static string CurrentDeviceName = ""; + + private static InputAction _anyInputAction; + private static int _lastDeviceId = -1; + private static float _lastInputTime = -Mathf.Infinity; + + private static InputDeviceCategory _lastEmittedCategory = InputDeviceCategory.Keyboard; + + public static event Action OnDeviceChanged; + + private static bool initialized = false; + + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] + public static void Initialize() + { + if (initialized) return; + initialized = true; + + CurrentCategory = InputDeviceCategory.Keyboard; + CurrentDeviceName = ""; + _lastEmittedCategory = CurrentCategory; // 初始化同步 + + _anyInputAction = new InputAction("AnyDevice", InputActionType.PassThrough); + _anyInputAction.AddBinding("/anyKey"); + _anyInputAction.AddBinding("/*"); + _anyInputAction.AddBinding("/*"); + + _anyInputAction.performed += OnAnyInputPerformed; + _anyInputAction.Enable(); + + InputSystem.onDeviceChange += OnDeviceChange; +#if UNITY_EDITOR + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; +#endif + } + +#if UNITY_EDITOR + static void OnPlayModeStateChanged(PlayModeStateChange state) + { + if (state == PlayModeStateChange.ExitingPlayMode) + { + Dispose(); + } + + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + } +#endif + + public static void Dispose() + { + if (!initialized) return; + CurrentCategory = InputDeviceCategory.Keyboard; + _anyInputAction.performed -= OnAnyInputPerformed; + _anyInputAction.Disable(); + _anyInputAction.Dispose(); + + InputSystem.onDeviceChange -= OnDeviceChange; + + OnDeviceChanged = null; + initialized = false; + + _lastEmittedCategory = InputDeviceCategory.Keyboard; + } + + private static void OnAnyInputPerformed(InputAction.CallbackContext ctx) + { + if (ctx.control == null || ctx.control.device == null) return; + + var device = ctx.control.device; + + if (!IsRelevantDevice(device)) return; + + int curId = device.deviceId; + float now = Time.realtimeSinceStartup; + + if (curId == _lastDeviceId) return; + if (DebounceWindow > 0f && (now - _lastInputTime) < DebounceWindow) return; + + _lastInputTime = now; + _lastDeviceId = curId; + + CurrentCategory = DetermineCategoryFromDevice(device); + CurrentDeviceName = device.displayName ?? $"Device_{curId}"; + + EmitChange(); + } + + private static void OnDeviceChange(InputDevice device, InputDeviceChange change) + { + if (change == InputDeviceChange.Removed || change == InputDeviceChange.Disconnected) + { + if (device.deviceId == _lastDeviceId) + { + _lastDeviceId = -1; + _lastInputTime = -Mathf.Infinity; + CurrentDeviceName = ""; + CurrentCategory = InputDeviceCategory.Keyboard; + EmitChange(); + } + } + } + + // ------------------ 分类逻辑 -------------------- + private static InputDeviceCategory DetermineCategoryFromDevice(InputDevice device) + { + if (device == null) return InputDeviceCategory.Keyboard; + // 重要:鼠标不再被视为键盘类(避免鼠标触发时回退到 Keyboard) + if (device is Keyboard) return InputDeviceCategory.Keyboard; + if (device is Mouse) return InputDeviceCategory.Other; // 明确忽略鼠标 + if (IsGamepadLike(device)) return GetGamepadCategory(device); + + string combined = $"{device.description.interfaceName} {device.layout} {device.description.product} {device.description.manufacturer} {device.displayName}".ToLower(); + + if (combined.Contains("xbox") || combined.Contains("xinput")) return InputDeviceCategory.Xbox; + if (combined.Contains("dualshock") || combined.Contains("dualsense") || combined.Contains("playstation")) return InputDeviceCategory.PlayStation; + + return InputDeviceCategory.Other; + } + + private static bool IsGamepadLike(InputDevice device) + { + if (device is Gamepad) return true; + if (device is Joystick) return true; + + var layout = (device.layout ?? "").ToLower(); + // 这里保留 controller/gamepad/joystick 的识别,但忽略 mouse/touch 等 + if (layout.Contains("mouse") || layout.Contains("touch") || layout.Contains("pen")) return false; + return layout.Contains("gamepad") || layout.Contains("controller") || layout.Contains("joystick"); + } + + private static bool IsRelevantDevice(InputDevice device) + { + if (device == null) return false; + if (device is Keyboard) return true; + if (IsGamepadLike(device)) return true; + return false; + } + + private static InputDeviceCategory GetGamepadCategory(InputDevice device) + { + if (device == null) return InputDeviceCategory.Other; + + var iface = (device.description.interfaceName ?? "").ToLower(); + if (iface.Contains("xinput")) return InputDeviceCategory.Xbox; + + if (TryParseVidPidFromCapabilities(device.description.capabilities, out int vendorId, out int _)) + { + if (vendorId == 0x045E || vendorId == 1118) return InputDeviceCategory.Xbox; + if (vendorId == 0x054C || vendorId == 1356) return InputDeviceCategory.PlayStation; + } + + string combined = $"{device.description.interfaceName} {device.layout} {device.description.product} {device.description.manufacturer} {device.displayName}".ToLower(); + if (combined.Contains("xbox")) return InputDeviceCategory.Xbox; + if (combined.Contains("dualshock") || combined.Contains("playstation")) return InputDeviceCategory.PlayStation; + + return InputDeviceCategory.Other; + } + + // ------------------ VID/PID 解析 -------------------- + private static bool TryParseVidPidFromCapabilities(string capabilities, out int vendorId, out int productId) + { + vendorId = 0; + productId = 0; + if (string.IsNullOrEmpty(capabilities)) return false; + + try + { + var decVendor = Regex.Match(capabilities, "\"vendorId\"\\s*:\\s*(\\d+)", RegexOptions.IgnoreCase); + var decProduct = Regex.Match(capabilities, "\"productId\"\\s*:\\s*(\\d+)", RegexOptions.IgnoreCase); + + if (decVendor.Success) int.TryParse(decVendor.Groups[1].Value, out vendorId); + if (decProduct.Success) int.TryParse(decProduct.Groups[1].Value, out productId); + + return vendorId != 0 || productId != 0; + } + catch + { + return false; + } + } + + private static void EmitChange() + { + if (CurrentCategory == _lastEmittedCategory) + { + return; + } + + int vid = GetVendorId(); + int pid = GetProductId(); + +#if UNITY_EDITOR + Log.Info($"输入设备变更 -> {CurrentCategory} 触发设备: {CurrentDeviceName} vid=0x{vid:X} pid=0x{pid:X}"); +#endif + + OnDeviceChanged?.Invoke(CurrentCategory); + _lastEmittedCategory = CurrentCategory; + } + + private static int GetVendorId() + { + foreach (var d in InputSystem.devices) + { + if ((d.displayName ?? "") == CurrentDeviceName && + TryParseVidPidFromCapabilities(d.description.capabilities, out int v, out int _)) + return v; + } + + return 0; + } + + private static int GetProductId() + { + foreach (var d in InputSystem.devices) + { + if ((d.displayName ?? "") == CurrentDeviceName && + TryParseVidPidFromCapabilities(d.description.capabilities, out int _, out int p)) + return p; + } + + return 0; + } +} diff --git a/Client/Assets/Scripts/CustomeModule/InputGlyph/InputDeviceWatcher.cs.meta b/Client/Assets/Scripts/CustomeModule/InputGlyph/InputDeviceWatcher.cs.meta new file mode 100644 index 0000000..ac22b49 --- /dev/null +++ b/Client/Assets/Scripts/CustomeModule/InputGlyph/InputDeviceWatcher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e78f6224467e13742a70115f1942d941 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/InputGlyph/InputGlyphDatabase.cs b/Client/Assets/Scripts/CustomeModule/InputGlyph/InputGlyphDatabase.cs similarity index 100% rename from Client/Assets/InputGlyph/InputGlyphDatabase.cs rename to Client/Assets/Scripts/CustomeModule/InputGlyph/InputGlyphDatabase.cs diff --git a/Client/Assets/InputGlyph/InputGlyphDatabase.cs.meta b/Client/Assets/Scripts/CustomeModule/InputGlyph/InputGlyphDatabase.cs.meta similarity index 100% rename from Client/Assets/InputGlyph/InputGlyphDatabase.cs.meta rename to Client/Assets/Scripts/CustomeModule/InputGlyph/InputGlyphDatabase.cs.meta diff --git a/Client/Assets/InputGlyph/InputGlyphImage.cs b/Client/Assets/Scripts/CustomeModule/InputGlyph/InputGlyphImage.cs similarity index 100% rename from Client/Assets/InputGlyph/InputGlyphImage.cs rename to Client/Assets/Scripts/CustomeModule/InputGlyph/InputGlyphImage.cs diff --git a/Client/Assets/InputGlyph/InputGlyphImage.cs.meta b/Client/Assets/Scripts/CustomeModule/InputGlyph/InputGlyphImage.cs.meta similarity index 100% rename from Client/Assets/InputGlyph/InputGlyphImage.cs.meta rename to Client/Assets/Scripts/CustomeModule/InputGlyph/InputGlyphImage.cs.meta diff --git a/Client/Assets/InputGlyph/InputGlyphText.cs b/Client/Assets/Scripts/CustomeModule/InputGlyph/InputGlyphText.cs similarity index 100% rename from Client/Assets/InputGlyph/InputGlyphText.cs rename to Client/Assets/Scripts/CustomeModule/InputGlyph/InputGlyphText.cs diff --git a/Client/Assets/InputGlyph/InputGlyphText.cs.meta b/Client/Assets/Scripts/CustomeModule/InputGlyph/InputGlyphText.cs.meta similarity index 100% rename from Client/Assets/InputGlyph/InputGlyphText.cs.meta rename to Client/Assets/Scripts/CustomeModule/InputGlyph/InputGlyphText.cs.meta diff --git a/Client/Assets/InputGlyph/InputGlyphUXButton.cs b/Client/Assets/Scripts/CustomeModule/InputGlyph/InputGlyphUXButton.cs similarity index 100% rename from Client/Assets/InputGlyph/InputGlyphUXButton.cs rename to Client/Assets/Scripts/CustomeModule/InputGlyph/InputGlyphUXButton.cs diff --git a/Client/Assets/InputGlyph/InputGlyphUXButton.cs.meta b/Client/Assets/Scripts/CustomeModule/InputGlyph/InputGlyphUXButton.cs.meta similarity index 100% rename from Client/Assets/InputGlyph/InputGlyphUXButton.cs.meta rename to Client/Assets/Scripts/CustomeModule/InputGlyph/InputGlyphUXButton.cs.meta diff --git a/Client/Assets/InputGlyph/TestRebindScript.cs b/Client/Assets/Scripts/CustomeModule/InputGlyph/TestRebindScript.cs similarity index 100% rename from Client/Assets/InputGlyph/TestRebindScript.cs rename to Client/Assets/Scripts/CustomeModule/InputGlyph/TestRebindScript.cs diff --git a/Client/Assets/InputGlyph/TestRebindScript.cs.meta b/Client/Assets/Scripts/CustomeModule/InputGlyph/TestRebindScript.cs.meta similarity index 100% rename from Client/Assets/InputGlyph/TestRebindScript.cs.meta rename to Client/Assets/Scripts/CustomeModule/InputGlyph/TestRebindScript.cs.meta diff --git a/Client/Assets/Scripts/Startup/HttpHelper.cs b/Client/Assets/Scripts/Startup/HttpHelper.cs deleted file mode 100644 index 73ba501..0000000 --- a/Client/Assets/Scripts/Startup/HttpHelper.cs +++ /dev/null @@ -1,22 +0,0 @@ -using AlicizaX; -using Cysharp.Threading.Tasks; -using Newtonsoft.Json.Linq; -using UnityEngine; - -public static class HttpHelper -{ - public const string versionApi = "http://localhost:5000/api/Version?channel=Standlone"; - public static string Version = string.Empty; - public static string CDNUrl = string.Empty; - public static string AppDownloadUrl = string.Empty; - - public static async UniTask GetRemoteVersion() - { - var updateDataStr = await Utility.Http.Get(HttpHelper.versionApi); - JObject json = JObject.Parse(updateDataStr); - Version = json["version"].ToString(); - CDNUrl = json["cdnUrl"].ToString(); - AppDownloadUrl = json["appDownloadUrl"].ToString(); - Debug.Log(updateDataStr); - } -} diff --git a/Client/Assets/Scripts/Startup/HttpHelper.cs.meta b/Client/Assets/Scripts/Startup/HttpHelper.cs.meta deleted file mode 100644 index fe5c3d0..0000000 --- a/Client/Assets/Scripts/Startup/HttpHelper.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 775a37fe679f423c86216603cf2b6dfc -timeCreated: 1679996053 \ No newline at end of file diff --git a/Client/Assets/Scripts/Startup/Procedure/PatchUpdater.meta b/Client/Assets/Scripts/Startup/Procedure/PatchUpdater.meta deleted file mode 100644 index 0c4ec2c..0000000 --- a/Client/Assets/Scripts/Startup/Procedure/PatchUpdater.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: f5a87a5da8854428ac9a14fc863b911a -timeCreated: 1679996055 \ No newline at end of file diff --git a/Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureDownloadBundleState.cs b/Client/Assets/Scripts/Startup/Procedure/ProcedureDownloadBundleState.cs similarity index 100% rename from Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureDownloadBundleState.cs rename to Client/Assets/Scripts/Startup/Procedure/ProcedureDownloadBundleState.cs diff --git a/Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureDownloadBundleState.cs.meta b/Client/Assets/Scripts/Startup/Procedure/ProcedureDownloadBundleState.cs.meta similarity index 100% rename from Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureDownloadBundleState.cs.meta rename to Client/Assets/Scripts/Startup/Procedure/ProcedureDownloadBundleState.cs.meta diff --git a/Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureEntryState.cs b/Client/Assets/Scripts/Startup/Procedure/ProcedureEntryState.cs similarity index 91% rename from Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureEntryState.cs rename to Client/Assets/Scripts/Startup/Procedure/ProcedureEntryState.cs index f3b4eb6..5c034e5 100644 --- a/Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureEntryState.cs +++ b/Client/Assets/Scripts/Startup/Procedure/ProcedureEntryState.cs @@ -30,7 +30,7 @@ namespace Unity.Startup.Procedure if (GameApp.Resource.PlayMode == EPlayMode.WebPlayMode) { - HttpHelper.CDNUrl = "http://127.0.0.1:8080/CDN/WebGL"; + StartupSetting.CDNUrl = "http://127.0.0.1:8080/CDN/WebGL"; SwitchProcedure(); return; } @@ -42,7 +42,7 @@ namespace Unity.Startup.Procedure { try { - await HttpHelper.GetRemoteVersion(); + await StartupSetting.GetRemoteVersion(); SwitchProcedure(); } catch (Exception e) diff --git a/Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureEntryState.cs.meta b/Client/Assets/Scripts/Startup/Procedure/ProcedureEntryState.cs.meta similarity index 100% rename from Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureEntryState.cs.meta rename to Client/Assets/Scripts/Startup/Procedure/ProcedureEntryState.cs.meta diff --git a/Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureGetAppVersionInfoState.cs b/Client/Assets/Scripts/Startup/Procedure/ProcedureGetAppVersionInfoState.cs similarity index 84% rename from Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureGetAppVersionInfoState.cs rename to Client/Assets/Scripts/Startup/Procedure/ProcedureGetAppVersionInfoState.cs index 13aa6f2..21b41b6 100644 --- a/Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureGetAppVersionInfoState.cs +++ b/Client/Assets/Scripts/Startup/Procedure/ProcedureGetAppVersionInfoState.cs @@ -22,13 +22,13 @@ namespace Unity.Startup.Procedure { try { - if (HttpHelper.Version != AppVersion.GameVersion) + if (StartupSetting.Version != AppVersion.GameVersion) { - Log.Warning($"Version inconsistency : {AppVersion.GameVersion}->{HttpHelper.Version} "); + Log.Warning($"Version inconsistency : {AppVersion.GameVersion}->{StartupSetting.Version} "); #if UNITY_EDITOR UnityEditor.EditorApplication.isPlaying = false; #else - Application.OpenURL(HttpHelper.AppDownloadUrl); + Application.OpenURL(StartupSetting.AppDownloadUrl); Application.Quit(); #endif diff --git a/Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureGetAppVersionInfoState.cs.meta b/Client/Assets/Scripts/Startup/Procedure/ProcedureGetAppVersionInfoState.cs.meta similarity index 100% rename from Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureGetAppVersionInfoState.cs.meta rename to Client/Assets/Scripts/Startup/Procedure/ProcedureGetAppVersionInfoState.cs.meta diff --git a/Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureInitPackageState.cs b/Client/Assets/Scripts/Startup/Procedure/ProcedureInitPackageState.cs similarity index 98% rename from Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureInitPackageState.cs rename to Client/Assets/Scripts/Startup/Procedure/ProcedureInitPackageState.cs index d480000..ce9e658 100644 --- a/Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureInitPackageState.cs +++ b/Client/Assets/Scripts/Startup/Procedure/ProcedureInitPackageState.cs @@ -18,7 +18,7 @@ namespace Unity.Startup.Procedure string hostUrl = string.Empty; if (GameApp.Resource.PlayMode == EPlayMode.HostPlayMode || GameApp.Resource.PlayMode == EPlayMode.WebPlayMode) { - hostUrl = HttpHelper.CDNUrl; + hostUrl = StartupSetting.CDNUrl; } await GameApp.Resource.InitPackageAsync(string.Empty, hostUrl, hostUrl); await UniTask.DelayFrame(); diff --git a/Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureInitPackageState.cs.meta b/Client/Assets/Scripts/Startup/Procedure/ProcedureInitPackageState.cs.meta similarity index 100% rename from Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureInitPackageState.cs.meta rename to Client/Assets/Scripts/Startup/Procedure/ProcedureInitPackageState.cs.meta diff --git a/Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureLoadAssembly.cs b/Client/Assets/Scripts/Startup/Procedure/ProcedureLoadAssembly.cs similarity index 100% rename from Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureLoadAssembly.cs rename to Client/Assets/Scripts/Startup/Procedure/ProcedureLoadAssembly.cs diff --git a/Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureLoadAssembly.cs.meta b/Client/Assets/Scripts/Startup/Procedure/ProcedureLoadAssembly.cs.meta similarity index 100% rename from Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureLoadAssembly.cs.meta rename to Client/Assets/Scripts/Startup/Procedure/ProcedureLoadAssembly.cs.meta diff --git a/Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedurePatchDoneState.cs b/Client/Assets/Scripts/Startup/Procedure/ProcedurePatchDoneState.cs similarity index 100% rename from Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedurePatchDoneState.cs rename to Client/Assets/Scripts/Startup/Procedure/ProcedurePatchDoneState.cs diff --git a/Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedurePatchDoneState.cs.meta b/Client/Assets/Scripts/Startup/Procedure/ProcedurePatchDoneState.cs.meta similarity index 100% rename from Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedurePatchDoneState.cs.meta rename to Client/Assets/Scripts/Startup/Procedure/ProcedurePatchDoneState.cs.meta diff --git a/Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureUpdateFinishState.cs b/Client/Assets/Scripts/Startup/Procedure/ProcedureUpdateFinishState.cs similarity index 100% rename from Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureUpdateFinishState.cs rename to Client/Assets/Scripts/Startup/Procedure/ProcedureUpdateFinishState.cs diff --git a/Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureUpdateFinishState.cs.meta b/Client/Assets/Scripts/Startup/Procedure/ProcedureUpdateFinishState.cs.meta similarity index 100% rename from Client/Assets/Scripts/Startup/Procedure/PatchUpdater/ProcedureUpdateFinishState.cs.meta rename to Client/Assets/Scripts/Startup/Procedure/ProcedureUpdateFinishState.cs.meta diff --git a/Client/Assets/Scripts/Startup/Procedure/ProcedureEntry.cs b/Client/Assets/Scripts/Startup/ProcedureEntry.cs similarity index 100% rename from Client/Assets/Scripts/Startup/Procedure/ProcedureEntry.cs rename to Client/Assets/Scripts/Startup/ProcedureEntry.cs diff --git a/Client/Assets/Scripts/Startup/Procedure/ProcedureEntry.cs.meta b/Client/Assets/Scripts/Startup/ProcedureEntry.cs.meta similarity index 100% rename from Client/Assets/Scripts/Startup/Procedure/ProcedureEntry.cs.meta rename to Client/Assets/Scripts/Startup/ProcedureEntry.cs.meta diff --git a/Client/Assets/Scripts/Startup/StartupSetting.cs b/Client/Assets/Scripts/Startup/StartupSetting.cs index ef2b772..cb2173b 100644 --- a/Client/Assets/Scripts/Startup/StartupSetting.cs +++ b/Client/Assets/Scripts/Startup/StartupSetting.cs @@ -1,5 +1,9 @@ using System.Collections.Generic; +using AlicizaX; using AlicizaX.Resource.Runtime; +using Cysharp.Threading.Tasks; +using Newtonsoft.Json.Linq; +using UnityEngine; using YooAsset; public static class StartupSetting @@ -10,4 +14,21 @@ public static class StartupSetting public static readonly List HotUpdateAssemblies = new List() { "GameLib.dll", "GameProto.dll", "GameBase.dll", "GameLogic.dll" }; + + + + public const string VersionApi = "http://localhost:5000/api/Version?channel=Standlone"; + public static string Version = string.Empty; + public static string CDNUrl = string.Empty; + public static string AppDownloadUrl = string.Empty; + + public static async UniTask GetRemoteVersion() + { + var updateDataStr = await Utility.Http.Get(VersionApi); + JObject json = JObject.Parse(updateDataStr); + Version = json["version"].ToString(); + CDNUrl = json["cdnUrl"].ToString(); + AppDownloadUrl = json["appDownloadUrl"].ToString(); + Debug.Log(updateDataStr); + } } diff --git a/Client/Assets/Test.meta b/Client/Assets/Test.meta new file mode 100644 index 0000000..b21a43e --- /dev/null +++ b/Client/Assets/Test.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 120be4f03dcf52a4c827a44807402f14 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Test/GameBase.dll.bytes b/Client/Assets/Test/GameBase.dll.bytes new file mode 100644 index 0000000000000000000000000000000000000000..6a37b711c13f813d9b00c4e6d2ad69abb07effcb GIT binary patch literal 5120 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 R^wGXA20tYlD?SC3{s*4^DYF0o literal 0 HcmV?d00001 diff --git a/Client/Assets/Test/GameBase.pdb.bytes.meta b/Client/Assets/Test/GameBase.pdb.bytes.meta new file mode 100644 index 0000000..5e510a2 --- /dev/null +++ b/Client/Assets/Test/GameBase.pdb.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d7fad1223ee359940a43eccb1814103f +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Test/GameLib.dll.bytes b/Client/Assets/Test/GameLib.dll.bytes new file mode 100644 index 0000000000000000000000000000000000000000..dbb4ce4b963c27e44370713cc546de3b9e4bc3a9 GIT binary patch literal 5120 zcmeHLZ)_Y#6@R;TzSvIV#t8{&8`4eUl0R6-o%ihXB~9@CwU5}f<+IZi8994*6KCn( z?sa$1jUxiC_){nKH1~R@qkr+$>=HvaEta&Lu))pJP-0*J(qRMJQ$X zo#xIM(dBR)vuova0ORZ-qPaEUf6>v1y4RU?gP&N($9-|m2mf|22y`;m+vbP(blmma z8q^Zo7&;tiAL_a?2J~@PSPl$%$>=mH``U)Ou8a}o*0HjCf!7slHfZCt4oGN%OaHTx{hN|_TL;q5A z+8L}DFLw_rhG14A#7CT7UQ0Gz-!crYL_b$q&KuoOPeo$%jHJ8NV&r~02a_26R{aL# zMM;0Byp8@ZBCn}2dQmwQ>7}nLSJYk_RGGe_{1x)&l-JZg`iGK%RHUPqxd4DG$l*vLKUfo1k5kcAJm|p1B8AmU-Ls zS1L}+t%-4A3)k>PJ?nX*QMFd49NVeXT(jxVtu%$VxSXWL#foqEW-aTw#!4AuSyM63 zi(^Thh6|%ZiQMqeP&%1PX4A!zt{3x(yk064)1#?Ov8X3g#X>eWl+g3}OnO956%M!=w(HYlV2F`M$X^Dog8IWTagm0LZcbxK>0{jl8Ml!i< zB9qP(M$`FHaX4Sf4dq5tqeFT+JyOhOb9xDAl6p=r7E8k;dNMl-(4|tAWUvLpH>hM< zV#e^#dXnobhh)c%hL|*~)bMJKYoRmSvVF55N~W;t6NX*41j*Gc)=l4W<9WvwK?sz! z%$j-LI2E5S$HP%{(y&^Br>4L@=Q>Y&M%5C$;DYi_qX{%_CrLhTs%i_WHBlZP(d?Rd z-d+~2dB$WP8#SCa)3A`WX}f6q!kw`UBzyhff~dBZmUw8#;cd7&ii)VUTx_Em;WkXq zLozzL0JqH0tgwu8vgdX5VfbtYRn@fMr=!iSAim0q=Zgl`uhDdDq??giG%J=&$la`E zQJ9K&9sR(X+L*F6-W(ktby08vU%Z+$U!KCg34FP7LkA1Pnpxr9NfECho9i>%c3v=z zCEM|EI=r?hj80;;LNwyl-hUCJxqo7#)Z4<0!_erd-OZ#@6$KR!oMO;Nfd z8Yx}q^!H1;L()TCnyU2mMK>w^yEl=lY%BJcyT5;a;p79U>t9^G6jxS18)oZHpyO>} zCy=#N4{GgmG^m|KL`d2({$As6P|LS0zvYT!wrKgTVGU|CttyVt39&NgJSpsB)pXhz zt__bQGkQuSMl(B6A#UUqc;;#6Hla#=6y*ikq~5H@>Axw-Ua} z_V8zKPTl#qYcwBo?BcnaXz~V{JIlwB?c_(2qI{czlb0%`aed399`D={;i<&I@5svb z8D~w7S9MT6^S2kiL(0?)dp?7D4R6Y8{7483&#@i#0O~$`7xu}=T&P4NpRpa5W-Eot z>ep`Ecm2CR8vnx0XD=l#zB9`{#*ZvWkTb5sn`I%qg%vU>Y)Yxh5>%? z`SKPf9RG}Yt{p(TjpL-=EAPGn{1PPEMYOunHrW4o&;5s-?fAFDsWGBLaAa77ehTy? zRcH~kNVDjb@k{G5@MX|a@T-e{7=7y|zk_Zs9|;Bg23qGVv$lqX^9!n%VcftO^b;`auA!6`BtU)tKhZehI)YJkVt4ttaE zQN`FgwEX+#pu{u@nPhlP{*YI=}^v*v;Q_e=I%aEO2#vT@eby0 zA#NX;*ceqO9*&J;;&*QraeJ_A0JjBX+PjX!(0k>*UI8umKZDCh-s_3(`Tu`hfqw%f CKNfNT literal 0 HcmV?d00001 diff --git a/Client/Assets/Test/GameLib.dll.bytes.meta b/Client/Assets/Test/GameLib.dll.bytes.meta new file mode 100644 index 0000000..2b7fc7c --- /dev/null +++ b/Client/Assets/Test/GameLib.dll.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 66312dfa5dc7a594fa239d5e23983099 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Test/GameLib.pdb.bytes b/Client/Assets/Test/GameLib.pdb.bytes new file mode 100644 index 0000000000000000000000000000000000000000..d6d2b6fef496b5b9be111fbeeaf2cc335bd7a0f0 GIT binary patch literal 18432 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�->m368XEGB2-;Cm27P;9lw4;iopkulZ#Zg23k zPEZU+cZE6;1h+8Q#vtsa_^lD$Zx2!lgN+PvZ;@cP3l^3-JNX$EK28!7D*6QFUDpPN z%UHe2gZz_E6$>O6Vh?F3Q}&OdZG>ntLahwCpjx4>;1-4M(7-kY>|z+a$6bwD`l@X+ zSE3`fIU_(L#bjl_kQuE(u#G|3gR-b9!^cTyLPekO`<$v0+3Knm(`Sf})?U^a7(@Ea zW&2a%(LKpT=ZT0l%C71^oJt-~8^~v>d~O4m4Th}W86L5^lZRrFnqA4vaO^~9B9j{5 zxTPx*%fw^%TG6f1!NEq6219DjlC?dV7>*shsFh-wCb)-&xcd$#G5iG# z@wCU2X$vE)T?2FlKBx~XBGO_=-2m=6Ub8!yNcKfivC+&GK-ZR*CO5_}2am z-{&>n2`ik4ecjvF(f7==?bRLScI2_5O57xET)(+K%J8PohLkF|09gPl2->$a$ zre?8k^;zduY|b^2RrL+``onks%Ds=j9#wWe4>DfmK>64EbMlD{wkJ~^@%Zj=EFsE3 zSXNCm9@j;Fz8*wWv#-cjsq+|GajM@+X9l`@My-T`nZNkdHshYwEUcujMXGvFN7HDFuhN*O>ejm61m-_i=y=x<6|fV zTaI~JK6PyhYiGbS-!6O)z*u%``>l$0o3PCIX_P)0MA(Tj4flc7U1P!N=shCdd=ugDfDLw>eKFGeI#_c-{)7r|hNnwp&ZEKM#EI ltRrg5IF1^fuNo8nXg|8;V%=bo?xoCu{|~EgF023m literal 0 HcmV?d00001 diff --git a/Client/Assets/Test/GameLogic.dll.bytes.meta b/Client/Assets/Test/GameLogic.dll.bytes.meta new file mode 100644 index 0000000..7a44ef8 --- /dev/null +++ b/Client/Assets/Test/GameLogic.dll.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ca9087bc37b3f8d48b90396b79b283f3 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Test/GameLogic.pdb.bytes b/Client/Assets/Test/GameLogic.pdb.bytes new file mode 100644 index 0000000000000000000000000000000000000000..275de1e68347dc2145532d22190a3d6a54f5ac5f GIT binary patch literal 24296 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 literal 0 HcmV?d00001 diff --git a/Client/Assets/Test/GameLogic.pdb.bytes.meta b/Client/Assets/Test/GameLogic.pdb.bytes.meta new file mode 100644 index 0000000..2291e05 --- /dev/null +++ b/Client/Assets/Test/GameLogic.pdb.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 200d1a5604e5e984e89a9bf9f4317d22 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Client/Assets/Test/GameProto.dll.bytes b/Client/Assets/Test/GameProto.dll.bytes new file mode 100644 index 0000000000000000000000000000000000000000..8fa3200a8dbbc3bc0e1f50e3208bfebefeef063f GIT binary patch literal 4608 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