EFTCheatPVE/EscapeFromTarkovCheat/Features/ESP/ExfiltrationPointsESP.cs

100 lines
4.5 KiB
C#

using System.Collections.Generic;
using Comfort.Common;
using EFT;
using EFT.Interactive;
using EscapeFromTarkovCheat.Data;
using EscapeFromTarkovCheat.Utils;
using JsonType;
using UnityEngine;
namespace EscapeFromTarkovCheat.Feauters.ESP
{
public class ExfiltrationPointsESP : MonoBehaviour
{
private List<GameExfiltrationPoint> _gameExfiltrationPoints= new List<GameExfiltrationPoint>();
private static readonly float CacheExfiltrationPointInterval = 5f;
private float _nextLootItemCacheTime;
private static readonly Color ExfiltrationPointColour = Color.green;
private static readonly Color ClosedExfiltrationPointColour = Color.yellow;
public void Update()
{
if (!Settings.DrawExfiltrationPoints)
return;
if (Time.time >= _nextLootItemCacheTime)
{
if ((Main.GameWorld != null) && (Main.GameWorld.ExfiltrationController.ExfiltrationPoints != null))
{
_gameExfiltrationPoints.Clear();
foreach (var exfiltrationPoint in Main.GameWorld.ExfiltrationController.EligiblePoints(Main.LocalPlayer.Profile))
{
if (!GameUtils.IsExfiltrationPointValid(exfiltrationPoint))
continue;
_gameExfiltrationPoints.Add(new GameExfiltrationPoint(exfiltrationPoint, true));
}
foreach (var exfiltrationPoint in Main.GameWorld.ExfiltrationController.ExfiltrationPoints)
{
bool trig = false;
if (!GameUtils.IsExfiltrationPointValid(exfiltrationPoint))
continue;
foreach (var ep in _gameExfiltrationPoints)
{
if (ep.Name == exfiltrationPoint.Settings.Name.Localized())
trig = !trig;
continue;
}
if (trig)
continue;
_gameExfiltrationPoints.Add(new GameExfiltrationPoint(exfiltrationPoint, false));
}
_nextLootItemCacheTime = (Time.time + CacheExfiltrationPointInterval);
}
}
foreach (GameExfiltrationPoint gameExfiltrationPoint in _gameExfiltrationPoints)
gameExfiltrationPoint.RecalculateDynamics();
}
private static string GetName(ExfiltrationPoint point, bool isEligible)
{
var localizedName = point.Settings.Name.Localized();
return !isEligible ? localizedName : $"{localizedName} ({GetStatus(point.Status)})";
}
public static string GetStatus(EExfiltrationStatus status)
{
return status switch
{
EExfiltrationStatus.AwaitsManualActivation => LocalisationManager.GetString(Settings.Language, StringKey.DATA_EP_ACTIVE),
EExfiltrationStatus.Countdown => LocalisationManager.GetString(Settings.Language, StringKey.DATA_EP_TIMER),
EExfiltrationStatus.NotPresent => LocalisationManager.GetString(Settings.Language, StringKey.DATA_EP_CLOSED),
EExfiltrationStatus.Pending => LocalisationManager.GetString(Settings.Language, StringKey.DATA_EP_PENDING),
EExfiltrationStatus.RegularMode => LocalisationManager.GetString(Settings.Language, StringKey.DATA_EP_OPEN),
EExfiltrationStatus.UncompleteRequirements => LocalisationManager.GetString(Settings.Language, StringKey.DATA_EP_REQUIREMENT),
_ => string.Empty
};
}
private void OnGUI()
{
if (Settings.DrawExfiltrationPoints)
{
foreach (var exfiltrationPoint in _gameExfiltrationPoints)
{
if (!GameUtils.IsExfiltrationPointValid(exfiltrationPoint.ExfiltrationPoint) || !exfiltrationPoint.IsOnScreen)
continue;
string exfiltrationPointText = $"{GetName(exfiltrationPoint.ExfiltrationPoint, exfiltrationPoint.Eligible)} [{exfiltrationPoint.FormattedDistance}]";
Render.DrawString(new Vector2(exfiltrationPoint.ScreenPosition.x - 50f, exfiltrationPoint.ScreenPosition.y), exfiltrationPointText, exfiltrationPoint.Eligible ? ExfiltrationPointColour : ClosedExfiltrationPointColour);
}
}
}
}
}