X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=new2%2Frogue_chat_curses.py;h=6fda713d2206ac3ed7d186586f0c0aaac542801f;hb=d16b92da8e0d5b85d909732ae22dee60bf480c5e;hp=6d0f8b77f8518f16b224c0afb761438793a63180;hpb=e4b04a5ba87c262b7f01a52ce6e25001b8a53506;p=plomrogue2-experiments diff --git a/new2/rogue_chat_curses.py b/new2/rogue_chat_curses.py index 6d0f8b7..6fda713 100755 --- a/new2/rogue_chat_curses.py +++ b/new2/rogue_chat_curses.py @@ -6,7 +6,7 @@ import threading from plomrogue.io_tcp import PlomSocket from plomrogue.game import GameBase from plomrogue.parser import Parser -from plomrogue.mapping import YX +from plomrogue.mapping import YX, MapGeometrySquare, MapGeometryHex from plomrogue.things import ThingBase from plomrogue.misc import quote @@ -42,10 +42,27 @@ def cmd_THING_NAME(game, thing_id, name): t.name = name cmd_THING_NAME.argtypes = 'int:nonneg string' -def cmd_MAP(game, size, content): - game.map_geometry.size = size +def cmd_MAP(game, geometry, size, content): + map_geometry_class = globals()['MapGeometry' + geometry] + game.map_geometry = map_geometry_class(size) game.map_content = content -cmd_MAP.argtypes = 'yx_tuple:pos string' + if type(game.map_geometry) == MapGeometrySquare: + game.tui.movement_keys = { + 'w': 'UP', + 'a': 'LEFT', + 's': 'DOWN', + 'd': 'RIGHT', + } + elif type(game.map_geometry) == MapGeometryHex: + game.tui.movement_keys = { + 'w': 'UPLEFT', + 'e': 'UPRIGHT', + 'd': 'RIGHT', + 'c': 'DOWNRIGHT', + 'x': 'DOWNLEFT', + 's': 'LEFT', + } +cmd_MAP.argtypes = 'string:map_geometry yx_tuple:pos string' def cmd_GAME_STATE_COMPLETE(game): game.info_db = {} @@ -56,9 +73,9 @@ def cmd_GAME_STATE_COMPLETE(game): game.tui.query_info() player = game.get_thing(game.player_id, False) if player.position in game.portals: - host, port = game.portals[player.position].split(':') - game.tui.teleport_target_host = host - game.tui.teleport_target_port = port + #host, port = game.portals[player.position].split(':') + game.tui.teleport_target_host = game.portals[player.position] + game.tui.teleport_target_port = 5000 game.tui.switch_mode('teleport') game.turn_complete = True game.tui.do_refresh = True @@ -113,6 +130,11 @@ class Game(GameBase): self.info_db = {} self.portals = {} + def get_string_options(self, string_option_type): + if string_option_type == 'map_geometry': + return ['Hex', 'Square'] + return None + def get_command(self, command_name): from functools import partial f = partial(self.commands[command_name], self) @@ -149,6 +171,7 @@ class TUI: self.log = [] self.do_refresh = True self.queue = queue.Queue() + self.login_name = None self.switch_mode('waiting_for_server') curses.wrapper(self.loop) @@ -178,11 +201,14 @@ class TUI: if self.mode.name == 'waiting_for_server': self.log_msg('@ waiting for server …') elif self.mode.name == 'login': - self.log_msg('@ enter username') + if self.login_name: + self.send('LOGIN ' + quote(self.login_name)) + else: + self.log_msg('@ enter username') elif self.mode.name == 'teleport': self.log_msg("@ May teleport to %s:%s" % (self.teleport_target_host, self.teleport_target_port)); - self.log_msg("@ Enter 'YES!' to affirm."); + self.log_msg("@ Enter 'YES!' to enthusiastically affirm."); elif self.mode.name == 'annotate' and self.explorer in self.game.info_db: info = self.game.info_db[self.explorer] if info != '(none)': @@ -348,17 +374,25 @@ class TUI: if self.mode.shows_info: map_lines_split[self.explorer.y][self.explorer.x] = '?' map_lines = [] - for line in map_lines_split: - map_lines += [''.join(line)] - map_center = YX(int(self.game.map_geometry.size.y / 2), - int(self.game.map_geometry.size.x / 2)) + if type(self.game.map_geometry) == MapGeometryHex: + indent = 0 + for line in map_lines_split: + map_lines += [indent*' ' + ' '.join(line)] + indent = 0 if indent else 1 + else: + for line in map_lines_split: + 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) center = player.position if self.mode.shows_info: center = self.explorer + if type(self.game.map_geometry) == MapGeometryHex: + center = YX(center.y, center.x * 2) offset = center - window_center + if type(self.game.map_geometry) == MapGeometryHex and offset.y % 2: + offset += YX(0, 1) term_y = max(0, -offset.y) term_x = max(0, -offset.x) map_y = max(0, offset.y) @@ -415,6 +449,7 @@ class TUI: if len(self.input_) > max_length: self.input_ = self.input_[:max_length] elif self.mode == self.mode_login and key == '\n': + self.login_name = self.input_ self.send('LOGIN ' + quote(self.input_)) self.input_ = "" elif self.mode == self.mode_chat and key == '\n': @@ -467,39 +502,27 @@ class TUI: self.switch_mode('play') self.input_ = '' elif self.mode == self.mode_study: - if key == 'c': + if key == 'C': self.switch_mode('chat') - elif key == 'p': + elif key == 'P': self.switch_mode('play') elif key == 'A': self.switch_mode('annotate', keep_position=True) - elif key == 'P': + elif key == 'p': self.switch_mode('portal', keep_position=True) - elif key == 'w': - move_explorer('UP') - elif key == 'a': - move_explorer('LEFT') - elif key == 's': - move_explorer('DOWN') - elif key == 'd': - move_explorer('RIGHT') + elif key in self.movement_keys: + move_explorer(self.movement_keys[key]) elif self.mode == self.mode_play: - if key == 'c': + if key == 'C': self.switch_mode('chat') elif key == '?': self.switch_mode('study') - if key == 'e': + if key == 'E': self.switch_mode('edit') elif key == 'f': self.send('TASK:FLATTEN_SURROUNDINGS') - elif key == 'w': - self.send('TASK:MOVE UP') - elif key == 'a': - self.send('TASK:MOVE LEFT') - elif key == 's': - self.send('TASK:MOVE DOWN') - elif key == 'd': - self.send('TASK:MOVE RIGHT') + elif key in self.movement_keys: + self.send('TASK:MOVE ' + self.movement_keys[key]) elif self.mode == self.mode_edit: self.send('TASK:WRITE ' + key) self.switch_mode('play')