From 8aa3fc2b5568c654bd40afda19e26b563a78b718 Mon Sep 17 00:00:00 2001 From: Alienjack Date: Wed, 20 Aug 2025 00:20:03 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E7=A7=BB=E9=99=A4nes=20=E6=A0=B8=E5=BF=83?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E6=97=B6=E4=B8=80=E4=BA=9B=E4=B8=8D?= =?UTF-8?q?=E5=BF=85=E8=A6=81=E7=9A=84=E6=8A=A5=E9=94=99=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AxibugEmuOnline.Client/Assets/VirtualNes.Core/NES.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/NES.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/NES.cs index 47eca7bb..db1dddb2 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/NES.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/NES.cs @@ -347,14 +347,13 @@ namespace VirtualNes.Core catch (Exception ex) { fp?.Close(); - Debuger.LogError($"Loading TurboFile Error.\n{ex}"); + //Debuger.LogError($"Loading TurboFile Error.\n{ex}"); } } private void LoadDISK() { - //todo : 磁碟机读取支持 - Debuger.LogError($"磁碟机尚未支持"); + //todo : 磁碟机读取支持 by alienjack } private void LoadSRAM() From 627faef38731c542392978790db84837088bd1ec Mon Sep 17 00:00:00 2001 From: Alienjack Date: Wed, 20 Aug 2025 01:05:01 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E5=AD=98=E6=A1=A3=E5=90=8C=E6=AD=A5=E7=8A=B6=E6=80=81=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=9A=84UI=E8=B5=84=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Assets/Resources/Icons/checking.png | Bin 0 -> 6719 bytes .../Assets/Resources/Icons/checking.png.meta | 117 ++++++++++++++++++ .../Assets/Resources/Icons/download.png | Bin 0 -> 2575 bytes .../Assets/Resources/Icons/download.png.meta | 117 ++++++++++++++++++ .../Assets/Resources/Icons/downloaderror.png | Bin 0 -> 4517 bytes .../Resources/Icons/downloaderror.png.meta | 117 ++++++++++++++++++ .../Assets/Resources/Icons/syncerror.png | Bin 0 -> 4911 bytes .../Assets/Resources/Icons/syncerror.png.meta | 117 ++++++++++++++++++ .../Assets/Resources/Icons/upload.png | Bin 0 -> 5093 bytes .../Assets/Resources/Icons/upload.png.meta | 117 ++++++++++++++++++ .../SaveFileSyncStates/SyncFailedState.cs | 18 +++ .../SyncFailedState.cs.meta | 2 + 12 files changed, 605 insertions(+) create mode 100644 AxibugEmuOnline.Client/Assets/Resources/Icons/checking.png create mode 100644 AxibugEmuOnline.Client/Assets/Resources/Icons/checking.png.meta create mode 100644 AxibugEmuOnline.Client/Assets/Resources/Icons/download.png create mode 100644 AxibugEmuOnline.Client/Assets/Resources/Icons/download.png.meta create mode 100644 AxibugEmuOnline.Client/Assets/Resources/Icons/downloaderror.png create mode 100644 AxibugEmuOnline.Client/Assets/Resources/Icons/downloaderror.png.meta create mode 100644 AxibugEmuOnline.Client/Assets/Resources/Icons/syncerror.png create mode 100644 AxibugEmuOnline.Client/Assets/Resources/Icons/syncerror.png.meta create mode 100644 AxibugEmuOnline.Client/Assets/Resources/Icons/upload.png create mode 100644 AxibugEmuOnline.Client/Assets/Resources/Icons/upload.png.meta create mode 100644 AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/SyncFailedState.cs create mode 100644 AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/SyncFailedState.cs.meta diff --git a/AxibugEmuOnline.Client/Assets/Resources/Icons/checking.png b/AxibugEmuOnline.Client/Assets/Resources/Icons/checking.png new file mode 100644 index 0000000000000000000000000000000000000000..a7cf18ea9d4c8c7d4c97089fed18c73c7b0965e8 GIT binary patch literal 6719 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 CtUm4l literal 0 HcmV?d00001 diff --git a/AxibugEmuOnline.Client/Assets/Resources/Icons/checking.png.meta b/AxibugEmuOnline.Client/Assets/Resources/Icons/checking.png.meta new file mode 100644 index 00000000..b40e8824 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Resources/Icons/checking.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 3efbb404fd0fa2440b59f2759cb66521 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Assets/Resources/Icons/download.png b/AxibugEmuOnline.Client/Assets/Resources/Icons/download.png new file mode 100644 index 0000000000000000000000000000000000000000..1531a6a0b2c41049fac8fc09e3a37b61095446e4 GIT binary patch literal 2575 zcmX|DeLPg@7r!%Iy5n^WO)Bcnm|^l3Q&yv7Zmyc4NQ+e}!m=nay`n5vm>G*P$PY`I z2qonu+E_LzgIW}YRc)v!sjx~)`?P=j{QodgjMBM%3nI23% zZ4bpSBd<{7)|i%}-3SS8KhV2AO`D$XI>M-FoJ=+n4AZR`P2PZ$awR5_i@FA06VO)?y#KGJ7-R$W_xB5l#?R8TZZtwxpm+cIv@ZYhw~%YVpkr8B?(^HPGQIE=mC)VL|xPRTq|g>zPN0lNdBy`cLPV z2G8%;yt-z;6Wjfo{6=WH%H{^uy@M}?+2P_v8 z`G`@nIEjiUq7sfr`VNseNFVdikc&58LrjtdNij;3x2Gp&IkvV?6bj(rSjttA z*iV3Y=*z_|FLZWm^{AVPrH(ZBe)E=2hNwuzJsx1ZeO{f1TQs7kG$CH(eKPBOfA50v ztIgE?TWRjfw8~NH<#5=&3K+Kc6c{l3vQblgA-@0Uk=4nZqb6eM7MlC@4L7nKPv6kP z6OAMs^DRet^tD4DiEtI2A3)aaWBar+#&=Ume46`5s`7nWaSYZ<65`K}qiu)uZpEQ* ztz@GJnU|)&a1xU_m?!)sGJm$~+Eqcu2nA;+b3h*F((HD@|iKp5n%P{p{A9SFpYj#(*1gK3fv zt{_%x>^^NrSs0V@bVDZ0qeZW`fw2q9ij9*v@HkLk(iuYwlsL`Kb;!}J#}+%d#-Xcn z0}abr6j9*OgV9#Rwi@B4ni`feW2pRjJW_p^GcGM)VQIyaLkLXY9&Lm2@p zkM`6cJM~_E4paeNqgrowF$Iyu)4D+*rRkq+c`0bVU%}ZU*{srX*+}dD4_A=t4O0&Y zGhnP+ZR)F2tTy{VaU2+%c=RbmrQ~zWO{Q#MouN{`AQBXnKz0#Q<$skp+nH`{9L))|W za{&2qjVis}(7OmsdEl%zKtRL+ESq-=u%^}JVwnYkD(N1%Yc&9SKIqt|Hc;;h59HWh zvH=5Nd6@qAqzi=2KED^53h46A@+~*!!Js)6Rg)J?wiTHfEB_nn-#DrjNvKj=^ycOo z+u7**MNHzCk&l6wns;sVIaz;#rK+#tssEF9Q-9&fniKlmuRl^0usJKKSh+3n8I|MA z7YX#foO3Q*??UzQtTWY#QEHMWk)IB|VmD7_%3bKKg}fO%w~Sh=1oWydsl8~`sIZf* z?tke^Kx9*-HmM6{33tZwh<6hir+>wkAY+CPi@)R<397S~KvgVQj*KELr3-9E@D5FK z@-0S4GgFWnUiIP$JmX#|410l0`QDdaT5JuG2VnV!&}wuxtE4OK%b5Z@UA~_W`AXdn znfvywz8r|H>))(C-8`mBI9qIQQJx{&b z<&K_#6a_`^t%9>mqKNr@hM7cCo#)E*>I}6%>C&8H{g&$Bat`3rLid^4*;^~;({IHa z1Xy#JiL+BYshX%TD+a+Caj3hU&@dm|)%L605Irz#OEP<_C}7!uUt3un)F3y5ZSL#W ivwfXm;79e_KDP*3^6Sf?hS_5YKmrM!T=B}ye#F1&dq773 literal 0 HcmV?d00001 diff --git a/AxibugEmuOnline.Client/Assets/Resources/Icons/download.png.meta b/AxibugEmuOnline.Client/Assets/Resources/Icons/download.png.meta new file mode 100644 index 00000000..6916023d --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Resources/Icons/download.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 0ab2653139d474e40a1ce8213f36274e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Assets/Resources/Icons/downloaderror.png b/AxibugEmuOnline.Client/Assets/Resources/Icons/downloaderror.png new file mode 100644 index 0000000000000000000000000000000000000000..062ecc7fefd6de486bcbb6c26fb826246246c2e2 GIT binary patch literal 4517 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 I3Fol?0cTkbeEZX*0afh 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 literal 0 HcmV?d00001 diff --git a/AxibugEmuOnline.Client/Assets/Resources/Icons/syncerror.png.meta b/AxibugEmuOnline.Client/Assets/Resources/Icons/syncerror.png.meta new file mode 100644 index 00000000..efc580d5 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Resources/Icons/syncerror.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 5ab158116cd13094f8aeec03e9c776bd +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Assets/Resources/Icons/upload.png b/AxibugEmuOnline.Client/Assets/Resources/Icons/upload.png new file mode 100644 index 0000000000000000000000000000000000000000..fe7d2a8a18bb57eaf9838ac3ec010be3b1e6008e GIT binary patch literal 5093 zcmW-lc{o)67sv0+*w>*U%V03ZE@TZg7#WEy*>@pp#-OCsSQ=v=vZt~pV=Ig;M1w4q z>}!QAiIhE(e)IkPaqoSe&w1bTd7pFceLm0gO0Y0D=42CM0|0>21dFkvKl}c>SeWSd zYWtce000F{F#1;`KpT%!^2W4yiL*I<`p70s-DM;iIcQYpjKrnC_%drB`*!rn4JVtU z&@KDld26)dy z+1iQ-l8E3;A+ZPG$1+et*ocMY`*Umzi14s9D;-M&uvS`BoF5KjL4W@yT6VJ-{geDU7HU`#0j$b#Rq9*fqt-Yh{j_#zNI0o)a@3kG? zZTvT(vG#C+zz3Kp4@m(kwsxuP99p;-5EOTuCYKmz{jlNBuQ!LK7s43V>L&s4l;q@(D<4@f8Bvg)gFvqeJh*34sl-JKa-5euRV% zu((&Ctq;wGJDz8A>gnqYsV2xzCD+yUjLg8aaAre|7{<+7ViYA`v zU`#pzV^AOj?bAk;qM&!!Q%%Gyi&q?hc9>=Dp*Gwjm zxi58Ev*%jtl&)fnLYHVmx8aVENrWi;FMq9+a95RzlgD_h4rrOWud;0Ub@Kch4+l!Y#$ zsAStWNfPDbc9sE=C>j?|w407mP@T^MU)%2~+S0g=ZQgSCgS)vf!3K3Jm-d9na^rnU zW0Af_OY;?BH+v%c&}8>Yb>u{lmC?W^eGG^Kr+wSxq4+d-K=32+mu;+FLnsI1y>RNM zgICNLwvbsX`G<^J0y&SoCY(?)aj9MSj`6=iUur;kCGllqs$(zS)xK?05MMi=7{*Cz z8&Zwq4wtu^fjh#CNQms6^cuIMGi-fD{Ikv2VTe}MifEgixAw{B=iy@UjI7+Js&@-h zTB8&@oX|`Dmp@PkTyt;DL#G8(GNTbM;r=RDmZak%NPUWjH%h#?3ega8QtB7_yddQVnQ`u^PNRlb;Ng0Xk?ai`b`b|jSxc@ZlpSgXS4U7dxYKJAr>qq%|&VZkCzcoL*;na zuc(7Xau|d(d>q?lXXW5k3Kp_#++j6>dk`vWVD8J)xF|uCp z?b1AR`)kg1{xDs_4o;Lwn!kl{juC-}&m+9oF426v=W#CszgDQ|Ene{+TIW9wl>4Iv zbgHo@?Jk9joY=CuX_$5@8_R;&TXX03b2cBD))V?dzL~VNAGlE8`ZWwVUQ(N(@fG}_ zDMh*q-HB2Z0e2R5RS!+B+I@K%y^yncN&&+^6saPnFWsb?55c5{{;>2``9On6$glb` zL8q}Lo?-!cM=Ni%F|dY+o$l=O1s)zO7q=ODs1QFUs5U2!wYbMNEr0gpNy;wnlb19X zH=Nt;>{F6t7$fVRYxLr<$#8TlCzS$;p~);Lb4V-myTo6v+mV5rq{WMyoNlOlqVMs| zh}qXgk?5$@Va*5C=5QzD-~q!Ehkt{k3YR(pdoBjPS8Q~`DmxeAk_50-CH>OdP3AU0 zdVQO@XZhR4w5%(!flu=8>xU1qFW%P{eEJmj;C=TBHVf3(Kt0+u-(w0oKYs=RqEy= z<8)6#pF?ik*?nFAyLOZPuEAOvqGjSH%lTD&(}MmEM-SFSswLiQ?GJe02Zmn4O2ucaB|ciR?8#s{Bn*o zhtgYzM*Aao#v7WPuxevquF6BwwDKS)RGS@#YofH3cPI`26(ns`a~jvRI$^yC`Ld z9*R=5z@Tl{?TqMVMk5t=d>@g}~tp*gif2L1-nMnRO_IIsr zGs1bhLe@aMNw=|$aoGfW&f5H=hwmUpsnq&ipuhFQor75t0xuzFFcZ*uboZW44ztnv zSDStBNf{bN@vkE>&ST%UJxSy~GDg=*uyTQq`$SZB=x@QP&UCdvKHelQ&FP4UAV$&y z6-*k6eh6}HtSyMoFA&{aSddd~=bXbQ7n^eHIel57Pcp6xdu8e;*m);Y{IfYPgwF^e zTY9~@N2>sjswdvbH`X*%4lH&%`K_|`gikw#fz{6Wm5^xh(X_!$S{5bBLj!@AiF;3_ zm2{;|^e;&@2|w6L(N1#82}2TAit=)PXf8G1krB2HZ=E*W4@7U~AFi+tiAAdIhpy;o z)(Nj%y!|Yg;rT*4;^nuE8@aE4ew`vx z!w+f{zk7_VIRc(m>FsRio&@`)vBUdsN@K0|)hGE4^@v5&8umbjOG2;e3vf4IYH6Md zvKoU=tG$fuzgZ0-PvRW_D~8mo;f7d+z$@eD8YYfu-{nv7YhskD0Z)~cyVD5f1E1@I zA(_QEst`+P zefV6*(y-j+^*&8H6OReG@X6;yh|^6J|VN@Q|= zlq){revTm9Jt?W^E^Mc%U{jF|<%KrF+!8r{z?OJZAQChvt(>%h5xlP zBf^{yCw#d%kTXl=Rnm^inQ}#EgSDPxU-!VtEtE|@JMGRl>#RtjWmiv*%f;f+l^6&m zzgpq#y12}5Yp@+lCc6--dRSBdTei0p1XLQctFG@af=R_Je8z3FWfK?JoC&;|z-GgP z`DXvJQGaxyXRuP+(N~qs`!>1kh)fBrE^5OoD6bg=B?rpLX%S*bFGDV7(b}ABJ>&4| zA2`VYn>p;6uReJ+PaQ*e;a#XEeLN4GBTwKG)r$w${Ar}!`?)+K6b8z0@@@)C?niMA zTRrxlT;9cf1ZoHtog5~EJ3JIYT;ZF7m2X{h*UsawFaHbK>Px?jXO4?G7hNh9k8aGb zkW!3*+K1UwVI3?8*c1rKf5DbmAz6w#*(Jm+nYzwx4EsDT6F}rP5lZ(GbjI~UDSAuY z7YMO$8Es~ZWDxe}4BrHu!^~UAS5S|}#(H)GDs?zLuswFMl{EeKB#1##Oq|K-3o;)^ zL~8QQqZJg(gdQ`Zq3W(275+(9jAX9{w0H*DUkyuP3UG}qiJm$iW%a7is6wMip%d}) zQ|5^cNS{@msg@IJ<{x7)eN}oSn6Wu@iIr6uU`+V&MM|^5Muc421BU%1nixG(zxLTj zSjMJq*YO7kE^6q$?Ug#rpHp=L0Fc!GSb&;<$xk1^gwKjrddOP%i;zydB<55bT~eV^ zOO4h(tWf+&{FXnUFQC`+yuKTo+xXhaE@R#n1VT zXtToSi}W|8YV0&dN7c++G;#x#I1%TJksE(w?F_dEw*^`k|}6F)qjxaf}(GTQoV>Ok%JPFXX-q1 z66m%QlGFR2(*xB_fn&84FbHdNSn_Lvp42h8=((E>JsD-&c%hnZy5X~d)J+c`9yS`!Po-0pxm9NUN zMR&Djp}q~jNG~z>8Hb@Ry+qxsDZ24=TqF2QcE}U!paUV-MH>4(mW2{BgI z-d+;E$c)g$Z0VM={4zQeOOU{D*NiW}%(OxPvSqu2_$LjoPV?3bd%w)2lOWlOedp|A zmQWt}2@h6lm3H@ifnn99|4dj#+Hi5z?z+b3*#XfSZi-K}jads_qXd|b=>;CE->YZP z{`Zi#@b1S1q{QGIk!uOs@tBGhdyv&AQG9@(^UKPv&3ZLSHLhAukcY54=4d&&NUxzs zDh+&x?qsckT3pjZ&y;8?%D7*OW+v<+uaAYR(Yrb9sJ5YEg8)>r&Z-KV(L2__&w1xE zU3z&r`Q1h9`8h)JM7~E_3w@3)rRfV;dR9rQ&y;5k8t_!|^U}(o<1%cuU}G+Qe7UAa v^0eRgIT%ks0Pyc$P@$3=9o8}Z_h&)?VO^Q^o2ja<^cBFw$Q)B+;2!fo>cSQC literal 0 HcmV?d00001 diff --git a/AxibugEmuOnline.Client/Assets/Resources/Icons/upload.png.meta b/AxibugEmuOnline.Client/Assets/Resources/Icons/upload.png.meta new file mode 100644 index 00000000..500718c1 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Resources/Icons/upload.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: fe23eed4ad510ca42885889dbb8aaf06 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/SyncFailedState.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/SyncFailedState.cs new file mode 100644 index 00000000..85edfd09 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/SyncFailedState.cs @@ -0,0 +1,18 @@ +using AxibugEmuOnline.Client.ClientCore; +using AxibugEmuOnline.Client.Tools; + +namespace AxibugEmuOnline.Client +{ + public partial class SaveFile + { + public class SyncFailedState : SimpleFSM.State + { + public string Error { get; set; } + + public override void OnEnter(SimpleFSM.State preState) + { + App.log.Error($"同步失败:{Error}"); + } + } + } +} \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/SyncFailedState.cs.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/SyncFailedState.cs.meta new file mode 100644 index 00000000..11efab87 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/SyncFailedState.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 36be8767f260af04ba9ed88d2d4cd775 \ No newline at end of file From 9270852fe0acc095449b8e69afdeed69a8c325b9 Mon Sep 17 00:00:00 2001 From: Alienjack Date: Wed, 20 Aug 2025 01:06:16 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AD=98=E6=A1=A3?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E7=8A=B6=E6=80=81=E6=9C=BA=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=8C=E4=BF=AE=E6=94=B9=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E7=8A=B6=E6=80=81UI=E8=A1=A8=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Resources/UIPrefabs/OptionUI.prefab | 403 ++++++++++++++---- .../Manager/SaveSlotManager/SaveFile.cs | 10 +- .../SaveFileSyncStates/CheckingState.cs | 13 +- .../SaveFileSyncStates/ConflictState.cs | 3 +- .../SaveFileSyncStates/DownloadingState.cs | 18 +- .../Manager/SaveSlotManager/SimpleSFM.cs | 95 +++-- .../UI/OptionUI/OptionUI_SavSlotItem.cs | 14 +- 7 files changed, 404 insertions(+), 152 deletions(-) diff --git a/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/OptionUI.prefab b/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/OptionUI.prefab index fc677e08..e20dea9c 100644 --- a/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/OptionUI.prefab +++ b/AxibugEmuOnline.Client/Assets/Resources/UIPrefabs/OptionUI.prefab @@ -520,6 +520,81 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: gradient: {fileID: 46877084639177849} +--- !u!1 &804908692400837359 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8642975113305060610} + - component: {fileID: 6956713201433508184} + - component: {fileID: 1041409322641615} + m_Layer: 5 + m_Name: download + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8642975113305060610 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 804908692400837359} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 905458728127029103} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 25, y: 25} + m_SizeDelta: {x: 50, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6956713201433508184 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 804908692400837359} + m_CullTransparentMesh: 1 +--- !u!114 &1041409322641615 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 804908692400837359} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 961aba7b7a39e4d4c832e94350f44d4c, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!1 &1280900818828460255 GameObject: m_ObjectHideFlags: 0 @@ -706,7 +781,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Color: {r: 1, g: 0.80982494, b: 0, a: 1} m_RaycastTarget: 0 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 @@ -973,9 +1048,12 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 3539783812791358836} - - {fileID: 6030618878828304669} - {fileID: 2303902335643923373} - {fileID: 8677023902282266940} + - {fileID: 7976727918032113692} + - {fileID: 8642975113305060610} + - {fileID: 5521327881148589877} + - {fileID: 1660924397234324979} m_Father: {fileID: 5970282275929291192} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -1442,97 +1520,6 @@ MonoBehaviour: m_EffectColor: {r: 0, g: 0, b: 0, a: 0.5} m_EffectDistance: {x: 1.5, y: -1.5} m_UseGraphicAlpha: 1 ---- !u!1 &4078965612622303339 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 6030618878828304669} - - component: {fileID: 6018890508858230420} - - component: {fileID: 1865219663044263670} - - component: {fileID: 6562970432720184454} - m_Layer: 5 - m_Name: Syncing - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &6030618878828304669 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4078965612622303339} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 905458728127029103} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 25, y: 25} - m_SizeDelta: {x: 50, y: 50} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &6018890508858230420 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4078965612622303339} - m_CullTransparentMesh: 1 ---- !u!114 &1865219663044263670 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4078965612622303339} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 0 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: c5a9535bb63e1f14f9a1528566864ab2, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!114 &6562970432720184454 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4078965612622303339} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 8707b921aaba60d45b4041e96f3542dd, type: 3} - m_Name: - m_EditorClassIdentifier: - m_duration: 2 - m_ease: 1 - m_reverseRotation: 1 --- !u!1 &4124172888520656882 GameObject: m_ObjectHideFlags: 0 @@ -3183,7 +3170,10 @@ MonoBehaviour: UI_Empty: {fileID: 8350228378118296958} UI_SavTime: {fileID: 13043593624240728} UI_Disconnect: {fileID: 6998836277133601669} - UI_Syncing: {fileID: 4078965612622303339} + UI_DownloadError: {fileID: 8857746597932873861} + UI_Downloading: {fileID: 804908692400837359} + UI_Uploading: {fileID: 8872483836623718893} + UI_Checking: {fileID: 7267609509608397888} UI_Conflict: {fileID: 1601163034082482360} UI_Synced: {fileID: 2637678715180681658} --- !u!1 &7141318786199574664 @@ -3286,6 +3276,81 @@ MonoBehaviour: m_EffectColor: {r: 0, g: 0, b: 0, a: 0.5} m_EffectDistance: {x: 1.5, y: -1.5} m_UseGraphicAlpha: 1 +--- !u!1 &7267609509608397888 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1660924397234324979} + - component: {fileID: 5687683890234766428} + - component: {fileID: 6995705272401882157} + m_Layer: 5 + m_Name: checking + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1660924397234324979 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7267609509608397888} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 905458728127029103} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 25, y: 25} + m_SizeDelta: {x: 50, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5687683890234766428 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7267609509608397888} + m_CullTransparentMesh: 1 +--- !u!114 &6995705272401882157 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7267609509608397888} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 3efbb404fd0fa2440b59f2759cb66521, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!1 &7579340952198812870 GameObject: m_ObjectHideFlags: 0 @@ -3888,6 +3953,156 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &8857746597932873861 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7976727918032113692} + - component: {fileID: 8830922541807882247} + - component: {fileID: 74709689621410332} + m_Layer: 5 + m_Name: syncerror + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7976727918032113692 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8857746597932873861} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 905458728127029103} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 25, y: 25} + m_SizeDelta: {x: 50, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8830922541807882247 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8857746597932873861} + m_CullTransparentMesh: 1 +--- !u!114 &74709689621410332 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8857746597932873861} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0, b: 0, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 5ab158116cd13094f8aeec03e9c776bd, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &8872483836623718893 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5521327881148589877} + - component: {fileID: 1453351515137974665} + - component: {fileID: 625482330037984562} + m_Layer: 5 + m_Name: upload + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5521327881148589877 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8872483836623718893} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 905458728127029103} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 25, y: 25} + m_SizeDelta: {x: 50, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1453351515137974665 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8872483836623718893} + m_CullTransparentMesh: 1 +--- !u!114 &625482330037984562 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8872483836623718893} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: fe23eed4ad510ca42885889dbb8aaf06, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!1 &8884391103430529053 GameObject: m_ObjectHideFlags: 0 diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs index 75733541..91568212 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs @@ -52,7 +52,7 @@ namespace AxibugEmuOnline.Client } } - public SimpleFSM.State GetState() + public SimpleFSM.State GetCurrentState() { return FSM.CurrentState; } @@ -79,8 +79,10 @@ namespace AxibugEmuOnline.Client FSM.AddState();//? FSM.AddState(); FSM.AddState(); + FSM.AddState(); FSM.AddState(); FSM.AddState(); + FSM.AddState(); FSM.OnStateChanged += FSM_OnStateChanged; IsEmpty = !AxiIO.File.Exists(FilePath); @@ -234,6 +236,11 @@ namespace AxibugEmuOnline.Client SyncingFilesUtility.Remove(this); } + public override string ToString() + { + return $"{EmuPlatform}|{RomID}|{SlotIndex}"; + } + public static class SyncingFilesUtility { static SyncingFileRecord m_syncFiles = new SyncingFileRecord(); @@ -315,7 +322,6 @@ namespace AxibugEmuOnline.Client var jsonStr = JsonUtility.ToJson(temp); AxiPlayerPrefs.SetString("SYNCING_SAVE", jsonStr); } - } [Serializable] diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/CheckingState.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/CheckingState.cs index 20c8a71f..21e17f70 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/CheckingState.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/CheckingState.cs @@ -29,7 +29,8 @@ namespace AxibugEmuOnline.Client m_timeOut -= Time.deltaTime; if (m_timeOut < 0) //已超时 { - FSM.ChangeState(); + FSM.GetState().Error = "拉取云存档数据超时"; + FSM.ChangeState(); } } @@ -44,7 +45,15 @@ namespace AxibugEmuOnline.Client } else { - FSM.ChangeState(); + if (Host.Sequecen > (uint)NetData.Sequence)//本地序列号大于云存档序列号,视为冲突 + { + FSM.GetState().NetData = NetData; + FSM.ChangeState(); + } + else + { + FSM.ChangeState(); + } } } } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/ConflictState.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/ConflictState.cs index e35f1ee7..85ce15d8 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/ConflictState.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/ConflictState.cs @@ -1,4 +1,5 @@ using AxibugEmuOnline.Client.Tools; +using AxibugProtobuf; namespace AxibugEmuOnline.Client { @@ -6,7 +7,7 @@ namespace AxibugEmuOnline.Client { public class ConflictState : SimpleFSM.State { - + public Protobuf_Mine_GameSavInfo NetData { get; set; } } } } \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/DownloadingState.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/DownloadingState.cs index 3d8a5cdf..951d4c9d 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/DownloadingState.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/DownloadingState.cs @@ -1,5 +1,6 @@ using AxibugEmuOnline.Client.ClientCore; using AxibugEmuOnline.Client.Tools; +using AxibugProtobuf; using System; namespace AxibugEmuOnline.Client @@ -14,14 +15,14 @@ namespace AxibugEmuOnline.Client public override void OnEnter(SimpleFSM.State preState) { - var checkState = preState as CheckingState; - - var netData = checkState.NetData; - - if (Host.Sequecen >= (uint)netData.Sequence) + Protobuf_Mine_GameSavInfo netData = null; + if (preState is CheckingState checkState) { - FSM.ChangeState(); - return; + netData = checkState.NetData; + } + else if (preState is ConflictState conflictState) //由冲突状态转换为下载状态,代表使用网络存档覆盖本地 + { + netData = conflictState.NetData; } m_sequece = (uint)netData.Sequence; @@ -42,7 +43,8 @@ namespace AxibugEmuOnline.Client if (m_downloadTask.downloadHandler.bHadErr) //下载失败 { - FSM.ChangeState(); + FSM.GetState().Error = m_downloadTask.downloadHandler.ErrInfo; + FSM.ChangeState(); return; } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SimpleSFM.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SimpleSFM.cs index e077e8c5..b59fa540 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SimpleSFM.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SimpleSFM.cs @@ -7,7 +7,10 @@ namespace AxibugEmuOnline.Client.Tools public partial class SimpleFSM { public event Action OnStateChanged; + private Dictionary m_states = new Dictionary(); + private bool isInTransition = false; // 新增:标识是否处于切换过程中 + private Queue pendingStateQueue = new Queue(); // 新增:延迟请求的队列 public HOST Host { get; private set; } @@ -16,15 +19,15 @@ namespace AxibugEmuOnline.Client.Tools Host = host; } - private State m_current; + private State m_currentState; public State CurrentState { - get => m_current; + get => m_currentState; set { - if (m_current == value) return; + if (m_currentState == value) return; - m_current = value; + m_currentState = value; OnStateChanged?.Invoke(); } } @@ -40,47 +43,59 @@ namespace AxibugEmuOnline.Client.Tools return (T)state; } - public void BackToLast() - { - if (m_current == null) return; - if (m_current.LastState == null) return; - - if (m_states.Values.FirstOrDefault(s => s == m_current.LastState) is State lastState) - { - m_current.LastState = null; - m_current.OnExit(lastState); - - lastState.OnEnter(m_current); - m_current = lastState; - } - } - - public void Stop() - { - if (m_current != null) - { - m_current.OnExit(null); - m_current = null; - } - - foreach (var state in m_states.Values) - state.LastState = null; - } - + public void ChangeState() where T : State, new() { var stateType = typeof(T); - m_states.TryGetValue(stateType, out State nextState); + if (!m_states.ContainsKey(stateType)) + return; + // 如果处于切换中,加入队列等待后续处理 + if (isInTransition) + { + pendingStateQueue.Enqueue(stateType); + return; + } + + // 标记开始切换 + isInTransition = true; + InternalChangeState(stateType); + isInTransition = false; // 切换结束 + + // 处理队列中积累的切换请求 + ProcessPendingQueue(); + } + + // 新增:实际执行状态切换的方法 + private void InternalChangeState(Type stateType) + { + State nextState = m_states[stateType]; if (nextState == null) return; - if (m_current != null) m_current.OnExit(nextState); + State preState = CurrentState; + // 退出当前状态 + if (preState != null) preState.OnExit(nextState); - var preState = m_current; - m_current = nextState; + // 更新当前状态 + CurrentState = nextState; + CurrentState.LastState = preState; - m_current.LastState = preState; - m_current.OnEnter(preState); + // 进入新状态 + CurrentState.OnEnter(preState); + } + + // 新增:处理队列中的切换请求 + private void ProcessPendingQueue() + { + while (pendingStateQueue.Count > 0) + { + Type nextType = pendingStateQueue.Dequeue(); + if (!m_states.ContainsKey(nextType)) continue; + + isInTransition = true; + InternalChangeState(nextType); + isInTransition = false; + } } public T GetState() where T : State, new() @@ -91,11 +106,11 @@ namespace AxibugEmuOnline.Client.Tools public void Update() { - m_current?.OnUpdate(); + CurrentState?.OnUpdate(); foreach (var state in m_states.Values) { - if (state == m_current) continue; - state.AnyStateUpdate(m_current); + if (state == CurrentState) continue; + state.AnyStateUpdate(CurrentState); } } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs index 5286eadc..6648e0d6 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs @@ -14,7 +14,10 @@ namespace AxibugEmuOnline.Client public Text UI_SavTime; public GameObject UI_Disconnect; - public GameObject UI_Syncing; + public GameObject UI_DownloadError; + public GameObject UI_Downloading; + public GameObject UI_Uploading; + public GameObject UI_Checking; public GameObject UI_Conflict; public GameObject UI_Synced; @@ -24,12 +27,13 @@ namespace AxibugEmuOnline.Client private void Awake() { - m_stateNodes[typeof(SaveFile.CheckingState)] = UI_Syncing; + m_stateNodes[typeof(SaveFile.CheckingState)] = UI_Checking; m_stateNodes[typeof(SaveFile.ConflictState)] = UI_Conflict; - m_stateNodes[typeof(SaveFile.DownloadingState)] = UI_Syncing; + m_stateNodes[typeof(SaveFile.DownloadingState)] = UI_Downloading; m_stateNodes[typeof(SaveFile.SyncedState)] = UI_Synced; - m_stateNodes[typeof(SaveFile.UploadingState)] = UI_Syncing; + m_stateNodes[typeof(SaveFile.UploadingState)] = UI_Uploading; m_stateNodes[typeof(SaveFile.CheckingNetworkState)] = UI_Disconnect; + m_stateNodes[typeof(SaveFile.SyncFailedState)] = UI_DownloadError; } protected override void OnSetData(InternalOptionMenu menuData) @@ -80,7 +84,7 @@ namespace AxibugEmuOnline.Client private void UpdateStateNode() { - var stateType = MenuData.SavFile.GetState().GetType(); + var stateType = MenuData.SavFile.GetCurrentState().GetType(); foreach (var item in m_stateNodes) { From c864dceb5dc30cfffa66c04ed584accb489299bc Mon Sep 17 00:00:00 2001 From: Alienjack Date: Wed, 20 Aug 2025 01:27:47 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AD=98=E6=A1=A3?= =?UTF-8?q?=E7=9A=84=E9=87=8D=E8=AF=95=E5=92=8C=E8=A7=A3=E5=86=B3=E5=86=B2?= =?UTF-8?q?=E7=AA=81=E7=9A=84=E6=93=8D=E4=BD=9C=E8=8F=9C=E5=8D=95=E9=80=89?= =?UTF-8?q?=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Manager/SaveSlotManager/SaveFile.cs | 4 +- .../UI/InGameUI/InGameUI_SaveStateMenu.cs | 92 +++++++++++++++++-- 2 files changed, 88 insertions(+), 8 deletions(-) diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs index 91568212..fa08afc3 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs @@ -63,7 +63,7 @@ namespace AxibugEmuOnline.Client /// 存档顺序号,用于判断云存档和本地存档的同步状态,是否存在冲突 public uint Sequecen { get; private set; } - SimpleFSM FSM; + public SimpleFSM FSM { get; private set; } byte[] m_savDataCaches; byte[] m_screenShotCaches; Header m_headerCache; @@ -219,7 +219,7 @@ namespace AxibugEmuOnline.Client /// public void TrySync() { - if (FSM.CurrentState is not IdleState && FSM.CurrentState is not SyncedState) return; + if (FSM.CurrentState is not IdleState && FSM.CurrentState is not SyncedState && FSM.CurrentState is not SyncFailedState) return; FSM.ChangeState(); } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs index 1da77c5f..eff8c86a 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs @@ -33,17 +33,23 @@ namespace AxibugEmuOnline.Client public override Type MenuUITemplateType => typeof(OptionUI_SavSlotItem); public SaveFile SavFile { get; private set; } - List m_subOptions = new List(); public override string Name => SavFile.AutoSave ? "自动存档" : $"存档{SavFile.SlotIndex}"; + SaveMenuItem saveMENU; + LoadMenuItem loadMENU; + RetryMenuItem retryMENU; + UseLocalSaveMenuItem useLocalMENU; + UseRemoteSaveMenuItem useRemoteMENU; + public SaveSlotMenu(InGameUI inGameui, SaveFile savFile) { SavFile = savFile; - //非自动存档,增加保存选项 - if (!savFile.AutoSave) m_subOptions.Add(new SaveMenuItem(inGameui, savFile)); - //添加读取选项 - m_subOptions.Add(new LoadMenuItem(inGameui, savFile)); + saveMENU = new SaveMenuItem(inGameui, savFile); + loadMENU = new LoadMenuItem(inGameui, savFile); + retryMENU = new RetryMenuItem(inGameui, savFile); + useLocalMENU = new UseLocalSaveMenuItem(inGameui, savFile); + useRemoteMENU = new UseRemoteSaveMenuItem(inGameui, savFile); } public override void OnShow(OptionUI_MenuItem ui) @@ -55,7 +61,21 @@ namespace AxibugEmuOnline.Client protected override List GetOptionMenus() { - return m_subOptions; + var menus = new List(); + + if (SavFile.GetCurrentState() is SaveFile.ConflictState) + { + menus.Add(useRemoteMENU); + menus.Add(useLocalMENU); + } + else + { + if (SavFile.GetCurrentState() is SaveFile.SyncFailedState) menus.Add(retryMENU); + if (!SavFile.AutoSave) menus.Add(saveMENU); + if (!SavFile.IsEmpty) menus.Add(loadMENU); + } + + return menus; } public class SaveMenuItem : ExecuteMenu @@ -111,6 +131,66 @@ namespace AxibugEmuOnline.Client OverlayManager.HideSideBar(); } } + + public class RetryMenuItem : ExecuteMenu + { + SaveFile m_savFile; + InGameUI m_ingameUI; + public override string Name => "重试"; + public override bool Visible => m_savFile.GetCurrentState() is SaveFile.SyncFailedState; + + public RetryMenuItem(InGameUI inGameui, SaveFile savFile) + { + m_ingameUI = inGameui; + m_savFile = savFile; + } + + public override void OnExcute(OptionUI optionUI, ref bool cancelHide) + { + cancelHide = true; + m_savFile.TrySync(); + } + } + + public class UseRemoteSaveMenuItem : ExecuteMenu + { + SaveFile m_savFile; + InGameUI m_ingameUI; + public override string Name => "使用云端存档"; + + public UseRemoteSaveMenuItem(InGameUI inGameui, SaveFile savFile) + { + m_ingameUI = inGameui; + m_savFile = savFile; + } + + public override void OnExcute(OptionUI optionUI, ref bool cancelHide) + { + if (m_savFile.GetCurrentState() is not SaveFile.ConflictState) return; + cancelHide = true; + m_savFile.FSM.ChangeState(); + } + } + + public class UseLocalSaveMenuItem : ExecuteMenu + { + SaveFile m_savFile; + InGameUI m_ingameUI; + public override string Name => "使用本地存档"; + + public UseLocalSaveMenuItem(InGameUI inGameui, SaveFile savFile) + { + m_ingameUI = inGameui; + m_savFile = savFile; + } + + public override void OnExcute(OptionUI optionUI, ref bool cancelHide) + { + if (m_savFile.GetCurrentState() is not SaveFile.ConflictState) return; + cancelHide = true; + m_savFile.FSM.ChangeState(); + } + } } } } \ No newline at end of file From 09407468c2559050997511e081ad175f4ffb19b1 Mon Sep 17 00:00:00 2001 From: "ALIENJACK\\alien" Date: Wed, 20 Aug 2025 10:19:07 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E5=86=97=E4=BD=99?= =?UTF-8?q?=E5=91=BD=E5=90=8D=E7=A9=BA=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Manager/InputDevicesManager/Devices/SwitchJoyCon_D.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/SwitchJoyCon_D.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/SwitchJoyCon_D.cs index 4cd68be1..3468d53e 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/SwitchJoyCon_D.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/SwitchJoyCon_D.cs @@ -1,6 +1,4 @@ using AxibugProtobuf; -using System.Collections; -using UnityEngine; namespace AxibugEmuOnline.Client.InputDevices {