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; }