| 
									
										
										
										
											2021-06-11 14:22:44 +02:00
										 |  |  | from BaseClasses import MultiWorld | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-11 18:02:48 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-11 14:22:44 +02:00
										 |  |  | class AutoWorldRegister(type): | 
					
						
							|  |  |  |     world_types = {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __new__(cls, name, bases, dct): | 
					
						
							|  |  |  |         new_class = super().__new__(cls, name, bases, dct) | 
					
						
							|  |  |  |         if "game" in dct: | 
					
						
							|  |  |  |             AutoWorldRegister.world_types[dct["game"]] = new_class | 
					
						
							|  |  |  |         return new_class | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def call_single(world: MultiWorld, method_name: str, player: int): | 
					
						
							|  |  |  |     method = getattr(world.worlds[player], method_name) | 
					
						
							| 
									
										
										
										
											2021-06-11 18:02:48 +02:00
										 |  |  |     return method() | 
					
						
							| 
									
										
										
										
											2021-06-11 14:22:44 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def call_all(world: MultiWorld, method_name: str): | 
					
						
							|  |  |  |     for player in world.player_ids: | 
					
						
							|  |  |  |         call_single(world, method_name, player) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class World(metaclass=AutoWorldRegister): | 
					
						
							|  |  |  |     """A World object encompasses a game's Items, Locations, Rules and additional data or functionality required.
 | 
					
						
							|  |  |  |     A Game should have its own subclass of World in which it defines the required data structures."""
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-11 18:02:48 +02:00
										 |  |  |     world: MultiWorld | 
					
						
							|  |  |  |     player: int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __init__(self, world: MultiWorld, player: int): | 
					
						
							|  |  |  |         self.world = world | 
					
						
							|  |  |  |         self.player = player | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # overwritable methods that get called by Main.py | 
					
						
							|  |  |  |     def generate_basic(self): | 
					
						
							|  |  |  |         pass | 
					
						
							| 
									
										
										
										
											2021-06-11 14:22:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-11 18:02:48 +02:00
										 |  |  |     def set_rules(self): | 
					
						
							| 
									
										
										
										
											2021-06-11 14:22:44 +02:00
										 |  |  |         pass | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-11 18:02:48 +02:00
										 |  |  |     def create_regions(self): | 
					
						
							| 
									
										
										
										
											2021-06-11 14:22:44 +02:00
										 |  |  |         pass | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-11 18:02:48 +02:00
										 |  |  |     def generate_output(self): | 
					
						
							| 
									
										
										
										
											2021-06-11 14:22:44 +02:00
										 |  |  |         pass |