60 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			60 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								from dataclasses import dataclass
							 | 
						||
| 
								 | 
							
								from enum import Enum
							 | 
						||
| 
								 | 
							
								from typing import Dict, List, Optional
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from BaseClasses import ItemClassification
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class ItemCategory(Enum):
							 | 
						||
| 
								 | 
							
								    SYMBOL = 0
							 | 
						||
| 
								 | 
							
								    DOOR = 1
							 | 
						||
| 
								 | 
							
								    LASER = 2
							 | 
						||
| 
								 | 
							
								    USEFUL = 3
							 | 
						||
| 
								 | 
							
								    FILLER = 4
							 | 
						||
| 
								 | 
							
								    TRAP = 5
							 | 
						||
| 
								 | 
							
								    JOKE = 6
							 | 
						||
| 
								 | 
							
								    EVENT = 7
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								CATEGORY_NAME_MAPPINGS: Dict[str, ItemCategory] = {
							 | 
						||
| 
								 | 
							
								    "Symbols:": ItemCategory.SYMBOL,
							 | 
						||
| 
								 | 
							
								    "Doors:": ItemCategory.DOOR,
							 | 
						||
| 
								 | 
							
								    "Lasers:": ItemCategory.LASER,
							 | 
						||
| 
								 | 
							
								    "Useful:": ItemCategory.USEFUL,
							 | 
						||
| 
								 | 
							
								    "Filler:": ItemCategory.FILLER,
							 | 
						||
| 
								 | 
							
								    "Traps:": ItemCategory.TRAP,
							 | 
						||
| 
								 | 
							
								    "Jokes:": ItemCategory.JOKE
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@dataclass(frozen=True)
							 | 
						||
| 
								 | 
							
								class ItemDefinition:
							 | 
						||
| 
								 | 
							
								    local_code: int
							 | 
						||
| 
								 | 
							
								    category: ItemCategory
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@dataclass(frozen=True)
							 | 
						||
| 
								 | 
							
								class ProgressiveItemDefinition(ItemDefinition):
							 | 
						||
| 
								 | 
							
								    child_item_names: List[str]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@dataclass(frozen=True)
							 | 
						||
| 
								 | 
							
								class DoorItemDefinition(ItemDefinition):
							 | 
						||
| 
								 | 
							
								    panel_id_hexes: List[str]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@dataclass(frozen=True)
							 | 
						||
| 
								 | 
							
								class WeightedItemDefinition(ItemDefinition):
							 | 
						||
| 
								 | 
							
								    weight: int
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@dataclass()
							 | 
						||
| 
								 | 
							
								class ItemData:
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    ItemData for an item in The Witness
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    ap_code: Optional[int]
							 | 
						||
| 
								 | 
							
								    definition: ItemDefinition
							 | 
						||
| 
								 | 
							
								    classification: ItemClassification
							 | 
						||
| 
								 | 
							
								    local_only: bool = False
							 |