X-Git-Url: https://plomlompom.com/repos/foo.html?a=blobdiff_plain;f=rogue_chat.html;h=d6a86e096dbada3c123e0c953981ea99b737b34a;hb=5862e6964f0ce6e7139862e8b1de3b1cca0a306f;hp=5338e9daf323f1f8aef596ea5634407d2182d391;hpb=c3ada0bf213337ff2c97e2f33bbf6e6dbedaea38;p=plomrogue2
diff --git a/rogue_chat.html b/rogue_chat.html
index 5338e9d..d6a86e0 100644
--- a/rogue_chat.html
+++ b/rogue_chat.html
@@ -465,6 +465,7 @@ let server = {
this.websocket.onopen = function(event) {
game.thing_types = {};
game.terrains = {};
+ tui.is_admin = false;
server.send(['TASKS']);
server.send(['TERRAINS']);
server.send(['THING_TYPES']);
@@ -577,8 +578,6 @@ let server = {
this.send(['GET_GAMESTATE']);
tui.switch_mode('post_login_wait');
tui.log_msg('@ welcome!')
- tui.log_msg('@ hint: see top of terminal for how to get help.')
- tui.log_msg('@ hint: enter study mode to understand your environment.')
} else if (tokens[0] === 'DEFAULT_COLORS') {
terminal.set_default_colors();
} else if (tokens[0] === 'RANDOM_COLORS') {
@@ -686,7 +685,6 @@ let tui = {
log: [],
input_prompt: '> ',
input_lines: [],
- window_width: terminal.cols / 2,
height_turn_line: 1,
height_mode_line: 1,
height_input: 1,
@@ -739,6 +737,7 @@ let tui = {
selectables: [],
draw_face: false,
init: function() {
+ this.reset_screen_size();
this.mode_play.available_modes = ["chat", "study", "edit", "admin_enter",
"command_thing", "take_thing", "drop_thing"]
this.mode_play.available_actions = ["move", "teleport", "door", "consume",
@@ -762,6 +761,10 @@ let tui = {
this.height_header = this.height_turn_line + this.height_mode_line;
this.init_keys();
},
+ reset_screen_size: function() {
+ this.left_window_width = Math.min(52, terminal.cols / 2);
+ this.right_window_width = terminal.cols - tui.left_window_width;
+ },
init_keys: function() {
document.getElementById("move_table").hidden = true;
this.keys = {};
@@ -812,6 +815,8 @@ let tui = {
}
this.draw_face = false;
this.tile_draw = false;
+ this.ascii_draw_stage = 0;
+ this.full_ascii_draw = '';
if (mode_name == 'command_thing' && (!game.player.carrying
|| !game.player.carrying.commandable)) {
return fail('not carrying anything commandable');
@@ -997,7 +1002,7 @@ let tui = {
recalc_input_lines: function() {
if (this.mode.has_input_prompt) {
let _ = null;
- [this.input_lines, _] = this.msg_into_lines_of_width(this.input_prompt + this.inputEl.value + 'â', this.window_width);
+ [this.input_lines, _] = this.msg_into_lines_of_width(this.input_prompt + this.inputEl.value + 'â', this.right_window_width);
} else {
this.input_lines = [];
}
@@ -1212,7 +1217,7 @@ let tui = {
};
};
}
- let window_center = [terminal.rows / 2, this.window_width / 2];
+ let window_center = [terminal.rows / 2, this.left_window_width / 2];
let center_position = [game.player.position[0], game.player.position[1]];
if (tui.mode.shows_info || tui.mode.name == 'control_tile_draw') {
center_position = [explorer.position[0], explorer.position[1]];
@@ -1229,17 +1234,51 @@ let tui = {
let map_y = Math.max(0, this.offset[0]);
let map_x = Math.max(0, this.offset[1]);
for (; term_y < terminal.rows && map_y < this.map_lines.length; term_y++, map_y++) {
- let to_draw = this.map_lines[map_y].slice(map_x, this.window_width + this.offset[1]);
+ let to_draw = this.map_lines[map_y].slice(map_x, this.left_window_width + this.offset[1]);
terminal.write(term_y, term_x, to_draw);
}
},
+ draw_names: function() {
+ let players = [];
+ for (const thing_id in game.things) {
+ let t = game.things[thing_id];
+ if (t.type_ == 'Player') {
+ players.push(t);
+ }
+ };
+ function compare(a, b) {
+ if (a.name_.length > b.name_.length) {
+ return -1;
+ } else if (a.name_.length < b.name_.length) {
+ return 1;
+ } else {
+ return 0;
+ }
+ }
+ players.sort(compare);
+ const shrink_offset = Math.max(0, (terminal.rows - tui.left_window_width / 2) / 2);
+ let y = 0;
+ for (const player of players) {
+ let name = player.name_;
+ const offset_y = y - shrink_offset;
+ const max_len = Math.max(5, (tui.left_window_width / 2) - (offset_y * 2) - 8);
+ if (name.length > max_len) {
+ name = name.slice(0, max_len - 1) + 'â¦';
+ }
+ terminal.write(y, 0, '@' + player.thing_char + ':' + name);
+ y += 1;
+ if (y >= terminal.rows) {
+ break;
+ }
+ }
+ },
draw_face_popup: function() {
const t = game.things[this.draw_face];
if (!t || !t.face) {
this.draw_face = false;
return;
}
- const start_x = tui.window_width - 10;
+ const start_x = tui.left_window_width - 10;
function draw_body_part(body_part, end_y) {
terminal.write(end_y - 3, start_x, '----------');
terminal.write(end_y - 2, start_x, '| ' + body_part.slice(0, 6) + ' |');
@@ -1254,7 +1293,7 @@ let tui = {
}
terminal.write(terminal.rows - 2, start_x, '----------');
let name = t.name_;
- if (name.length > 6) {
+ if (name.length > 7) {
name = name.slice(0, 6) + 'â¦';
}
terminal.write(terminal.rows - 1, start_x, '@' + t.thing_char + ':' + name);
@@ -1264,10 +1303,10 @@ let tui = {
if (this.mode.has_input_prompt) {
help = 'enter /help for help';
}
- terminal.write(1, this.window_width, 'MODE: ' + this.mode.short_desc + ' â ' + help);
+ terminal.write(1, this.left_window_width, 'MODE: ' + this.mode.short_desc + ' â ' + help);
},
draw_stats_line: function(n) {
- terminal.write(0, this.window_width,
+ terminal.write(0, this.left_window_width,
'ENERGY: ' + game.energy +
' BLADDER: ' + game.bladder_pressure);
},
@@ -1277,7 +1316,7 @@ let tui = {
let y_offset_in_log = 0;
for (let line of this.log) {
let [new_lines, link_data] = this.msg_into_lines_of_width(line,
- this.window_width)
+ this.right_window_width)
log_display_lines = log_display_lines.concat(new_lines);
for (const y in link_data) {
const rel_y = y_offset_in_log + parseInt(y);
@@ -1292,7 +1331,7 @@ let tui = {
for (let y = terminal.rows - 1 - this.height_input;
y >= this.height_header && i >= 0;
y--, i--) {
- terminal.write(y, this.window_width, log_display_lines[i]);
+ terminal.write(y, this.left_window_width, log_display_lines[i]);
}
for (const key of Object.keys(log_links)) {
if (parseInt(key) <= i) {
@@ -1300,13 +1339,13 @@ let tui = {
}
}
let offset = [terminal.rows - this.height_input - log_display_lines.length,
- this.window_width];
+ this.left_window_width];
this.offset_links(offset, log_links);
},
draw_info: function() {
const info = "MAP VIEW: " + tui.map_mode + "\n" + explorer.get_info();
- let [lines, link_data] = this.msg_into_lines_of_width(info, this.window_width);
- let offset = [this.height_header, this.window_width];
+ let [lines, link_data] = this.msg_into_lines_of_width(info, this.right_window_width);
+ let offset = [this.height_header, this.left_window_width];
for (let y = offset[0], i = 0; y < terminal.rows && i < lines.length; y++, i++) {
terminal.write(y, offset[1], lines[i]);
}
@@ -1315,7 +1354,7 @@ let tui = {
draw_input: function() {
if (this.mode.has_input_prompt) {
for (let y = terminal.rows - this.height_input, i = 0; i < this.input_lines.length; y++, i++) {
- terminal.write(y, this.window_width, this.input_lines[i]);
+ terminal.write(y, this.left_window_width, this.input_lines[i]);
}
}
},
@@ -1346,12 +1385,18 @@ let tui = {
}
content += this.mode.list_available_modes();
let start_x = 0;
+ let lines = [];
+ let _ = undefined;
if (!this.mode.has_input_prompt) {
- start_x = this.window_width;
+ start_x = this.left_window_width;
this.draw_links = false;
+ terminal.drawBox(0, start_x, terminal.rows, this.right_window_width);
+ [lines, _] = this.msg_into_lines_of_width(content, this.right_window_width);
+ } else {
+ start_x = 0;
+ terminal.drawBox(0, start_x, terminal.rows, this.left_window_width);
+ [lines, _] = this.msg_into_lines_of_width(content, this.left_window_width);
}
- terminal.drawBox(0, start_x, terminal.rows, this.window_width);
- let [lines, _] = this.msg_into_lines_of_width(content, this.window_width);
for (let y = 0, i = 0; y < terminal.rows && i < lines.length; y++, i++) {
terminal.write(y, start_x, lines[i]);
}
@@ -1396,8 +1441,11 @@ let tui = {
if (this.show_help) {
this.draw_help();
}
- if (this.draw_face && ['chat', 'play'].includes(this.mode.name)) {
- this.draw_face_popup();
+ if (['chat', 'play'].includes(this.mode.name)) {
+ this.draw_names();
+ if (this.draw_face) {
+ this.draw_face_popup();
+ }
}
if (!this.draw_links) {
this.links = {};
@@ -1597,7 +1645,6 @@ let explorer = {
if (t.design) {
const line_length = t.design[0][1];
info += '-'.repeat(line_length + 4) + '\n';
- console.log(line_length)
let lines = ['']
if (line_length > 0) {
const regexp = RegExp('.{1,' + line_length + '}', 'g');
@@ -1632,7 +1679,7 @@ let explorer = {
tui.inputEl.addEventListener('input', (event) => {
if (tui.mode.has_input_prompt) {
- let max_length = tui.window_width * terminal.rows - tui.input_prompt.length;
+ let max_length = tui.right_window_width * terminal.rows - tui.input_prompt.length;
if (tui.inputEl.value.length > max_length) {
tui.inputEl.value = tui.inputEl.value.slice(0, max_length);
};
@@ -1837,7 +1884,7 @@ cols_selector.addEventListener('input', function() {
}
window.localStorage.setItem(cols_selector.id, cols_selector.value);
terminal.initialize();
- tui.window_width = terminal.cols / 2,
+ tui.reset_screen_size();
tui.full_refresh();
}, false);
for (let key_selector of key_selectors) {