public enum NPC_EnumState
{
    InCover,
    InDirectPoint,
    InRunning,
}

public interface NPC_BaseState
{
    NPC_EnumState State { get; }
    bool InCover { get; }
    bool IsRunning { get; }
    bool InDirectPoint { get; }
    float HitChance { get; }
    float DoDamageChance { get; }
}

public class NPC_DirectPointState : NPC_BaseState
{
    public bool InCover => false;
    public bool IsRunning => false;
    public bool InDirectPoint => false;
    public float HitChance => SettingsReader.Instance.GetSettings.GetHitChanceInDirectPoint;
    public float DoDamageChance => SettingsReader.Instance.GetSettings.DoDamageChanceInDirectPoint;
    public NPC_EnumState State => NPC_EnumState.InDirectPoint;
}

public class NPC_RunningState : NPC_BaseState
{
    public bool InCover => false;
    public bool IsRunning => true;
    public bool InDirectPoint => false;
    public float HitChance => SettingsReader.Instance.GetSettings.GetHitChanceInRunning;
    public float DoDamageChance => SettingsReader.Instance.GetSettings.DoDamageChanceInRunning;
    public NPC_EnumState State => NPC_EnumState.InRunning;
}

public class NPC_InCoverState : NPC_BaseState
{
    public bool InCover => true;
    public bool IsRunning => false;
    public bool InDirectPoint => false;
    public float HitChance => SettingsReader.Instance.GetSettings.GetHitChanceInCover;
    public float DoDamageChance => SettingsReader.Instance.GetSettings.DoDamageChanceInCover;
    public NPC_EnumState State => NPC_EnumState.InCover;
}
