home · contact · privacy
Fix mapping interaction between server and client.
[plomrogue2-experiments] / new / plomrogue / game.py
index b1225eab8a625b7e5ee8efd1ebe3e1e8b7841d66..f86383d552ba2daa9b73eb4989af439b399a95cf 100755 (executable)
@@ -117,20 +117,22 @@ class World(WorldBase):
         self.turn = 0
         self.maps = {}
         self.new_map((0,0), yx)
-        #self.new_map((0,1), yx)
-        #self.new_map((1,1), yx)
-        #self.new_map((1,0), yx)
-        #self.new_map((1,-1), yx)
-        #self.new_map((0,-1), yx)
-        #self.new_map((-1,-1), yx)
-        #self.new_map((-1,0), yx)
-        #self.new_map((-1,1), yx)
-        for pos in self.maps[(0,0)]:
-            if 0 in pos or (yx[0] - 1) == pos[0] or (yx[1] - 1) == pos[1]:
-                self.maps[(0,0)][pos] = '#'
-                continue
-            self.maps[(0,0)][pos] = random.choice(('.', '.', '.', '.', 'x'))
-
+        self.new_map((0,1), yx)
+        self.new_map((1,1), yx)
+        self.new_map((1,0), yx)
+        self.new_map((1,-1), yx)
+        self.new_map((0,-1), yx)
+        self.new_map((-1,-1), yx)
+        self.new_map((-1,0), yx)
+        self.new_map((-1,1), yx)
+        for map_pos in self.maps:
+            map_ = self.maps[map_pos]
+            if (0,0) == map_pos:
+                for pos in map_:
+                    map_[pos] = random.choice(('.', '.', '.', '.', 'x'))
+            else:
+                for pos in map_:
+                    map_[pos] = '~'
         player = add_thing_at_random('human')
         self.player_id = player.id_
         add_thing_at_random('monster')
@@ -183,19 +185,22 @@ class Game:
     def send_gamestate(self, connection_id=None):
         """Send out game state data relevant to clients."""
 
+        def send_thing(offset, thing):
+            offset_pos = (thing.position[1][0] - offset[0],
+                          thing.position[1][1] - offset[1])
+            self.io.send('THING_TYPE %s %s' % (thing.id_, thing.type_))
+            self.io.send('THING_POS %s %s' % (thing.id_,
+                                              stringify_yx(offset_pos)))
+
         self.io.send('TURN ' + str(self.world.turn))
-        self.io.send('MAP ' + stringify_yx(visible_map.size))
         visible_map = self.world.player.get_visible_map()
+        offset = self.world.player.get_surroundings_offset()
+        self.io.send('VISIBLE_MAP ' + stringify_yx(offset) + ' ' + stringify_yx(visible_map.size))
         for y, line in visible_map.lines():
             self.io.send('VISIBLE_MAP_LINE %5s %s' % (y, quote(line)))
-        visible_things, offset = self.world.player.get_visible_things()
+        visible_things = self.world.player.get_visible_things()
         for thing in visible_things:
-            offset_pos = (thing.position[1][0] - offset[0],
-                          thing.position[1][1] - offset[1])
-            self.io.send('THING_TYPE %s %s' % (thing.id_, thing.type_))
-            self.io.send('THING_POS %s %s %s' % (thing.id_,
-                                                 stringify_yx(thing.position[0]),
-                                                 stringify_yx(offset_pos)))
+            send_thing(offset, thing)
             if hasattr(thing, 'health'):
                 self.io.send('THING_HEALTH %s %s' % (thing.id_,
                                                      thing.health))
@@ -206,10 +211,7 @@ class Game:
             self.io.send('PLAYER_INVENTORY ,')
         for id_ in self.world.player.inventory:
             thing = self.world.get_thing(id_)
-            self.io.send('THING_TYPE %s %s' % (thing.id_, thing.type_))
-            self.io.send('THING_POS %s %s %s' % (thing.id_,
-                                                 stringify_yx(thing.position[0]),
-                                                 stringify_yx(thing.position[1])))
+            send_thing(offset, thing)
         self.io.send('GAME_STATE_COMPLETE')
 
     def proceed(self):