From 687f032b63ef13e98a8e71ef59c6ef0cd032149f Mon Sep 17 00:00:00 2001 From: Christian Heller <c.heller@plomlompom.de> Date: Wed, 18 Nov 2020 05:35:33 +0100 Subject: [PATCH] dd annotation hints view. --- plomrogue/game.py | 6 ++++++ rogue_chat_curses.py | 19 +++++++++++++++---- rogue_chat_nocanvas_monochrome.html | 23 ++++++++++++++++++----- 3 files changed, 39 insertions(+), 9 deletions(-) diff --git a/plomrogue/game.py b/plomrogue/game.py index ccd51dc..84bebb9 100755 --- a/plomrogue/game.py +++ b/plomrogue/game.py @@ -146,6 +146,12 @@ class Game(GameBase): target_yx = player.fov_stencil.target_yx(big_yx, little_yx) portal = self.portals[big_yx][little_yx] self.io.send('PORTAL %s %s' % (target_yx, quote(portal)), c_id) + for big_yx in self.annotations: + for little_yx in [little_yx for little_yx in self.annotations[big_yx] + if player.fov_test(big_yx, little_yx)]: + target_yx = player.fov_stencil.target_yx(big_yx, little_yx) + annotation = self.annotations[big_yx][little_yx] + self.io.send('ANNOTATION_HINT %s' % (target_yx,), c_id) self.io.send('GAME_STATE_COMPLETE') def run_tick(self): diff --git a/rogue_chat_curses.py b/rogue_chat_curses.py index 15f4cd2..54499da 100755 --- a/rogue_chat_curses.py +++ b/rogue_chat_curses.py @@ -51,6 +51,8 @@ class PlomSocketClient(PlomSocket): pass # we assume socket will be known as dead by now def cmd_TURN(game, n): + game.info_db = {} + game.info_hints = [] game.turn = n game.things = [] game.portals = {} @@ -124,7 +126,6 @@ def cmd_MAP_CONTROL(game, content): cmd_MAP_CONTROL.argtypes = 'string' def cmd_GAME_STATE_COMPLETE(game): - game.info_db = {} if game.tui.mode.name == 'post_login_wait': game.tui.switch_mode('play') if game.tui.mode.shows_info: @@ -153,6 +154,10 @@ def cmd_ARGUMENT_ERROR(game, msg): game.tui.do_refresh = True cmd_ARGUMENT_ERROR.argtypes = 'string' +def cmd_ANNOTATION_HINT(game, position): + game.info_hints += [position] +cmd_ANNOTATION_HINT.argtypes = 'yx_tuple:nonneg' + def cmd_ANNOTATION(game, position, msg): game.info_db[position] = msg game.tui.restore_input_values() @@ -197,6 +202,7 @@ class Game(GameBase): self.register_command(cmd_MAP_CONTROL) self.register_command(cmd_PORTAL) self.register_command(cmd_ANNOTATION) + self.register_command(cmd_ANNOTATION_HINT) self.register_command(cmd_GAME_STATE_COMPLETE) self.register_command(cmd_ARGUMENT_ERROR) self.register_command(cmd_GAME_ERROR) @@ -206,6 +212,7 @@ class Game(GameBase): self.map_content = '' self.player_id = -1 self.info_db = {} + self.info_hints = [] self.portals = {} self.terrains = {} @@ -509,7 +516,10 @@ class TUI: start = self.game.map_geometry.size.x * y end = start + self.game.map_geometry.size.x map_lines_split += [[c + ' ' for c in map_content[start:end]]] - if self.map_mode == 'terrain': + if self.map_mode == 'annotations': + for p in self.game.info_hints: + map_lines_split[p.y][p.x] = 'A ' + elif self.map_mode == 'terrain': for p in self.game.portals.keys(): map_lines_split[p.y][p.x] = 'P ' used_positions = [] @@ -577,13 +587,12 @@ class TUI: elif self.mode == self.mode_study: content += 'Available actions:\n' content += '[%s] â move question mark\n' % ','.join(self.movement_keys) - content += '[%s] â toggle view between terrain, and password protection areas\n' % self.keys['toggle_map_mode'] + content += '[%s] â toggle view between terrain, annotations, and password protection areas\n' % self.keys['toggle_map_mode'] content += '\n\nOther modes available from here:' content += '[%s] â chat mode\n' % self.keys['switch_to_chat'] content += '[%s] â play mode\n' % self.keys['switch_to_play'] elif self.mode == self.mode_chat: content += '/nick NAME â re-name yourself to NAME\n' - #content += '/msg USER TEXT â send TEXT to USER\n' content += '/%s or /play â switch to play mode\n' % self.keys['switch_to_play'] content += '/%s or /study â switch to study mode\n' % self.keys['switch_to_study'] for i in range(self.size.y): @@ -719,6 +728,8 @@ class TUI: self.switch_mode('play') elif key == self.keys['toggle_map_mode']: if self.map_mode == 'terrain': + self.map_mode = 'annotations' + elif self.map_mode == 'annotations': self.map_mode = 'control' else: self.map_mode = 'terrain' diff --git a/rogue_chat_nocanvas_monochrome.html b/rogue_chat_nocanvas_monochrome.html index a5b2d69..88b6672 100644 --- a/rogue_chat_nocanvas_monochrome.html +++ b/rogue_chat_nocanvas_monochrome.html @@ -29,7 +29,7 @@ terminal columns: <input id="n_cols" type="number" step=4 min=80 value=80 /> <button id="switch_to_password">change tile editing password</button> <button id="switch_to_annotate">annotate tile</button> <button id="switch_to_portal">edit portal link</button> -<button id="toggle_map_mode">toggle terrain/control view</button> +<button id="toggle_map_mode">toggle terrain/annotations/control view</button> </div> <h3>edit keybindings</h3> (see <a href="https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values">here</a> for non-obvious available values):<br /> <ul> @@ -55,7 +55,7 @@ terminal columns: <input id="n_cols" type="number" step=4 min=80 value=80 /> <li>enter tile password (from play mode): <input id="key_switch_to_password" type="text" value="P" /> <li>annotate tile (from play mode): <input id="key_switch_to_annotate" type="text" value="M" /> <li>annotate portal (from play mode): <input id="key_switch_to_portal" type="text" value="T" /> -<li>toggle terrain/control view (from study mode): <input id="key_toggle_map_mode" type="text" value="M" /> +<li>toggle terrain/annotations/control view (from study mode): <input id="key_toggle_map_mode" type="text" value="M" /> </ul> </div> <script> @@ -223,6 +223,7 @@ let server = { let tokens = parser.tokenize(event.data); if (tokens[0] === 'TURN') { game.turn_complete = false; + explorer.empty_info_db(); game.things = {}; game.portals = {}; game.turn = parseInt(tokens[1]); @@ -257,7 +258,6 @@ let server = { game.map_control = tokens[1] } else if (tokens[0] === 'GAME_STATE_COMPLETE') { game.turn_complete = true; - explorer.empty_info_db(); if (tui.mode == mode_post_login_wait) { tui.switch_mode(mode_play); } else if (tui.mode == mode_study) { @@ -274,6 +274,9 @@ let server = { } else if (tokens[0] === 'PORTAL') { let position = parser.parse_yx(tokens[1]); game.portals[position] = tokens[2]; + } else if (tokens[0] === 'ANNOTATION_HINT') { + let position = parser.parse_yx(tokens[1]); + explorer.info_hints = explorer.info_hints.concat([position]); } else if (tokens[0] === 'ANNOTATION') { let position = parser.parse_yx(tokens[1]); explorer.update_info_db(position, tokens[2]); @@ -532,7 +535,11 @@ let tui = { line.push(map_content[i] + ' '); }; map_lines_split.push(line); - if (this.map_mode == 'terrain') { + if (this.map_mode == 'annotations') { + for (const coordinate of explorer.info_hints) { + map_lines_split[coordinate[0]][coordinate[1]] = 'A '; + } + } else if (this.map_mode == 'terrain') { for (const p in game.portals) { let coordinate = p.split(',') map_lines_split[coordinate[0]][coordinate[1]] = 'P '; @@ -655,7 +662,7 @@ let tui = { } else if (this.mode == mode_study) { content += "Available actions:\n"; content += '[' + movement_keys_desc + '] â move question mark\n'; - content += '[' + this.keys.toggle_map_mode + '] â toggle view between terrain, and password protection areas\n'; + content += '[' + this.keys.toggle_map_mode + '] â toggle view between terrain, annotations, and password protection areas\n'; content += '\nOther modes available from here:\n'; content += '[' + this.keys.switch_to_chat + '] â chat mode\n'; content += '[' + this.keys.switch_to_play + '] â play mode\n'; @@ -780,6 +787,7 @@ server.init(websocket_location); let explorer = { position: [0,0], info_db: {}, + info_hints: [], move: function(direction) { let target = game.move(this.position, direction); if (target) { @@ -797,6 +805,7 @@ let explorer = { }, empty_info_db: function() { this.info_db = {}; + this.info_hints = []; if (tui.mode == mode_study) { tui.full_refresh(); } @@ -962,6 +971,8 @@ tui.inputEl.addEventListener('keydown', (event) => { explorer.move(tui.movement_keys[event.key]); } else if (event.key == tui.keys.toggle_map_mode) { if (tui.map_mode == 'terrain') { + tui.map_mode = 'annotations'; + } else if (tui.map_mode == 'annotations') { tui.map_mode = 'control'; } else { tui.map_mode = 'terrain'; @@ -1039,6 +1050,8 @@ document.getElementById("switch_to_portal").onclick = function() { }; document.getElementById("toggle_map_mode").onclick = function() { if (tui.map_mode == 'terrain') { + tui.map_mode = 'annotations'; + } else if (tui.map_mode == 'annotations') { tui.map_mode = 'control'; } else { tui.map_mode = 'terrain'; -- 2.30.2