From 8f921fda4f8ee31dd8c1a825eb409495f324bc1d Mon Sep 17 00:00:00 2001 From: Le Duc Anh Date: Mon, 20 Apr 2026 17:08:04 +0700 Subject: [PATCH] update world map --- .../AddressableAssetSettings.asset | 2 +- Assets/PerfectWorld/Prefab/UI/DlgMap.prefab | 122 +++++++++++ .../UI/DialogScriptTableObject.asset | 2 + Assets/PerfectWorld/Scene/Bootstrap.unity | 4 +- Assets/PerfectWorld/Scripts/UI/DlgWorldMap.cs | 66 ++++++ .../Scripts/UI/MiniMap/CDlgMiniMap.cs | 11 + Assets/Prefabs/UI/DlgWorldMap.prefab | 204 +++++++++++++++++- 7 files changed, 406 insertions(+), 5 deletions(-) diff --git a/Assets/AddressableAssetsData/AddressableAssetSettings.asset b/Assets/AddressableAssetsData/AddressableAssetSettings.asset index 2cc4591b5f..7e7d7ce3d0 100644 --- a/Assets/AddressableAssetsData/AddressableAssetSettings.asset +++ b/Assets/AddressableAssetsData/AddressableAssetSettings.asset @@ -15,7 +15,7 @@ MonoBehaviour: m_DefaultGroup: 712e3991f28e549e7a56ee582a977810 m_currentHash: serializedVersion: 2 - Hash: 00000000000000000000000000000000 + Hash: 6df2b5e922d0a8184eba54abd29fafeb m_OptimizeCatalogSize: 0 m_BuildRemoteCatalog: 0 m_CatalogRequestsTimeout: 0 diff --git a/Assets/PerfectWorld/Prefab/UI/DlgMap.prefab b/Assets/PerfectWorld/Prefab/UI/DlgMap.prefab index d5220f4ab4..6c137804e0 100644 --- a/Assets/PerfectWorld/Prefab/UI/DlgMap.prefab +++ b/Assets/PerfectWorld/Prefab/UI/DlgMap.prefab @@ -107,6 +107,7 @@ RectTransform: - {fileID: 5306706511345298923} - {fileID: 5063363011365083800} - {fileID: 193520446362220398} + - {fileID: 1420511140059353994} m_Father: {fileID: 121983901978661093} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -248,6 +249,7 @@ MonoBehaviour: _imageMiniMapPrefab: {fileID: 561411731206337256} _listImageMiniMap: [] _transformMiniMapParent: {fileID: 4768066627267225838} + _worldMapButton: {fileID: 9145966839271910414} _spriteAtlas: {fileID: 100100200, guid: b764c7c6d08a20e41a8ebfb3435954db, type: 3} --- !u!1 &5886515903784990361 GameObject: @@ -613,6 +615,126 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &7056095192285021313 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1420511140059353994} + - component: {fileID: 981633729936470547} + - component: {fileID: 769315881222033195} + - component: {fileID: 9145966839271910414} + m_Layer: 0 + m_Name: Hitbox + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1420511140059353994 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7056095192285021313} + 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: 75608124384920614} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &981633729936470547 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7056095192285021313} + m_CullTransparentMesh: 1 +--- !u!114 &769315881222033195 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7056095192285021313} + 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: 0.003921569} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + 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 &9145966839271910414 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7056095192285021313} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 0 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 769315881222033195} + m_OnClick: + m_PersistentCalls: + m_Calls: [] --- !u!1 &7097774496840152851 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/PerfectWorld/Resources/UI/DialogScriptTableObject.asset b/Assets/PerfectWorld/Resources/UI/DialogScriptTableObject.asset index 949b476b29..407d171cfe 100644 --- a/Assets/PerfectWorld/Resources/UI/DialogScriptTableObject.asset +++ b/Assets/PerfectWorld/Resources/UI/DialogScriptTableObject.asset @@ -59,3 +59,5 @@ MonoBehaviour: prefab: {fileID: 9152579472324007262, guid: 2060bbc2e61f6db4590ab041243b6294, type: 3} - id: Win_FriendList prefab: {fileID: 7959803810568030828, guid: c3fe60ca49d530e4a9d03e185154c4f5, type: 3} + - id: Win_WorldMap + prefab: {fileID: 6225996695219405878, guid: 2ed5e05eaa1d87341bf25c3cf111cc01, type: 3} diff --git a/Assets/PerfectWorld/Scene/Bootstrap.unity b/Assets/PerfectWorld/Scene/Bootstrap.unity index 1f9ea6e3ea..450da71ea2 100644 --- a/Assets/PerfectWorld/Scene/Bootstrap.unity +++ b/Assets/PerfectWorld/Scene/Bootstrap.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5cfdae6351b6fac92e853e5e66c95e40da85a9a9b8b45cfdd55f16f0c4e48992 -size 303064 +oid sha256:833a4e6a7e0e815ce2561d06a74cc92483952cd3b3812e09fc3c5b15d0029695 +size 303238 diff --git a/Assets/PerfectWorld/Scripts/UI/DlgWorldMap.cs b/Assets/PerfectWorld/Scripts/UI/DlgWorldMap.cs index d5ad840dd5..a20a1728ca 100644 --- a/Assets/PerfectWorld/Scripts/UI/DlgWorldMap.cs +++ b/Assets/PerfectWorld/Scripts/UI/DlgWorldMap.cs @@ -7,6 +7,9 @@ namespace BrewMonster.UI public class DlgWorldMap : AUIDialog { [SerializeField] private Image mapImage; + [SerializeField] private Image _hostPlayerPositionImage; + [SerializeField] private float _positionFactor = 2f; + [SerializeField] private Button _closeButton; // 世界 / World @@ -32,10 +35,68 @@ namespace BrewMonster.UI return MAJOR_MAP == mapID || GOOD_EVIL_MAP(mapID) || GUILD_WAR_MAP(mapID) || PENGLAI_MAP(mapID); } + public override void Awake() + { + base.Awake(); + + _closeButton.onClick.AddListener(OnCloseButtonClicked); + } + public override void Show(bool value) { base.Show(value); + if (value) + { + UpdateHostPlayerPositionImage(); + } + } + + public override bool Render() + { + // UpdateHostPlayerPositionImage(); + return base.Render(); + } + + private void UpdateHostPlayerPositionImage() + { + if (_hostPlayerPositionImage == null) + { + return; + } + + if (!TryGetHostPlayerPosition(out Vector3 hostPosition)) + { + _hostPlayerPositionImage.enabled = false; + return; + } + + if (Mathf.Approximately(_positionFactor, 0f)) + { + BMLogger.LogError("DlgWorldMap _positionFactor cannot be zero."); + _hostPlayerPositionImage.enabled = false; + return; + } + + _hostPlayerPositionImage.enabled = true; + RectTransform hostPlayerRectTransform = _hostPlayerPositionImage.rectTransform; + hostPlayerRectTransform.anchoredPosition = new Vector2( + hostPosition.x / _positionFactor, + hostPosition.z / _positionFactor); + } + + private bool TryGetHostPlayerPosition(out Vector3 hostPlayerPosition) + { + hostPlayerPosition = Vector3.zero; + + CECHostPlayer hostPlayer = GetHostPlayer(); + if (hostPlayer == null || hostPlayer.transform == null) + { + return false; + } + + hostPlayerPosition = hostPlayer.transform.position; + return true; } @@ -77,5 +138,10 @@ namespace BrewMonster.UI BMLogger.LogError($"Invalid transmit type: {dwType}"); } } + + private void OnCloseButtonClicked() + { + CloseDialogue(); + } } } \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/UI/MiniMap/CDlgMiniMap.cs b/Assets/PerfectWorld/Scripts/UI/MiniMap/CDlgMiniMap.cs index db34eb2dcd..b557b233fa 100644 --- a/Assets/PerfectWorld/Scripts/UI/MiniMap/CDlgMiniMap.cs +++ b/Assets/PerfectWorld/Scripts/UI/MiniMap/CDlgMiniMap.cs @@ -38,6 +38,7 @@ namespace PerfectWorld.UI.MiniMap [SerializeField] private Image _imageMiniMapPrefab; [SerializeField] private List _listImageMiniMap = new(); [SerializeField] private RectTransform _transformMiniMapParent; + [SerializeField] private Button _worldMapButton; // reference to unity sprite atlas [SerializeField] private SpriteAtlas _spriteAtlas; @@ -61,6 +62,8 @@ namespace PerfectWorld.UI.MiniMap private void Awake() { LoadAllMiniMapTextures(); + + _worldMapButton.onClick.AddListener(OnMiniMapClicked); } void Update() @@ -106,6 +109,14 @@ namespace PerfectWorld.UI.MiniMap /// Returns the list of user-placed marks on the minimap (for layout save/load). public List GetMarks() => m_vecMark; + /// User click on the minimap, we'll show the world map. + public void OnMiniMapClicked() + { + var dlg = CECUIManager.Instance.ShowUI("Win_WorldMap") as DlgWorldMap; + // dlg?.Show(true); + // dlg?.OnInitDialog(); + } + // keep this so we can load all textures of other map also. [ContextMenu("LoadAllMiniMapTextures")] public void LoadAllMiniMapTextures() diff --git a/Assets/Prefabs/UI/DlgWorldMap.prefab b/Assets/Prefabs/UI/DlgWorldMap.prefab index 79d6ed8496..245de697af 100644 --- a/Assets/Prefabs/UI/DlgWorldMap.prefab +++ b/Assets/Prefabs/UI/DlgWorldMap.prefab @@ -1,5 +1,125 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &936441858863998774 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6519201902855059039} + - component: {fileID: 6772256914059310038} + - component: {fileID: 6199483494086402804} + - component: {fileID: 8858186809287203567} + m_Layer: 0 + m_Name: closeBtn + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6519201902855059039 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 936441858863998774} + 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: 7323734624486819451} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 403.03613, y: 341.03613} + m_SizeDelta: {x: 58, y: 58} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6772256914059310038 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 936441858863998774} + m_CullTransparentMesh: 1 +--- !u!114 &6199483494086402804 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 936441858863998774} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 7e417ca26c6bacc48a4cb0166762f4e9, 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 &8858186809287203567 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 936441858863998774} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 0 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 6199483494086402804} + m_OnClick: + m_PersistentCalls: + m_Calls: [] --- !u!1 &2084818314179325528 GameObject: m_ObjectHideFlags: 0 @@ -29,6 +149,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 7169122999130120872} + - {fileID: 6519201902855059039} m_Father: {fileID: 5356465370529170382} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -36,6 +157,81 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &4370684628053341786 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5906545349664091413} + - component: {fileID: 758748006264977830} + - component: {fileID: 4036230907032538800} + m_Layer: 0 + m_Name: hostplayerpos + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5906545349664091413 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4370684628053341786} + 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: 7169122999130120872} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.518} + m_AnchorMax: {x: 0.5, y: 0.518} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 13, y: 16} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &758748006264977830 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4370684628053341786} + m_CullTransparentMesh: 1 +--- !u!114 &4036230907032538800 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4370684628053341786} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 448046091, guid: 99520ceed6182dd408f2da040fe0c033, 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 &6225996695219405878 GameObject: m_ObjectHideFlags: 0 @@ -88,7 +284,10 @@ MonoBehaviour: m_EditorClassIdentifier: skillNameText: {fileID: 0} imageProgress: {fileID: 0} - mapImage: {fileID: 0} + mapImage: {fileID: 1174346096914174862} + _hostPlayerPositionImage: {fileID: 4036230907032538800} + _positionFactor: 2.5 + _closeButton: {fileID: 8858186809287203567} --- !u!1 &8308536083041954008 GameObject: m_ObjectHideFlags: 0 @@ -193,7 +392,8 @@ RectTransform: m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: [] + m_Children: + - {fileID: 5906545349664091413} m_Father: {fileID: 7323734624486819451} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5}