From 5e1dd193ed529ff9d3ca3746736d74d3ca55d864 Mon Sep 17 00:00:00 2001
From: Christian Heller <c.heller@plomlompom.de>
Date: Mon, 7 Dec 2020 03:12:40 +0100
Subject: [PATCH] Show Thing installation status in Thing info display.

---
 plomrogue/game.py    |  2 ++
 rogue_chat.html      | 20 ++++++++++++++------
 rogue_chat_curses.py |  9 ++++++++-
 3 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/plomrogue/game.py b/plomrogue/game.py
index 6473324..68d4858 100755
--- a/plomrogue/game.py
+++ b/plomrogue/game.py
@@ -242,6 +242,8 @@ class Game(GameBase):
                                                        quote(t.thing_char)), c_id)
                 if hasattr(t, 'carrying') and t.carrying:
                     self.io.send('THING_CARRYING %s' % (t.id_), c_id)
+                if hasattr(t, 'installable') and not t.portable:
+                    self.io.send('THING_INSTALLED %s' % (t.id_), c_id)
             for big_yx in self.portals:
                 for little_yx in [little_yx for little_yx in self.portals[big_yx]
                                   if player.fov_test(big_yx, little_yx)]:
diff --git a/rogue_chat.html b/rogue_chat.html
index f0f2faa..27ae875 100644
--- a/rogue_chat.html
+++ b/rogue_chat.html
@@ -497,6 +497,11 @@ let server = {
             if (t) {
                 t.carrying = true;
             };
+        } else if (tokens[0] === 'THING_INSTALLED') {
+            let t = game.get_thing(tokens[1], false);
+            if (t) {
+                t.installed = true;
+            };
         } else if (tokens[0] === 'TERRAIN') {
             game.terrains[tokens[1]] = tokens[2]
         } else if (tokens[0] === 'MAP') {
@@ -1355,12 +1360,15 @@ let explorer = {
     get_thing_info: function(t) {
         const symbol = game.thing_types[t.type_];
         let info = t.type_ + " / " + symbol;
-         if (t.thing_char) {
-             info += t.thing_char;
-         };
-         if (t.name_) {
-             info += " (" + t.name_ + ")";
-         }
+        if (t.thing_char) {
+            info += t.thing_char;
+        };
+        if (t.name_) {
+            info += " (" + t.name_ + ")";
+        }
+        if (t.installed) {
+            info += " / installed";
+        }
         return info;
     },
     annotate: function(msg) {
diff --git a/rogue_chat_curses.py b/rogue_chat_curses.py
index e6ddda8..bc3c40d 100755
--- a/rogue_chat_curses.py
+++ b/rogue_chat_curses.py
@@ -292,9 +292,13 @@ def cmd_THING_TYPE(game, thing_type, symbol_hint):
     game.thing_types[thing_type] = symbol_hint
 cmd_THING_TYPE.argtypes = 'string char'
 
+def cmd_THING_INSTALLED(game, thing_id):
+    game.get_thing(thing_id).installed = True
+cmd_THING_INSTALLED.argtypes = 'int:pos'
+
 def cmd_THING_CARRYING(game, thing_id):
     game.get_thing(thing_id).carrying = True
-cmd_THING_CARRYING.argtypes = 'int:nonneg'
+cmd_THING_CARRYING.argtypes = 'int:pos'
 
 def cmd_TERRAIN(game, terrain_char, terrain_desc):
     game.terrains[terrain_char] = terrain_desc
@@ -331,6 +335,7 @@ class Game(GameBase):
         self.register_command(cmd_THING_NAME)
         self.register_command(cmd_THING_CHAR)
         self.register_command(cmd_THING_CARRYING)
+        self.register_command(cmd_THING_INSTALLED)
         self.register_command(cmd_TERRAIN)
         self.register_command(cmd_MAP)
         self.register_command(cmd_MAP_CONTROL)
@@ -720,6 +725,8 @@ class TUI:
             info += t.thing_char
         if hasattr(t, 'name'):
             info += ' (%s)' % t.name
+        if hasattr(t, 'installed'):
+            info += ' / installed'
         return info
 
     def loop(self, stdscr):
-- 
2.30.2