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
literal 0
HcmV?d00001
diff --git a/AxibugEmuOnline.Client.Switch/Assets/Resources/Icons/syncerror.png.meta b/AxibugEmuOnline.Client.Switch/Assets/Resources/Icons/syncerror.png.meta
new file mode 100644
index 00000000..efc580d5
--- /dev/null
+++ b/AxibugEmuOnline.Client.Switch/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.Switch/Assets/Resources/Icons/upload.png b/AxibugEmuOnline.Client.Switch/Assets/Resources/Icons/upload.png
new file mode 100644
index 0000000000000000000000000000000000000000..fe7d2a8a18bb57eaf9838ac3ec010be3b1e6008e
GIT binary patch
literal 5093
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
literal 0
HcmV?d00001
diff --git a/AxibugEmuOnline.Client.Switch/Assets/Resources/Icons/upload.png.meta b/AxibugEmuOnline.Client.Switch/Assets/Resources/Icons/upload.png.meta
new file mode 100644
index 00000000..500718c1
--- /dev/null
+++ b/AxibugEmuOnline.Client.Switch/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.Switch/Assets/Resources/UIPrefabs/OptionUI.prefab b/AxibugEmuOnline.Client.Switch/Assets/Resources/UIPrefabs/OptionUI.prefab
index fc677e08..e20dea9c 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Resources/UIPrefabs/OptionUI.prefab
+++ b/AxibugEmuOnline.Client.Switch/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.Switch/Assets/Scene/AxibugEmuOnline.Client.unity b/AxibugEmuOnline.Client.Switch/Assets/Scene/AxibugEmuOnline.Client.unity
index 592ac5ab..1a77c117 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Scene/AxibugEmuOnline.Client.unity
+++ b/AxibugEmuOnline.Client.Switch/Assets/Scene/AxibugEmuOnline.Client.unity
@@ -13,7 +13,7 @@ OcclusionCullingSettings:
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
- serializedVersion: 10
+ serializedVersion: 9
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
@@ -38,12 +38,13 @@ RenderSettings:
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
+ m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
- serializedVersion: 13
- m_BakeOnSceneLoad: 0
+ serializedVersion: 12
+ m_GIWorkflowMode: 1
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
@@ -66,6 +67,9 @@ LightmapSettings:
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
+ m_FinalGather: 0
+ m_FinalGatherFiltering: 1
+ m_FinalGatherRayCount: 256
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 1
@@ -143,13 +147,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 408101310}
- serializedVersion: 2
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: 0}
+ m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &408101312
MonoBehaviour:
@@ -164,6 +168,9 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
AllowDebugging: 1
+ OpenHubOnStart: 0
+ AutoShowLastLogLine: 0
+ OnlyShowErrOnStart: 0
--- !u!1 &1335662458
GameObject:
m_ObjectHideFlags: 0
@@ -188,13 +195,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1335662458}
- serializedVersion: 2
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: 0}
+ m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1335662460
MonoBehaviour:
@@ -266,18 +273,11 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1498586261}
- serializedVersion: 2
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: 0}
+ m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1660057539 &9223372036854775807
-SceneRoots:
- m_ObjectHideFlags: 0
- m_Roots:
- - {fileID: 1498586263}
- - {fileID: 1335662459}
- - {fileID: 408101311}
diff --git a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/App.cs b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/App.cs
index 1d78b05a..03fd39d9 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/App.cs
+++ b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/App.cs
@@ -90,9 +90,14 @@ namespace AxibugEmuOnline.Client.ClientCore
public static void Init(bool isTest = false, bool isUseGUIButton = false, string testSrvIP = "", bool bUseLocalWebApi = false, string mLocalWebApi = "")
{
log = new LogManager(OnLogOut);
-
//鍏朵粬骞冲彴蹇呰鐨勫垵濮嬪寲
- if (UnityEngine.Application.platform == RuntimePlatform.PSP2) PSP2Init();
+#if UNITY_PSP2
+ PSP2Init();
+#endif
+
+#if UNITY_SWITCH
+ SwitchInit();
+#endif
input = new InputDevicesManager();
FileDownloader = new FileDownloader();
@@ -153,11 +158,18 @@ namespace AxibugEmuOnline.Client.ClientCore
sonyVitaCommonDialog = new GameObject().AddComponent();
#endif
-#if UNITY_SWITCH
- //鍒涘缓鍒涘缓Switch
- switchCommon = new GameObject().AddComponent();
-#endif
+ }
+ private static void SwitchInit()
+ {
+#if UNITY_SWITCH
+ AxiNS.instance.Init();
+ if (!AxiIO.Directory.Exists(App.PersistentDataRootPath()))
+ AxiIO.Directory.CreateDirectory(App.PersistentDataRootPath());
+ switchCommon = new GameObject().AddComponent();
+ switchCommon.gameObject.name = "[SwitchCommon]";
+ GameObject.DontDestroyOnLoad(switchCommon);
+#endif
}
diff --git a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/AxiHttp/AxiHttp.cs b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/AxiHttp/AxiHttp.cs
index b255ac8d..cf0dc512 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/AxiHttp/AxiHttp.cs
+++ b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/AxiHttp/AxiHttp.cs
@@ -166,20 +166,23 @@ public static class AxiHttp
public static IPAddress GetDnsIP(string str)
{
- if (!dictIP2Address.ContainsKey(str))
+ lock (dictIP2Address)
{
- IPHostEntry host = Dns.GetHostEntry(str);
- IPAddress ip = null;
- foreach (var item in host.AddressList)
+ if (!dictIP2Address.ContainsKey(str))
{
- if (item.AddressFamily == AddressFamily.InterNetwork)
+ IPHostEntry host = Dns.GetHostEntry(str);
+ IPAddress ip = null;
+ foreach (var item in host.AddressList)
{
- ip = item; break;
+ if (item.AddressFamily == AddressFamily.InterNetwork)
+ {
+ ip = item; break;
+ }
}
+ dictIP2Address[str] = ip;
}
- dictIP2Address[str] = ip;
+ return dictIP2Address[str];
}
- return dictIP2Address[str];
}
public enum AxiDownLoadMode
diff --git a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/AxiInputSP/PSVita/AxiPSVBackTouchEmuKey.cs b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/AxiInputSP/PSVita/AxiPSVBackTouchEmuKey.cs
index b3f3542b..6a0b74e1 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/AxiInputSP/PSVita/AxiPSVBackTouchEmuKey.cs
+++ b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/AxiInputSP/PSVita/AxiPSVBackTouchEmuKey.cs
@@ -62,11 +62,7 @@ namespace AxiInputSP
m_TouckState[AxiPSVBackTouchType.RightBotton] = new AxiPSVBackTouchState(AxiPSVBackTouchType.RightBotton);
}
- private void OnEnable()
- {
- }
-
- private void OnDisable()
+ void OnDestroy()
{
_instance = null;
}
diff --git a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/DebuggerByGUI.cs b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/DebuggerByGUI.cs
index 9affce45..0853c920 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/DebuggerByGUI.cs
+++ b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/DebuggerByGUI.cs
@@ -24,7 +24,7 @@ public class DebuggerByGUI : MonoBehaviour
private Vector2 _scrollLogView = Vector2.zero;
private Vector2 _scrollCurrentLogView = Vector2.zero;
private Vector2 _scrollSystemView = Vector2.zero;
- private bool _expansion = false;
+ private bool _expansion = false;
private Rect _windowRect = new Rect(0, 0, 100, 60);
private int _fps = 0;
@@ -32,9 +32,26 @@ public class DebuggerByGUI : MonoBehaviour
private int _frameNumber = 0;
private float _lastShowFPSTime = 0f;
- private void Start()
+ public bool OpenHubOnStart = false;
+ public bool AutoShowLastLogLine = false;
+ public bool OnlyShowErrOnStart = false;
+
+ private void Start()
{
- DontDestroyOnLoad(this.gameObject);
+ if (OpenHubOnStart)
+ {
+ _expansion = true;
+ _windowRect.width = 1000;
+ _windowRect.height = 600;
+ }
+
+ if (OnlyShowErrOnStart)
+ {
+ _showInfoLog = false;
+ _showWarningLog = false;
+ }
+
+ DontDestroyOnLoad(this.gameObject);
if (AllowDebugging)
{
Application.logMessageReceived += LogHandler;
@@ -237,16 +254,22 @@ public class DebuggerByGUI : MonoBehaviour
GUILayout.Label(_logInformations[i].message);
GUILayout.FlexibleSpace();
GUI.contentColor = Color.white;
- GUILayout.EndHorizontal();
+ GUILayout.EndHorizontal();
}
}
GUILayout.EndScrollView();
_scrollCurrentLogView = GUILayout.BeginScrollView(_scrollCurrentLogView, "Box", GUILayout.Height(100));
- if (_currentLogIndex != -1)
+
+ if (AutoShowLastLogLine)
+ {
+ _scrollLogView.y = Mathf.Lerp(_scrollLogView.y, float.MaxValue, 0.1f);
+ }
+
+ if (_currentLogIndex != -1)
{
GUILayout.Label(_logInformations[_currentLogIndex].message + "\r\n\r\n" + _logInformations[_currentLogIndex].stackTrace);
- }
+ }
GUILayout.EndScrollView();
}
#endregion
diff --git a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Emulator/NesEmulator/NesEmulator_Screen.mat b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Emulator/NesEmulator/NesEmulator_Screen.mat
index 74fd7309..d581fae5 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Emulator/NesEmulator/NesEmulator_Screen.mat
+++ b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Emulator/NesEmulator/NesEmulator_Screen.mat
@@ -92,3 +92,4 @@ Material:
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
m_BuildTextureStacks: []
+ m_AllowLocking: 1
diff --git a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/EssgeeKeyBinding.cs b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/EssgeeKeyBinding.cs
index 159c8be1..39161387 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/EssgeeKeyBinding.cs
+++ b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/EssgeeKeyBinding.cs
@@ -147,6 +147,25 @@ namespace AxibugEmuOnline.Client.Settings
controller.SetBinding(EssgeeSingleKey.LEFT, device.JOYSTICK.Left, 1);
controller.SetBinding(EssgeeSingleKey.RIGHT, device.JOYSTICK.Right, 1);
}
+
+ public override void Bind(SwitchJoyCon_D device, ControllerBinder controller)
+ {
+ controller.SetBinding(EssgeeSingleKey.OPTION_1, device.Plus, 0);
+ controller.SetBinding(EssgeeSingleKey.OPTION_2, device.Minus, 0);
+ controller.SetBinding(EssgeeSingleKey.UP, device.Up, 0);
+ controller.SetBinding(EssgeeSingleKey.DOWN, device.Down, 0);
+ controller.SetBinding(EssgeeSingleKey.LEFT, device.Left, 0);
+ controller.SetBinding(EssgeeSingleKey.RIGHT, device.Right, 0);
+ controller.SetBinding(EssgeeSingleKey.BTN_1, device.A, 0);
+ controller.SetBinding(EssgeeSingleKey.BTN_2, device.B, 0);
+ controller.SetBinding(EssgeeSingleKey.BTN_3, device.X, 0);
+ controller.SetBinding(EssgeeSingleKey.BTN_4, device.Y, 0);
+
+ controller.SetBinding(EssgeeSingleKey.UP, device.LeftStick.Up, 1);
+ controller.SetBinding(EssgeeSingleKey.DOWN, device.LeftStick.Down, 1);
+ controller.SetBinding(EssgeeSingleKey.LEFT, device.LeftStick.Left, 1);
+ controller.SetBinding(EssgeeSingleKey.RIGHT, device.LeftStick.Right, 1);
+ }
}
public class MasterSystemKeyBinding : EssgeeKeyBinding
diff --git a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/MAMEKeyBinding.cs b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/MAMEKeyBinding.cs
index f7962ab9..f8af305c 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/MAMEKeyBinding.cs
+++ b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/MAMEKeyBinding.cs
@@ -158,6 +158,27 @@ namespace AxibugEmuOnline.Client.Settings
controller.SetBinding(UMAMEKSingleKey.LEFT, device.JOYSTICK.Left, 1);
controller.SetBinding(UMAMEKSingleKey.RIGHT, device.JOYSTICK.Right, 1);
}
+
+ public override void Bind(SwitchJoyCon_D device, ControllerBinder controller)
+ {
+ controller.SetBinding(UMAMEKSingleKey.INSERT_COIN, device.Minus, 0);
+ controller.SetBinding(UMAMEKSingleKey.GAMESTART, device.Plus, 0);
+ controller.SetBinding(UMAMEKSingleKey.UP, device.Up, 0);
+ controller.SetBinding(UMAMEKSingleKey.DOWN, device.Down, 0);
+ controller.SetBinding(UMAMEKSingleKey.LEFT, device.Left, 0);
+ controller.SetBinding(UMAMEKSingleKey.RIGHT, device.Right, 0);
+ controller.SetBinding(UMAMEKSingleKey.BTN_A, device.A, 0);
+ controller.SetBinding(UMAMEKSingleKey.BTN_B, device.B, 0);
+ controller.SetBinding(UMAMEKSingleKey.BTN_C, device.X, 0);
+ controller.SetBinding(UMAMEKSingleKey.BTN_D, device.Y, 0);
+ controller.SetBinding(UMAMEKSingleKey.BTN_E, device.LeftSL, 0);
+ controller.SetBinding(UMAMEKSingleKey.BTN_F, device.RightSL, 0);
+
+ controller.SetBinding(UMAMEKSingleKey.UP, device.LeftStick.Up, 1);
+ controller.SetBinding(UMAMEKSingleKey.DOWN, device.LeftStick.Down, 1);
+ controller.SetBinding(UMAMEKSingleKey.LEFT, device.LeftStick.Left, 1);
+ controller.SetBinding(UMAMEKSingleKey.RIGHT, device.LeftStick.Right, 1);
+ }
}
public class NEOGEOKeyBinding : MAMEKeyBinding
diff --git a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/Model/EmuCoreBinder.cs b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/Model/EmuCoreBinder.cs
index 86d36556..dc4aab0e 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/Model/EmuCoreBinder.cs
+++ b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/Model/EmuCoreBinder.cs
@@ -16,7 +16,8 @@ public abstract class EmuCoreBinder : InternalEmuCoreBinder,
IDeviceBinder,
IDeviceBinder,
IDeviceBinder,
- IDeviceBinder
+ IDeviceBinder,
+ IDeviceBinder
where T : Enum
{
//姣忎竴涓疄渚嬩唬琛ㄤ竴涓搴旀ā鎷熷櫒骞冲彴鐨勬帶鍒跺櫒绱㈠紩
@@ -83,6 +84,7 @@ public abstract class EmuCoreBinder : InternalEmuCoreBinder,
else if (device is XboxController_D xbC) Bind(xbC, binding);
else if (device is PSVController_D psvC) Bind(psvC, binding);
else if (device is ScreenGamepad_D screenGamepad) Bind(screenGamepad, binding);
+ else if (device is SwitchJoyCon_D nsJoyCon) Bind(nsJoyCon, binding);
else throw new NotImplementedException($"{device.GetType()}");
}
@@ -305,4 +307,5 @@ public abstract class EmuCoreBinder : InternalEmuCoreBinder,
public abstract void Bind(XboxController_D device, ControllerBinder controller);
public abstract void Bind(PSVController_D device, ControllerBinder controller);
public abstract void Bind(ScreenGamepad_D device, ControllerBinder controller);
+ public abstract void Bind(SwitchJoyCon_D device, ControllerBinder controller);
}
\ No newline at end of file
diff --git a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/NesKeyBinding.cs b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/NesKeyBinding.cs
index 4781c3fb..6d42aa0d 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/NesKeyBinding.cs
+++ b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/NesKeyBinding.cs
@@ -121,5 +121,22 @@ namespace AxibugEmuOnline.Client.Settings
controller.SetBinding(EnumButtonType.UP, device.JOYSTICK.Up, 1);
controller.SetBinding(EnumButtonType.DOWN, device.JOYSTICK.Down, 1);
}
+ public override void Bind(SwitchJoyCon_D device, ControllerBinder controller)
+ {
+ controller.SetBinding(EnumButtonType.LEFT, device.Left, 0);
+ controller.SetBinding(EnumButtonType.RIGHT, device.Right, 0);
+ controller.SetBinding(EnumButtonType.UP, device.Up, 0);
+ controller.SetBinding(EnumButtonType.DOWN, device.Down, 0);
+ controller.SetBinding(EnumButtonType.A, device.A, 0);
+ controller.SetBinding(EnumButtonType.B, device.B, 0);
+ controller.SetBinding(EnumButtonType.SELECT, device.Minus, 0);
+ controller.SetBinding(EnumButtonType.START, device.Plus, 0);
+ controller.SetBinding(EnumButtonType.MIC, device.RightSL, 0);
+
+ controller.SetBinding(EnumButtonType.LEFT, device.LeftStick.Left, 1);
+ controller.SetBinding(EnumButtonType.RIGHT, device.LeftStick.Right, 1);
+ controller.SetBinding(EnumButtonType.UP, device.LeftStick.Up, 1);
+ controller.SetBinding(EnumButtonType.DOWN, device.LeftStick.Down, 1);
+ }
}
}
\ No newline at end of file
diff --git a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/XMBKeyBinding.cs b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/XMBKeyBinding.cs
index 5ef9669a..8061c3d0 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/XMBKeyBinding.cs
+++ b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/XMBKeyBinding.cs
@@ -112,5 +112,20 @@ namespace AxibugEmuOnline.Client
controller.SetBinding(EnumCommand.SelectItemRight, device.JOYSTICK.Right, 1);
controller.SetBinding(EnumCommand.SelectItemUp, device.JOYSTICK.Up, 1);
}
+ public override void Bind(SwitchJoyCon_D device, ControllerBinder controller)
+ {
+ controller.SetBinding(EnumCommand.Back, device.A, 0);
+ controller.SetBinding(EnumCommand.Enter, device.B, 0);
+ controller.SetBinding(EnumCommand.OptionMenu, device.Plus, 0);
+ controller.SetBinding(EnumCommand.SelectItemDown, device.Down, 0);
+ controller.SetBinding(EnumCommand.SelectItemLeft, device.Left, 0);
+ controller.SetBinding(EnumCommand.SelectItemRight, device.Right, 0);
+ controller.SetBinding(EnumCommand.SelectItemUp, device.Up, 0);
+
+ controller.SetBinding(EnumCommand.SelectItemDown, device.LeftStick.Down, 1);
+ controller.SetBinding(EnumCommand.SelectItemLeft, device.LeftStick.Left, 1);
+ controller.SetBinding(EnumCommand.SelectItemRight, device.LeftStick.Right, 1);
+ controller.SetBinding(EnumCommand.SelectItemUp, device.LeftStick.Up, 1);
+ }
}
}
\ No newline at end of file
diff --git a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/SwitchJoyCon_D.cs b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/SwitchJoyCon_D.cs
new file mode 100644
index 00000000..f5836d7e
--- /dev/null
+++ b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/SwitchJoyCon_D.cs
@@ -0,0 +1,34 @@
+锘縰sing AxibugProtobuf;
+
+namespace AxibugEmuOnline.Client.InputDevices
+{
+ public class SwitchJoyCon_D : InputDevice_D
+ {
+ public Button_C LeftSL;
+ public Button_C LeftSR;
+ public Button_C RightSL;
+ public Button_C RightSR;
+
+ public Button_C B;
+ public Button_C A;
+ public Button_C Y;
+ public Button_C X;
+
+ public Button_C Up;
+ public Button_C Down;
+ public Button_C Left;
+ public Button_C Right;
+
+ public Button_C Minus;
+ public Button_C Plus;
+
+ public Stick_C LeftStick;
+ public Stick_C RightStick;
+ public Button_C LeftStickPress;
+ public Button_C RightStickPress;
+
+ public SwitchJoyCon_D(InputResolver resolver) : base(resolver) { }
+
+ public override GamePadType PadType => GamePadType.SwitchJoyCon;
+ }
+}
\ No newline at end of file
diff --git a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/SwitchJoyCon_D.cs.meta b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/SwitchJoyCon_D.cs.meta
new file mode 100644
index 00000000..0fe358eb
--- /dev/null
+++ b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/SwitchJoyCon_D.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 28380f06191bd35458b20113fbd2960b
\ No newline at end of file
diff --git a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs
index 458ecc84..5bb9f530 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs
+++ b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs
@@ -1,5 +1,6 @@
锘縰sing System.Collections.Generic;
using UnityEngine;
+using UnityEngine.InputSystem;
namespace AxibugEmuOnline.Client.InputDevices
{
@@ -72,11 +73,48 @@ namespace AxibugEmuOnline.Client.InputDevices
{
return m_devices.Values;
}
-
+ List templog = new List();
/// 鐢卞閮ㄩ┍鍔ㄧ殑閫昏緫鏇存柊鍏ュ彛
public void Update()
{
foreach (var device in m_devices.Values) device.Update();
+
+ //string HadDrive = "";
+ //foreach (var device in InputSystem.devices)
+ //{
+ // if (device is Mouse)
+ // continue;
+ // bool bhadflag = false;
+
+ // templog.Clear();
+ // for (int i = 0; i < device.allControls.Count; i++)
+ // {
+ // if (device.allControls[i].IsPressed(0))
+ // {
+ // if (device.allControls[i].name.ToLower() == "anykey")
+ // continue;
+ // bhadflag = true;
+ // string keyname = $"{device.allControls[i].GetType().FullName}|{device.allControls[i].name},";
+ // templog.Add(keyname);
+ // }
+ // }
+
+ // if (bhadflag)
+ // {
+ // HadDrive += $" D:{device.GetType().FullName}|{device.GetType().BaseType.FullName}|{device.name}, K:";
+ // foreach (var s in templog)
+ // {
+ // HadDrive += s;
+ // }
+ // }
+
+ //}
+
+ //if (!string.IsNullOrEmpty(HadDrive))
+ //{
+ // Debug.Log($"Had Drive: {HadDrive}");
+ //}
+
}
}
}
\ No newline at end of file
diff --git a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs
index 0e9f910a..af6ff057 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs
+++ b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs
@@ -1,8 +1,18 @@
锘#if ENABLE_INPUT_SYSTEM
+
+#if UNITY_EDITOR || UNITY_STANDALONE_OSX || UNITY_STANDALONE_WIN || UNITY_WSA || PACKAGE_DOCS_GENERATION
+#define DUALSHOCK_SUPPORT
+#endif
+
+#if UNITY_EDITOR || UNITY_SWITCH || PACKAGE_DOCS_GENERATION
+#define JOYCON_SUPPORT
+#endif
+
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.DualShock;
+using UnityEngine.InputSystem.Switch;
using UnityEngine.InputSystem.XInput;
namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem
@@ -24,25 +34,25 @@ namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem
InputDevice_D newDevice = null;
if (ipdev is Keyboard) newDevice = new Keyboard_D(this);
-
-#if UNITY_STANDALONE || UNITY_PS5 || UNITY_PS4 || UNITY_PS3 //PC/Mac/Linux/PS345 鎵嶈兘鐢 DualShock
+#if DUALSHOCK_SUPPORT
else if (ipdev is DualShockGamepad)
{
if (ipdev is DualShock3GamepadHID) newDevice = new DualShockController_D(this, ps3: true);
else if (ipdev is DualShock4GamepadHID) newDevice = new DualShockController_D(this, ps4: true);
else if (ipdev is DualSenseGamepadHID) newDevice = new DualShockController_D(this, ps5: true);
else newDevice = new DualShockController_D(this);
-
}
#endif
-
-#if UNITY_STANDALONE_WIN //浠匴indows 鎵嶈兘鐢╔input
else if (ipdev is XInputController)
{
newDevice = new XboxController_D(this);
}
+#if JOYCON_SUPPORT
+ else if (ipdev is NPad)
+ {
+ newDevice = new SwitchJoyCon_D(this);
+ }
#endif
-
else if (ipdev is Gamepad) newDevice = new GamePad_D(this); //娉ㄦ剰Gamepad鐨勪紭鍏堢骇,鍥犱负浠讳綍鎵嬫焺,Inputsystem涓殑鍩虹被閮芥槸GamePad
if (newDevice != null)
@@ -240,6 +250,7 @@ namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem
mapper[keyboard_d.Semicolon] = ipKeyboard.semicolonKey;
mapper[keyboard_d.Quote] = ipKeyboard.quoteKey;
}
+#if DUALSHOCK_SUPPORT
else if (device_d is DualShockController_D ds_d)
{
var ipDsGamePad = ipdevice as DualShockGamepad;
@@ -263,6 +274,7 @@ namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem
mapper[ds_d.LeftStick] = ipDsGamePad.leftStick;
mapper[ds_d.RightStick] = ipDsGamePad.rightStick;
}
+#endif
else if (device_d is XboxController_D xbox_d)
{
var ipXInputGamePad = ipdevice as XInputController;
@@ -284,53 +296,53 @@ namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem
mapper[xbox_d.RightStickPress] = ipXInputGamePad.rightStickButton;
mapper[xbox_d.LeftStick] = ipXInputGamePad.leftStick;
mapper[xbox_d.RightStick] = ipXInputGamePad.rightStick;
-
}
+#if JOYCON_SUPPORT
+ else if (device_d is SwitchJoyCon_D joycon_d)
+ {
+ var ipdevice_joycon = ipdevice as NPad;
+ mapper[joycon_d.LeftSL] = ipdevice_joycon.leftSL;
+ mapper[joycon_d.LeftSR] = ipdevice_joycon.leftSR;
+ mapper[joycon_d.RightSL] = ipdevice_joycon.rightSL;
+ mapper[joycon_d.RightSR] = ipdevice_joycon.rightSR;
+ mapper[joycon_d.B] = ipdevice_joycon.bButton;
+ mapper[joycon_d.A] = ipdevice_joycon.aButton;
+ mapper[joycon_d.Y] = ipdevice_joycon.yButton;
+ mapper[joycon_d.X] = ipdevice_joycon.xButton;
+ mapper[joycon_d.Up] = ipdevice_joycon.dpad.up;
+ mapper[joycon_d.Down] = ipdevice_joycon.dpad.down;
+ mapper[joycon_d.Left] = ipdevice_joycon.dpad.left;
+ mapper[joycon_d.Right] = ipdevice_joycon.dpad.right;
+ mapper[joycon_d.Minus] = ipdevice_joycon.selectButton;
+ mapper[joycon_d.Plus] = ipdevice_joycon.startButton;
+ mapper[joycon_d.LeftStick] = ipdevice_joycon.leftStick;
+ mapper[joycon_d.RightStick] = ipdevice_joycon.rightStick;
+ mapper[joycon_d.RightStickPress] = ipdevice_joycon.rightStickButton;
+ mapper[joycon_d.LeftStickPress] = ipdevice_joycon.leftStickButton;
+ }
+#endif
else if (device_d is GamePad_D gamepad_d)
{
- if (ipdevice is UnityEngine.InputSystem.Switch.NPad ipdevice_ns)
- {
- mapper[gamepad_d.Up] = ipdevice_ns.dpad.up;
- mapper[gamepad_d.Down] = ipdevice_ns.dpad.down;
- mapper[gamepad_d.Left] = ipdevice_ns.dpad.left;
- mapper[gamepad_d.Right] = ipdevice_ns.dpad.right;
- mapper[gamepad_d.Select] = ipdevice_ns.selectButton;
- mapper[gamepad_d.Start] = ipdevice_ns.startButton;
- mapper[gamepad_d.North] = ipdevice_ns.xButton;
- mapper[gamepad_d.South] = ipdevice_ns.bButton;
- mapper[gamepad_d.West] = ipdevice_ns.yButton;
- mapper[gamepad_d.East] = ipdevice_ns.aButton;
- mapper[gamepad_d.LeftShoulder] = ipdevice_ns;
- mapper[gamepad_d.RightShoulder] = ipdevice_ns.rightShoulder;
- mapper[gamepad_d.LeftTrigger] = ipdevice_ns.leftTrigger;
- mapper[gamepad_d.RightTrigger] = ipdevice_ns.rightTrigger;
- mapper[gamepad_d.LeftStickPress] = ipdevice_ns.leftStickButton;
- mapper[gamepad_d.RightStickPress] = ipdevice_ns.rightStickButton;
- mapper[gamepad_d.LeftStick] = ipdevice_ns.leftStick;
- mapper[gamepad_d.RightStick] = ipdevice_ns.rightStick;
- }
- else
- {
- var ipGamepad = ipdevice as Gamepad;
- mapper[gamepad_d.Up] = ipGamepad.dpad.up;
- mapper[gamepad_d.Down] = ipGamepad.dpad.down;
- mapper[gamepad_d.Left] = ipGamepad.dpad.left;
- mapper[gamepad_d.Right] = ipGamepad.dpad.right;
- mapper[gamepad_d.Select] = ipGamepad.selectButton;
- mapper[gamepad_d.Start] = ipGamepad.startButton;
- mapper[gamepad_d.North] = ipGamepad.buttonNorth;
- mapper[gamepad_d.South] = ipGamepad.buttonSouth;
- mapper[gamepad_d.West] = ipGamepad.buttonWest;
- mapper[gamepad_d.East] = ipGamepad.buttonEast;
- mapper[gamepad_d.LeftShoulder] = ipGamepad.leftShoulder;
- mapper[gamepad_d.RightShoulder] = ipGamepad.rightShoulder;
- mapper[gamepad_d.LeftTrigger] = ipGamepad.leftTrigger;
- mapper[gamepad_d.RightTrigger] = ipGamepad.rightTrigger;
- mapper[gamepad_d.LeftStickPress] = ipGamepad.leftStickButton;
- mapper[gamepad_d.RightStickPress] = ipGamepad.rightStickButton;
- mapper[gamepad_d.LeftStick] = ipGamepad.leftStick;
- mapper[gamepad_d.RightStick] = ipGamepad.rightStick;
- }
+ var ipGamepad = ipdevice as Gamepad;
+ mapper[gamepad_d.Up] = ipGamepad.dpad.up;
+ mapper[gamepad_d.Down] = ipGamepad.dpad.down;
+ mapper[gamepad_d.Left] = ipGamepad.dpad.left;
+ mapper[gamepad_d.Right] = ipGamepad.dpad.right;
+ mapper[gamepad_d.Select] = ipGamepad.selectButton;
+ mapper[gamepad_d.Start] = ipGamepad.startButton;
+ mapper[gamepad_d.North] = ipGamepad.buttonNorth;
+ mapper[gamepad_d.South] = ipGamepad.buttonSouth;
+ mapper[gamepad_d.West] = ipGamepad.buttonWest;
+ mapper[gamepad_d.East] = ipGamepad.buttonEast;
+ mapper[gamepad_d.LeftShoulder] = ipGamepad.leftShoulder;
+ mapper[gamepad_d.RightShoulder] = ipGamepad.rightShoulder;
+ mapper[gamepad_d.LeftTrigger] = ipGamepad.leftTrigger;
+ mapper[gamepad_d.RightTrigger] = ipGamepad.rightTrigger;
+ mapper[gamepad_d.LeftStickPress] = ipGamepad.leftStickButton;
+ mapper[gamepad_d.RightStickPress] = ipGamepad.rightStickButton;
+ mapper[gamepad_d.LeftStick] = ipGamepad.leftStick;
+ mapper[gamepad_d.RightStick] = ipGamepad.rightStick;
+
}
else throw new System.NotImplementedException($"鍒濆鍖栬澶囧け璐,鏈疄鐜扮殑鐗╃悊鎸夐敭鏄犲皠 for {device_d.GetType()}");
}
@@ -339,6 +351,6 @@ namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem
m_deviceMapper.Remove(keyboard_d);
}
}
-
}
+
#endif
\ No newline at end of file
diff --git a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs
index f9fe714e..6e55d328 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs
+++ b/AxibugEmuOnline.Client.Switch/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;
}
@@ -63,7 +63,7 @@ namespace AxibugEmuOnline.Client
/// 瀛樻。椤哄簭鍙,鐢ㄤ簬鍒ゆ柇浜戝瓨妗e拰鏈湴瀛樻。鐨勫悓姝ョ姸鎬,鏄惁瀛樺湪鍐茬獊
public uint Sequecen { get; private set; }
- SimpleFSM FSM;
+ public SimpleFSM FSM { get; private set; }
byte[] m_savDataCaches;
byte[] m_screenShotCaches;
Header m_headerCache;
@@ -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);
@@ -217,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();
}
@@ -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.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/CheckingState.cs b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/CheckingState.cs
index 747eff1d..49bc45d4 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/CheckingState.cs
+++ b/AxibugEmuOnline.Client.Switch/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 = "鎷夊彇浜戝瓨妗f暟鎹秴鏃";
+ 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.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/ConflictState.cs b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/ConflictState.cs
index bda56747..1d510479 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/ConflictState.cs
+++ b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/ConflictState.cs
@@ -1,4 +1,5 @@
锘縰sing 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.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/DownloadingState.cs b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/DownloadingState.cs
index fa3c0924..1194c946 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/DownloadingState.cs
+++ b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/DownloadingState.cs
@@ -1,5 +1,6 @@
锘縰sing 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) //鐢卞啿绐佺姸鎬佽浆鎹负涓嬭浇鐘舵侊紝浠h〃浣跨敤缃戠粶瀛樻。瑕嗙洊鏈湴
+ {
+ 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.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/SyncFailedState.cs b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/SyncFailedState.cs
new file mode 100644
index 00000000..85edfd09
--- /dev/null
+++ b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/SyncFailedState.cs
@@ -0,0 +1,18 @@
+锘縰sing 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.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/SyncFailedState.cs.meta b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/SyncFailedState.cs.meta
new file mode 100644
index 00000000..11efab87
--- /dev/null
+++ b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFileSyncStates/SyncFailedState.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 36be8767f260af04ba9ed88d2d4cd775
\ No newline at end of file
diff --git a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SimpleSFM.cs b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SimpleSFM.cs
index fbc21f5b..b33efc73 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Manager/SaveSlotManager/SimpleSFM.cs
+++ b/AxibugEmuOnline.Client.Switch/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,44 +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);
- nextState.LastState = m_current;
- nextState.OnEnter(m_current);
- m_current = nextState;
+ State preState = CurrentState;
+ // 閫鍑哄綋鍓嶇姸鎬
+ if (preState != null) preState.OnExit(nextState);
+
+ // 鏇存柊褰撳墠鐘舵
+ CurrentState = nextState;
+ CurrentState.LastState = 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()
@@ -88,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.Switch/Assets/Script/AppMain/Switch/SwitchCommon.cs b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Switch/SwitchCommon.cs
index e28f5ee2..d0d6e381 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Switch/SwitchCommon.cs
+++ b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/Switch/SwitchCommon.cs
@@ -1,9 +1,11 @@
锘縰sing AxibugEmuOnline.Client;
+using AxibugEmuOnline.Client.ClientCore;
using UnityEngine;
public class SwitchCommon : MonoBehaviour
{
void Start()
{
+ Debug.Log("SwitchCommon Start");
TickLoop.LoopAction_15s += ApplyCommit;
}
diff --git a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs
index 2494aeb1..e235e0eb 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs
+++ b/AxibugEmuOnline.Client.Switch/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
diff --git a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs b/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs
index 50eafcac..8bbffddb 100644
--- a/AxibugEmuOnline.Client.Switch/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs
+++ b/AxibugEmuOnline.Client.Switch/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)
{