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 |