}
}
+class Mode {
+ constructor(name, has_input_prompt=false, shows_annotations=false) {
+ this.name = name;
+ this.has_input_prompt = has_input_prompt;
+ this.shows_annotations = shows_annotations;
+ }
+}
+let mode_chat = new Mode('chat', true, false);
+let mode_annotate = new Mode('annotate', true, true);
+let mode_play = new Mode('play', false, false);
+let mode_study = new Mode('study', false, true);
+let mode_edit = new Mode('edit', false, false);
+
let tui = {
- mode: 'chat',
+ mode: mode_chat,
log: [],
input: '',
input_lines: [],
this.recalc_input_lines();
this.height_header = this.height_turn_line + this.height_mode_line;
},
- switch_mode: function(mode_name, keep_pos=false) {
- if (mode_name == 'study' && !keep_pos) {
+ switch_mode: function(mode, keep_pos=false) {
+ if (mode == mode_study && !keep_pos) {
explorer.position = game.things[game.player_id];
}
- this.mode = mode_name;
+ this.mode = mode;
this.empty_input();
this.full_refresh();
},
draw_mode_line: function() {
terminal.drawBox(1, this.window_width, this.height_mode_line, this.window_width);
- terminal.write(1, this.window_width, 'MODE ' + this.mode);
+ terminal.write(1, this.window_width, 'MODE ' + this.mode.name);
},
draw_history: function() {
if (terminal.rows <= this.height_header + this.height_input) {
center_pos = t;
}
};
- if (tui.mode == 'study' || tui.mode == 'annotate') {
+ if (tui.mode.shows_annotations) {
map_lines[explorer.position[0]][explorer.position[1]] = '?';
center_pos = explorer.position;
}
},
empty_input: function(str) {
this.input = "";
- if (this.mode == 'annotate' || this.mode == 'chat') {
+ if (this.mode.has_input_prompt) {
this.recalc_input_lines();
} else {
this.height_input = 0;
},
draw_input: function() {
terminal.drawBox(terminal.rows - this.height_input, this.window_width, this.height_input, this.window_width);
- if (this.mode == 'chat' || this.mode == 'annotate') {
+ if (this.mode.has_input_prompt) {
for (let y = terminal.rows - this.height_input, i = 0; y < terminal.rows && i < this.input_lines.length; y++, i++) {
terminal.write(y, this.window_width, this.input_lines[i]);
}
this.draw_map();
this.draw_turn_line();
this.draw_mode_line();
- if (this.mode == 'study' || this.mode == 'annotate') {
+ if (this.mode.shows_annotations) {
this.draw_info();
} else {
this.draw_history();
game.map = tokens[2]
} else if (tokens[0] === 'GAME_STATE_COMPLETE') {
explorer.empty_info_db();
- if (tui.mode == 'study') {
+ if (tui.mode == mode_study) {
explorer.query_info();
}
tui.draw_turn_line();
},
update_info_db: function(yx, str) {
this.info_db[yx] = str;
- if (tui.mode == 'study') {
+ if (tui.mode == mode_study) {
tui.draw_info();
tui.refresh();
}
},
empty_info_db: function() {
this.info_db = {};
- if (tui.mode == 'study') {
+ if (tui.mode == mode_study) {
tui.draw_info();
tui.refresh();
}
}
document.addEventListener('keydown', (event) => {
- if (tui.mode == 'chat') {
- if (event.key.length === 1) {
- tui.add_to_input(event.key);
- tui.full_refresh();
- } else if (event.key == 'Backspace') {
- tui.shorten_input();
- tui.full_refresh();
- } else if (event.key == 'Enter') {
- let [tokens, token_starts] = parser.tokenize(tui.input);
- if (tokens.length > 0 && tokens[0].length > 0) {
- if (tokens[0][0] == ':') {
- if (tokens[0] == ':play' || tokens[0] == ':p') {
- tui.switch_mode('play');
- } else if (tokens[0] == ':study' || tokens[0] == ':s') {
- tui.switch_mode('study');
- } else if (tokens[0] == ':help') {
- tui.log_help();
- tui.refresh();
- } else if (tokens[0] == ':login') {
- if (tokens.length > 1) {
- server.send(['LOGIN', tokens[1]]);
- } else {
- tui.log_msg('? need login name');
- }
- } else if (tokens[0] == ':msg') {
- if (tokens.length > 2) {
- let msg = tui.input.slice(token_starts[2]);
- server.send(['QUERY', tokens[1], msg]);
- } else {
- tui.log_msg('? need message target and message');
- }
+ if (tui.mode.has_input_prompt && event.key.length === 1) {
+ tui.add_to_input(event.key);
+ tui.full_refresh();
+ } else if (tui.mode.has_input_prompt && event.key == 'Backspace') {
+ tui.shorten_input();
+ tui.full_refresh();
+ } else if (tui.mode == mode_annotate && event.key == 'Enter') {
+ explorer.annotate(tui.input);
+ tui.switch_mode(mode_study, true);
+ } else if (tui.mode == mode_chat && event.key == 'Enter') {
+ let [tokens, token_starts] = parser.tokenize(tui.input);
+ if (tokens.length > 0 && tokens[0].length > 0) {
+ if (tokens[0][0] == ':') {
+ if (tokens[0] == ':play' || tokens[0] == ':p') {
+ tui.switch_mode(mode_play);
+ } else if (tokens[0] == ':study' || tokens[0] == ':s') {
+ tui.switch_mode(mode_study);
+ } else if (tokens[0] == ':help') {
+ tui.log_help();
+ tui.refresh();
+ } else if (tokens[0] == ':login') {
+ if (tokens.length > 1) {
+ server.send(['LOGIN', tokens[1]]);
} else {
- tui.log_msg('? unknown command');
+ tui.log_msg('? need login name');
+ }
+ } else if (tokens[0] == ':msg') {
+ if (tokens.length > 2) {
+ let msg = tui.input.slice(token_starts[2]);
+ server.send(['QUERY', tokens[1], msg]);
+ } else {
+ tui.log_msg('? need message target and message');
}
} else {
- server.send(['ALL', tui.input]);
+ tui.log_msg('? unknown command');
}
+ } else {
+ server.send(['ALL', tui.input]);
}
- tui.empty_input();
- tui.full_refresh();
}
- } else if (tui.mode == 'play') {
+ tui.empty_input();
+ tui.full_refresh();
+ } else if (tui.mode == mode_play) {
if (event.key === 'c') {
- tui.switch_mode('chat');
+ tui.switch_mode(mode_chat);
} else if (event.key === 'e') {
- tui.switch_mode('edit');
+ tui.switch_mode(mode_edit);
} else if (event.key === '?') {
- tui.switch_mode('study');
+ tui.switch_mode(mode_study);
} else if (event.key === 'F1') {
tui.log_help();
tui.refresh();
} else if (event.key === 's') {
server.send(['TASK:MOVE', 'DOWN']);
};
- } else if (tui.mode == 'edit') {
+ } else if (tui.mode == mode_edit) {
if (event.key != "Shift" && event.key.length == 1) {
server.send(["TASK:WRITE", event.key]);
- tui.switch_mode('play');
+ tui.switch_mode(mode_play);
}
- } else if (tui.mode == 'study') {
+ } else if (tui.mode == mode_study) {
if (event.key === 'c') {
- tui.switch_mode('chat');
+ tui.switch_mode(mode_chat);
} else if (event.key == 'p') {
- tui.switch_mode('play');
+ tui.switch_mode(mode_play);
} else if (event.key === 'a') {
explorer.move('left');
} else if (event.key === 'd') {
} else if (event.key === 's') {
explorer.move('down');
} else if (event.key === 'A') {
- tui.switch_mode('annotate');
+ tui.switch_mode(mode_annotate);
tui.draw_info();
tui.refresh();
};
- } else if (tui.mode == 'annotate') {
- if (event.key.length === 1) {
- tui.add_to_input(event.key);
- tui.full_refresh();
- } else if (event.key == 'Backspace') {
- tui.shorten_input();
- tui.full_refresh();
- } else if (event.key == 'Enter') {
- explorer.annotate(tui.input);
- tui.switch_mode('study', true);
- }
}
}, false);
</script>