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
 | 
