using System; using System.Linq; using EFT; using EscapeFromTarkovCheat.Utils; using UnityEngine; namespace EscapeFromTarkovCheat.Data { public class GamePlayer { public Player Player { get; } public Vector3 ScreenPosition => screenPosition; public Vector3 HeadScreenPosition => headScreenPosition; public bool IsOnScreen { get; private set; } public bool IsVisible { get; private set; } public float Distance { get; private set; } public bool IsAI { get; private set; } public string FormattedDistance => $"{(int)Math.Round(Distance)}m"; private Vector3 screenPosition; private Vector3 headScreenPosition; public GamePlayer(Player player) { if (player == null) throw new ArgumentNullException(nameof(player)); this.Player = player; screenPosition = default; headScreenPosition = default; IsOnScreen = false; Distance = 0f; IsAI = true; } public Vector3 GetBonePosition(BoneType boneType) { if (Player.PlayerBody?.SkeletonRootJoint?.Bones == null) return Vector3.zero; Transform boneTransform = Player.PlayerBody.SkeletonRootJoint.Bones.ElementAtOrDefault((int)boneType).Value; if (boneTransform == null) return Vector3.zero; return GameUtils.WorldPointToScreenPoint(boneTransform.position); } public void RecalculateDynamics() { if (!GameUtils.IsPlayerValid(Player)) return; screenPosition = GameUtils.WorldPointToScreenPoint(Player.Transform.position); if (Player.PlayerBones != null) headScreenPosition = GameUtils.WorldPointToScreenPoint(Player.PlayerBones.Head.position); IsOnScreen = GameUtils.IsScreenPointVisible(screenPosition); Distance = Vector3.Distance(Main.MainCamera.transform.position, Player.Transform.position); if ((Player.Profile != null) && (Player.Profile.Info != null)) IsAI = (Player.Profile.Info.RegistrationDate <= 0); } } }