using System.Numerics; namespace Nexus.Core; public record PlayerState { public string? CharacterName { get; init; } public Vector2 Position { get; init; } public float Z { get; init; } public bool HasPosition { get; init; } public int LifeCurrent { get; init; } public int LifeTotal { get; init; } public int ManaCurrent { get; init; } public int ManaTotal { get; init; } public int EsCurrent { get; init; } public int EsTotal { get; init; } public float LifePercent => LifeTotal > 0 ? (float)LifeCurrent / LifeTotal * 100f : 0f; public float ManaPercent => ManaTotal > 0 ? (float)ManaCurrent / ManaTotal * 100f : 0f; public float EsPercent => EsTotal > 0 ? (float)EsCurrent / EsTotal * 100f : 0f; // Action state (from Actor component) public short ActionId { get; init; } // Flask state (populated by memory when available) public IReadOnlyList Flasks { get; init; } = []; // Active buffs (populated by memory when available) public IReadOnlyList Buffs { get; init; } = []; // Skill slots (populated by memory when available) public IReadOnlyList Skills { get; init; } = []; }