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
							 |