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 |