X-Git-Url: https://plomlompom.com/repos/foo.html?a=blobdiff_plain;ds=inline;f=rogue_chat_curses.py;h=0a5ced7a0692c27b9211f9f57e7ac752b29fe447;hb=6cc83951670f2022bd22cbf0728ebb4c25479c4d;hp=3369aef86744b5ee00ea5e4b673341da9ff3d627;hpb=e67306357a830cabdd5ce86b2b333499d99da325;p=plomrogue2
diff --git a/rogue_chat_curses.py b/rogue_chat_curses.py
index 3369aef..0a5ced7 100755
--- a/rogue_chat_curses.py
+++ b/rogue_chat_curses.py
@@ -72,14 +72,19 @@ def cmd_PLAYER_ID(game, player_id):
game.player_id = player_id
cmd_PLAYER_ID.argtypes = 'int:nonneg'
-def cmd_THING_POS(game, thing_id, position):
- t = game.get_thing(thing_id, True)
- t.position = position
-cmd_THING_POS.argtypes = 'int:nonneg yx_tuple:nonneg'
+def cmd_THING(game, yx, thing_type, thing_id):
+ t = game.get_thing(thing_id)
+ if not t:
+ t = ThingBase(game, thing_id)
+ game.things += [t]
+ t.position = yx
+ t.type_ = thing_type
+cmd_THING.argtypes = 'yx_tuple:nonneg string:thing_type int:nonneg'
def cmd_THING_NAME(game, thing_id, name):
- t = game.get_thing(thing_id, True)
- t.name = name
+ t = game.get_thing(thing_id)
+ if t:
+ t.name = name
cmd_THING_NAME.argtypes = 'int:nonneg string'
def cmd_MAP(game, geometry, size, content):
@@ -118,7 +123,7 @@ def cmd_GAME_STATE_COMPLETE(game):
game.tui.switch_mode('play')
if game.tui.mode.shows_info:
game.tui.query_info()
- player = game.get_thing(game.player_id, False)
+ player = game.get_thing(game.player_id)
if player.position in game.portals:
game.tui.teleport_target_host = game.portals[player.position]
game.tui.switch_mode('teleport')
@@ -155,14 +160,18 @@ def cmd_TASKS(game, tasks_comma_separated):
game.tasks = tasks_comma_separated.split(',')
cmd_TASKS.argtypes = 'string'
+def cmd_THING_TYPE(game, thing_type, symbol_hint):
+ game.thing_types[thing_type] = symbol_hint
+cmd_THING_TYPE.argtypes = 'string char'
+
def cmd_PONG(game):
pass
cmd_PONG.argtypes = ''
class Game(GameBase):
- thing_type = ThingBase
turn_complete = False
tasks = {}
+ thing_types = {}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@@ -171,7 +180,8 @@ class Game(GameBase):
self.register_command(cmd_CHAT)
self.register_command(cmd_PLAYER_ID)
self.register_command(cmd_TURN)
- self.register_command(cmd_THING_POS)
+ self.register_command(cmd_THING)
+ self.register_command(cmd_THING_TYPE)
self.register_command(cmd_THING_NAME)
self.register_command(cmd_MAP)
self.register_command(cmd_MAP_CONTROL)
@@ -191,6 +201,8 @@ class Game(GameBase):
def get_string_options(self, string_option_type):
if string_option_type == 'map_geometry':
return ['Hex', 'Square']
+ elif string_option_type == 'thing_type':
+ return self.thing_types.keys()
return None
def get_command(self, command_name):
@@ -289,7 +301,9 @@ class TUI:
self.socket_thread = threading.Thread(target=self.socket.run)
self.socket_thread.start()
self.disconnected = False
+ self.game.thing_types = {}
self.socket.send('TASKS')
+ self.socket.send('THING_TYPES')
self.switch_mode('login')
except ConnectionRefusedError:
self.log_msg('@ server connect failure')
@@ -338,7 +352,7 @@ class TUI:
self.map_mode = 'terrain'
self.mode = getattr(self, 'mode_' + mode_name)
if self.mode.shows_info:
- player = self.game.get_thing(self.game.player_id, False)
+ player = self.game.get_thing(self.game.player_id)
self.explorer = YX(player.position.y, player.position.x)
if self.mode.name == 'waiting_for_server':
self.log_msg('@ waiting for server â¦')
@@ -429,7 +443,10 @@ class TUI:
info = 'TERRAIN: %s\n' % self.game.map_content[pos_i]
for t in self.game.things:
if t.position == self.explorer:
- info += 'PLAYER @: %s\n' % t.name
+ info += 'THING: %s' % t.type_
+ if hasattr(t, 'name'):
+ info += ' (name: %s)' % t.name
+ info += '\n'
if self.explorer in self.game.portals:
info += 'PORTAL: ' + self.game.portals[self.explorer] + '\n'
else:
@@ -476,7 +493,8 @@ class TUI:
map_lines_split += [list(map_content[start:end])]
if self.map_mode == 'terrain':
for t in self.game.things:
- map_lines_split[t.position.y][t.position.x] = '@'
+ symbol = self.game.thing_types[t.type_]
+ map_lines_split[t.position.y][t.position.x] = symbol
if self.mode.shows_info:
map_lines_split[self.explorer.y][self.explorer.x] = '?'
map_lines = []
@@ -490,7 +508,7 @@ class TUI:
map_lines += [' '.join(line)]
window_center = YX(int(self.size.y / 2),
int(self.window_width / 2))
- player = self.game.get_thing(self.game.player_id, False)
+ player = self.game.get_thing(self.game.player_id)
center = player.position
if self.mode.shows_info:
center = self.explorer