From a9ff735441ac1a8540af46b6508c4f911553646b Mon Sep 17 00:00:00 2001 From: nightblade9 Date: Wed, 18 Dec 2024 16:31:23 -0500 Subject: [PATCH] Refactor: redo skill selection, without recursion. --- .../Battle/CharacterTurnProcessor.cs | 24 +++++++++---------- source/TextBlade.Core/Characters/Character.cs | 3 ++- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/source/TextBlade.Core/Battle/CharacterTurnProcessor.cs b/source/TextBlade.Core/Battle/CharacterTurnProcessor.cs index b582e25..babedcf 100644 --- a/source/TextBlade.Core/Battle/CharacterTurnProcessor.cs +++ b/source/TextBlade.Core/Battle/CharacterTurnProcessor.cs @@ -51,21 +51,11 @@ internal void ProcessTurnFor(Character character) new AttackExecutor(_console).Attack(character, targets.First() as Monster); break; case 'd': - character.Defend(); - _console.WriteLine($"{character.Name} defends!"); + character.Defend(_console); break; case 's': - // Assumes you get back a valid skill: something you have SP for. var skill = PickSkillFor(character); - if (character.CurrentSkillPoints < skill.Cost) - { - _console.WriteLine("You don't have enough skill points for that!"); - // Recursion is risky, very risky ... hmm. - ProcessTurnFor(character); - } targets = PickTargetsFor(skill); - // Depending on the skill, the target is an instance of Character or Monster. - // For now, assume monster. new SkillApplier(_console).Apply(character, skill, targets); break; case 'i': @@ -77,7 +67,7 @@ internal void ProcessTurnFor(Character character) } } - private IEnumerable PickTargetsFor(Skill skill) + private IEnumerable? PickTargetsFor(Skill skill) { switch (skill.Target) { @@ -141,8 +131,16 @@ private T PickFromList(IEnumerable items) private Skill PickSkillFor(Character character) { - _console.WriteLine("Pick a skill:"); + _console.WriteLine("Pick a skill: "); var skill = PickFromList(character.Skills); + + if (character.CurrentSkillPoints < skill.Cost) + { + _console.WriteLine($"{character.Name} has {character.CurrentSkillPoints} skill points, which isn't enough for {skill.Name}."); + _console.WriteLine("Pick a skill: "); + skill = PickFromList(character.Skills); + } + return skill; } } diff --git a/source/TextBlade.Core/Characters/Character.cs b/source/TextBlade.Core/Characters/Character.cs index a8160e8..3fbd92e 100644 --- a/source/TextBlade.Core/Characters/Character.cs +++ b/source/TextBlade.Core/Characters/Character.cs @@ -83,9 +83,10 @@ internal void GainExperiencePoints(IConsole console, int experiencePoints) return base.OnRoundComplete(); } - internal void Defend() + internal void Defend(IConsole console) { this.IsDefending = true; + console.WriteLine($"{Name} defends!"); } public override string ToString()