diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Audio/CGBAudio.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Audio/CGBAudio.cs index cfd2495b..4474cae3 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Audio/CGBAudio.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Audio/CGBAudio.cs @@ -19,5 +19,19 @@ samplesPerFrame = cyclesPerFrame = cyclesPerSample = -1; } + + #region AxiState + + public void LoadAxiStatus(AxiEssgssStatusData data) + { + base.LoadAxiStatus(data); + } + + public AxiEssgssStatusData SaveAxiStatus() + { + AxiEssgssStatusData data = base.SaveAxiStatus(); + return data; + } + #endregion } } diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Audio/DMGAudio.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Audio/DMGAudio.cs index 1974e9fa..5ff4e81d 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Audio/DMGAudio.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Audio/DMGAudio.cs @@ -133,15 +133,60 @@ namespace Essgee.Emulation.Audio public void LoadAxiStatus(AxiEssgssStatusData data) { + volumeRightLeft = data.MemberData[nameof(volumeRightLeft)]; + vinEnableRightLeft = data.MemberData[nameof(vinEnableRightLeft)].ToBoolArray(); + + clockRate = BitConverter.ToDouble(data.MemberData[nameof(clockRate)]); + refreshRate = BitConverter.ToDouble(data.MemberData[nameof(refreshRate)]); + + channel1Enable = data.MemberData[nameof(channel1Enable)].ToBoolArray(); + channel2Enable = data.MemberData[nameof(channel2Enable)].ToBoolArray(); + channel3Enable = data.MemberData[nameof(channel3Enable)].ToBoolArray(); + channel4Enable = data.MemberData[nameof(channel4Enable)].ToBoolArray(); + + isSoundHwEnabled = BitConverter.ToBoolean(data.MemberData[nameof(isSoundHwEnabled)]); + + samplesPerFrame = BitConverter.ToInt32(data.MemberData[nameof(samplesPerFrame)]); + cyclesPerFrame = BitConverter.ToInt32(data.MemberData[nameof(cyclesPerFrame)]); + cyclesPerSample = BitConverter.ToInt32(data.MemberData[nameof(cyclesPerSample)]); + sampleCycleCount = BitConverter.ToInt32(data.MemberData[nameof(sampleCycleCount)]); frameCycleCount = BitConverter.ToInt32(data.MemberData[nameof(frameCycleCount)]); + + channel1ForceEnable = BitConverter.ToBoolean(data.MemberData[nameof(channel1ForceEnable)]); + channel2ForceEnable = BitConverter.ToBoolean(data.MemberData[nameof(channel2ForceEnable)]); + channel3ForceEnable = BitConverter.ToBoolean(data.MemberData[nameof(channel3ForceEnable)]); + channel4ForceEnable = BitConverter.ToBoolean(data.MemberData[nameof(channel4ForceEnable)]); } public AxiEssgssStatusData SaveAxiStatus() { AxiEssgssStatusData data = new AxiEssgssStatusData(); + + data.MemberData[nameof(volumeRightLeft)] = volumeRightLeft; + data.MemberData[nameof(vinEnableRightLeft)] = vinEnableRightLeft.ToByteArray(); + + data.MemberData[nameof(clockRate)] = BitConverter.GetBytes(clockRate); + data.MemberData[nameof(refreshRate)] = BitConverter.GetBytes(refreshRate); + + data.MemberData[nameof(channel1Enable)] = channel1Enable.ToByteArray(); + data.MemberData[nameof(channel2Enable)] = channel2Enable.ToByteArray(); + data.MemberData[nameof(channel3Enable)] = channel3Enable.ToByteArray(); + data.MemberData[nameof(channel4Enable)] = channel4Enable.ToByteArray(); + + data.MemberData[nameof(isSoundHwEnabled)] = BitConverter.GetBytes(isSoundHwEnabled); + + data.MemberData[nameof(samplesPerFrame)] = BitConverter.GetBytes(samplesPerFrame); + data.MemberData[nameof(cyclesPerFrame)] = BitConverter.GetBytes(cyclesPerFrame); + data.MemberData[nameof(cyclesPerSample)] = BitConverter.GetBytes(cyclesPerSample); + data.MemberData[nameof(sampleCycleCount)] = BitConverter.GetBytes(sampleCycleCount); data.MemberData[nameof(frameCycleCount)] = BitConverter.GetBytes(frameCycleCount); + + data.MemberData[nameof(channel1ForceEnable)] = BitConverter.GetBytes(channel1ForceEnable); + data.MemberData[nameof(channel2ForceEnable)] = BitConverter.GetBytes(channel2ForceEnable); + data.MemberData[nameof(channel3ForceEnable)] = BitConverter.GetBytes(channel3ForceEnable); + data.MemberData[nameof(channel4ForceEnable)] = BitConverter.GetBytes(channel4ForceEnable); return data; } #endregion diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Audio/IAudio.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Audio/IAudio.cs index 7bb06c8c..a65a0906 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Audio/IAudio.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Audio/IAudio.cs @@ -3,7 +3,7 @@ using System; namespace Essgee.Emulation.Audio { - interface IAudio : IAxiStatus + interface IAudio : IAxiEssgssStatus { event EventHandler EnqueueSamples; void OnEnqueueSamples(EnqueueSamplesEventArgs e); diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/CPU/ICPU.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/CPU/ICPU.cs index 0964cc33..c7992734 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/CPU/ICPU.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/CPU/ICPU.cs @@ -1,6 +1,6 @@ namespace Essgee.Emulation.CPU { - interface ICPU : IAxiStatus + interface ICPU : IAxiEssgssStatus { void Startup(); void Shutdown(); diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/CPU/SM83CGB.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/CPU/SM83CGB.cs index d07c091d..e6fb54e3 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/CPU/SM83CGB.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/CPU/SM83CGB.cs @@ -1,4 +1,9 @@ -namespace Essgee.Emulation.CPU +using Essgee.Emulation.Cartridges; +using Essgee.Emulation.Video; +using System; +using UnityEngine.UIElements; + +namespace Essgee.Emulation.CPU { public class SM83CGB : SM83 { @@ -7,6 +12,21 @@ public SM83CGB(MemoryReadDelegate memoryRead, MemoryWriteDelegate memoryWrite) : base(memoryRead, memoryWrite) { } + #region AxiState + + public void LoadAxiStatus(AxiEssgssStatusData data) + { + base.LoadAxiStatus(data); + IsDoubleSpeed = BitConverter.ToBoolean(data.MemberData[nameof(IsDoubleSpeed)]); + } + + public AxiEssgssStatusData SaveAxiStatus() + { + AxiEssgssStatusData data = base.SaveAxiStatus(); + data.MemberData[nameof(IsDoubleSpeed)] = BitConverter.GetBytes(IsDoubleSpeed); + return data; + } + #endregion protected override void EnterHaltState() { if (ime) diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/ICartridge.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/ICartridge.cs index 3926b7d6..14ac82eb 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/ICartridge.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/ICartridge.cs @@ -1,6 +1,6 @@ namespace Essgee.Emulation.Cartridges { - internal interface ICartridge : IAxiStatus + internal interface ICartridge : IAxiEssgssStatus { void LoadRom(byte[] data); void LoadRam(byte[] data); diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/GBCameraCartridge.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/GBCameraCartridge.cs index 1db9ff62..626c19c1 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/GBCameraCartridge.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Cartridges/Nintendo/GBCameraCartridge.cs @@ -70,12 +70,25 @@ namespace Essgee.Emulation.Cartridges.Nintendo public void LoadAxiStatus(AxiEssgssStatusData data) { - //TODO GB相机暂时不实现 + ramData = data.MemberData[nameof(ramData)]; + hasBattery = BitConverter.ToBoolean(data.MemberData[nameof(hasBattery)]); + romBank = data.MemberData[nameof(romBank)].First(); + ramBank = data.MemberData[nameof(ramBank)].First(); + ramEnable = BitConverter.ToBoolean(data.MemberData[nameof(ramEnable)]); + cameraCycles = BitConverter.ToInt32(data.MemberData[nameof(cameraCycles)]); + camClocksLeft = BitConverter.ToInt32(data.MemberData[nameof(camClocksLeft)]); } public AxiEssgssStatusData SaveAxiStatus() { AxiEssgssStatusData data = new AxiEssgssStatusData(); + data.MemberData[nameof(ramData)] = ramData; + data.MemberData[nameof(hasBattery)] = BitConverter.GetBytes(hasBattery); + data.MemberData[nameof(romBank)] = BitConverter.GetBytes(romBank); + data.MemberData[nameof(ramBank)] = BitConverter.GetBytes(ramBank); + data.MemberData[nameof(ramEnable)] = BitConverter.GetBytes(ramEnable); + data.MemberData[nameof(cameraCycles)] = BitConverter.GetBytes(cameraCycles); + data.MemberData[nameof(camClocksLeft)] = BitConverter.GetBytes(camClocksLeft); return data; } #endregion diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Configuration/GameBoy.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Configuration/GameBoy.cs index 7f548ffd..eccca2ea 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Configuration/GameBoy.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Configuration/GameBoy.cs @@ -1,7 +1,6 @@ using Essgee.Emulation.Cartridges.Nintendo; using Essgee.Emulation.ExtDevices.Nintendo; using Essgee.Utilities; -using Newtonsoft.Json; using System; namespace Essgee.Emulation.Configuration @@ -26,7 +25,7 @@ namespace Essgee.Emulation.Configuration //todo Unity [FileBrowserControl("General", "Bootstrap Path", "Game Boy Bootstrap ROM (*.gb;*.bin;*.zip)|*.gb;*.bin;*.zip")] public string BootstrapRom { get; set; } //todo Unity [DropDownControl("General", "Serial Device", typeof(ISerialDevice))] - [JsonConverter(typeof(TypeNameJsonConverter), "Essgee.Emulation.ExtDevices.Nintendo")] + //[JsonConverter(typeof(TypeNameJsonConverter), "Essgee.Emulation.ExtDevices.Nintendo")] public Type SerialDevice { get; set; } //todo Unity [DropDownControl("GB Camera", "Camera Source", typeof(GBCameraCartridge.ImageSources))] diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Configuration/GameBoyColor.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Configuration/GameBoyColor.cs index 6c9ec403..bdc7f505 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Configuration/GameBoyColor.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Configuration/GameBoyColor.cs @@ -1,7 +1,6 @@ using Essgee.Emulation.Cartridges.Nintendo; using Essgee.Emulation.ExtDevices.Nintendo; using Essgee.Utilities; -using Newtonsoft.Json; using System; namespace Essgee.Emulation.Configuration @@ -15,7 +14,7 @@ namespace Essgee.Emulation.Configuration //todo Unity [FileBrowserControl("General", "Bootstrap Path", "Game Boy Color Bootstrap ROM (*.gbc;*.bin;*.zip)|*.gbc;*.bin;*.zip")] public string BootstrapRom { get; set; } //todo Unity [DropDownControl("General", "Serial Device", typeof(ISerialDevice))] - [JsonConverter(typeof(TypeNameJsonConverter), "Essgee.Emulation.ExtDevices.Nintendo")] + //[JsonConverter(typeof(TypeNameJsonConverter), "Essgee.Emulation.ExtDevices.Nintendo")] public Type SerialDevice { get; set; } //todo Unity [DropDownControl("GB Camera", "Camera Source", typeof(GBCameraCartridge.ImageSources))] diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Machines/GameBoy.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Machines/GameBoy.cs index 2fbd7f6f..cefb4099 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Machines/GameBoy.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Machines/GameBoy.cs @@ -402,15 +402,6 @@ namespace Essgee.Emulation.Machines audio?.Shutdown(); } - public void SetState(Dictionary state) - { - throw new NotImplementedException(); - } - - public Dictionary GetState() - { - throw new NotImplementedException(); - } public Dictionary GetDebugInformation() { diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Machines/GameBoyColor.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Machines/GameBoyColor.cs index 1d1488cc..7adff1f9 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Machines/GameBoyColor.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Machines/GameBoyColor.cs @@ -162,18 +162,129 @@ namespace Essgee.Emulation.Machines public GameBoyColor() { } + #region AxiState public void LoadAxiStatus(AxiEssgssStatusData data) { + //config 暂时不需要存什么? + //configuration. = data.MemberData[nameof(configuration.)].ToEnum(); + + if (data.MemberData.ContainsKey(nameof(bootstrap))) + bootstrap = data.MemberData[nameof(bootstrap)]; + + cartridge.LoadAxiStatus(data.ClassData[nameof(cartridge)]); + wram = data.Array2DMemberData[nameof(wram)].Get2DArrayBytesData(); + hram = data.MemberData[nameof(hram)]; + ie = data.MemberData[nameof(ie)].First(); + cpu.LoadAxiStatus(data.ClassData[nameof(cpu)]); + video.LoadAxiStatus(data.ClassData[nameof(video)]); + audio.LoadAxiStatus(data.ClassData[nameof(audio)]); + + //看是否还需要补存储字段 + + + joypadRegister = data.MemberData[nameof(joypadRegister)].First(); + serialData = data.MemberData[nameof(serialData)].First(); + serialUseInternalClock = BitConverter.ToBoolean(data.MemberData[nameof(serialUseInternalClock)]); + serialFastClockSpeed = BitConverter.ToBoolean(data.MemberData[nameof(serialFastClockSpeed)]); + serialTransferInProgress = BitConverter.ToBoolean(data.MemberData[nameof(serialTransferInProgress)]); + divider = data.MemberData[nameof(divider)].First(); + timerCounter = data.MemberData[nameof(timerCounter)].First(); + clockCycleCount = BitConverter.ToUInt16(data.MemberData[nameof(clockCycleCount)]); + timerModulo = data.MemberData[nameof(timerModulo)].First(); + timerRunning = BitConverter.ToBoolean(data.MemberData[nameof(timerRunning)]); + timerInputClock = data.MemberData[nameof(timerInputClock)].First(); + timerOverflow = BitConverter.ToBoolean(data.MemberData[nameof(timerOverflow)]); + timerLoading = BitConverter.ToBoolean(data.MemberData[nameof(timerLoading)]); + irqVBlank = BitConverter.ToBoolean(data.MemberData[nameof(irqVBlank)]); + irqLCDCStatus = BitConverter.ToBoolean(data.MemberData[nameof(irqLCDCStatus)]); + irqTimerOverflow = BitConverter.ToBoolean(data.MemberData[nameof(irqTimerOverflow)]); + irqSerialIO = BitConverter.ToBoolean(data.MemberData[nameof(irqSerialIO)]); + irqKeypad = BitConverter.ToBoolean(data.MemberData[nameof(irqKeypad)]); + + speedIsDouble = BitConverter.ToBoolean(data.MemberData[nameof(speedIsDouble)]); + speedSwitchPending = BitConverter.ToBoolean(data.MemberData[nameof(speedSwitchPending)]); + + bootstrapDisabled = BitConverter.ToBoolean(data.MemberData[nameof(bootstrapDisabled)]); + + irSendingSignal = BitConverter.ToBoolean(data.MemberData[nameof(irSendingSignal)]); + irNotReceivingSignal = BitConverter.ToBoolean(data.MemberData[nameof(irNotReceivingSignal)]); + irReadEnableA = BitConverter.ToBoolean(data.MemberData[nameof(irReadEnableA)]); + irReadEnableB = BitConverter.ToBoolean(data.MemberData[nameof(irReadEnableB)]); + + serialBitsCounter = BitConverter.ToInt32(data.MemberData[nameof(serialBitsCounter)]); + serialCycles = BitConverter.ToInt32(data.MemberData[nameof(serialCycles)]); + currentMasterClockCyclesInFrame = BitConverter.ToInt32(data.MemberData[nameof(currentMasterClockCyclesInFrame)]); + totalMasterClockCyclesInFrame = BitConverter.ToInt32(data.MemberData[nameof(totalMasterClockCyclesInFrame)]); + + ReconfigureSystem(); } public AxiEssgssStatusData SaveAxiStatus() { AxiEssgssStatusData data = new AxiEssgssStatusData(); + + //config 暂时不需要存什么? + //data.MemberData[nameof(configuration.TVStandard)] = configuration.TVStandard.ToByteArray(); + + if (bootstrap != null) + data.MemberData[nameof(bootstrap)] = bootstrap; + + data.ClassData[nameof(cartridge)] = cartridge.SaveAxiStatus(); + data.Array2DMemberData[nameof(wram)] = new AxiEssgssStatusData_2DArray(wram); + data.MemberData[nameof(hram)] = hram; + data.MemberData[nameof(ie)] = BitConverter.GetBytes(ie); + data.ClassData[nameof(cpu)] = cpu.SaveAxiStatus(); + data.ClassData[nameof(video)] = video.SaveAxiStatus(); + data.ClassData[nameof(audio)] = audio.SaveAxiStatus(); + + //看是否还需要补存储字段 + + data.MemberData[nameof(joypadRegister)] = BitConverter.GetBytes(joypadRegister); + data.MemberData[nameof(serialData)] = BitConverter.GetBytes(serialData); + data.MemberData[nameof(serialUseInternalClock)] = BitConverter.GetBytes(serialUseInternalClock); + data.MemberData[nameof(serialFastClockSpeed)] = BitConverter.GetBytes(serialFastClockSpeed); + data.MemberData[nameof(serialTransferInProgress)] = BitConverter.GetBytes(serialTransferInProgress); + data.MemberData[nameof(divider)] = BitConverter.GetBytes(divider); + data.MemberData[nameof(timerCounter)] = BitConverter.GetBytes(timerCounter); + data.MemberData[nameof(clockCycleCount)] = BitConverter.GetBytes(clockCycleCount); + data.MemberData[nameof(timerModulo)] = BitConverter.GetBytes(timerModulo); + data.MemberData[nameof(timerRunning)] = BitConverter.GetBytes(timerRunning); + data.MemberData[nameof(timerInputClock)] = BitConverter.GetBytes(timerInputClock); + data.MemberData[nameof(timerOverflow)] = BitConverter.GetBytes(timerOverflow); + data.MemberData[nameof(timerLoading)] = BitConverter.GetBytes(timerLoading); + data.MemberData[nameof(irqVBlank)] = BitConverter.GetBytes(irqVBlank); + data.MemberData[nameof(irqLCDCStatus)] = BitConverter.GetBytes(irqLCDCStatus); + data.MemberData[nameof(irqTimerOverflow)] = BitConverter.GetBytes(irqTimerOverflow); + data.MemberData[nameof(irqSerialIO)] = BitConverter.GetBytes(irqSerialIO); + data.MemberData[nameof(irqKeypad)] = BitConverter.GetBytes(irqKeypad); + + data.MemberData[nameof(speedIsDouble)] = BitConverter.GetBytes(speedIsDouble); + data.MemberData[nameof(speedSwitchPending)] = BitConverter.GetBytes(speedSwitchPending); + + data.MemberData[nameof(bootstrapDisabled)] = BitConverter.GetBytes(bootstrapDisabled); + + data.MemberData[nameof(irSendingSignal)] = BitConverter.GetBytes(irSendingSignal); + data.MemberData[nameof(irNotReceivingSignal)] = BitConverter.GetBytes(irNotReceivingSignal); + data.MemberData[nameof(irReadEnableA)] = BitConverter.GetBytes(irReadEnableA); + data.MemberData[nameof(irReadEnableB)] = BitConverter.GetBytes(irReadEnableB); + + //看是否需要记录这部分 + //ushort[] irDatabase; + //int irDatabaseBaseIndex, irDatabaseStep; + //int irDatabaseCurrentIndex, irCycles; + //bool irExternalTransferActive; + + data.MemberData[nameof(serialBitsCounter)] = BitConverter.GetBytes(serialBitsCounter); + data.MemberData[nameof(serialCycles)] = BitConverter.GetBytes(serialCycles); + data.MemberData[nameof(currentMasterClockCyclesInFrame)] = BitConverter.GetBytes(currentMasterClockCyclesInFrame); + data.MemberData[nameof(totalMasterClockCyclesInFrame)] = BitConverter.GetBytes(totalMasterClockCyclesInFrame); + return data; } #endregion + public void Initialize() { bootstrap = null; diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Machines/IMachine.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Machines/IMachine.cs index 287915ce..07fd0b48 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Machines/IMachine.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Machines/IMachine.cs @@ -5,7 +5,7 @@ using System.Collections.Generic; namespace Essgee.Emulation.Machines { - public interface IMachine : IAxiStatus + public interface IMachine : IAxiEssgssStatus { event EventHandler SendLogMessage; event EventHandler EmulationReset; diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Peripherals/IPeripheral.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Peripherals/IPeripheral.cs index a653d71d..56bc70ce 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Peripherals/IPeripheral.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Peripherals/IPeripheral.cs @@ -1,6 +1,6 @@ namespace Essgee.Emulation.Peripherals { - interface IPeripheral : IAxiStatus + interface IPeripheral : IAxiEssgssStatus { void Startup(); void Shutdown(); diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Video/IVideo.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Video/IVideo.cs index fcbadd4f..e2a82851 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Video/IVideo.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Emulation/Video/IVideo.cs @@ -3,7 +3,7 @@ using System; namespace Essgee.Emulation.Video { - interface IVideo : IAxiStatus + interface IVideo : IAxiEssgssStatus { (int X, int Y, int Width, int Height) Viewport { get; } diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Extensions/SerializationExtensionMethods.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Extensions/SerializationExtensionMethods.cs index 385154c8..5e977d0b 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Extensions/SerializationExtensionMethods.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Extensions/SerializationExtensionMethods.cs @@ -1,34 +1,33 @@ -using Newtonsoft.Json; -using System.IO; +//using System.IO; -namespace Essgee.Extensions -{ - public static class SerializationExtensionMethods - { - public static void SerializeToFile(this object obj, string jsonFileName) - { - SerializeToFile(obj, jsonFileName, new JsonSerializerSettings()); - } +//namespace Essgee.Extensions +//{ +// public static class SerializationExtensionMethods +// { +// public static void SerializeToFile(this object obj, string jsonFileName) +// { +// SerializeToFile(obj, jsonFileName, new JsonSerializerSettings()); +// } - static void SerializeToFile(this object obj, string jsonFileName, JsonSerializerSettings serializerSettings) - { - using (var writer = new StreamWriter(jsonFileName)) - { - writer.Write(JsonConvert.SerializeObject(obj, Formatting.Indented, serializerSettings)); - } - } +// static void SerializeToFile(this object obj, string jsonFileName, JsonSerializerSettings serializerSettings) +// { +// using (var writer = new StreamWriter(jsonFileName)) +// { +// writer.Write(JsonConvert.SerializeObject(obj, Formatting.Indented, serializerSettings)); +// } +// } - public static T DeserializeFromFile(this string jsonFileName) - { - using (var reader = new StreamReader(jsonFileName)) - { - return (T)JsonConvert.DeserializeObject(reader.ReadToEnd(), typeof(T), new JsonSerializerSettings() { Formatting = Formatting.Indented }); - } - } +// public static T DeserializeFromFile(this string jsonFileName) +// { +// using (var reader = new StreamReader(jsonFileName)) +// { +// return (T)JsonConvert.DeserializeObject(reader.ReadToEnd(), typeof(T), new JsonSerializerSettings() { Formatting = Formatting.Indented }); +// } +// } - public static T DeserializeObject(this string jsonString) - { - return (T)JsonConvert.DeserializeObject(jsonString, typeof(T), new JsonSerializerSettings() { Formatting = Formatting.Indented }); - } - } -} +// public static T DeserializeObject(this string jsonString) +// { +// return (T)JsonConvert.DeserializeObject(jsonString, typeof(T), new JsonSerializerSettings() { Formatting = Formatting.Indented }); +// } +// } +//} diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/IAxiStatus.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/IAxiEssgssStatus.cs similarity index 85% rename from AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/IAxiStatus.cs rename to AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/IAxiEssgssStatus.cs index 1682cf97..541d8e9c 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/IAxiStatus.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/IAxiEssgssStatus.cs @@ -43,7 +43,7 @@ internal static class AxiEssgssStatusDataExtention return AxiStatus.saveCover.ToAxiEssgssStatusData(byteArray); } } -public interface IAxiStatus +public interface IAxiEssgssStatus { public void LoadAxiStatus(AxiEssgssStatusData data); public AxiEssgssStatusData SaveAxiStatus(); @@ -222,4 +222,50 @@ internal static class AxiStatus return array2D; } + + public static byte[] FlattenByteArray3D(this byte[,,] array3D) + { + int layer = array3D.GetLength(0); + int rows = array3D.GetLength(1); + int cols = array3D.GetLength(2); + byte[] array1D = new byte[layer * rows * cols]; + + int index = 0; + for (int i = 0; i < layer; i++) + { + for (int j = 0; j < rows; j++) + { + for (int k = 0; k < cols; k++) + { + array1D[index++] = array3D[i, j, k]; + } + } + } + + return array1D; + } + + public static byte[,,] CreateByteArray3D(this byte[] array1D, int layer, int rows, int cols) + { + if (array1D.Length != layer * rows * cols) + { + throw new ArgumentException("The length of the 1D array does not match the specified dimensions for the 3D array."); + } + + byte[,,] array3D = new byte[layer, rows, cols]; + + int index = 0; + for (int i = 0; i < layer; i++) + { + for (int j = 0; j < rows; j++) + { + for (int k = 0; k < cols; k++) + { + array3D[i, j, k] = array1D[index++]; + } + } + } + + return array3D; + } } diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/IAxiStatus.cs.meta b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/IAxiEssgssStatus.cs.meta similarity index 100% rename from AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/IAxiStatus.cs.meta rename to AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/IAxiEssgssStatus.cs.meta diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Metadata/GameMetadataHandler.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Metadata/GameMetadataHandler.cs index 3eba71b5..5b0b8d4a 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Metadata/GameMetadataHandler.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Metadata/GameMetadataHandler.cs @@ -1,11 +1,7 @@ using Essgee.Emulation; using Essgee.Exceptions; -using Essgee.Utilities; -using Newtonsoft.Json; -using Newtonsoft.Json.Converters; using System; using System.Collections.Generic; -using System.ComponentModel; using System.IO; using System.Linq; using System.Xml.Serialization; @@ -37,11 +33,305 @@ namespace Essgee.Metadata { gameMetaReources = metaresources; - if (!gameMetaReources.GetCartMetadataDatabase(out string loadedData)) - throw new HandlerException("CartMetadataDatabase file not found"); - - cartMetadataDatabase = JsonConvert.DeserializeObject>(loadedData); + //if (!gameMetaReources.GetCartMetadataDatabase(out string loadedData)) + // throw new HandlerException("CartMetadataDatabase file not found"); + //cartMetadataDatabase = JsonConvert.DeserializeObject>(loadedData); + cartMetadataDatabase = new List() + { + new CartridgeJSON(){ + Name = "The Castle (SG-1000)", + Notes = "8k volatile RAM", + Crc32 = 0x092F29D6, + RomSize = 32768, + RamSize = 8192 + }, + new CartridgeJSON(){ + Name = "Othello (SG-1000)", + Notes = "2k volatile RAM", + Crc32 = 0xAF4F14BC, + RomSize = 32768, + RamSize = 2048 + }, + new CartridgeJSON(){ + Name = "Sega Basic Level II (SC-3000)", + Notes = "2k volatile RAM (for Level IIb)", + Crc32 = 0xF691F9C7, + RomSize = 32768, + RamSize = 2048 + }, + new CartridgeJSON(){ + Name = "Sega Basic Level III (SC-3000)", + Notes = "32k volatile RAM (for Level IIIb)", + Crc32 = 0x5D9F11CA, + RomSize = 32768, + RamSize = 32768 + }, + new CartridgeJSON(){ + Name = "Back to the Future 2 (SMS)", + Notes = "PAL only", + Crc32 = 0xE5FF50D8, + RomSize = 262144, + PreferredTVStandard = TVStandard.PAL + }, + new CartridgeJSON(){ + Name = "Back to the Future 3 (SMS)", + Notes = "PAL only", + Crc32 = 0x2D48C1D3, + RomSize = 262144, + PreferredTVStandard = TVStandard.PAL + }, + new CartridgeJSON(){ + Name = "California Games 2 (SMS, Europe)", + Notes = "PAL only", + Crc32 = 0xC0E25D62, + RomSize = 262144, + PreferredTVStandard = TVStandard.PAL + }, + new CartridgeJSON(){ + Name = "Chase HQ (SMS)", + Notes = "PAL only", + Crc32 = 0x85CFC9C9, + RomSize = 262144, + PreferredTVStandard = TVStandard.PAL + }, + new CartridgeJSON(){ + Name = "Cosmic Spacehead (SMS)", + Notes = "Codemasters mapper & PAL only", + Crc32 = 0x29822980, + RomSize = 262144, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge), + PreferredTVStandard = TVStandard.PAL + }, + new CartridgeJSON(){ + Name = "Dinobasher (SMS)", + Notes = "Codemasters mapper", + Crc32 = 0xEA5C3A6F, + RomSize = 262144, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge), + }, + new CartridgeJSON(){ + Name = "Excellent Dizzy Collection (SMS)", + Notes = "Codemasters mapper & PAL only", + Crc32 = 0x8813514B, + RomSize = 262144, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge), + PreferredTVStandard = TVStandard.PAL + }, + new CartridgeJSON(){ + Name = "Fantastic Dizzy (SMS)", + Notes = "Codemasters mapper & PAL only", + Crc32 = 0xB9664AE1, + RomSize = 262144, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge), + PreferredTVStandard = TVStandard.PAL + }, + new CartridgeJSON(){ + Name = "Home Alone (SMS)", + Notes = "PAL only", + Crc32 = 0xC9DBF936, + RomSize = 262144, + PreferredTVStandard = TVStandard.PAL + }, + new CartridgeJSON(){ + Name = "Micro Machines (SMS)", + Notes = "Codemasters mapper & PAL only", + Crc32 = 0xA577CE46, + RomSize = 262144, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge), + PreferredTVStandard = TVStandard.PAL + }, + new CartridgeJSON(){ + Name = "NewZealand Story (SMS)", + Notes = "PAL only", + Crc32 = 0xC660FF34, + RomSize = 262144, + PreferredTVStandard = TVStandard.PAL + }, + new CartridgeJSON(){ + Name = "Power Strike 2 (SMS)", + Notes = "PAL only", + Crc32 = 0xA109A6FE, + RomSize = 524288, + PreferredTVStandard = TVStandard.PAL + }, + new CartridgeJSON(){ + Name = "Predator 2 (SMS, Europe)", + Notes = "PAL only", + Crc32 = 0x0047B615, + RomSize = 262144, + PreferredTVStandard = TVStandard.PAL + }, + new CartridgeJSON(){ + Name = "Sonic the Hedgehog 2 (SMS)", + Notes = "PAL only", + Crc32 = 0x5B3B922C, + RomSize = 524288, + PreferredTVStandard = TVStandard.PAL + }, + new CartridgeJSON(){ + Name = "Sonic the Hedgehog 2 (SMS, Revision 1)", + Notes = "PAL only", + Crc32 = 0xD6F2BFCA, + RomSize = 524288, + PreferredTVStandard = TVStandard.PAL + }, + new CartridgeJSON(){ + Name = "Space Harrier (SMS, Europe)", + Notes = "PAL only", + Crc32 = 0xCA1D3752, + RomSize = 262144, + PreferredTVStandard = TVStandard.PAL + }, + new CartridgeJSON(){ + Name = "CJ Elephant Fugitive (GG)", + Notes = "Codemasters mapper", + Crc32 = 0x72981057, + RomSize = 262144, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge), + }, + new CartridgeJSON(){ + Name = "Cosmic Spacehead (GG)", + Notes = "Codemasters mapper", + Crc32 = 0x6CAA625B, + RomSize = 262144, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge), + }, + new CartridgeJSON(){ + Name = "Dropzone (GG)", + Notes = "Codemasters mapper", + Crc32 = 0x152F0DCC, + RomSize = 131072, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge), + }, + new CartridgeJSON(){ + Name = "Ernie Els Golf (GG)", + Notes = "Codemasters mapper & 8k volatile RAM", + Crc32 = 0x5E53C7F7, + RomSize = 262144, + RamSize = 8192, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge), + }, + new CartridgeJSON(){ + Name = "Micro Machines (GG)", + Notes = "Codemasters mapper", + Crc32 = 0xF7C524F6, + RomSize = 262144, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge), + }, + new CartridgeJSON(){ + Name = "Micro Machines 2: Turbo Tournament (GG)", + Notes = "Codemasters mapper", + Crc32 = 0xDBE8895C, + RomSize = 524288, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge), + }, + new CartridgeJSON(){ + Name = "Pete Sampras Tennis (GG)", + Notes = "Codemasters mapper", + Crc32 = 0xC1756BEE, + RomSize = 262144, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge), + }, + new CartridgeJSON(){ + Name = "Pop Breaker (GG, Japan)", + Notes = "Domestic/Japan only", + Crc32 = 0x71DEBA5A, + RomSize = 131072, + PreferredRegion = Region.Domestic + }, + new CartridgeJSON(){ + Name = "S.S. Lucifer: Man Overboard (GG)", + Notes = "Codemasters mapper", + Crc32 = 0xD9A7F170, + RomSize = 262144, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.CodemastersCartridge), + }, + new CartridgeJSON(){ + Name = "Sonic Chaos (SMS, Jun 30 1993 Prototype)", + Notes = "Disallow memory control", + Crc32 = 0xD3AD67FA, + RomSize = 524288, + AllowMemoryControl = false + }, + new CartridgeJSON(){ + Name = "94 Super World Cup Soccer (SMS)", + Notes = "Korean mapper", + Crc32 = 0x060D6A7C, + RomSize = 262144, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.KoreanMapperCartridge), + }, + new CartridgeJSON(){ + Name = "Jang Pung II (SMS)", + Notes = "Korean mapper", + Crc32 = 0x929222C4, + RomSize = 524288, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.KoreanMapperCartridge), + }, + new CartridgeJSON(){ + Name = "Jang Pung 3 (SMS)", + Notes = "Korean mapper", + Crc32 = 0x18FB98A3, + RomSize = 1048576, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.KoreanMapperCartridge), + }, + new CartridgeJSON(){ + Name = "Janggun-ui Adeul (SMS)", + Notes = "Korean sprite-flip mapper", + Crc32 = 0x192949D5, + RomSize = 524288, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.KoreanSpriteMapperCartridge), + }, + new CartridgeJSON(){ + Name = "Sangokushi 3 (SMS)", + Notes = "Korean mapper", + Crc32 = 0x97D03541, + RomSize = 1048576, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.KoreanMapperCartridge), + }, + new CartridgeJSON(){ + Name = "4 Pak All Action (SMS)", + Notes = "4 Pak mapper", + Crc32 = 0xA67F2A5C, + RomSize = 1048576, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.Multicart4PakAllActionCartridge), + }, + new CartridgeJSON(){ + Name = "Cyborg Z (SMS)", + Notes = "Korean MSX 8k mapper", + Crc32 = 0x77EFE84A, + RomSize = 131072, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.KoreanMSX8kMapperCartridge), + }, + new CartridgeJSON(){ + Name = "Street Master (SMS)", + Notes = "Korean MSX 8k mapper", + Crc32 = 0x83F0EEDE, + RomSize = 131072, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.KoreanMSX8kMapperCartridge), + }, + new CartridgeJSON(){ + Name = "Wonsiin (SMS)", + Notes = "Korean MSX 8k mapper", + Crc32 = 0xA05258F5, + RomSize = 131072, + Mapper = typeof(Essgee.Emulation.Cartridges.Sega.KoreanMSX8kMapperCartridge), + }, + new CartridgeJSON(){ + Name = "SMS Bad Apple 1.00 (SMS)", + Notes = "PAL only", + Crc32 = 0x38434560, + RomSize = 4194304, + PreferredTVStandard = TVStandard.PAL + }, + new CartridgeJSON(){ + Name = "Be No Sqr 1.01 (SMS)", + Notes = "PAL only", + Crc32 = 0xEE701BE6, + RomSize = 524288, + PreferredTVStandard = TVStandard.PAL + } + }; //改为接口直接读取 //XmlRootAttribute root; @@ -126,34 +416,34 @@ namespace Essgee.Metadata public class CartridgeJSON { - [JsonProperty(Required = Required.Always)] + //[JsonProperty(Required = Required.Always)] public string Name { get; set; } = string.Empty; - [JsonProperty(Required = Required.Always)] + //[JsonProperty(Required = Required.Always)] public string Notes { get; set; } = string.Empty; - [JsonProperty(Required = Required.Always), JsonConverter(typeof(HexadecimalJsonConverter))] + //[JsonProperty(Required = Required.Always), JsonConverter(typeof(HexadecimalJsonConverter))] public uint Crc32 { get; set; } = 0xFFFFFFFF; - [JsonProperty(Required = Required.Always)] + //[JsonProperty(Required = Required.Always)] public int RomSize { get; set; } = 0; - [JsonProperty(Required = Required.Default), DefaultValue(0)] + //[JsonProperty(Required = Required.Default), DefaultValue(0)] public int RamSize { get; set; } = 0; - [JsonProperty(Required = Required.Default), JsonConverter(typeof(TypeNameJsonConverter), "Essgee.Emulation.Cartridges"), DefaultValue(null)] + //[JsonProperty(Required = Required.Default), JsonConverter(typeof(TypeNameJsonConverter), "Essgee.Emulation.Cartridges"), DefaultValue(null)] public Type Mapper { get; set; } = null; - [JsonProperty(Required = Required.Default), DefaultValue(false)] + //[JsonProperty(Required = Required.Default), DefaultValue(false)] public bool HasNonVolatileRam { get; set; } = false; - [JsonProperty(Required = Required.Default), JsonConverter(typeof(StringEnumConverter)), DefaultValue(TVStandard.Auto)] + //[JsonProperty(Required = Required.Default), JsonConverter(typeof(StringEnumConverter)), DefaultValue(TVStandard.Auto)] public TVStandard PreferredTVStandard { get; set; } = TVStandard.Auto; - [JsonProperty(Required = Required.Default), JsonConverter(typeof(StringEnumConverter)), DefaultValue(Region.Auto)] + //[JsonProperty(Required = Required.Default), JsonConverter(typeof(StringEnumConverter)), DefaultValue(Region.Auto)] public Region PreferredRegion { get; set; } = Region.Auto; - [JsonProperty(Required = Required.Default), DefaultValue(true)] + //[JsonProperty(Required = Required.Default), DefaultValue(true)] public bool AllowMemoryControl { get; set; } = true; } diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/HexadecimalJsonConverter.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/HexadecimalJsonConverter.cs index deff333f..469f7086 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/HexadecimalJsonConverter.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/HexadecimalJsonConverter.cs @@ -1,47 +1,47 @@ -using Newtonsoft.Json; -using System; +//using Newtonsoft.Json; +//using System; -namespace Essgee.Utilities -{ - public class HexadecimalJsonConverter : JsonConverter - { - public override bool CanConvert(Type objectType) - { - // TODO: maybe actually check things? - return true; - } +//namespace Essgee.Utilities +//{ +// public class HexadecimalJsonConverter : JsonConverter +// { +// public override bool CanConvert(Type objectType) +// { +// // TODO: maybe actually check things? +// return true; +// } - public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) - { - switch (Type.GetTypeCode(value.GetType())) - { - case TypeCode.Byte: - case TypeCode.SByte: - writer.WriteValue($"0x{value:X2}"); - break; - case TypeCode.UInt16: - case TypeCode.Int16: - writer.WriteValue($"0x{value:X4}"); - break; - case TypeCode.UInt32: - case TypeCode.Int32: - writer.WriteValue($"0x{value:X8}"); - break; - case TypeCode.UInt64: - case TypeCode.Int64: - writer.WriteValue($"0x{value:X16}"); - break; - default: - throw new JsonSerializationException(); - } - } +// public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) +// { +// switch (Type.GetTypeCode(value.GetType())) +// { +// case TypeCode.Byte: +// case TypeCode.SByte: +// writer.WriteValue($"0x{value:X2}"); +// break; +// case TypeCode.UInt16: +// case TypeCode.Int16: +// writer.WriteValue($"0x{value:X4}"); +// break; +// case TypeCode.UInt32: +// case TypeCode.Int32: +// writer.WriteValue($"0x{value:X8}"); +// break; +// case TypeCode.UInt64: +// case TypeCode.Int64: +// writer.WriteValue($"0x{value:X16}"); +// break; +// default: +// throw new JsonSerializationException(); +// } +// } - public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) - { - if ((reader.Value is string value) && value.StartsWith("0x")) - return Convert.ChangeType(Convert.ToUInt64(value, 16), objectType); - else - throw new JsonSerializationException(); - } - } -} +// public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) +// { +// if ((reader.Value is string value) && value.StartsWith("0x")) +// return Convert.ChangeType(Convert.ToUInt64(value, 16), objectType); +// else +// throw new JsonSerializationException(); +// } +// } +//} diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/InterfaceDictionaryConverter.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/InterfaceDictionaryConverter.cs index 39dba133..92d41ea4 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/InterfaceDictionaryConverter.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/InterfaceDictionaryConverter.cs @@ -1,44 +1,42 @@ -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; +//using System; +//using System.Collections.Generic; +//using System.Linq; +//using System.Reflection; -namespace Essgee.Utilities -{ - public class InterfaceDictionaryConverter : JsonConverter - { - public override bool CanConvert(Type objectType) - { - return (objectType == typeof(TInterface)); - } +//namespace Essgee.Utilities +//{ +// public class InterfaceDictionaryConverter : JsonConverter +// { +// public override bool CanConvert(Type objectType) +// { +// return (objectType == typeof(TInterface)); +// } - public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) - { - if (!objectType.IsGenericType || objectType.GetGenericTypeDefinition() != typeof(Dictionary<,>)) throw new InvalidOperationException("Can only deserialize dictionaries"); +// public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) +// { +// if (!objectType.IsGenericType || objectType.GetGenericTypeDefinition() != typeof(Dictionary<,>)) throw new InvalidOperationException("Can only deserialize dictionaries"); - var dictionary = (System.Collections.IDictionary)Activator.CreateInstance(objectType); - //不再读取配置 - var jObject = JObject.Load(reader); - foreach (var child in jObject.Children()) - { - Type type = Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(y => typeof(TInterface).IsAssignableFrom(y) && !y.IsInterface && !y.IsAbstract && y.Name == child.Path); - if (type != null) - dictionary.Add(child.Path, JsonConvert.DeserializeObject(child.First.ToString(), type)); - } +// var dictionary = (System.Collections.IDictionary)Activator.CreateInstance(objectType); +// //不再读取配置 +// var jObject = JObject.Load(reader); +// foreach (var child in jObject.Children()) +// { +// Type type = Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(y => typeof(TInterface).IsAssignableFrom(y) && !y.IsInterface && !y.IsAbstract && y.Name == child.Path); +// if (type != null) +// dictionary.Add(child.Path, JsonConvert.DeserializeObject(child.First.ToString(), type)); +// } - return dictionary; - } +// return dictionary; +// } - public override bool CanWrite - { - get { return false; } - } +// public override bool CanWrite +// { +// get { return false; } +// } - public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) - { - throw new NotImplementedException(); - } - } -} +// public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) +// { +// throw new NotImplementedException(); +// } +// } +//} diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/TypeNameJsonConverter.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/TypeNameJsonConverter.cs index c1c100ea..a93145bb 100644 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/TypeNameJsonConverter.cs +++ b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/TypeNameJsonConverter.cs @@ -1,40 +1,40 @@ -using Newtonsoft.Json; -using System; +//using Newtonsoft.Json; +//using System; -namespace Essgee.Utilities -{ - public class TypeNameJsonConverter : JsonConverter - { - readonly string searchNamespace; +//namespace Essgee.Utilities +//{ +// public class TypeNameJsonConverter : JsonConverter +// { +// readonly string searchNamespace; - public TypeNameJsonConverter(string searchNamespace) - { - this.searchNamespace = searchNamespace; - } +// public TypeNameJsonConverter(string searchNamespace) +// { +// this.searchNamespace = searchNamespace; +// } - public override bool CanConvert(Type objectType) - { - // TODO: maybe actually check things? - return true; - } +// public override bool CanConvert(Type objectType) +// { +// // TODO: maybe actually check things? +// return true; +// } - public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) - { - if (value is Type) - { - var type = (value as Type); - if (type.Namespace != searchNamespace) throw new JsonSerializationException(); - writer.WriteValue(type.Name); - } - else - throw new JsonSerializationException(); - } +// public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) +// { +// if (value is Type) +// { +// var type = (value as Type); +// if (type.Namespace != searchNamespace) throw new JsonSerializationException(); +// writer.WriteValue(type.Name); +// } +// else +// throw new JsonSerializationException(); +// } - public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) - { - var type = Type.GetType($"{searchNamespace}.{reader.Value}"); - if (type != null) return type; - else throw new JsonSerializationException(); - } - } -} +// public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) +// { +// var type = Type.GetType($"{searchNamespace}.{reader.Value}"); +// if (type != null) return type; +// else throw new JsonSerializationException(); +// } +// } +//} diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput.meta b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput.meta deleted file mode 100644 index 0e742947..00000000 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 37b3e1d7093e0f545807ab54c1209c8b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/Controller.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/Controller.cs deleted file mode 100644 index be0ade96..00000000 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/Controller.cs +++ /dev/null @@ -1,178 +0,0 @@ -using System; - -namespace Essgee.Utilities.XInput -{ - public class Controller - { - XInputState inputStatesCurrent, inputStatesPrev; - bool timedVibrationEnabled; - DateTime vibrationStopTime; - - public bool IsConnected { get; private set; } - public int UserIndex { get; private set; } - - public Controller(int index) - { - inputStatesCurrent = inputStatesPrev = new XInputState(); - timedVibrationEnabled = false; - vibrationStopTime = DateTime.Now; - - IsConnected = false; - UserIndex = index; - } - - public void Update() - { - XInputState newInputState = new XInputState(); - Errors result = (Errors)NativeMethods.GetState(UserIndex, ref newInputState); - if (result == Errors.Success) - { - IsConnected = true; - inputStatesPrev = inputStatesCurrent; - inputStatesCurrent = newInputState; - - if ((inputStatesCurrent.Gamepad.sThumbLX < XInputGamepad.LeftThumbDeadzone && inputStatesCurrent.Gamepad.sThumbLX > -XInputGamepad.LeftThumbDeadzone) && - (inputStatesCurrent.Gamepad.sThumbLY < XInputGamepad.LeftThumbDeadzone && inputStatesCurrent.Gamepad.sThumbLY > -XInputGamepad.LeftThumbDeadzone)) - { - inputStatesCurrent.Gamepad.sThumbLX = inputStatesCurrent.Gamepad.sThumbLY = 0; - } - - if ((inputStatesCurrent.Gamepad.sThumbRX < XInputGamepad.RightThumbDeadzone && inputStatesCurrent.Gamepad.sThumbRX > -XInputGamepad.RightThumbDeadzone) && - (inputStatesCurrent.Gamepad.sThumbRY < XInputGamepad.RightThumbDeadzone && inputStatesCurrent.Gamepad.sThumbRY > -XInputGamepad.RightThumbDeadzone)) - { - inputStatesCurrent.Gamepad.sThumbRX = inputStatesCurrent.Gamepad.sThumbRY = 0; - } - - if (inputStatesCurrent.Gamepad.bLeftTrigger < XInputGamepad.TriggerThreshold) inputStatesCurrent.Gamepad.bLeftTrigger = 0; - if (inputStatesCurrent.Gamepad.bRightTrigger < XInputGamepad.TriggerThreshold) inputStatesCurrent.Gamepad.bRightTrigger = 0; - - if (timedVibrationEnabled && DateTime.Now >= vibrationStopTime) - { - timedVibrationEnabled = false; - Vibrate(0.0f, 0.0f); - } - } - else if (result == Errors.DeviceNotConnected) - { - IsConnected = false; - } - else - throw new Exception(string.Format("Error code {0}", (int)result)); - } - - //public ControllerState GetControllerState() - //{ - // return new ControllerState - // { - // Buttons = inputStatesCurrent.Gamepad.Buttons, - // LeftThumbstick = new ThumbstickPosition(inputStatesCurrent.Gamepad.sThumbLX / 32768.0f, inputStatesCurrent.Gamepad.sThumbLY / 32768.0f), - // RightThumbstick = new ThumbstickPosition(inputStatesCurrent.Gamepad.sThumbRX / 32768.0f, inputStatesCurrent.Gamepad.sThumbRY / 32768.0f), - // LeftTrigger = (inputStatesCurrent.Gamepad.bLeftTrigger / 255.0f), - // RightTrigger = (inputStatesCurrent.Gamepad.bRightTrigger / 255.0f) - // }; - //} - - public bool IsDPadUpPressed() - { - return inputStatesCurrent.Gamepad.Buttons.HasFlag(Buttons.DPadUp); - } - - public bool IsDPadDownPressed() - { - return inputStatesCurrent.Gamepad.Buttons.HasFlag(Buttons.DPadDown); - } - - public bool IsDPadLeftPressed() - { - return inputStatesCurrent.Gamepad.Buttons.HasFlag(Buttons.DPadLeft); - } - - public bool IsDPadRightPressed() - { - return inputStatesCurrent.Gamepad.Buttons.HasFlag(Buttons.DPadRight); - } - - public bool IsStartPressed() - { - return inputStatesCurrent.Gamepad.Buttons.HasFlag(Buttons.Start); - } - - public bool IsBackPressed() - { - return inputStatesCurrent.Gamepad.Buttons.HasFlag(Buttons.Back); - } - - public bool IsLeftThumbPressed() - { - return inputStatesCurrent.Gamepad.Buttons.HasFlag(Buttons.LeftThumb); - } - - public bool IsRightThumbPressed() - { - return inputStatesCurrent.Gamepad.Buttons.HasFlag(Buttons.RightThumb); - } - - public bool IsLeftShoulderPressed() - { - return inputStatesCurrent.Gamepad.Buttons.HasFlag(Buttons.LeftShoulder); - } - - public bool IsRightShoulderPressed() - { - return inputStatesCurrent.Gamepad.Buttons.HasFlag(Buttons.RightShoulder); - } - - public bool IsAPressed() - { - return inputStatesCurrent.Gamepad.Buttons.HasFlag(Buttons.A); - } - - public bool IsBPressed() - { - return inputStatesCurrent.Gamepad.Buttons.HasFlag(Buttons.B); - } - - public bool IsXPressed() - { - return inputStatesCurrent.Gamepad.Buttons.HasFlag(Buttons.X); - } - - public bool IsYPressed() - { - return inputStatesCurrent.Gamepad.Buttons.HasFlag(Buttons.Y); - } - - public void Vibrate(float leftMotor, float rightMotor) - { - XInputVibration vibrationState = new XInputVibration(); - vibrationState.wLeftMotorSpeed = (ushort)(leftMotor * 65535.0f); - vibrationState.wRightMotorSpeed = (ushort)(rightMotor * 65535.0f); - NativeMethods.SetState(UserIndex, ref vibrationState); - } - - public void Vibrate(float leftMotor, float rightMotor, TimeSpan duration) - { - Vibrate(leftMotor, rightMotor); - - vibrationStopTime = DateTime.Now.Add(duration); - timedVibrationEnabled = true; - } - } - - public class ThumbstickPosition - { - public float X { get; private set; } - public float Y { get; private set; } - - public ThumbstickPosition(float x, float y) - { - X = x; - Y = y; - } - - public override string ToString() - { - return string.Format(System.Globalization.CultureInfo.InvariantCulture, "({0}, {1})", X, Y); - } - } -} diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/Controller.cs.meta b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/Controller.cs.meta deleted file mode 100644 index 146f2f10..00000000 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/Controller.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 208c78465e149914e92390762f768a04 \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/ControllerManager.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/ControllerManager.cs deleted file mode 100644 index ea562e9f..00000000 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/ControllerManager.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; - -namespace Essgee.Utilities.XInput -{ - public static class ControllerManager - { - const int maxControllers = 4; - - static Controller[] controllers; - - static ControllerManager() - { - controllers = new Controller[maxControllers]; - for (int i = 0; i < controllers.Length; i++) - controllers[i] = new Controller(i); - } - - public static Controller GetController(int index) - { - if (index < 0 || index >= maxControllers) throw new Exception("Controller index out of range"); - return controllers[index]; - } - - public static void Update() - { - for (int i = 0; i < controllers.Length; i++) - controllers[i].Update(); - } - } -} diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/ControllerManager.cs.meta b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/ControllerManager.cs.meta deleted file mode 100644 index e0cc01eb..00000000 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/ControllerManager.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: d3b109e035af2d0488fee85624c9a90b \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/ControllerState.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/ControllerState.cs deleted file mode 100644 index 57c2cba9..00000000 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/ControllerState.cs +++ /dev/null @@ -1,116 +0,0 @@ -//namespace Essgee.Utilities.XInput -//{ -// public class ControllerState -// { -// public Buttons Buttons { get; set; } -// public ThumbstickPosition LeftThumbstick { get; set; } -// public ThumbstickPosition RightThumbstick { get; set; } -// public float LeftTrigger { get; set; } -// public float RightTrigger { get; set; } - -// public bool IsConnected { get; set; } -// public int UserIndex { get; set; } - -// public ControllerState() -// { -// Buttons = Buttons.None; -// LeftThumbstick = new ThumbstickPosition(0.0f, 0.0f); -// RightThumbstick = new ThumbstickPosition(0.0f, 0.0f); -// LeftTrigger = 0.0f; -// RightTrigger = 0.0f; - -// IsConnected = false; -// UserIndex = -1; -// } - -// public bool IsAnyUpDirectionPressed() -// { -// return IsDPadUpPressed() || LeftThumbstick.Y > 0.5f; -// } - -// public bool IsAnyDownDirectionPressed() -// { -// return IsDPadDownPressed() || LeftThumbstick.Y < -0.5f; -// } - -// public bool IsAnyLeftDirectionPressed() -// { -// return IsDPadLeftPressed() || LeftThumbstick.X < -0.5f; -// } - -// public bool IsAnyRightDirectionPressed() -// { -// return IsDPadRightPressed() || LeftThumbstick.X > 0.5f; -// } - -// public bool IsDPadUpPressed() -// { -// return Buttons.HasFlag(Buttons.DPadUp); -// } - -// public bool IsDPadDownPressed() -// { -// return Buttons.HasFlag(Buttons.DPadDown); -// } - -// public bool IsDPadLeftPressed() -// { -// return Buttons.HasFlag(Buttons.DPadLeft); -// } - -// public bool IsDPadRightPressed() -// { -// return Buttons.HasFlag(Buttons.DPadRight); -// } - -// public bool IsStartPressed() -// { -// return Buttons.HasFlag(Buttons.Start); -// } - -// public bool IsBackPressed() -// { -// return Buttons.HasFlag(Buttons.Back); -// } - -// public bool IsLeftThumbPressed() -// { -// return Buttons.HasFlag(Buttons.LeftThumb); -// } - -// public bool IsRightThumbPressed() -// { -// return Buttons.HasFlag(Buttons.RightThumb); -// } - -// public bool IsLeftShoulderPressed() -// { -// return Buttons.HasFlag(Buttons.LeftShoulder); -// } - -// public bool IsRightShoulderPressed() -// { -// return Buttons.HasFlag(Buttons.RightShoulder); -// } - -// public bool IsAPressed() -// { -// return Buttons.HasFlag(Buttons.A); -// } - -// public bool IsBPressed() -// { -// return Buttons.HasFlag(Buttons.B); -// } - -// public bool IsXPressed() -// { -// return Buttons.HasFlag(Buttons.X); -// } - -// public bool IsYPressed() -// { -// return Buttons.HasFlag(Buttons.Y); -// } -// } -//} diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/ControllerState.cs.meta b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/ControllerState.cs.meta deleted file mode 100644 index da9a3ae8..00000000 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/ControllerState.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 62cf2ece5ee5c44458ac5646bb2f8af8 \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/NativeMethods.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/NativeMethods.cs deleted file mode 100644 index c7dc8076..00000000 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/NativeMethods.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Runtime.InteropServices; - -namespace Essgee.Utilities.XInput -{ - static class NativeMethods - { - const string dllName = "xinput9_1_0.dll"; - - public const int FlagGamepad = 0x00000001; - - [DllImport(dllName, EntryPoint = "XInputGetState")] - public static extern int GetState(int dwUserIndex, ref XInputState pState); - [DllImport(dllName, EntryPoint = "XInputSetState")] - public static extern int SetState(int dwUserIndex, ref XInputVibration pVibration); - [DllImport(dllName, EntryPoint = "XInputGetCapabilities")] - public static extern int GetCapabilities(int dwUserIndex, int dwFlags, ref XInputCapabilities pCapabilities); - } - - public enum Errors - { - Success = 0x00000000, - BadArguments = 0x000000A0, - DeviceNotConnected = 0x0000048F - } -} diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/NativeMethods.cs.meta b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/NativeMethods.cs.meta deleted file mode 100644 index 3f0a5cf3..00000000 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/NativeMethods.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 2f4639905082c50448ca8a1477b55057 \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputCapabilities.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputCapabilities.cs deleted file mode 100644 index 08da7a84..00000000 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputCapabilities.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace Essgee.Utilities.XInput -{ - /* https://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.reference.xinput_capabilities%28v=vs.85%29.aspx */ - [StructLayout(LayoutKind.Explicit)] - public struct XInputCapabilities - { - [FieldOffset(0)] - byte type; - [FieldOffset(1)] - byte subType; - [FieldOffset(2)] - ushort flags; - [FieldOffset(4)] - public XInputGamepad Gamepad; - [FieldOffset(16)] - public XInputVibration Vibration; - - public DeviceType Type { get { return (DeviceType)type; } } - public DeviceSubType SubType { get { return (DeviceSubType)subType; } } - public DeviceFlags Flags { get { return (DeviceFlags)flags; } } - } - - public enum DeviceType - { - Gamepad = 0x01 - } - - public enum DeviceSubType - { - Gamepad = 0x01, - Wheel = 0x02, - ArcadeStick = 0x03, - FlightStick = 0x04, - DancePad = 0x05, - Guitar = 0x06, - DrumKit = 0x08 - } - - [Flags] - public enum DeviceFlags - { - VoiceSupported = 0x0004 - } -} diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputCapabilities.cs.meta b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputCapabilities.cs.meta deleted file mode 100644 index c916d614..00000000 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputCapabilities.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 400677b412126194caf14f5d627b34a2 \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputGamepad.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputGamepad.cs deleted file mode 100644 index 4ebf55b5..00000000 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputGamepad.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace Essgee.Utilities.XInput -{ - /* https://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.reference.xinput_gamepad%28v=vs.85%29.aspx */ - [StructLayout(LayoutKind.Explicit)] - public struct XInputGamepad - { - [FieldOffset(0)] - ushort wButtons; - [FieldOffset(2)] - public byte bLeftTrigger; - [FieldOffset(3)] - public byte bRightTrigger; - [FieldOffset(4)] - public short sThumbLX; - [FieldOffset(6)] - public short sThumbLY; - [FieldOffset(8)] - public short sThumbRX; - [FieldOffset(10)] - public short sThumbRY; - - public const int LeftThumbDeadzone = 7849; - public const int RightThumbDeadzone = 8689; - public const int TriggerThreshold = 30; - - public Buttons Buttons { get { return (Buttons)wButtons; } } - } - - [Flags] - public enum Buttons - { - None = 0x0000, - DPadUp = 0x0001, - DPadDown = 0x0002, - DPadLeft = 0x0004, - DPadRight = 0x0008, - Start = 0x0010, - Back = 0x0020, - LeftThumb = 0x0040, - RightThumb = 0x0080, - LeftShoulder = 0x0100, - RightShoulder = 0x0200, - A = 0x1000, - B = 0x2000, - X = 0x4000, - Y = 0x8000 - } -} diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputGamepad.cs.meta b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputGamepad.cs.meta deleted file mode 100644 index 86f6d2b5..00000000 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputGamepad.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: dee5c4630dd189049abf4d41bd4348d8 \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputState.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputState.cs deleted file mode 100644 index fb5dd6b2..00000000 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputState.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Runtime.InteropServices; - -namespace Essgee.Utilities.XInput -{ - /* https://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.reference.xinput_state%28v=vs.85%29.aspx */ - [StructLayout(LayoutKind.Explicit)] - public struct XInputState - { - [FieldOffset(0)] - public uint dwPacketNumber; - [FieldOffset(4)] - public XInputGamepad Gamepad; - } -} diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputState.cs.meta b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputState.cs.meta deleted file mode 100644 index 64bb742a..00000000 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputState.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: b18170cd37fc33d4ba897ffbe7198deb \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputVibration.cs b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputVibration.cs deleted file mode 100644 index f48be3df..00000000 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputVibration.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Runtime.InteropServices; - -namespace Essgee.Utilities.XInput -{ - /* https://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.reference.xinput_vibration%28v=vs.85%29.aspx */ - [StructLayout(LayoutKind.Explicit)] - public struct XInputVibration - { - [FieldOffset(0)] - public ushort wLeftMotorSpeed; - [FieldOffset(2)] - public ushort wRightMotorSpeed; - } -} diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputVibration.cs.meta b/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputVibration.cs.meta deleted file mode 100644 index c25fa984..00000000 --- a/AxibugEmuOnline.Client/Assets/Plugins/Essgee.Unity/Utilities/XInput/XInputVibration.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 66e6171736477a944b9299a66469f407 \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Newtonsoft.Json.dll b/AxibugEmuOnline.Client/Assets/Plugins/Newtonsoft.Json.dll deleted file mode 100644 index 341d08fc..00000000 Binary files a/AxibugEmuOnline.Client/Assets/Plugins/Newtonsoft.Json.dll and /dev/null differ diff --git a/AxibugEmuOnline.Client/Assets/Plugins/Newtonsoft.Json.dll.meta b/AxibugEmuOnline.Client/Assets/Plugins/Newtonsoft.Json.dll.meta deleted file mode 100644 index 7124f76e..00000000 --- a/AxibugEmuOnline.Client/Assets/Plugins/Newtonsoft.Json.dll.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 1a58e3ab1bbec0a4998d14ae26c5651d \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/ScreenKeyPad.prefab b/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/ScreenKeyPad.prefab index e8beeac9..9ff64ea9 100644 --- a/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/ScreenKeyPad.prefab +++ b/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/ScreenKeyPad.prefab @@ -896,7 +896,7 @@ GameObject: - component: {fileID: 3557960759775635435} - component: {fileID: 3223371122505490051} m_Layer: 5 - m_Name: btnCoin1 + m_Name: btnSelect m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -920,7 +920,7 @@ RectTransform: m_AnchorMin: {x: 0.5, y: 0} m_AnchorMax: {x: 0.5, y: 0} m_AnchoredPosition: {x: 0, y: 78.75} - m_SizeDelta: {x: 171.9867, y: 85.772705} + m_SizeDelta: {x: 130, y: 85.772705} m_Pivot: {x: 0.5, y: 0} --- !u!222 &3557960759775635432 CanvasRenderer: @@ -1004,7 +1004,7 @@ MonoBehaviour: m_OnClick: m_PersistentCalls: m_Calls: [] - axiBtnTypeList: 0a + axiBtnTypeList: 0b --- !u!1 &3557960759789586675 GameObject: m_ObjectHideFlags: 0 @@ -1018,7 +1018,7 @@ GameObject: - component: {fileID: 3557960759789586678} - component: {fileID: 4570849136174787956} m_Layer: 5 - m_Name: btnP1 + m_Name: btnSTART m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1041,8 +1041,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0} m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: -200, y: 78.75} - m_SizeDelta: {x: 178.85925, y: 85.772705} + m_AnchoredPosition: {x: -150, y: 78.75} + m_SizeDelta: {x: 130, y: 85.772705} m_Pivot: {x: 0.5, y: 0} --- !u!222 &3557960759789586679 CanvasRenderer: @@ -1126,7 +1126,7 @@ MonoBehaviour: m_OnClick: m_PersistentCalls: m_Calls: [] - axiBtnTypeList: 0b + axiBtnTypeList: 0a --- !u!1 &3557960759893428088 GameObject: m_ObjectHideFlags: 0 @@ -1352,10 +1352,10 @@ MonoBehaviour: m_Calls: [] m_FontData: m_Font: {fileID: 12800000, guid: 33a3bdf8f6bd1ec4eba7c4bc58183212, type: 3} - m_FontSize: 59 + m_FontSize: 25 m_FontStyle: 0 m_BestFit: 0 - m_MinSize: 1 + m_MinSize: 0 m_MaxSize: 107 m_Alignment: 4 m_AlignByGeometry: 0 @@ -1363,7 +1363,7 @@ MonoBehaviour: m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 - m_Text: P1 + m_Text: START --- !u!1 &3557960760383323518 GameObject: m_ObjectHideFlags: 0 @@ -1431,10 +1431,10 @@ MonoBehaviour: m_Calls: [] m_FontData: m_Font: {fileID: 12800000, guid: 33a3bdf8f6bd1ec4eba7c4bc58183212, type: 3} - m_FontSize: 59 + m_FontSize: 25 m_FontStyle: 0 m_BestFit: 0 - m_MinSize: 1 + m_MinSize: 0 m_MaxSize: 107 m_Alignment: 4 m_AlignByGeometry: 0 @@ -1442,9 +1442,7 @@ MonoBehaviour: m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 - m_Text: 'Coin - -' + m_Text: SELECT --- !u!1 &3557960760441770047 GameObject: m_ObjectHideFlags: 0 @@ -2426,8 +2424,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0} m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 200, y: 78.75} - m_SizeDelta: {x: 178.85925, y: 85.772705} + m_AnchoredPosition: {x: 150, y: 78.75} + m_SizeDelta: {x: 130, y: 85.772705} m_Pivot: {x: 0.5, y: 0} --- !u!222 &5178997240577738822 CanvasRenderer: @@ -2733,10 +2731,10 @@ MonoBehaviour: m_Calls: [] m_FontData: m_Font: {fileID: 12800000, guid: 33a3bdf8f6bd1ec4eba7c4bc58183212, type: 3} - m_FontSize: 59 + m_FontSize: 25 m_FontStyle: 0 m_BestFit: 0 - m_MinSize: 1 + m_MinSize: 0 m_MaxSize: 107 m_Alignment: 4 m_AlignByGeometry: 0 diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Emulator/EssgeeEmulator/UEssgee.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Emulator/EssgeeEmulator/UEssgee.cs index 6a733dc0..57ad9e97 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Emulator/EssgeeEmulator/UEssgee.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Emulator/EssgeeEmulator/UEssgee.cs @@ -9,7 +9,6 @@ using Essgee.Exceptions; using Essgee.Extensions; using Essgee.Metadata; using Essgee.Utilities; -using Essgee.Utilities.XInput; using System; using System.Collections.Generic; using System.IO; @@ -395,7 +394,8 @@ public class UEssgee : MonoBehaviour, IEmuCore } public static void SaveConfiguration() { - EmuStandInfo.Configuration.SerializeToFile(EmuStandInfo.programConfigPath); + //ñ + //EmuStandInfo.Configuration.SerializeToFile(EmuStandInfo.programConfigPath); } #endregion @@ -690,7 +690,7 @@ public class UEssgee : MonoBehaviour, IEmuCore graphicsHandler.SubmitVideo(e.Width, e.Height, e.FrameDataPtr, 0); // TODO: create emulation "EndOfFrame" event for this? - ControllerManager.Update(); + //ControllerManager.Update(); //}); } @@ -786,8 +786,8 @@ public class UEssgee : MonoBehaviour, IEmuCore private void EmulatorHandler_EnableRumble(object sender, EventArgs e) { - if (EmuStandInfo.Configuration.EnableXInput && EmuStandInfo.Configuration.EnableRumble) - ControllerManager.GetController(0).Vibrate(0.0f, 0.5f, TimeSpan.FromSeconds(0.1f)); + //if (EmuStandInfo.Configuration.EnableXInput && EmuStandInfo.Configuration.EnableRumble) + // ControllerManager.GetController(0).Vibrate(0.0f, 0.5f, TimeSpan.FromSeconds(0.1f)); } private void EmulatorHandler_PauseChanged(object sender, EventArgs e) diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Initer.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Initer.cs index f872fd0c..fc30cce7 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Initer.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Initer.cs @@ -35,7 +35,7 @@ namespace AxibugEmuOnline.Client GameObject.DontDestroyOnLoad(debugger); bool UseJoyStack = false; - if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.WindowsEditor) + if (Application.platform == RuntimePlatform.Android && Application.platform != RuntimePlatform.WindowsEditor) { UseJoyStack = true; } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/MonoCom/TickLoop.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/MonoCom/TickLoop.cs index 2fce6336..74fcd380 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/MonoCom/TickLoop.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/MonoCom/TickLoop.cs @@ -30,6 +30,8 @@ namespace AxibugEmuOnline.Client LoopAction_3s += Ping; + SetFrameRate(60); + #if UNITY_EDITOR UnityEditor.EditorApplication.playModeStateChanged += (state) => {