namespace Mr.BrickAdventures.Progression; /// /// How far a Skill has been upgraded. Starts at one; there is no zero, because a Playthrough /// records only the Skills it owns and absence from that record is what "unowned" means. /// public readonly struct SkillLevel { public int Value { get; } private SkillLevel(int value) => Value = value; public static SkillLevel Of(int value) => value < 1 ? throw new ArgumentOutOfRangeException(nameof(value), value, "A skill level starts at 1; unowned is absence, not level 0.") : new SkillLevel(value); }