X-Git-Url: https://plomlompom.com/repos/foo.html?a=blobdiff_plain;ds=sidebyside;f=game_common.py;h=599e54bcda4c51b936b9dac9ac1d90b03debd8af;hb=795a476f5d4ba157f3287d7e2f5893cc91b6732e;hp=2277f13c36ab99469dfdaf62cde8d25ac0046fcd;hpb=64bf1873a6686c1bc974321c13d3c9f7800db0d6;p=plomrogue2-experiments
diff --git a/game_common.py b/game_common.py
index 2277f13..599e54b 100644
--- a/game_common.py
+++ b/game_common.py
@@ -1,6 +1,27 @@
from parser import ArgError
+class MapManager:
+
+ def __init__(self, globs):
+ """With globs a globals() call, collect caller's Map classes."""
+ self.map_classes = []
+ for name in globs:
+ if name[:3] == 'Map':
+ self.map_classes += [globs[name]]
+
+ def get_map_geometries(self):
+ geometries = []
+ for map_class in self.map_classes:
+ geometries += [map_class.__name__[3:]]
+ return geometries
+
+ def get_map_class(self, geometry):
+ for map_class in self.map_classes:
+ if map_class.__name__[3:] == geometry:
+ return map_class
+
+
class Map:
def __init__(self, size=(0, 0)):
@@ -42,7 +63,7 @@ class World:
return t
def new_map(self, geometry, yx):
- map_type = self.get_map_class(geometry)
+ map_type = self.game.map_manager.get_map_class(geometry)
self.map_ = map_type(yx)
@@ -59,7 +80,7 @@ class CommonCommandsMixin:
def cmd_MAP(self, geometry, yx):
"""Create new map of grid geometry, size yx and only '?' cells."""
- legal_grids = {'Hex', 'Square'}
+ legal_grids = self.map_manager.get_map_geometries()
if geometry not in legal_grids:
raise ArgError('First map argument must be one of: ' +
', '.join(legal_grids))