X-Git-Url: https://plomlompom.com/repos/foo.html?a=blobdiff_plain;f=rogue_chat_curses.py;h=d76c3bebd0b41622a41d3191b8db20836e989f8d;hb=71ffa4676857da80edebbbfca6e2910d929ee3a5;hp=6bd662be7c6873b20303fa7c3474d18d2efd9a06;hpb=a595b17ad67ad065a35e14f66773c2eaace0fa8c;p=plomrogue2 diff --git a/rogue_chat_curses.py b/rogue_chat_curses.py index 6bd662b..d76c3be 100755 --- a/rogue_chat_curses.py +++ b/rogue_chat_curses.py @@ -169,14 +169,16 @@ class PlomSocketClient(PlomSocket): pass # we assume socket will be known as dead by now def cmd_TURN(game, n): - game.annotations = {} game.turn = n - game.things = [] - game.portals = {} game.turn_complete = False - game.fov = '' cmd_TURN.argtypes = 'int:nonneg' +def cmd_PSEUDO_FOV_WIPE(game): + game.portals_new = {} + game.annotations_new = {} + game.things_new = [] +cmd_PSEUDO_FOV_WIPE.argtypes = '' + def cmd_LOGIN_OK(game): game.tui.switch_mode('post_login_wait') game.tui.send('GET_GAMESTATE') @@ -210,10 +212,10 @@ def cmd_PLAYER_ID(game, player_id): cmd_PLAYER_ID.argtypes = 'int:nonneg' def cmd_THING(game, yx, thing_type, protection, thing_id, portable, commandable): - t = game.get_thing(thing_id) + t = game.get_thing_temp(thing_id) if not t: t = ThingBase(game, thing_id) - game.things += [t] + game.things_new += [t] t.position = yx t.type_ = thing_type t.protection = protection @@ -222,29 +224,29 @@ def cmd_THING(game, yx, thing_type, protection, thing_id, portable, commandable) cmd_THING.argtypes = 'yx_tuple:nonneg string:thing_type char int:nonneg bool bool' def cmd_THING_NAME(game, thing_id, name): - t = game.get_thing(thing_id) + t = game.get_thing_temp(thing_id) t.name = name cmd_THING_NAME.argtypes = 'int:pos string' def cmd_THING_FACE(game, thing_id, face): - t = game.get_thing(thing_id) + t = game.get_thing_temp(thing_id) t.face = face cmd_THING_FACE.argtypes = 'int:pos string' def cmd_THING_HAT(game, thing_id, hat): - t = game.get_thing(thing_id) + t = game.get_thing_temp(thing_id) t.hat = hat cmd_THING_HAT.argtypes = 'int:pos string' def cmd_THING_CHAR(game, thing_id, c): - t = game.get_thing(thing_id) + t = game.get_thing_temp(thing_id) t.thing_char = c cmd_THING_CHAR.argtypes = 'int:pos char' def cmd_MAP(game, geometry, size, content): map_geometry_class = globals()['MapGeometry' + geometry] - game.map_geometry = map_geometry_class(size) - game.map_content = content + game.map_geometry_new = map_geometry_class(size) + game.map_content_new = content if type(game.map_geometry) == MapGeometrySquare: game.tui.movement_keys = { game.tui.keys['square_move_up']: 'UP', @@ -264,24 +266,31 @@ def cmd_MAP(game, geometry, size, content): cmd_MAP.argtypes = 'string:map_geometry yx_tuple:pos string' def cmd_FOV(game, content): - game.fov = content + game.fov_new = content cmd_FOV.argtypes = 'string' def cmd_MAP_CONTROL(game, content): - game.map_control_content = content + game.map_control_content_new = content cmd_MAP_CONTROL.argtypes = 'string' def cmd_GAME_STATE_COMPLETE(game): - game.turn_complete = True game.tui.do_refresh = True game.tui.info_cached = None + game.things = game.things_new + game.portals = game.portals_new + game.annotations = game.annotations_new + game.fov = game.fov_new + game.map_geometry = game.map_geometry_new + game.map_content = game.map_content_new + game.map_control_content = game.map_control_content_new game.player = game.get_thing(game.player_id) + game.turn_complete = True if game.tui.mode.name == 'post_login_wait': game.tui.switch_mode('play') cmd_GAME_STATE_COMPLETE.argtypes = '' def cmd_PORTAL(game, position, msg): - game.portals[position] = msg + game.portals_new[position] = msg cmd_PORTAL.argtypes = 'yx_tuple:nonneg string' def cmd_PLAY_ERROR(game, msg): @@ -301,7 +310,7 @@ def cmd_ARGUMENT_ERROR(game, msg): cmd_ARGUMENT_ERROR.argtypes = 'string' def cmd_ANNOTATION(game, position, msg): - game.annotations[position] = msg + game.annotations_new[position] = msg if game.tui.mode.shows_info: game.tui.do_refresh = True cmd_ANNOTATION.argtypes = 'yx_tuple:nonneg string' @@ -319,11 +328,11 @@ def cmd_THING_TYPE(game, thing_type, symbol_hint): cmd_THING_TYPE.argtypes = 'string char' def cmd_THING_INSTALLED(game, thing_id): - game.get_thing(thing_id).installed = True + game.get_thing_temp(thing_id).installed = True cmd_THING_INSTALLED.argtypes = 'int:pos' def cmd_THING_CARRYING(game, thing_id, carried_id): - game.get_thing(thing_id).carrying = game.get_thing(carried_id) + game.get_thing_temp(thing_id).carrying = game.get_thing(carried_id) cmd_THING_CARRYING.argtypes = 'int:pos int:pos' def cmd_TERRAIN(game, terrain_char, terrain_desc): @@ -346,6 +355,7 @@ class Game(GameBase): turn_complete = False tasks = {} thing_types = {} + things_new = [] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -357,6 +367,7 @@ class Game(GameBase): self.register_command(cmd_REPLY) self.register_command(cmd_PLAYER_ID) self.register_command(cmd_TURN) + self.register_command(cmd_PSEUDO_FOV_WIPE) self.register_command(cmd_THING) self.register_command(cmd_THING_TYPE) self.register_command(cmd_THING_NAME) @@ -381,7 +392,9 @@ class Game(GameBase): self.map_content = '' self.player_id = -1 self.annotations = {} + self.annotations_new = {} self.portals = {} + self.portals_new = {} self.terrains = {} self.player = None @@ -398,6 +411,12 @@ class Game(GameBase): f.argtypes = self.commands[command_name].argtypes return f + def get_thing_temp(self, id_): + for thing in self.things_new: + if id_ == thing.id_: + return thing + return None + class Mode: def __init__(self, name, has_input_prompt=False, shows_info=False, @@ -893,7 +912,7 @@ class TUI: 'MODE: %s – %s' % (self.mode.short_desc, help)) def draw_map(): - if not self.game.turn_complete and len(self.map_lines) == 0: + if (not self.game.turn_complete) and len(self.map_lines) == 0: return if self.game.turn_complete: map_lines_split = []