-
Notifications
You must be signed in to change notification settings - Fork 1
Skill Tree
Moti Barski edited this page Mar 13, 2026
·
2 revisions
You're right - that wasn't in proper GitHub Wiki format. Here's the corrected version:
Overview
The Shinka class is a unique skill class that allows base skills to be upgraded modularly with upgrade skills. When an upgrade skill activates, it temporarily overrides the base skill's behavior. This enables modular skill augmentation as well as flexible skill evolution logic implementation in Shinka subclasses during runtime.
class Shinka(Skill):
"""
this is a zipped skill, in which newly added skills have override priority
to be active.
this is a skill bundle acting as a single skill.
"""
def __init__(self, *skills: Skill):
super().__init__()
self.upgrades: list[Skill] = []
if not skills:
self.upgrades.append(DiFunnel())
else:
for skill in skills:
self.upgrades.append(skill)
self.active_upgrade = 0
def add_skill(self, skill: Skill):
if skill.get_skill_type() == 2:
return
skill.setKokoro(self.getKokoro())
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)