Skip to content

Commit befa906

Browse files
committed
Add Region Links to Layers Menu
1 parent 32dfc91 commit befa906

File tree

1 file changed

+32
-12
lines changed

1 file changed

+32
-12
lines changed

Mappy/Windows/MapWindow.cs

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Dalamud.Interface;
66
using Dalamud.Interface.Utility;
77
using Dalamud.Interface.Utility.Raii;
8+
using Dalamud.Memory;
89
using Dalamud.Utility;
910
using FFXIVClientStructs.FFXIV.Client.UI;
1011
using FFXIVClientStructs.FFXIV.Client.UI.Agent;
@@ -410,22 +411,41 @@ private unsafe void DrawLayersContextMenu() {
410411
if (!contextMenu) return;
411412

412413
var currentMap = Service.DataManager.GetExcelSheet<Map>()!.GetRow(AgentMap.Instance()->SelectedMapId);
414+
if (currentMap is null) return;
413415

414-
var layers = Service.DataManager.GetExcelSheet<Map>()!
415-
.Where(eachMap => eachMap.PlaceName.Row == currentMap!.PlaceName.Row)
416-
.Where(eachMap => eachMap.MapIndex != 0)
417-
.OrderBy(eachMap => eachMap.MapIndex)
418-
.ToList();
416+
// If this is a region map
417+
if (currentMap.Hierarchy is 3) {
418+
foreach (var marker in AgentMap.Instance()->MapMarkers) {
419+
if (!DrawHelpers.IsRegionIcon(marker.MapMarker.IconId)) continue;
419420

420-
if (layers.Count is 0) {
421-
ImGui.Text("No layers for this map");
421+
var label = MemoryHelper.ReadStringNullTerminated((nint)marker.MapMarker.Subtext);
422+
423+
if (ImGui.MenuItem(label)) {
424+
System.IntegrationsController.OpenMap(marker.DataKey);
425+
System.SystemConfig.FollowPlayer = false;
426+
System.MapRenderer.DrawOffset = Vector2.Zero;
427+
}
428+
}
422429
}
423430

424-
foreach (var layer in layers) {
425-
if (ImGui.MenuItem(layer.PlaceNameSub.Value?.Name ?? "Unable to Parse Name", "", AgentMap.Instance()->SelectedMapId == layer.RowId)) {
426-
System.IntegrationsController.OpenMap(layer.RowId);
427-
System.SystemConfig.FollowPlayer = false;
428-
System.MapRenderer.DrawOffset = Vector2.Zero;
431+
// Any other map
432+
else {
433+
var layers = Service.DataManager.GetExcelSheet<Map>()!
434+
.Where(eachMap => eachMap.PlaceName.Row == currentMap.PlaceName.Row)
435+
.Where(eachMap => eachMap.MapIndex != 0)
436+
.OrderBy(eachMap => eachMap.MapIndex)
437+
.ToList();
438+
439+
if (layers.Count is 0) {
440+
ImGui.Text("No layers for this map");
441+
}
442+
443+
foreach (var layer in layers) {
444+
if (ImGui.MenuItem(layer.PlaceNameSub.Value?.Name ?? "Unable to Parse Name", "", AgentMap.Instance()->SelectedMapId == layer.RowId)) {
445+
System.IntegrationsController.OpenMap(layer.RowId);
446+
System.SystemConfig.FollowPlayer = false;
447+
System.MapRenderer.DrawOffset = Vector2.Zero;
448+
}
429449
}
430450
}
431451
}

0 commit comments

Comments
 (0)