class Digivolution(Skill):
"""
this unique skill upgrades a base skill with upgrade skills
when an upgrade skill wants to run, it overrides the base skill
subclasses can be coded with logic to equip and unequip upgrade skills at runtime
"""
def __init__(self, base_skill:Skill):
super().__init__()
self.upgrades: list[Skill] = []
self.active_upgrade = 0
self.upgrades.append(base_skill)
def input(self, ear: str, skin: str, eye: str):
for i, upgrade in enumerate(reversed(self.upgrades)):
idx = len(self.upgrades) - 1 - i
upgrade.input(ear, skin, eye)
if upgrade.pendingAlgorithm():
self.active_upgrade = idx
return
def setKokoro(self, kokoro: Kokoro):
self._kokoro = kokoro # potential usage in sub classes for runtime upgrades mode.
for upgrade in self.upgrades:
upgrade.setKokoro(kokoro)
def pendingAlgorithm(self) -> bool:
return self.upgrades[self.active_upgrade].pendingAlgorithm()
def output(self, neuron: Neuron):
self.upgrades[self.active_upgrade].output(neuron)
self.active_upgrade = 0
def skillNotes(self, param: str) -> str:
return self.upgrades[self.active_upgrade].skillNotes(param)
def add_skill_tree(self, skill: Skill) -> "Digivolution":
self.upgrades.append(skill)
return self
class DiDigivolutionTest(Skill):
def __init__(self):
super().__init__()
self.toggeld = False
# Override
def input(self, ear: str, skin: str, eye: str):
if ear == "toggle":
self.toggeld = not self.toggeld
print("toggled didigivolution test")
return
if self.toggeld and ear == "hello":
self.setVerbatimAlg(4, "toasty test") # # 1->5 1 is the highest algorithm priority
def skillNotes(self, param: str) -> str:
if param == "notes":
return "plain toasty test skill"
elif param == "triggers":
return "say hello"
return "note unavalible"
class EvoChain(Skill):
"""
this unique skill upgrades a base skill with upgrade skills
when an upgrade skill wants to run, it overrides the base skill
subclasses can be coded with logic to equip and unequip upgrade skills at runtime
"""
def __init__(self, *skills:Skill):
super().__init__()
self.upgrades: list[Skill] = []
self.active_upgrade = 0
for skill in skills:
self.upgrades.append(skill)
def input(self, ear: str, skin: str, eye: str):
for i, upgrade in enumerate(reversed(self.upgrades)):
idx = len(self.upgrades) - 1 - i
upgrade.input(ear, skin, eye)
if upgrade.pendingAlgorithm():
self.active_upgrade = idx
return
def setKokoro(self, kokoro: Kokoro):
self._kokoro = kokoro # potential usage in sub classes for runtime upgrades mode.
for upgrade in self.upgrades:
upgrade.setKokoro(kokoro)
def pendingAlgorithm(self) -> bool:
return self.upgrades[self.active_upgrade].pendingAlgorithm()
def output(self, neuron: Neuron):
self.upgrades[self.active_upgrade].output(neuron)
self.active_upgrade = 0
def skillNotes(self, param: str) -> str:
return self.upgrades[self.active_upgrade].skillNotes(param)
class DiDigivolutionTest(Skill):
def __init__(self):
super().__init__()
self.toggeld = False
# Override
def input(self, ear: str, skin: str, eye: str):
if ear == "toggle":
self.toggeld = not self.toggeld
print("toggled didigivolution test")
return
if self.toggeld and ear == "hello":
self.setVerbatimAlg(4, "toasty test") # # 1->5 1 is the highest algorithm priority
def skillNotes(self, param: str) -> str:
if param == "notes":
return "plain toasty test skill"
elif param == "triggers":
return "say hello"
return "note unavalible"
class DiFunnel(Skill):
# default skill for EvoChain
def __init__(self):
super().__init__()
# Override
def input(self, ear: str, skin: str, eye: str):
self.setSimpleAlg(ear)
class EvoChain(Skill):
"""
this unique skill upgrades a base skill with upgrade skills
when an upgrade skill wants to run, it overrides the base skill
subclasses can be coded with logic to equip and unequip upgrade skills at runtime
"""
def __init__(self, *skills: Skill):
super().__init__()
self.upgrades: list[Skill] = []
if skills is empty == 0:
self.upgrades.append(DiFunnel())
else:
for skill in skills:
self.upgrades.append(skill)
self.active_upgrade = 0
def input(self, ear: str, skin: str, eye: str):
for i, upgrade in enumerate(reversed(self.upgrades)):
idx = len(self.upgrades) - 1 - i
upgrade.input(ear, skin, eye)
if upgrade.pendingAlgorithm():
self.active_upgrade = idx
return
def setKokoro(self, kokoro: Kokoro):
self._kokoro = kokoro # potential usage in sub classes for runtime upgrades mode.
for upgrade in self.upgrades:
upgrade.setKokoro(kokoro)
def pendingAlgorithm(self) -> bool:
return self.upgrades[self.active_upgrade].pendingAlgorithm()
def output(self, neuron: Neuron):
self.upgrades[self.active_upgrade].output(neuron)
self.active_upgrade = 0
def skillNotes(self, param: str) -> str:
return self.upgrades[self.active_upgrade].skillNotes(param)
class DiDigivolutionTest(Skill):
def __init__(self):
super().__init__()
self.toggeld = False
# Override
def input(self, ear: str, skin: str, eye: str):
if ear == "toggle":
self.toggeld = not self.toggeld
print("toggled didigivolution test")
return
if self.toggeld and ear == "hello":
self.setVerbatimAlg(4, "toasty test") # # 1->5 1 is the highest algorithm priority
def skillNotes(self, param: str) -> str:
if param == "notes":
return "plain toasty test skill"
elif param == "triggers":
return "say hello"
return "note unavalible"