home · contact · privacy
Add "item" thing type differentiated from animate thing types.
[plomrogue2-experiments] / new / example_client.py
index 7a9902708a60cf36140ae2024fd1e9c21cbb00d6..8a0de5060f9c1bc7a144132e7fce64efa5492c84 100755 (executable)
@@ -3,10 +3,11 @@ import curses
 import socket
 import threading
 from plomrogue.parser import ArgError, Parser
-from plomrogue.commands import cmd_MAP, cmd_THING_TYPE, cmd_THING_POS
-from plomrogue.game import Game, WorldBase, ThingBase
+from plomrogue.commands import cmd_MAP, cmd_THING_POS
+from plomrogue.game import Game, WorldBase
 from plomrogue.mapping import MapBase
 from plomrogue.io import PlomSocket
+from plomrogue.things import ThingBase
 import types
 
 
@@ -104,6 +105,11 @@ def cmd_GAME_STATE_COMPLETE(self):
     self.to_update['turn'] = True
     self.to_update['map'] = True
 
+def cmd_THING_TYPE(game, i, type_):
+    t = game.world.get_thing(i)
+    t.type_ = type_
+cmd_THING_TYPE.argtypes = 'int:nonneg string'
+
 
 class Game:
 
@@ -166,6 +172,8 @@ class Game:
             symbol = '@'
         elif type_ == 'monster':
             symbol = 'm'
+        elif type_ == 'item':
+            symbol = 'i'
         return symbol
 
 
@@ -286,7 +294,10 @@ class MapWidget(Widget):
             terrain_as_list = list(self.tui.game.world.map_.terrain[:])
             for t in self.tui.game.world.things:
                 pos_i = self.tui.game.world.map_.get_position_index(t.position)
-                terrain_as_list[pos_i] = self.tui.game.symbol_for_type(t.type_)
+                symbol = self.tui.game.symbol_for_type(t.type_)
+                if symbol in {'i'} and terrain_as_list[pos_i] in {'@', 'm'}:
+                    continue
+                terrain_as_list[pos_i] = symbol
             return ''.join(terrain_as_list)
 
         def pad_or_cut_x(lines):
@@ -309,6 +320,8 @@ class MapWidget(Widget):
             for c in ''.join(lines):
                 if c in {'@', 'm'}:
                     chars_with_attrs += [(c, curses.color_pair(1))]
+                elif c == 'i':
+                    chars_with_attrs += [(c, curses.color_pair(4))]
                 elif c == '.':
                     chars_with_attrs += [(c, curses.color_pair(2))]
                 elif c in {'x', 'X', '#'}:
@@ -359,6 +372,7 @@ class TUI:
         curses.init_pair(1, curses.COLOR_BLACK, curses.COLOR_RED)
         curses.init_pair(2, curses.COLOR_BLACK, curses.COLOR_GREEN)
         curses.init_pair(3, curses.COLOR_BLACK, curses.COLOR_BLUE)
+        curses.init_pair(4, curses.COLOR_BLACK, curses.COLOR_YELLOW)
         curses.curs_set(False)  # hide cursor
         self.to_send = []
         self.edit = EditWidget(self, (0, 6), (1, 14), check_tui = ['edit'])