47 lines
1.3 KiB
Python
47 lines
1.3 KiB
Python
from abc import ABC, abstractmethod
|
|
from typing import ClassVar, Iterable, Tuple
|
|
|
|
from ...data.skill import Skill
|
|
|
|
|
|
class SkillProgressionFeature(ABC):
|
|
is_progressive: ClassVar[bool]
|
|
are_masteries_shuffled: ClassVar[bool]
|
|
|
|
@abstractmethod
|
|
def get_randomized_level_names_by_level(self, skill: Skill) -> Iterable[Tuple[int, str]]:
|
|
...
|
|
|
|
@abstractmethod
|
|
def is_mastery_randomized(self, skill: Skill) -> bool:
|
|
...
|
|
|
|
|
|
class SkillProgressionVanilla(SkillProgressionFeature):
|
|
is_progressive = False
|
|
are_masteries_shuffled = False
|
|
|
|
def get_randomized_level_names_by_level(self, skill: Skill) -> Iterable[Tuple[int, str]]:
|
|
return ()
|
|
|
|
def is_mastery_randomized(self, skill: Skill) -> bool:
|
|
return False
|
|
|
|
|
|
class SkillProgressionProgressive(SkillProgressionFeature):
|
|
is_progressive = True
|
|
are_masteries_shuffled = False
|
|
|
|
def get_randomized_level_names_by_level(self, skill: Skill) -> Iterable[Tuple[int, str]]:
|
|
return skill.level_names_by_level
|
|
|
|
def is_mastery_randomized(self, skill: Skill) -> bool:
|
|
return False
|
|
|
|
|
|
class SkillProgressionProgressiveWithMasteries(SkillProgressionProgressive):
|
|
are_masteries_shuffled = True
|
|
|
|
def is_mastery_randomized(self, skill: Skill) -> bool:
|
|
return skill.has_mastery
|