home · contact · privacy
Minor client refactoring.
[plomrogue2-experiments] / client.py
index 11d33ccaba367f06d0a70cba78fd14dd662823a9..f91a0ddc48f80f5992c77cd5beaeb46c1cd3959a 100755 (executable)
--- a/client.py
+++ b/client.py
@@ -14,7 +14,7 @@ class MapSquare(game_common.Map):
         map_lines = []
         start_cut = 0
         while start_cut < len(terrain):
-            limit = start_cut + self.game.world.map_.size[1]
+            limit = start_cut + self.size[1]
             map_lines += [terrain[start_cut:limit]]
             start_cut = limit
         return "\n".join(map_lines)
@@ -23,7 +23,7 @@ class MapSquare(game_common.Map):
 class MapHex(game_common.Map):
 
     def list_terrain_to_lines(self, terrain_as_list):
-        new_terrain_list = []
+        new_terrain_list = [' ']
         x = 0
         y = 0
         for c in terrain_as_list:
@@ -33,7 +33,7 @@ class MapHex(game_common.Map):
                 new_terrain_list += ['\n']
                 x = 0
                 y += 1
-                if y % 2 != 0:
+                if y % 2 == 0:
                     new_terrain_list += [' ']
         return ''.join(new_terrain_list)
 
@@ -103,10 +103,20 @@ class WidgetManager:
         self.map_widget = urwid.Text('', wrap='clip')
         self.turn_widget = urwid.Text('')
         self.log_widget = urwid.Text('')
-        map_box = urwid.Padding(self.map_widget, width=50)
-        widget_pile = urwid.Pile([edit_widget, map_box, self.turn_widget,
-                                  self.log_widget])
-        self.top = urwid.Filler(widget_pile, valign='top')
+        edit_map = urwid.AttrMap(edit_widget, 'foo')
+        turn_map = urwid.AttrMap(self.turn_widget, 'bar')
+        log_map = urwid.AttrMap(self.log_widget, 'baz')
+        widget_pile = urwid.Pile([edit_map,
+                                  urwid.Divider(),
+                                  turn_map,
+                                  urwid.Divider(),
+                                  log_map])
+        widget_columns = urwid.Columns([(20, widget_pile), self.map_widget],
+                                       dividechars=1)
+        self.top = urwid.Filler(widget_columns, valign='top')
+        self.palette = [('foo', 'white', 'dark red'),
+                        ('bar', 'white', 'dark blue'),
+                        ('baz', 'white', 'dark green')]
 
     def draw_map(self):
         """Draw map view from .game.map_.terrain, .game.things."""
@@ -114,7 +124,18 @@ class WidgetManager:
         for t in self.game.world.things:
             pos_i = self.game.world.map_.get_position_index(t.position)
             terrain_as_list[pos_i] = self.game.symbol_for_type(t.type_)
-        return self.game.world.map_.list_terrain_to_lines(terrain_as_list)
+        text = self.game.world.map_.list_terrain_to_lines(terrain_as_list)
+        new_map_text = []
+        for char in text:
+            if char == '.':
+                new_map_text += [('foo', char)]
+            elif char in {'x', 'X', '#'}:
+                new_map_text += [('bar', char)]
+            elif char in {'@', 'm'}:
+                new_map_text += [('baz', char)]
+            else:
+                new_map_text += [char]
+        return new_map_text
 
     def update(self):
         """Redraw all non-edit widgets."""
@@ -166,7 +187,8 @@ class PlomRogueClient:
         self.socket = socket
         self.widget_manager = WidgetManager(self.socket, self.game)
         self.server_output = []
-        self.urwid_loop = urwid.MainLoop(self.widget_manager.top)
+        self.urwid_loop = urwid.MainLoop(self.widget_manager.top,
+                                         self.widget_manager.palette)
         self.urwid_pipe_write_fd = self.urwid_loop.watch_pipe(self.
                                                               handle_input)
         self.recv_loop_thread = threading.Thread(target=self.recv_loop)