home · contact · privacy
New client: Add dedicated stats window, read HP and Satiation score.
[plomrogue] / client_prototype.py
index 2dd666fb36b0117297c687847d9926f310b37b1c..1801da1072f2cff77e5e1ca0e71420d5555c1ed8 100644 (file)
@@ -167,6 +167,27 @@ def draw_screen():
     stdscr.refresh()
 
 
+def read_worldstate():
+    if not os.access(io["path_worldstate"], os.F_OK):
+        msg = "No world state file found at " + io["path_worldstate"] + "."
+        raise SystemExit(msg)
+    read_anew = False
+    worldstate_file = open(io["path_worldstate"], "r")
+    turn_string = worldstate_file.readline()
+    if int(turn_string) != world_data["turn"]:
+        read_anew = True
+    if not read_anew: # In rare cases, world may change, but not turn number.
+        mtime = os.stat(io["path_worldstate"])
+        if mtime != read_worldstate.last_checked_mtime:
+            read_worldstate.last_checked_mtime = mtime
+            read_anew = True
+    if read_anew:
+        cursed_main.redraw = True
+        world_data["turn"] = int(turn_string)
+        world_data["lifepoints"] = int(worldstate_file.readline())
+        world_data["satiation"] = int(worldstate_file.readline())
+    worldstate_file.close()
+read_worldstate.last_checked_mtime = -1
 
 
 def cursed_main(stdscr):
@@ -220,15 +241,26 @@ def cursed_main(stdscr):
         new_data_from_server = io["file_in"].read()
         ping_test()
         read_into_message_queue()
+        read_worldstate()
 
 
-def foo():
+def win_foo():
     winmap = ['.', 'o', '.', 'o', 'O', 'o', '.', 'o', '.', 'x', 'y', 'x']
     size = [4, 3]
     offset = [0, 0]
     return offset, size, winmap
 
 
+def win_info():
+    size = [1, 33]
+    winmap = "T: " + str(world_data["turn"]) \
+        + " H: " + str(world_data["lifepoints"]) \
+        + " S: " + str(world_data["satiation"])
+    winmap = str(winmap).ljust(size[1])
+    offset = [0, 0]
+    return offset, size, winmap
+
+
 def command_quit():
     io["file_out"].write("QUIT\n")
     io["file_out"].flush()
@@ -236,15 +268,16 @@ def command_quit():
 
 
 windows = [
-    {"config": [1, 33], "func": foo},
-    {"config": [-7, 33], "func": foo},
-    {"config": [4, 16], "func": foo},
-    {"config": [4, 16], "func": foo},
-    {"config": [0, -34], "func": foo}
+    {"config": [1, 33], "func": win_info},
+    {"config": [-7, 33], "func": win_foo},
+    {"config": [4, 16], "func": win_foo},
+    {"config": [4, 16], "func": win_foo},
+    {"config": [0, -34], "func": win_foo}
 ]
 io = {
     "path_out": "server/in",
-    "path_in": "server/out"
+    "path_in": "server/out",
+    "path_worldstate": "server/worldstate"
 }
 commands = {
     "Q": command_quit
@@ -253,6 +286,11 @@ message_queue = {
     "open_end": False,
     "messages": []
 }
+world_data = {
+    "lifepoints": -1,
+    "satiation": -1,
+    "turn": -1
+}
 sep_size = 1  # Width of inter-window borders and title bars.
 stdscr = None
 screen_size = [0,0]
@@ -271,9 +309,6 @@ except:
     print("SOMETHING WENT WRONG IN UNEXPECTED WAYS")
     raise
 finally:
-    logfile = open("log", "a")
-    logfile.write(str(message_queue))
-    logfile.close()
     if "file_out" in io:
         io["file_out"].close()
     if "file_in" in io: