class DiNothing(Skill):
# this skill does absolutely nothing
def __init__(self):
super().__init__()
class AHReequip(Skill):
# equips a skill as needed
def __init__(self, brain:Brain):
super().__init__()
self.set_skill_type(2)
self.brain = brain
self.skills: dict[str,Skill] = {}
self.skill_names: set[str] = set()
self.learner:AXLearnability = AXLearnability(tolerance=3)
self.learner.defcons.add("lame")
self.learner.goals.add("thanks")
self.learner.goals.add("good")
self.learner.defcon5.add("wrong")
self.active_skill = DiNothing()
self.active_key = "default"
def manual_skill_add(self, skill:Skill, *keys:str)->AHReequip:
self.add_skill(skill)
for key in keys:
self.skills[key] = skill
return self
def get_random_skill(self) -> Skill:
if not self.skills:
return DiNothing()
return self.skills[random.choice(list(self.skill_names))]
def add_skill(self, skill:Skill)->AHReequip:
self.skills[skill.skill_name] = skill
self.skill_names.add(skill.skill_name)
return self
def input(self, ear: str, skin: str, eye: str):
# trigger reequip:
if ear.startswith("please") or ear.endswith("please"):
temp = ear.replace("please", "").strip()
if temp not in self.skills:
self.skills[temp] = self.get_random_skill()
self.brain.remove_skill(self.active_skill)
self.active_skill = self.skills[temp]
self.active_key = temp
self.brain.add_skill(self.active_skill)
self.learner.pendAlgWithoutConfirmation()
self.setSimpleAlg(f"{self.active_skill.skill_name} skill equipped")
return
if self.learner.mutateSkill(ear):
self.brain.remove_skill(self.active_skill)
self.skills[self.active_key] = self.get_random_skill()
self.active_skill = self.skills[self.active_key]
self.brain.add_skill(self.active_skill)
self.setSimpleAlg(f"{self.active_skill.skill_name} skill equipped")
self.learner.pendAlgWithoutConfirmation()