From cdf875d1b67cfced25569caccc74f4c45417dc96 Mon Sep 17 00:00:00 2001
From: Christian Heller <c.heller@plomlompom.de>
Date: Wed, 27 Jan 2016 23:10:10 +0100
Subject: [PATCH] Client: Make worldstate file data reading order configurable.

---
 client/config/io.py | 12 +++++++++++-
 roguelike-client    | 41 ++++++++++++++++++++---------------------
 2 files changed, 31 insertions(+), 22 deletions(-)

diff --git a/client/config/io.py b/client/config/io.py
index 34dcd05..ecf283d 100644
--- a/client/config/io.py
+++ b/client/config/io.py
@@ -1,5 +1,15 @@
 io = {
     "path_out": "server/in",
     "path_in": "server/out",
-    "path_worldstate": "server/worldstate"
+    "path_worldstate": "server/worldstate",
+    "worldstate_read_order": [
+        ["lifepoints", "int"],
+        ["satiation", "int"],
+        ["inventory", "lines"],
+        ["avatar_position", "int", 0],
+        ["avatar_position", "int", 1],
+        ["map_size", "int"],
+        ["fov_map", "map"],
+        ["mem_map", "map"]
+    ]
 }
diff --git a/roguelike-client b/roguelike-client
index 8e18515..7bb8622 100755
--- a/roguelike-client
+++ b/roguelike-client
@@ -38,28 +38,27 @@ def read_worldstate():
     if read_anew:
         redraw_windows = True
         world_data["turn"] = int(turn_string)
-        world_data["lifepoints"] = int(worldstate_file.readline())
-        world_data["satiation"] = int(worldstate_file.readline())
-        world_data["inventory"] = []
-        while True:
-            line = worldstate_file.readline().replace("\n", "")
-            if line == '%':
-                break
-            world_data["inventory"] += [line]
-        world_data["avatar_position"][0] = int(worldstate_file.readline())
-        world_data["avatar_position"][1] = int(worldstate_file.readline())
+        for entry in io["worldstate_read_order"]:
+            if entry[1] == "int":
+                if 2 == len(entry):
+                    world_data[entry[0]] = int(worldstate_file.readline())
+                elif 3 == len(entry):
+                    world_data[entry[0]][entry[2]] = \
+                            int(worldstate_file.readline())
+            elif entry[1] == "lines":
+                world_data[entry[0]] = []
+                while True:
+                    line = worldstate_file.readline().replace("\n", "")
+                    if line == '%':
+                        break
+                    world_data[entry[0]] += [line]
+            elif entry[1] == "map":
+                world_data[entry[0]] = ""
+                for i in range(world_data["map_size"]):
+                    line = worldstate_file.readline().replace("\n", "")
+                    world_data[entry[0]] += line
         if not world_data["look_mode"]:
-            world_data["map_center"][0] = world_data["avatar_position"][0]
-            world_data["map_center"][1] = world_data["avatar_position"][1]
-        world_data["map_size"] = int(worldstate_file.readline())
-        world_data["fov_map"] = ""
-        for i in range(world_data["map_size"]):
-            line = worldstate_file.readline().replace("\n", "")
-            world_data["fov_map"] += line
-        world_data["mem_map"] = ""
-        for i in range(world_data["map_size"]):
-            line = worldstate_file.readline().replace("\n", "")
-            world_data["mem_map"] += line
+            world_data["map_center"] = world_data["avatar_position"][:]
     worldstate_file.close()
 read_worldstate.last_checked_mtime = -1
 
-- 
2.30.2