home · contact · privacy
Refactor parser code.
[plomrogue2] / rogue_chat_curses.py
index 91418f61f6820fa0e1ad5e89503dc8114c177322..4f6981df553696fb7d865f76453463a819e580dd 100755 (executable)
@@ -302,6 +302,7 @@ cmd_TASKS.argtypes = 'string'
 
 def cmd_THING_TYPE(game, thing_type, symbol_hint):
     game.thing_types[thing_type] = symbol_hint
+    game.train_parser()
 cmd_THING_TYPE.argtypes = 'string char'
 
 def cmd_THING_INSTALLED(game, thing_id):
@@ -383,13 +384,14 @@ class Game(GameBase):
         self.portals_new = {}
         self.terrains = {}
         self.player = None
+        self.parser = Parser(self)
+        self.train_parser()
 
-    def get_string_options(self, string_option_type):
-        if string_option_type == 'map_geometry':
-            return ['Hex', 'Square']
-        elif string_option_type == 'thing_type':
-            return self.thing_types.keys()
-        return None
+    def train_parser(self):
+        self.parser.string_options = {
+            'map_geometry': {'Hex', 'Square'},
+            'thing_type': self.thing_types.keys()
+        }
 
     def get_command(self, command_name):
         from functools import partial
@@ -497,7 +499,6 @@ class RogueChatTUI(TUI):
         self.socket = ClientSocket(host, self.socket_log)
         self.game = Game()
         self.game.tui = self
-        self.parser = Parser(self.game)
         self.login_name = None
         self.map_mode = 'terrain + things'
         self.password = 'foo'
@@ -589,6 +590,10 @@ class RogueChatTUI(TUI):
         super().__init__(*args, **kwargs)
 
     def update_on_connect(self):
+        self.game.thing_types = {}
+        self.game.terrains = {}
+        self.game.train_parser()
+        self.is_admin = False
         self.socket.send('TASKS')
         self.socket.send('TERRAINS')
         self.socket.send('THING_TYPES')
@@ -1093,7 +1098,7 @@ class RogueChatTUI(TUI):
                 self.draw_face_popup()
 
     def handle_server_message(self, msg):
-        command, args = self.parser.parse(msg)
+        command, args = self.game.parser.parse(msg)
         command(*args)
 
     def on_each_loop_start(self):