Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions HuntHelper/Data/Localisation/english.json
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@
"DirectionLineThicknessToolTip": "default: 3.0",
"ResetButton": "Reset",
"ResetButtonToolTip": "Reset all sizes to default.",
"MaxVisitedPositions": "MaxVisitedPositions",
"MinDistanceToSavePosition": "MinDistanceToSavePosition",
"ResetButtonTracker": "TrackerDEL",
"ResetButtonTrackerCount": "Count: ",

"ColoursTab": "Colours",
"PlayerIcon": "Player Icon",
Expand All @@ -71,6 +75,7 @@
"PlayerBackgroundToolTip": "Background of the player / detection circle.\nChange the Alpha A: for opacity.",
"DirectionLineColourPicker": "Direction Line",
"DetectionCircleColourPicker": "Detection Circle",
"VisitedPositions": "Visited Positions",

"NotificationTab": "Notifications",
"ChatMessageLabel": "Chat Message",
Expand Down
5 changes: 5 additions & 0 deletions HuntHelper/Data/Localisation/french.json
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@
"DirectionLineThicknessToolTip": "default: 3.0",
"ResetButton": "Reset",
"ResetButtonToolTip": "Reset all sizes to default.",
"MaxVisitedPositions": "MaxVisitedPositions",
"MinDistanceToSavePosition": "MinDistanceToSavePosition",
"ResetButtonTracker": "TrackerDEL",
"ResetButtonTrackerCount": "Count: ",

"ColoursTab": "Colours",
"PlayerIcon": "Player Icon",
Expand All @@ -71,6 +75,7 @@
"PlayerBackgroundToolTip": "Background of the player / detection circle.\nChange the Alpha A: for opacity.",
"DirectionLineColourPicker": "Direction Line",
"DetectionCircleColourPicker": "Detection Circle",
"VisitedPositions": "Visited Positions",

"NotificationTab": "Notifications",
"ChatMessageLabel": "Chat Message",
Expand Down
5 changes: 5 additions & 0 deletions HuntHelper/Data/Localisation/german.json
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@
"DirectionLineThicknessToolTip": "default: 3.0",
"ResetButton": "Reset",
"ResetButtonToolTip": "Reset all sizes to default.",
"MaxVisitedPositions": "MaxVisitedPositions",
"MinDistanceToSavePosition": "MinDistanceToSavePosition",
"ResetButtonTracker": "TrackerDEL",
"ResetButtonTrackerCount": "Count: ",

"ColoursTab": "Colours",
"PlayerIcon": "Player Icon",
Expand All @@ -71,6 +75,7 @@
"PlayerBackgroundToolTip": "Background of the player / detection circle.\nChange the Alpha A: for opacity.",
"DirectionLineColourPicker": "Direction Line",
"DetectionCircleColourPicker": "Detection Circle",
"VisitedPositions": "Visited Positions",

"NotificationTab": "Notifications",
"ChatMessageLabel": "Chat Message",
Expand Down
5 changes: 5 additions & 0 deletions HuntHelper/Data/Localisation/japanese.json
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@
"DirectionLineThicknessToolTip": "default: 3.0",
"ResetButton": "Reset",
"ResetButtonToolTip": "Reset all sizes to default.",
"MaxVisitedPositions": "MaxVisitedPositions",
"MinDistanceToSavePosition": "MinDistanceToSavePosition",
"ResetButtonTracker": "TrackerDEL",
"ResetButtonTrackerCount": "Count: ",

"ColoursTab": "Colours",
"PlayerIcon": "Player Icon",
Expand All @@ -71,6 +75,7 @@
"PlayerBackgroundToolTip": "Background of the player / detection circle.\nChange the Alpha A: for opacity.",
"DirectionLineColourPicker": "Direction Line",
"DetectionCircleColourPicker": "Detection Circle",
"VisitedPositions": "Visited Positions",

"NotificationTab": "Notifications",
"ChatMessageLabel": "Chat Message",
Expand Down
5 changes: 5 additions & 0 deletions HuntHelper/Data/Localisation/simplified chinese.json
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@
"DirectionLineThicknessToolTip": "默认3",
"ResetButton": "重设",
"ResetButtonToolTip": "重设所有到默认设置",
"MaxVisitedPositions": "MaxVisitedPositions",
"MinDistanceToSavePosition": "MinDistanceToSavePosition",
"ResetButtonTracker": "TrackerDEL",
"ResetButtonTrackerCount": "Count: ",

"ColoursTab": "颜色",
"PlayerIcon": "玩家图标",
Expand All @@ -71,6 +75,7 @@
"PlayerBackgroundToolTip": "玩家/探测圈背景。\n修改Alpha A来设置透明度",
"DirectionLineColourPicker": "面向线",
"DetectionCircleColourPicker": "探测线",
"VisitedPositions": "Visited Positions",

"NotificationTab": "通知",
"ChatMessageLabel": "聊天信息",
Expand Down
72 changes: 69 additions & 3 deletions HuntHelper/Gui/MapUI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,12 @@ class MapUI : IDisposable
private float _spawnPointIconRadius;

#region User Customisable stuff - load and save to config

// PlayerTracker
private List<Vector2> _visitedPositions = new List<Vector2>();
private float _minDistanceToSavePosition = 0.5f; // Minimum distance to save a position
private int _maxVisitedPositions = 250; // Maximum positions for drawing
private Vector4 _playerIconBackgroundColourPositions = new Vector4(1f, 0.27f, 0f, 0.1f); //orange (RGBA%)

//map opacity - should be between 0-100f;
private float _mapImageOpacityAsPercentage = 100f;
Expand Down Expand Up @@ -303,6 +309,10 @@ public void DrawHuntMapWindow()
//if only something went wrong, such as only some maps images downloaded
if (_huntManager.ImageFolderDoesntExist || _huntManager.HasDownloadErrors || _huntManager.NotAllImagesFound || _outOfDateImages) MapImageDownloadWindow();
DrawMapImage(mapImage);

// Draw the overlay with the visited areas
var drawlist = ImGui.GetWindowDrawList();
DrawVisitedAreas(drawlist);
}

//show map coordinates when mouse is over gui
Expand Down Expand Up @@ -719,6 +729,25 @@ private void DrawOptionsWindow()
ImGui.SameLine();
ImGuiUtil.ImGui_HelpMarker(GuiResources.MapGuiText["ResetButtonToolTip"]);

ImGui.TableNextColumn();
ImGui.Separator();
ImGui.Dummy(new Vector2(0, 1f));
ImGui.InputFloat(GuiResources.MapGuiText["MinDistanceToSavePosition"], ref _minDistanceToSavePosition, 0, 0,
"%.2f");

ImGui.TableNextColumn();
ImGui.Separator();
ImGui.Dummy(new Vector2(0, 1f));
ImGui.InputInt(GuiResources.MapGuiText["MaxVisitedPositions"], ref _maxVisitedPositions, 0);

ImGui.TableNextColumn();
ImGui.Separator();
ImGui.Dummy(new Vector2(0, 1f));
if (ImGui.Button(GuiResources.MapGuiText["ResetButtonTracker"] + " " + GuiResources.MapGuiText["ResetButtonTrackerCount"] + Convert.ToString(_visitedPositions.Count)))
{
ResetVisitedPositions();
}

ImGui.PopItemWidth();

ImGui.EndTable();
Expand Down Expand Up @@ -751,6 +780,10 @@ private void DrawOptionsWindow()
ImGui.ColorEdit4(GuiResources.MapGuiText["SpawnPoint"], ref _spawnPointColour,
ImGuiColorEditFlags.NoInputs | ImGuiColorEditFlags.PickerHueWheel);

ImGui.TableNextColumn();
ImGui.ColorEdit4(GuiResources.MapGuiText["VisitedPositions"], ref _playerIconBackgroundColourPositions,
ImGuiColorEditFlags.NoInputs | ImGuiColorEditFlags.PickerHueWheel);

ImGui.Dummy(new Vector2(0, 4f));

ImGui.TableNextColumn();
Expand Down Expand Up @@ -1394,8 +1427,15 @@ private unsafe void ClientState_TerritoryChanged(ushort e)
//_worldName = _clientState.LocalPlayer?.CurrentWorld?.GameData?.Name.ToString() ?? "Not Found";
_territoryId = _clientState.TerritoryType;
_mapZoneScale = _huntManager.GetMapZoneScale(_territoryId);
// When changing the territory, clear the list
ResetVisitedPositions();
}

private void ResetVisitedPositions()
{
_visitedPositions = new List<Vector2>();
}

#region Draw Sub Windows

private void DrawDataBaseWindow()
Expand Down Expand Up @@ -1675,9 +1715,21 @@ private void UpdatePlayerInfo()
//if this stuff ain't null, draw player position
if (_clientState?.LocalPlayer?.Position != null)
{
var playerPos = CoordinateToPositionInWindow(
new Vector2(ConvertPosToCoordinate(_clientState!.LocalPlayer.Position.X),
ConvertPosToCoordinate(_clientState.LocalPlayer.Position.Z)));
var playerPosWithoutWindow = new Vector2(ConvertPosToCoordinate(_clientState!.LocalPlayer.Position.X),
ConvertPosToCoordinate(_clientState.LocalPlayer.Position.Z)); // WithoutWindow is necessary so that no new position is saved when the window is moved.
var playerPos = CoordinateToPositionInWindow(playerPosWithoutWindow);

// Save the location if it is new
if (!_visitedPositions.Any() ||
Vector2.Distance(_visitedPositions.Last(), playerPosWithoutWindow) > _minDistanceToSavePosition)
{
_visitedPositions.Add(playerPosWithoutWindow);
// Shorten the list if it gets too long.
if (_visitedPositions.Count > _maxVisitedPositions)
{
_visitedPositions.RemoveAt(0); // Remove the oldest entry
}
}

var detectionRadius = 2 * SingleCoordSize * _detectionCircleModifier;
var rotation = Math.Abs(_clientState.LocalPlayer.Rotation - Math.PI);
Expand All @@ -1697,6 +1749,20 @@ private void UpdatePlayerInfo()
}

}

private void DrawVisitedAreas(ImDrawListPtr drawlist)
{
foreach (var pos in _visitedPositions)
{
// Draw a circle at each position visited.
var detectionRadius = 2 * SingleCoordSize * _detectionCircleModifier;
drawlist.AddCircleFilled(
CoordinateToPositionInWindow(pos),
detectionRadius,
ImGui.ColorConvertFloat4ToU32(_playerIconBackgroundColourPositions)
);
}
}

private void DrawPlayerIcon(ImDrawListPtr drawlist, Vector2 playerPos, float detectionRadius, Vector2 lineEnding, Vector2 projectedPathEnd)
{
Expand Down