diff --git a/Assets/Resources/Images/Ride/编组 15.png b/Assets/Resources/Images/Ride/编组 15.png new file mode 100644 index 00000000..1985dbc6 Binary files /dev/null and b/Assets/Resources/Images/Ride/编组 15.png differ diff --git a/Assets/Resources/Images/Ride/编组 15.png.meta b/Assets/Resources/Images/Ride/编组 15.png.meta new file mode 100644 index 00000000..ac9697ab --- /dev/null +++ b/Assets/Resources/Images/Ride/编组 15.png.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 762994a6a0b398c49b038120301bf5de +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + 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 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + 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 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/UI/Prefab/Match/CompetitonPanel.prefab b/Assets/Resources/UI/Prefab/Match/CompetitonPanel.prefab index 4bae737a..722bf7fe 100644 --- a/Assets/Resources/UI/Prefab/Match/CompetitonPanel.prefab +++ b/Assets/Resources/UI/Prefab/Match/CompetitonPanel.prefab @@ -124,6 +124,84 @@ MonoBehaviour: m_OnValueChanged: m_PersistentCalls: m_Calls: [] +--- !u!1 &486928665351942900 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6098493334929419579} + - component: {fileID: 8367125415035570718} + - component: {fileID: 3434730319805254204} + m_Layer: 5 + m_Name: MapId + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6098493334929419579 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 486928665351942900} + 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_Children: [] + m_Father: {fileID: 6558498177448486125} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 606.7, y: -179} + m_SizeDelta: {x: 83.693054, y: 28} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8367125415035570718 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 486928665351942900} + m_CullTransparentMesh: 0 +--- !u!114 &3434730319805254204 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 486928665351942900} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 1db9e217733971041be26b076fda6083, type: 3} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 6 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0 --- !u!1 &568794585315016799 GameObject: m_ObjectHideFlags: 0 @@ -515,7 +593,7 @@ RectTransform: m_Children: - {fileID: 7308942387469008178} m_Father: {fileID: 6558498177448486125} - m_RootOrder: 27 + m_RootOrder: 29 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -851,7 +929,7 @@ RectTransform: - {fileID: 5698108039784919937} - {fileID: 7832561499842500791} m_Father: {fileID: 6558498177448486125} - m_RootOrder: 33 + m_RootOrder: 35 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -1223,7 +1301,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 6558498177448486125} - m_RootOrder: 32 + m_RootOrder: 34 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -1301,7 +1379,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 6558498177448486125} - m_RootOrder: 17 + m_RootOrder: 19 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -1673,7 +1751,7 @@ RectTransform: - {fileID: 7508488585840996723} - {fileID: 804126381881165943} m_Father: {fileID: 6558498177448486125} - m_RootOrder: 35 + m_RootOrder: 37 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -1808,7 +1886,7 @@ RectTransform: - {fileID: 9050330319599987492} - {fileID: 4958187996342670554} m_Father: {fileID: 6558498177448486125} - m_RootOrder: 37 + m_RootOrder: 39 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -2336,7 +2414,7 @@ RectTransform: - {fileID: 6558498177838812408} - {fileID: 6558498178609268828} m_Father: {fileID: 6558498177448486125} - m_RootOrder: 38 + m_RootOrder: 40 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -2468,7 +2546,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 6558498177448486125} - m_RootOrder: 26 + m_RootOrder: 28 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -2930,6 +3008,8 @@ RectTransform: - {fileID: 6558498178970650012} - {fileID: 6558498179157108068} - {fileID: 6558498179321791264} + - {fileID: 169318638442674245} + - {fileID: 6098493334929419579} - {fileID: 7411107261559440790} - {fileID: 6558498177678574344} - {fileID: 6558498178512125495} @@ -3150,7 +3230,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 6558498177448486125} - m_RootOrder: 18 + m_RootOrder: 20 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -3228,7 +3308,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 6558498177448486125} - m_RootOrder: 25 + m_RootOrder: 27 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -3513,7 +3593,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 6558498177448486125} - m_RootOrder: 30 + m_RootOrder: 32 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -3593,7 +3673,7 @@ RectTransform: - {fileID: 5276663987612575157} - {fileID: 6558498178766627004} m_Father: {fileID: 6558498177448486125} - m_RootOrder: 28 + m_RootOrder: 30 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -3672,7 +3752,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 6558498177448486125} - m_RootOrder: 29 + m_RootOrder: 31 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -3988,7 +4068,7 @@ RectTransform: - {fileID: 6558498178642912254} - {fileID: 6558498177739491041} m_Father: {fileID: 6558498177448486125} - m_RootOrder: 34 + m_RootOrder: 36 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -4203,7 +4283,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 6558498177448486125} - m_RootOrder: 22 + m_RootOrder: 24 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -4562,7 +4642,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 6558498177448486125} - m_RootOrder: 19 + m_RootOrder: 21 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -4714,7 +4794,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 6558498177448486125} - m_RootOrder: 39 + m_RootOrder: 41 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -4999,7 +5079,7 @@ RectTransform: - {fileID: 6558498178369272025} - {fileID: 6558498178957397887} m_Father: {fileID: 6558498177448486125} - m_RootOrder: 36 + m_RootOrder: 38 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -5821,7 +5901,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 6558498177448486125} - m_RootOrder: 23 + m_RootOrder: 25 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -5977,7 +6057,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 6558498177448486125} - m_RootOrder: 21 + m_RootOrder: 23 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -6025,6 +6105,80 @@ MonoBehaviour: m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: 0000 - 00-00 00:00:00 +--- !u!1 &6967565870765060030 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 169318638442674245} + - component: {fileID: 8954508495726212577} + - component: {fileID: 7439621176865291513} + m_Layer: 5 + m_Name: MapIcon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &169318638442674245 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6967565870765060030} + 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_Children: [] + m_Father: {fileID: 6558498177448486125} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 544.8535, y: -181} + m_SizeDelta: {x: 16, y: 16} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8954508495726212577 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6967565870765060030} + m_CullTransparentMesh: 0 +--- !u!114 &7439621176865291513 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6967565870765060030} + 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: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 762994a6a0b398c49b038120301bf5de, 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 &6980510087908380503 GameObject: m_ObjectHideFlags: 0 @@ -6131,7 +6285,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 6558498177448486125} - m_RootOrder: 31 + m_RootOrder: 33 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -6583,7 +6737,7 @@ RectTransform: - {fileID: 4513700211969794283} - {fileID: 4980171126590156168} m_Father: {fileID: 6558498177448486125} - m_RootOrder: 24 + m_RootOrder: 26 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -6811,7 +6965,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 6558498177448486125} - m_RootOrder: 20 + m_RootOrder: 22 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} diff --git a/Assets/Resources/UI/Prefab/Match/LoadingPanel.prefab b/Assets/Resources/UI/Prefab/Match/LoadingPanel.prefab index a8fff719..e535d57c 100644 --- a/Assets/Resources/UI/Prefab/Match/LoadingPanel.prefab +++ b/Assets/Resources/UI/Prefab/Match/LoadingPanel.prefab @@ -34,7 +34,7 @@ RectTransform: - {fileID: 145307034357954014} - {fileID: 3327674566083090465} m_Father: {fileID: 3007624749581944593} - m_RootOrder: 27 + m_RootOrder: 29 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -169,7 +169,7 @@ RectTransform: - {fileID: 145307034124314502} - {fileID: 3327674565846436473} m_Father: {fileID: 3007624749581944593} - m_RootOrder: 28 + m_RootOrder: 30 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -984,6 +984,84 @@ MonoBehaviour: m_OnValueChanged: m_PersistentCalls: m_Calls: [] +--- !u!1 &2769541347924689023 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 756218096192378214} + - component: {fileID: 5327673503896133289} + - component: {fileID: 7601601580800100336} + m_Layer: 5 + m_Name: MapId + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &756218096192378214 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2769541347924689023} + 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_Children: [] + m_Father: {fileID: 3007624749581944593} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 153.85, y: -344.3} + m_SizeDelta: {x: 83.693054, y: 28} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5327673503896133289 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2769541347924689023} + m_CullTransparentMesh: 0 +--- !u!114 &7601601580800100336 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2769541347924689023} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 1db9e217733971041be26b076fda6083, type: 3} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 6 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 0 --- !u!1 &3007624748289717559 GameObject: m_ObjectHideFlags: 0 @@ -1014,11 +1092,11 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3007624749581944593} - m_RootOrder: 12 + m_RootOrder: 14 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 92, y: -429} + m_AnchoredPosition: {x: 92, y: -457.69998} m_SizeDelta: {x: 16, y: 16} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3007624748289717560 @@ -1088,7 +1166,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3007624749581944593} - m_RootOrder: 6 + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -1159,11 +1237,11 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3007624749581944593} - m_RootOrder: 13 + m_RootOrder: 15 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 153.8465, y: -427} + m_AnchoredPosition: {x: 153.8465, y: -455.69998} m_SizeDelta: {x: 83.693054, y: 28} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3007624748526063404 @@ -1237,11 +1315,11 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3007624749581944593} - m_RootOrder: 15 + m_RootOrder: 17 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 153.84656, y: -389} + m_AnchoredPosition: {x: 153.84656, y: -417.69998} m_SizeDelta: {x: 83.693054, y: 28} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3007624748546083608 @@ -1413,11 +1491,11 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3007624749581944593} - m_RootOrder: 10 + m_RootOrder: 12 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 92, y: -353} + m_AnchoredPosition: {x: 92, y: -381.69998} m_SizeDelta: {x: 16, y: 16} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3007624748693613234 @@ -1487,7 +1565,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3007624749581944593} - m_RootOrder: 29 + m_RootOrder: 31 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1640,7 +1718,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3007624749581944593} - m_RootOrder: 5 + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -1947,7 +2025,7 @@ RectTransform: m_Children: - {fileID: 3007624749716399586} m_Father: {fileID: 3007624749581944593} - m_RootOrder: 9 + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -2034,11 +2112,11 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3007624749581944593} - m_RootOrder: 14 + m_RootOrder: 16 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 92, y: -391} + m_AnchoredPosition: {x: 92, y: -419.69998} m_SizeDelta: {x: 16, y: 16} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3007624749186584481 @@ -2108,7 +2186,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3007624749581944593} - m_RootOrder: 25 + m_RootOrder: 27 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1} @@ -2184,7 +2262,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3007624749581944593} - m_RootOrder: 8 + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -2255,11 +2333,11 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3007624749581944593} - m_RootOrder: 17 + m_RootOrder: 19 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 153.8465, y: -465} + m_AnchoredPosition: {x: 153.8465, y: -493.69998} m_SizeDelta: {x: 83.693054, y: 28} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3007624749335273309 @@ -2411,7 +2489,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3007624749581944593} - m_RootOrder: 21 + m_RootOrder: 23 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -2494,6 +2572,8 @@ RectTransform: - {fileID: 3007624748601755783} - {fileID: 2322716380738134732} - {fileID: 3007624748799085429} + - {fileID: 5324006962730904505} + - {fileID: 756218096192378214} - {fileID: 3007624748807431534} - {fileID: 3007624748412546457} - {fileID: 3007624750289242273} @@ -2610,7 +2690,7 @@ RectTransform: - {fileID: 3007624749338625854} - {fileID: 3007624749010474861} m_Father: {fileID: 3007624749581944593} - m_RootOrder: 26 + m_RootOrder: 28 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -2742,7 +2822,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3007624749581944593} - m_RootOrder: 18 + m_RootOrder: 20 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -2904,7 +2984,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3007624749581944593} - m_RootOrder: 23 + m_RootOrder: 25 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -2983,7 +3063,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3007624749581944593} - m_RootOrder: 19 + m_RootOrder: 21 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -3067,7 +3147,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3007624749581944593} - m_RootOrder: 20 + m_RootOrder: 22 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -3243,7 +3323,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3007624749581944593} - m_RootOrder: 24 + m_RootOrder: 26 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1} @@ -3321,11 +3401,11 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3007624749581944593} - m_RootOrder: 16 + m_RootOrder: 18 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 92, y: -466} + m_AnchoredPosition: {x: 92, y: -494.69998} m_SizeDelta: {x: 16, y: 16} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3007624750146435812 @@ -3396,7 +3476,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3007624749581944593} - m_RootOrder: 22 + m_RootOrder: 24 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -3486,11 +3566,11 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3007624749581944593} - m_RootOrder: 11 + m_RootOrder: 13 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 153.84656, y: -351} + m_AnchoredPosition: {x: 153.84656, y: -379.69998} m_SizeDelta: {x: 83.693054, y: 28} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3007624750243088003 @@ -3564,7 +3644,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 3007624749581944593} - m_RootOrder: 7 + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} @@ -3887,3 +3967,77 @@ MonoBehaviour: m_EditorClassIdentifier: m_HorizontalFit: 2 m_VerticalFit: 0 +--- !u!1 &8110328268474125505 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5324006962730904505} + - component: {fileID: 7943435336564939480} + - component: {fileID: 6981647137641869650} + m_Layer: 5 + m_Name: MapIcon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5324006962730904505 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8110328268474125505} + 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_Children: [] + m_Father: {fileID: 3007624749581944593} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 92, y: -346.3} + m_SizeDelta: {x: 16, y: 16} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7943435336564939480 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8110328268474125505} + m_CullTransparentMesh: 0 +--- !u!114 &6981647137641869650 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8110328268474125505} + 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: 0.40392157, g: 0.40392157, b: 0.4745098, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 762994a6a0b398c49b038120301bf5de, 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 diff --git a/Assets/Resources/UI/Prefab/Panel/BigMapPanel.prefab b/Assets/Resources/UI/Prefab/Panel/BigMapPanel.prefab index 5befb1b4..e1010805 100644 --- a/Assets/Resources/UI/Prefab/Panel/BigMapPanel.prefab +++ b/Assets/Resources/UI/Prefab/Panel/BigMapPanel.prefab @@ -336,7 +336,7 @@ MonoBehaviour: m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 - m_Text: Search Road + m_Text: Search Route --- !u!1 &1394950112273882093 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Resources/UI/Prefab/Panel/MapListPanel.prefab b/Assets/Resources/UI/Prefab/Panel/MapListPanel.prefab index 012f0cab..883a0167 100644 --- a/Assets/Resources/UI/Prefab/Panel/MapListPanel.prefab +++ b/Assets/Resources/UI/Prefab/Panel/MapListPanel.prefab @@ -1502,7 +1502,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: bf6cef625b150984384b02d2e94b91ff, type: 3} + m_Sprite: {fileID: 21300000, guid: 998c9c31435c99f498b189bcc65c5650, type: 3} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 diff --git a/Assets/Scripts/Apis/MapApi.cs b/Assets/Scripts/Apis/MapApi.cs index 46322c3f..e131195d 100644 --- a/Assets/Scripts/Apis/MapApi.cs +++ b/Assets/Scripts/Apis/MapApi.cs @@ -59,7 +59,12 @@ namespace Assets.Scripts.Apis /// public Task>> GetList(int pageIndex, int pageSize, string name, string distance="", string hands="", bool is3D=false, string sort="", string sortDire = "", bool isFav = false) { - var url = $"Map/GetRoute?pageIndex={ pageIndex }&pageSize={ pageSize }&name={ name }&distance={ distance }&hands={ hands }&is3D={ is3D }&sort={ sort }&sortDire={ sortDire }&isFav={isFav}"; + string lngLat = ""; + if (sort.Equals("Near")) + { + lngLat = $"{App.longitude},{App.latitude}"; + } + var url = $"Map/GetRoute?pageIndex={ pageIndex }&pageSize={ pageSize }&name={ name }&distance={ distance }&hands={ hands }&is3D={ is3D }&sort={ sort }&sortDire={ sortDire }&isFav={isFav}&lngLat={lngLat}"; return GetAsync>>(url); } diff --git a/Assets/Scripts/Devices/Ble/BleDevice.cs b/Assets/Scripts/Devices/Ble/BleDevice.cs index 6b634c20..5b799534 100644 --- a/Assets/Scripts/Devices/Ble/BleDevice.cs +++ b/Assets/Scripts/Devices/Ble/BleDevice.cs @@ -17,7 +17,7 @@ namespace Assets.Scripts.Devices.Ble public abstract class BleDevice : AbstractDevice { - protected BleWinHwInterface hwInterface; + protected IBleWinHwInterface hwInterface; protected BlePeripheralInfo peripheralInfo; private readonly HashSet services = new HashSet(); @@ -32,7 +32,7 @@ namespace Assets.Scripts.Devices.Ble } public List Characteristics { get; protected set; } = new List(); - public BleDevice(BlePeripheralInfo peripheralInfo, BleWinHwInterface bleWinHwInterface, SensorType sensor) : base(peripheralInfo.Address, NetworkType.BLE) + public BleDevice(BlePeripheralInfo peripheralInfo, IBleWinHwInterface bleWinHwInterface, SensorType sensor) : base(peripheralInfo.Address, NetworkType.BLE) { this.hwInterface = bleWinHwInterface; this.hwInterface.BluetoothStateChangedEvent += BluetoothStateChangedEvent; @@ -50,7 +50,7 @@ namespace Assets.Scripts.Devices.Ble Characteristics.Add(new ModelNumberCharacteristic()); } - private void HwInterface_PeripheralDisconnectedEvent(BleWinHwInterface hwInterface, BlePeripheralInfo peripheral, BleResponse response, bool manualDisconnect) + private void HwInterface_PeripheralDisconnectedEvent(IBleWinHwInterface hwInterface, BlePeripheralInfo peripheral, BleResponse response, bool manualDisconnect) { if (!peripheral.MatchAddress(this.peripheralInfo.Address)) { @@ -93,7 +93,7 @@ namespace Assets.Scripts.Devices.Ble } } - private void PeripheralConnectedAction(BleWinHwInterface hwInterface, BlePeripheralInfo sender, BleResponse response) + private void PeripheralConnectedAction(IBleWinHwInterface hwInterface, BlePeripheralInfo sender, BleResponse response) { Debug.Log($"连接{ this.Name }"+response.IsSuccess); if (response.IsSuccess) @@ -136,7 +136,7 @@ namespace Assets.Scripts.Devices.Ble - private void ServicesDiscoveredAction(BleWinHwInterface hwInterface, BlePeripheralInfo sender, BleResponse> response) + private void ServicesDiscoveredAction(IBleWinHwInterface hwInterface, BlePeripheralInfo sender, BleResponse> response) { //Debug.Log("搜索service"); if(!response.IsSuccess || !response.Data.Any()) @@ -211,7 +211,7 @@ namespace Assets.Scripts.Devices.Ble { } - private void BluetoothStateChangedEvent(BleWinHwInterface hwInterface, BleState state) + private void BluetoothStateChangedEvent(IBleWinHwInterface hwInterface, BleState state) { switch (state) { diff --git a/Assets/Scripts/Devices/Ble/BleDeviceAdapter.cs b/Assets/Scripts/Devices/Ble/BleDeviceAdapter.cs index 823b439b..b32faaae 100644 --- a/Assets/Scripts/Devices/Ble/BleDeviceAdapter.cs +++ b/Assets/Scripts/Devices/Ble/BleDeviceAdapter.cs @@ -1,6 +1,7 @@ using Assets.Scripts.Ble; using Assets.Scripts.Ble.Service; using Assets.Scripts.Devices.Ble.Devices; +using Assets.Scripts.Devices.Ble.Interfaces; using Assets.Scripts.UI.Prefab.Device; using System; using System.Collections.Generic; @@ -17,15 +18,16 @@ namespace Assets.Scripts.Devices.Ble private IDictionary discoveredDevices = new Dictionary(); - private BleWinHwInterface hwInterface; - public BleDeviceAdapter() + private IBleWinHwInterface hwInterface { get; set; } + public BleDeviceAdapter(IBleWinHwInterface bleWinHwInterface) { - hwInterface = BleWinHwInterface.GetInterface(); + + hwInterface = bleWinHwInterface;// BleWinHwInterface.GetInterface(); hwInterface.BluetoothStateChangedEvent += HwInterface_BluetoothStateChangedEvent; } - private void HwInterface_BluetoothStateChangedEvent(BleWinHwInterface hwInterface, BleState bleState) + private void HwInterface_BluetoothStateChangedEvent(IBleWinHwInterface hwInterface, BleState bleState) { //Debug.Log("22222222222222" + bleState); if(bleState == BleState.Off) diff --git a/Assets/Scripts/Devices/Ble/BluetoothStateChangedCallback.cs b/Assets/Scripts/Devices/Ble/BluetoothStateChangedCallback.cs index c8fd1484..7a038776 100644 --- a/Assets/Scripts/Devices/Ble/BluetoothStateChangedCallback.cs +++ b/Assets/Scripts/Devices/Ble/BluetoothStateChangedCallback.cs @@ -1,4 +1,5 @@ -using System; +using Assets.Scripts.Devices.Ble.Interfaces; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -6,6 +7,6 @@ using System.Threading.Tasks; namespace Assets.Scripts.Ble { - public delegate void BluetoothStateChangedCallback(BleWinHwInterface hwInterface, BleState bleState); + public delegate void BluetoothStateChangedCallback(IBleWinHwInterface hwInterface, BleState bleState); } diff --git a/Assets/Scripts/Devices/Ble/CharacteristicReadCallback.cs b/Assets/Scripts/Devices/Ble/CharacteristicReadCallback.cs index 9328c12a..b81a34fe 100644 --- a/Assets/Scripts/Devices/Ble/CharacteristicReadCallback.cs +++ b/Assets/Scripts/Devices/Ble/CharacteristicReadCallback.cs @@ -1,4 +1,5 @@ using Assets.Scripts.Devices.Ble; +using Assets.Scripts.Devices.Ble.Interfaces; using System; using System.Collections.Generic; using System.Linq; @@ -7,5 +8,5 @@ using System.Threading.Tasks; namespace Assets.Scripts.Ble { - public delegate void CharacteristicReadCallback(BleWinHwInterface hwInterface, BleCharacteristicInfo characteristic, BleResponse response); + public delegate void CharacteristicReadCallback(IBleWinHwInterface hwInterface, BleCharacteristicInfo characteristic, BleResponse response); } diff --git a/Assets/Scripts/Devices/Ble/CharacteristicsDiscoveredCallback.cs b/Assets/Scripts/Devices/Ble/CharacteristicsDiscoveredCallback.cs index d3fab0e7..d32563d2 100644 --- a/Assets/Scripts/Devices/Ble/CharacteristicsDiscoveredCallback.cs +++ b/Assets/Scripts/Devices/Ble/CharacteristicsDiscoveredCallback.cs @@ -1,4 +1,5 @@ using Assets.Scripts.Devices.Ble; +using Assets.Scripts.Devices.Ble.Interfaces; using System; using System.Collections.Generic; using System.Linq; @@ -7,5 +8,5 @@ using System.Threading.Tasks; namespace Assets.Scripts.Ble { - public delegate void CharacteristicsDiscoveredCallback(BleWinHwInterface hwInterface, BleServiceInfo service, BleResponse> response); + public delegate void CharacteristicsDiscoveredCallback(IBleWinHwInterface hwInterface, BleServiceInfo service, BleResponse> response); } diff --git a/Assets/Scripts/Devices/Ble/Devices/CyclingPower.cs b/Assets/Scripts/Devices/Ble/Devices/CyclingPower.cs index 23bbca0b..097080b8 100644 --- a/Assets/Scripts/Devices/Ble/Devices/CyclingPower.cs +++ b/Assets/Scripts/Devices/Ble/Devices/CyclingPower.cs @@ -1,6 +1,7 @@ using Assets.Scripts.Ble; using Assets.Scripts.Devices.Ant.Interfaces; using Assets.Scripts.Devices.Ble.Characteristic; +using Assets.Scripts.Devices.Ble.Interfaces; using System; using System.Collections.Generic; using System.Linq; @@ -14,7 +15,7 @@ namespace Assets.Scripts.Devices.Ble.Devices { private List Services; private CyclingPowerMeasurement cyclingPowerMeasurement; - public CyclingPower(BlePeripheralInfo peripheralInfo, BleWinHwInterface bleWinHwInterface) : base(peripheralInfo, bleWinHwInterface, Ant.SensorType.Power) + public CyclingPower(BlePeripheralInfo peripheralInfo, IBleWinHwInterface bleWinHwInterface) : base(peripheralInfo, bleWinHwInterface, Ant.SensorType.Power) { Priority = 2; cyclingPowerMeasurement = new CyclingPowerMeasurement(1920); @@ -49,7 +50,7 @@ namespace Assets.Scripts.Devices.Ble.Devices } - private void CharacteristicReadMainCallback(BleWinHwInterface hwInterface, BleCharacteristicInfo characteristic, BleResponse response) + private void CharacteristicReadMainCallback(IBleWinHwInterface hwInterface, BleCharacteristicInfo characteristic, BleResponse response) { //Debug.Log("power main call" + string.Join(",", response.Data)); diff --git a/Assets/Scripts/Devices/Ble/Devices/Ftms.cs b/Assets/Scripts/Devices/Ble/Devices/Ftms.cs index 5cc33535..1fb5db56 100644 --- a/Assets/Scripts/Devices/Ble/Devices/Ftms.cs +++ b/Assets/Scripts/Devices/Ble/Devices/Ftms.cs @@ -1,6 +1,7 @@ using Assets.Scripts.Ble; using Assets.Scripts.Devices.Ant.Interfaces; using Assets.Scripts.Devices.Ble.Characteristic; +using Assets.Scripts.Devices.Ble.Interfaces; using System; using System.Collections.Generic; using System.Linq; @@ -21,7 +22,7 @@ namespace Assets.Scripts.Devices.Ble.Devices private List Services; private BleCharacteristicInfo controlPointCharacteristic; - public Ftms(BlePeripheralInfo peripheralInfo, BleWinHwInterface bleWinHwInterface) :base(peripheralInfo, bleWinHwInterface, Ant.SensorType.Trainer) + public Ftms(BlePeripheralInfo peripheralInfo, IBleWinHwInterface bleWinHwInterface) :base(peripheralInfo, bleWinHwInterface, Ant.SensorType.Trainer) { this._ftmsIndoorBikeData = new FtmsIndoorBikeData(); base.Characteristics.Add(this._ftmsIndoorBikeData); @@ -60,7 +61,7 @@ namespace Assets.Scripts.Devices.Ble.Devices } } - private void CharacteristicReadMainCallback(BleWinHwInterface hwInterface, BleCharacteristicInfo characteristic, BleResponse response) + private void CharacteristicReadMainCallback(IBleWinHwInterface hwInterface, BleCharacteristicInfo characteristic, BleResponse response) { foreach (var item in base.Characteristics) { diff --git a/Assets/Scripts/Devices/Ble/Devices/HeartRate.cs b/Assets/Scripts/Devices/Ble/Devices/HeartRate.cs index c84781d1..5ce8abf3 100644 --- a/Assets/Scripts/Devices/Ble/Devices/HeartRate.cs +++ b/Assets/Scripts/Devices/Ble/Devices/HeartRate.cs @@ -1,6 +1,7 @@ using Assets.Scripts.Ble; using Assets.Scripts.Devices.Ant.Interfaces; using Assets.Scripts.Devices.Ble.Characteristic; +using Assets.Scripts.Devices.Ble.Interfaces; using System; using System.Collections.Generic; using System.Linq; @@ -16,7 +17,7 @@ namespace Assets.Scripts.Devices.Ble.Devices private List Services; private HeartRateMeasurement heartRateMeasurement; - public HeartRate(BlePeripheralInfo peripheralInfo, BleWinHwInterface bleWinHwInterface) : base(peripheralInfo, bleWinHwInterface, Ant.SensorType.HeartRate) + public HeartRate(BlePeripheralInfo peripheralInfo, IBleWinHwInterface bleWinHwInterface) : base(peripheralInfo, bleWinHwInterface, Ant.SensorType.HeartRate) { Priority = 2; heartRateMeasurement = new HeartRateMeasurement(); @@ -73,7 +74,7 @@ namespace Assets.Scripts.Devices.Ble.Devices }); } - private void CharacteristicReadMainCallback(BleWinHwInterface hwInterface, BleCharacteristicInfo characteristic, BleResponse response) + private void CharacteristicReadMainCallback(IBleWinHwInterface hwInterface, BleCharacteristicInfo characteristic, BleResponse response) { //Debug.Log("heart rate main call" + string.Join(",", response.Data)); diff --git a/Assets/Scripts/Devices/Ble/Devices/SpeedCadence.cs b/Assets/Scripts/Devices/Ble/Devices/SpeedCadence.cs index 504a4fd0..281d4546 100644 --- a/Assets/Scripts/Devices/Ble/Devices/SpeedCadence.cs +++ b/Assets/Scripts/Devices/Ble/Devices/SpeedCadence.cs @@ -1,6 +1,7 @@ using Assets.Scripts.Ble; using Assets.Scripts.Devices.Ant.Interfaces; using Assets.Scripts.Devices.Ble.Characteristic; +using Assets.Scripts.Devices.Ble.Interfaces; using System; using System.Collections.Generic; using System.Linq; @@ -18,7 +19,7 @@ namespace Assets.Scripts.Devices.Ble.Devices private double _wheelCircumference; private List Services; - public SpeedCadence(BlePeripheralInfo peripheralInfo, BleWinHwInterface bleWinHwInterface) : base(peripheralInfo, bleWinHwInterface, Ant.SensorType.SpeedCadence) + public SpeedCadence(BlePeripheralInfo peripheralInfo, IBleWinHwInterface bleWinHwInterface) : base(peripheralInfo, bleWinHwInterface, Ant.SensorType.SpeedCadence) { Debug.Log("创建速度踏频设备"); Priority = 1; @@ -81,7 +82,7 @@ namespace Assets.Scripts.Devices.Ble.Devices } - private void CharacteristicReadMainCallback(BleWinHwInterface hwInterface, BleCharacteristicInfo characteristic, BleResponse response) + private void CharacteristicReadMainCallback(IBleWinHwInterface hwInterface, BleCharacteristicInfo characteristic, BleResponse response) { //Debug.Log("power main call" + string.Join(",", response.Data)); diff --git a/Assets/Scripts/Devices/Ble/Devices/Tacx.cs b/Assets/Scripts/Devices/Ble/Devices/Tacx.cs index 39333b15..5c6c1e94 100644 --- a/Assets/Scripts/Devices/Ble/Devices/Tacx.cs +++ b/Assets/Scripts/Devices/Ble/Devices/Tacx.cs @@ -2,6 +2,7 @@ using Assets.Scripts.Devices.Ant; using Assets.Scripts.Devices.Ant.Interfaces; using Assets.Scripts.Devices.Ble.Characteristic; +using Assets.Scripts.Devices.Ble.Interfaces; using System; using System.Collections.Generic; using System.Linq; @@ -30,7 +31,7 @@ namespace Assets.Scripts.Devices.Ble.Devices /// private double _grade = 0; - public Tacx(BlePeripheralInfo peripheralInfo, BleWinHwInterface bleWinHwInterface) : base(peripheralInfo, bleWinHwInterface, Ant.SensorType.Trainer) + public Tacx(BlePeripheralInfo peripheralInfo, IBleWinHwInterface bleWinHwInterface) : base(peripheralInfo, bleWinHwInterface, Ant.SensorType.Trainer) { tacxFecNotify = new TacxFecNotify(); base.Characteristics.Add(tacxFecNotify); @@ -75,7 +76,7 @@ namespace Assets.Scripts.Devices.Ble.Devices } } - private void CharacteristicReadMainCallback(BleWinHwInterface hwInterface, BleCharacteristicInfo characteristic, BleResponse response) + private void CharacteristicReadMainCallback(IBleWinHwInterface hwInterface, BleCharacteristicInfo characteristic, BleResponse response) { foreach (var item in base.Characteristics) { diff --git a/Assets/Scripts/Devices/Ble/HeartRate/HeartRateService.cs b/Assets/Scripts/Devices/Ble/HeartRate/HeartRateService.cs index dc9f5fef..00bb791b 100644 --- a/Assets/Scripts/Devices/Ble/HeartRate/HeartRateService.cs +++ b/Assets/Scripts/Devices/Ble/HeartRate/HeartRateService.cs @@ -2,6 +2,7 @@ using Assets.Scripts.Ble.Service; using Assets.Scripts.Commands; using Assets.Scripts.Devices.Ble; +using Assets.Scripts.Devices.Ble.Interfaces; using System; using System.Collections.Generic; using System.Linq; @@ -36,12 +37,12 @@ namespace Assets.Scripts.Ble.HeartRate } } - private void HrmCharacteristicSubscribed(BleWinHwInterface winHwInterface, BleCharacteristicInfo characteristic, BleResponse response) + private void HrmCharacteristicSubscribed(IBleWinHwInterface winHwInterface, BleCharacteristicInfo characteristic, BleResponse response) { } - private void HrmCharacteristicRead(BleWinHwInterface winHwInterface, BleCharacteristicInfo characteristic, BleResponse response) + private void HrmCharacteristicRead(IBleWinHwInterface winHwInterface, BleCharacteristicInfo characteristic, BleResponse response) { HeartRateMeasurementValue heartRateMeasurementValue; if(base.CheckCharacteristicResponse(characteristic, response, (BleCharacteristicInfo info, BleResponse bleResponse) => new HeartRateMeasurementValue(bleResponse.Data), out heartRateMeasurementValue) != CommandResponseCode.Success) diff --git a/Assets/Scripts/Devices/Ble/Interfaces/IBleWinHwInterface.cs b/Assets/Scripts/Devices/Ble/Interfaces/IBleWinHwInterface.cs new file mode 100644 index 00000000..dc500079 --- /dev/null +++ b/Assets/Scripts/Devices/Ble/Interfaces/IBleWinHwInterface.cs @@ -0,0 +1,28 @@ +using Assets.Scripts.Ble; +using Assets.Scripts.Ble.Scan; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Assets.Scripts.Devices.Ble.Interfaces +{ + public interface IBleWinHwInterface + { + void StartScan(Action discoveredCallBack); + void ConnectPeripheral(BlePeripheralInfo info, Action callback); + void DisconnectPeripheral(BlePeripheralInfo peripheral, Action callback); + void DiscoverServices(BlePeripheralInfo peripheral, Action>> callback); + void DiscoverCharacteristic(BleServiceInfo service, CharacteristicsDiscoveredCallback callback); + void SubscribeCharacteristic(BleCharacteristicInfo characteristic, Action callback); + void WriteCharacteristic(BleCharacteristicInfo characteristic, byte[] data); + void ReadCharacteristic(BleCharacteristicInfo characteristic, CharacteristicReadCallback callback); + void Dispose(); + BleState BleState { get; set; } + Dictionary pCache { get; set; } + event BluetoothStateChangedCallback BluetoothStateChangedEvent; + event CharacteristicReadCallback CharacteristicReadEvent; + event PeripheralDisconnectedCallback PeripheralDisconnectedEvent; + } +} diff --git a/Assets/Scripts/Devices/Ble/Interfaces/IBleWinHwInterface.cs.meta b/Assets/Scripts/Devices/Ble/Interfaces/IBleWinHwInterface.cs.meta new file mode 100644 index 00000000..77926020 --- /dev/null +++ b/Assets/Scripts/Devices/Ble/Interfaces/IBleWinHwInterface.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 86216427171ac784296ca577b921b2e7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Devices/Ble/PeripheralDisconnectedCallback.cs b/Assets/Scripts/Devices/Ble/PeripheralDisconnectedCallback.cs index 3b24a05b..e6211017 100644 --- a/Assets/Scripts/Devices/Ble/PeripheralDisconnectedCallback.cs +++ b/Assets/Scripts/Devices/Ble/PeripheralDisconnectedCallback.cs @@ -1,4 +1,5 @@ using Assets.Scripts.Ble; +using Assets.Scripts.Devices.Ble.Interfaces; using System; using System.Collections.Generic; using System.Linq; @@ -7,5 +8,5 @@ using System.Threading.Tasks; namespace Assets.Scripts.Devices.Ble { - public delegate void PeripheralDisconnectedCallback(BleWinHwInterface hwInterface, BlePeripheralInfo peripheral, BleResponse response, bool manualDisconnect); + public delegate void PeripheralDisconnectedCallback(IBleWinHwInterface hwInterface, BlePeripheralInfo peripheral, BleResponse response, bool manualDisconnect); } diff --git a/Assets/Scripts/Devices/Ble/Service/BleService.cs b/Assets/Scripts/Devices/Ble/Service/BleService.cs index 40a0f123..b8679d82 100644 --- a/Assets/Scripts/Devices/Ble/Service/BleService.cs +++ b/Assets/Scripts/Devices/Ble/Service/BleService.cs @@ -8,6 +8,7 @@ using Assets.Scripts.Ble.Commands; using Assets.Scripts.Commands; using Assets.Scripts.Devices.Ble; using Assets.Scripts.Devices.Ble.Extension; +using Assets.Scripts.Devices.Ble.Interfaces; using UnityEngine; namespace Assets.Scripts.Ble.Service @@ -18,7 +19,7 @@ namespace Assets.Scripts.Ble.Service private BleServiceInfo serviceInfo; private List characteristics; - private readonly Dictionary>> registeredCharacteristicReadEvents = new Dictionary>>(); + private readonly Dictionary>> registeredCharacteristicReadEvents = new Dictionary>>(); public IReadOnlyList Characteristics { @@ -58,7 +59,7 @@ namespace Assets.Scripts.Ble.Service this.hwInterface.CharacteristicReadEvent += CharacteristicReadMainCallback; } - private void CharacteristicReadMainCallback(BleWinHwInterface hwInterface, BleCharacteristicInfo characteristic, BleResponse response) + private void CharacteristicReadMainCallback(IBleWinHwInterface hwInterface, BleCharacteristicInfo characteristic, BleResponse response) { //Debug.Log("read main callback"); if (this.registeredCharacteristicReadEvents.ContainsKey(characteristic.Id) && characteristic.Service.Equals(this.serviceInfo)) @@ -79,7 +80,7 @@ namespace Assets.Scripts.Ble.Service this.CheckCharacteristicDiscoveredResponse(this.hwInterface, this.serviceInfo, scanCharacteristicsResponse); } - private void CheckCharacteristicDiscoveredResponse(BleWinHwInterface hwInterface, BleServiceInfo service, BleResponse> response) + private void CheckCharacteristicDiscoveredResponse(IBleWinHwInterface hwInterface, BleServiceInfo service, BleResponse> response) { if (!service.Equals(this.serviceInfo)) { @@ -98,8 +99,8 @@ namespace Assets.Scripts.Ble.Service protected abstract void CharacteristicsDiscovered(BleResponse> response); - protected void SubscribeCharacteristic(BleCharacteristicInfo characteristic, Action notificationCallback, - Action> readCallback) + protected void SubscribeCharacteristic(BleCharacteristicInfo characteristic, Action notificationCallback, + Action> readCallback) { this.hwInterface.SubscribeCharacteristic(characteristic, (hw, info, response) => { diff --git a/Assets/Scripts/Devices/Ble/Win/BleWinHwInterface.cs b/Assets/Scripts/Devices/Ble/Win/BleWinHwInterface.cs index 96576511..794db60f 100644 --- a/Assets/Scripts/Devices/Ble/Win/BleWinHwInterface.cs +++ b/Assets/Scripts/Devices/Ble/Win/BleWinHwInterface.cs @@ -2,6 +2,7 @@ using Assets.Scripts.Ble.Win; using Assets.Scripts.Devices.Ant; using Assets.Scripts.Devices.Ble; +using Assets.Scripts.Devices.Ble.Interfaces; using Assets.Scripts.Devices.Ble.Win; using System; using System.Collections.Generic; @@ -12,13 +13,24 @@ using UnityEngine; namespace Assets.Scripts.Ble { - public sealed class BleWinHwInterface + public sealed class BleWinHwInterface: IBleWinHwInterface { private static BleWinHwInterface hwInterface; private WclBleMainThread wclBleMainThread; - public readonly Dictionary pCache = new Dictionary(); - + private Dictionary _pCache; + public Dictionary pCache + { + get + { + if (_pCache == null) + { + _pCache = new Dictionary(); + } + return _pCache; + } + set { _pCache = value; } + } private Action _discoveredCallback; private Dictionary> callbacks = new Dictionary>(); @@ -43,6 +55,7 @@ namespace Assets.Scripts.Ble } } + private BluetoothStateChangedCallback bluetoothStateChanged; public event BluetoothStateChangedCallback BluetoothStateChangedEvent { @@ -55,7 +68,7 @@ namespace Assets.Scripts.Ble this.bluetoothStateChanged -= value; } } - + private BleState nativeState; public BleState BleState { @@ -63,7 +76,7 @@ namespace Assets.Scripts.Ble { return this.nativeState; } - private set + set { if(this.nativeState != value) { @@ -201,7 +214,7 @@ namespace Assets.Scripts.Ble return wclBleGattThread; } - internal void ConnectPeripheral(BlePeripheralInfo info, Action callback) + public void ConnectPeripheral(BlePeripheralInfo info, Action callback) { this.callbacks.Add(info, callback); WclBleGattThread wclBleGattThread = this.wclBleMainThread.GetGattThread(info); @@ -229,8 +242,8 @@ namespace Assets.Scripts.Ble //}); } - - internal void DisconnectPeripheral(BlePeripheralInfo peripheral, Action callback) + + public void DisconnectPeripheral(BlePeripheralInfo peripheral, Action callback) { var gattThread = this.wclBleMainThread.GetGattThread(peripheral); if(gattThread != null && gattThread.CanLoadWork) @@ -372,7 +385,7 @@ namespace Assets.Scripts.Ble } } - public void DiscoverServices(BlePeripheralInfo peripheral, Action>> callback) + public void DiscoverServices(BlePeripheralInfo peripheral, Action>> callback) { WclBleGattThread gattThread = this.wclBleMainThread.GetGattThread(peripheral); if(gattThread == null) @@ -420,7 +433,7 @@ namespace Assets.Scripts.Ble this.GattCharacteristicsDiscovered(gattThread, service, response); } - public void SubscribeCharacteristic(BleCharacteristicInfo characteristic, Action callback) + public void SubscribeCharacteristic(BleCharacteristicInfo characteristic, Action callback) { WclBleGattThread gattThread = this.wclBleMainThread.GetGattThread(characteristic.Peripheral); diff --git a/Assets/Scripts/Devices/Ble/mobile.meta b/Assets/Scripts/Devices/Ble/mobile.meta new file mode 100644 index 00000000..95152633 --- /dev/null +++ b/Assets/Scripts/Devices/Ble/mobile.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9fa2f8906f5360c47b807eaef8d42263 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Devices/Ble/mobile/BleMobileInterface.cs b/Assets/Scripts/Devices/Ble/mobile/BleMobileInterface.cs new file mode 100644 index 00000000..dbbda567 --- /dev/null +++ b/Assets/Scripts/Devices/Ble/mobile/BleMobileInterface.cs @@ -0,0 +1,525 @@ +using Assets.Scripts.Ble.Scan; +using Assets.Scripts.Ble.Win; +using Assets.Scripts.Devices.Ant; +using Assets.Scripts.Devices.Ble; +using Assets.Scripts.Devices.Ble.Interfaces; +using Assets.Scripts.Devices.Ble.Win; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +namespace Assets.Scripts.Ble +{ + public sealed class BleMobileInterface: IBleWinHwInterface + { + private static BleMobileInterface hwInterface; + private WclBleMainThread wclBleMainThread; + + private Dictionary _pCache; + public Dictionary pCache + { + get + { + if (_pCache == null) + { + _pCache = new Dictionary(); + } + return _pCache; + } + set { _pCache = value; } + } + private Action _discoveredCallback; + + private Dictionary> callbacks = new Dictionary>(); + private Dictionary>>> servicesCallbacks = new Dictionary>>>(); + //private Dictionary>>> characteristicsCallbacks = new Dictionary>>>(); + private Dictionary> characteristicNotificationCallbacks = new Dictionary>(); + private Dictionary characteristicReadCallbacks = new Dictionary(); + private Dictionary characteristicsDiscoveredCallbacks = new Dictionary(); + + private Dictionary disconnectedCallback = new Dictionary(); + + private CharacteristicReadCallback characteristicReadEvent; + public event CharacteristicReadCallback CharacteristicReadEvent + { + add + { + this.characteristicReadEvent += value; + } + remove + { + this.characteristicReadEvent -= value; + } + } + + + private BluetoothStateChangedCallback bluetoothStateChanged; + public event BluetoothStateChangedCallback BluetoothStateChangedEvent + { + add + { + this.bluetoothStateChanged += value; + } + remove + { + this.bluetoothStateChanged -= value; + } + } + + private BleState nativeState; + public BleState BleState + { + get + { + return this.nativeState; + } + set + { + if(this.nativeState != value) + { + this.nativeState = value; + this.bluetoothStateChanged?.Invoke(this, this.nativeState); + } + } + } + + private PeripheralDisconnectedCallback peripheralDisconnectedEvent; + public event PeripheralDisconnectedCallback PeripheralDisconnectedEvent + { + add + { + this.peripheralDisconnectedEvent += value; + } + remove + { + this.peripheralDisconnectedEvent -= value; + } + } + + private BleMobileInterface() + { + wclBleMainThread = new WclBleMainThread(); + wclBleMainThread.ManagerStatusChanged += ManagerStatusChanged; + wclBleMainThread.ScanInfoReceived += WatcherScanInfoReceived; + //wclBleMainThread.gatt + wclBleMainThread.Start(); + + } + + private void WatcherScanInfoReceived(WclBleMainThread sender, long address, string name, int rssi, CPPBridge.WclBleAdvertisementType packetType, Guid? service) + { + //if(address != 224160707349234) + //{ + //return; + //} + //Debug.Log($"address:{ address }, name:{ name }, service:{ (service == null ? "" : service.Value.ToString()) }"); + + SensorType sensor = SensorType.None; + List services = new List(); + if (service != null) + { + services = new List { service.Value }; + foreach(var item in ServiceUuids.Services) + { + if(item.IdGuid != service.Value) + { + continue; + } + if(item.IdByteArray == ServiceUuids.Ftms) + { + sensor = SensorType.Trainer; + } + else if(item.IdByteArray == ServiceUuids.HeartRate) + { + sensor = SensorType.HeartRate; + } + else if(item.IdByteArray == ServiceUuids.CyclingPower) + { + sensor = SensorType.Power; + //sensor = SensorType.Trainer; + } + else if(item.IdByteArray == ServiceUuids.CyclingSpeedCadence) + { + sensor = SensorType.SpeedCadence; + } + else if(item.IdByteArray == ServiceUuids.TacxBle) + { + sensor = SensorType.Trainer; + } + } + }; + var addressStr = address.ToString("X12"); + if (!pCache.ContainsKey(addressStr)) + { + var device = new BleAdvertisementInfo(new WinBlePeripheralInfo(addressStr, name), rssi, true, services, null, sensor); + pCache.Add(addressStr, device); + + //WclBleGattThread gattClient = this.SetUpGattClient(device.Peripheral); + //this.ConnectInternal(gattClient); + } + if (!string.IsNullOrWhiteSpace(name)) + { + (pCache[addressStr].Peripheral as WinBlePeripheralInfo).SetName(name); + } + if(sensor == SensorType.None) + { + return; + } + pCache[addressStr].SensorType = sensor; + pCache[addressStr].Rssi = rssi; + //Debug.Log(sensor); + //pCache[address.ToString()].SensorType = sensor; + + foreach (var item in services) + { + pCache[addressStr].TryAddService(item); + } + + pCache[addressStr].Index++; + if(pCache[addressStr].SensorType == SensorType.Power && pCache[addressStr].Services.Any(s=> s.Equals(ServiceUuids.Get(ServiceUuids.TacxBle).IdGuid))) + { + pCache[addressStr].SensorType = SensorType.Trainer; + //Debug.Log("纠正为trainer, "+ pCache[address.ToString()].Index); + } + + + if (pCache[addressStr].SensorType == SensorType.Power) + { + if (pCache[addressStr].Index > 4) + { + _discoveredCallback?.Invoke(pCache[addressStr]); + } + } + else if(pCache[addressStr].SensorType != SensorType.None) + { + _discoveredCallback?.Invoke(pCache[addressStr]); + } + } + + private WclBleGattThread SetUpGattClient(BlePeripheralInfo peripheral) + { + WclBleGattThread wclBleGattThread = this.wclBleMainThread.CreateGattThread(peripheral); + wclBleGattThread.GattConnected += this.GattConnected; + wclBleGattThread.GattDisconnected += this.GattDisconnected; + wclBleGattThread.GattServicesDiscovered += this.GattServicesDiscovered; + wclBleGattThread.GattCharacteristicsDiscovered += this.GattCharacteristicsDiscovered; + wclBleGattThread.GattCharacteristicSubscribed += this.GattCharacteristicSubscribed; + wclBleGattThread.GattCharacteristicRead += this.GattCharacteristicRead; + wclBleGattThread.GattCharacteristicWrote += this.GattCharacteristicWrote; + wclBleGattThread.GattCharacteristicChanged += this.GattCharacteristicChanged; + wclBleGattThread.Start(); + return wclBleGattThread; + } + + public void ConnectPeripheral(BlePeripheralInfo info, Action callback) + { + this.callbacks.Add(info, callback); + WclBleGattThread wclBleGattThread = this.wclBleMainThread.GetGattThread(info); + + if(wclBleGattThread == null) + { + + wclBleGattThread = this.SetUpGattClient(info); + this.ConnectInternal(wclBleGattThread); + return; + } + else + { + this.ConnectInternal(wclBleGattThread); + } + } + + private void ConnectInternal(WclBleGattThread gattClient) + { + //Task.Run(() => + //{ + int num = gattClient.Connect(); + Debug.Log("连接设备返回" + num); + + + //}); + } + + public void DisconnectPeripheral(BlePeripheralInfo peripheral, Action callback) + { + var gattThread = this.wclBleMainThread.GetGattThread(peripheral); + if(gattThread != null && gattThread.CanLoadWork) + { + this.callbacks.Remove(peripheral); + this.servicesCallbacks.Remove(peripheral); + this.characteristicNotificationCallbacks.Remove(peripheral); + + this.disconnectedCallback.Add(peripheral, callback); + gattThread.Discounect(); + } + } + + + public static BleMobileInterface GetInterface() + { + if(hwInterface == null) + { + hwInterface = new BleMobileInterface(); + } + + return hwInterface; + } + + public void StartScan(Action discoveredCallBack) + { + pCache.Clear(); + _discoveredCallback = discoveredCallBack; + this.wclBleMainThread.StartWatcher(); + } + + private void ManagerStatusChanged(WclBleMainThread sender, WclBleManagerStatus status) + { + this.BleState = BleMobileInterface.StateFromNativeState(status); + //Debug.Log("win hw:" + status); + + } + + private void GattConnected(WclBleGattThread gattClient, BleResponse response) + { + Debug.Log($"gatt connected { response.ToString() }"); + if (!response.IsSuccess) + { + gattClient.Stop(); + + this.callbacks[gattClient.Peripheral].Invoke(this, gattClient.Peripheral, response); + this.callbacks.Remove(gattClient.Peripheral); + return; + } + this.callbacks[gattClient.Peripheral].Invoke(this, gattClient.Peripheral, response); + this.callbacks.Remove(gattClient.Peripheral); + } + + private void CleanUpPeripheral(BlePeripheralInfo peripheralInfo) + { + //this.callbacks.Clear() + } + + private void GattDisconnected(WclBleGattThread gattClient, BleResponse response) + { + Debug.Log($"gatt disconnected { gattClient.Peripheral.Name }"); + + this.callbacks.Remove(gattClient.Peripheral); + this.servicesCallbacks.Remove(gattClient.Peripheral); + this.characteristicNotificationCallbacks.Remove(gattClient.Peripheral); + //App.MainDeviceAdapter.PrintStatus(); + + var manualDisconnect = disconnectedCallback.ContainsKey(gattClient.Peripheral); + this.peripheralDisconnectedEvent(this, gattClient.Peripheral, response, manualDisconnect); + + //App.MainDeviceAdapter.PrintStatus(); + if (disconnectedCallback.ContainsKey(gattClient.Peripheral)) + { + disconnectedCallback[gattClient.Peripheral].Invoke(); + disconnectedCallback.Remove(gattClient.Peripheral); + } + //this.pCache.Remove(gattClient.Peripheral.Address); + + + + } + private void GattServicesDiscovered(WclBleGattThread gattClient, BleResponse> response) + { + //Debug.Log("services discovered"); + //this.callbacks[gattClient.Peripheral].Invoke(this, gattClient.Peripheral, response); + + //foreach (var item in response.Data) + //{ + // Debug.Log(item.ToString()); + //} + + if (this.servicesCallbacks.ContainsKey(gattClient.Peripheral)) + { + this.servicesCallbacks[gattClient.Peripheral].Invoke(this, gattClient.Peripheral, response); + } + } + + private void GattCharacteristicsDiscovered(WclBleGattThread gattClient, BleServiceInfo service, BleResponse> response) + { + //Debug.Log("characteristics discovered"); + + if (this.characteristicsDiscoveredCallbacks.ContainsKey(service)) + { + this.characteristicsDiscoveredCallbacks[service].Invoke(this, service, response); + } + } + + private void GattCharacteristicSubscribed(WclBleGattThread gattClient, BleCharacteristicInfo characteristic, BleResponse response) + { + //Debug.Log("characteristics subscribed"); + if (this.characteristicNotificationCallbacks.ContainsKey(gattClient.Peripheral)) + { + this.characteristicNotificationCallbacks[gattClient.Peripheral].Invoke(this, characteristic, response); + } + } + private void GattCharacteristicRead(WclBleGattThread gattClient, BleCharacteristicInfo characteristic, BleResponse response) + { + Debug.Log("characteristic read"); + + if (this.characteristicReadCallbacks.ContainsKey(characteristic)) + { + this.characteristicReadCallbacks[characteristic].Invoke(this, characteristic, response); + this.characteristicReadCallbacks.Remove(characteristic); + } + + this.characteristicReadEvent.Invoke(this, characteristic, response); + } + + private void GattCharacteristicWrote(WclBleGattThread gattClient, BleCharacteristicInfo characteristic, BleResponse response) + { + Debug.Log("characteristic wrote"); + } + private void GattCharacteristicChanged(WclBleGattThread gattClient, BleCharacteristicInfo characteristic, BleResponse response) + { + //Debug.Log("characteristic changed"); + if(this.wclBleMainThread.GetGattThread(characteristic.Peripheral) != null) + { + this.characteristicReadEvent.Invoke(this, characteristic, response); + } + } + + public void DiscoverServices(BlePeripheralInfo peripheral, Action>> callback) + { + WclBleGattThread gattThread = this.wclBleMainThread.GetGattThread(peripheral); + if(gattThread == null) + { + return; + } + + this.servicesCallbacks.Add(peripheral, callback); + int num = gattThread.DiscoverServices(); + if (WclBleErrors.IsSuccessCode(num)) + { + return; + } + + + BleResponse> response = new BleResponse> + { + IsSuccess = false, + Error = new BleHwInterfaceError(new int?(num), "WclBleGattClientErrorDomain", string.Format("Error discovering services - {0}", num)) + }; + this.GattServicesDiscovered(gattThread, response); + } + + public void DiscoverCharacteristic(BleServiceInfo service, CharacteristicsDiscoveredCallback callback) + { + WclBleGattThread gattThread = this.wclBleMainThread.GetGattThread(service.Peripheral); + if(gattThread == null) + { + return; + } + if (!this.characteristicsDiscoveredCallbacks.ContainsKey(service)) + { + this.characteristicsDiscoveredCallbacks.Add(service, callback); + } + int num = gattThread.DiscoverCharacteristics(service); + if (WclBleErrors.IsSuccessCode(num)) + { + return; + } + BleResponse> response = new BleResponse> + { + IsSuccess = false, + Error = new BleHwInterfaceError(new int?(num), "WclBleGattClientErrorDomain", string.Format("Error discovering characteristics - {0}", num)) + }; + this.GattCharacteristicsDiscovered(gattThread, service, response); + } + + public void SubscribeCharacteristic(BleCharacteristicInfo characteristic, Action callback) + { + WclBleGattThread gattThread = this.wclBleMainThread.GetGattThread(characteristic.Peripheral); + + this.characteristicNotificationCallbacks.Add(gattThread.Peripheral, callback); + int num = gattThread.SubscribeCharacteristic(characteristic); + if (WclBleErrors.IsSuccessCode(num)) + { + return; + } + BleResponse> response = new BleResponse> + { + IsSuccess = false, + Error = new BleHwInterfaceError(new int?(num), "WclBleGattClientErrorDomain", string.Format("Error subscribing characteristic - {0}", num)) + }; + this.GattCharacteristicSubscribed(gattThread, characteristic, response); + } + + public void WriteCharacteristic(BleCharacteristicInfo characteristic, byte[] data) + { + var gattThread = this.wclBleMainThread.GetGattThread(characteristic.Peripheral); + if(gattThread == null) + { + return; + } + + int num = gattThread.WriteCharacteristic(characteristic, data); + if (WclBleErrors.IsSuccessCode(num)) + { + Debug.Log("设置命令成功"); + return; + } + } + + + public void Dispose() + { + this.wclBleMainThread.ManagerStatusChanged -= ManagerStatusChanged; + this.wclBleMainThread.ScanInfoReceived -= WatcherScanInfoReceived; + this.wclBleMainThread.Stop(); + this.wclBleMainThread = null; + hwInterface = null; + pCache.Clear(); + } + + public void ReadCharacteristic(BleCharacteristicInfo characteristic, CharacteristicReadCallback callback) + { + WclBleGattThread gattThread = this.wclBleMainThread.GetGattThread(characteristic.Peripheral); + if(gattThread == null) + { + return; + } + this.characteristicReadCallbacks.Add(characteristic, callback); + int num = gattThread.ReadCharacteristicValue(characteristic); + if (WclBleErrors.IsSuccessCode(num)) + { + return; + } + } + + private static BleState StateFromNativeState(WclBleManagerStatus status) + { + switch (status) + { + case WclBleManagerStatus.RadioOff: + return BleState.Off; + case WclBleManagerStatus.RadioOn: + return BleState.On; + case WclBleManagerStatus.Unknown: + return BleState.Unknown; + default: + return BleState.Unavailable; + } + } + + private class WinBlePeripheralInfo : BlePeripheralInfo + { + // Token: 0x06003F35 RID: 16181 RVA: 0x000E9FBF File Offset: 0x000E81BF + public WinBlePeripheralInfo(string address, string name) : base(address, name) + { + } + + // Token: 0x06003F36 RID: 16182 RVA: 0x000E9FC9 File Offset: 0x000E81C9 + public void SetName(string name) + { + base.Name = name; + } + } + } +} diff --git a/Assets/Scripts/Devices/Ble/mobile/BleMobileInterface.cs.meta b/Assets/Scripts/Devices/Ble/mobile/BleMobileInterface.cs.meta new file mode 100644 index 00000000..f9174596 --- /dev/null +++ b/Assets/Scripts/Devices/Ble/mobile/BleMobileInterface.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e5257ea169e69a498a3e4d935a51306 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Devices/MainDeviceAdapter.cs b/Assets/Scripts/Devices/MainDeviceAdapter.cs index 3e50f026..8c953e93 100644 --- a/Assets/Scripts/Devices/MainDeviceAdapter.cs +++ b/Assets/Scripts/Devices/MainDeviceAdapter.cs @@ -1,4 +1,5 @@ -using Assets.Scripts.Devices.Ant; +using Assets.Scripts.Ble; +using Assets.Scripts.Devices.Ant; using Assets.Scripts.Devices.Ble; using System; using System.Collections.Generic; @@ -27,7 +28,11 @@ namespace Assets.Scripts.Devices private void CreateBleAdapter() { - adapters.Add(new BleDeviceAdapter()); +#if UNITY_IOS || UNITY_TVOS || UNITY_ANDROID + adapters.Add(new BleDeviceAdapter(BleWinHwInterface.GetInterface())); +#else + adapters.Add(new BleDeviceAdapter(BleWinHwInterface.GetInterface())); +#endif } public void StartScan() diff --git a/Assets/Scripts/Scenes/Ride/Competiton/CompetitionLoadingController.cs b/Assets/Scripts/Scenes/Ride/Competiton/CompetitionLoadingController.cs index 2d2e1b3a..b16460b0 100644 --- a/Assets/Scripts/Scenes/Ride/Competiton/CompetitionLoadingController.cs +++ b/Assets/Scripts/Scenes/Ride/Competiton/CompetitionLoadingController.cs @@ -115,6 +115,7 @@ namespace Assets.Scenes.Ride.Scripts GameObject MoreHead { get; set; } Text CompetitionTitle { get; set; } Text EndTime { get; set; } + Text MapId { get; set; } //构建赛事界面 protected override void InitGameObject() { @@ -135,6 +136,7 @@ namespace Assets.Scenes.Ride.Scripts ReadMore = panel.transform.Find("ReadMore").gameObject; GetReady = panel.transform.Find("GetReady").GetComponent(); GetReadyTitle = panel.transform.Find("GetReadyTitle").GetComponent(); + MapId = panel.transform.Find("MapId").GetComponent(); Watcher = Resources.Load("UI/Prefab/Match/Watcher"); MoreHead = Resources.Load("UI/Prefab/Match/MoreHead"); Watch.GetComponent