X-Git-Url: https://plomlompom.com/repos/feed.xml?a=blobdiff_plain;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