log: [],
input_prompt: '> ',
input_lines: [],
- window_width: terminal.cols / 2,
height_turn_line: 1,
height_mode_line: 1,
height_input: 1,
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",
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 = {};
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 = [];
}
};
};
}
- 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]];
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);
}
},
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) + ' |');
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);
},
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);
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) {
}
}
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]);
}
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]);
}
}
},
}
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]);
}
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');
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);
};
}
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) {
self.size = YX(*stdscr.getmaxyx())
self.size = self.size - YX(self.size.y % 4, 0)
self.size = self.size - YX(0, self.size.x % 4)
- self.window_width = int(self.size.x / 2)
+ self.left_window_width = min(52, int(self.size.x / 2))
+ self.right_window_width = self.size.x - self.left_window_width
def recalc_input_lines():
if not self.mode.has_input_prompt:
else:
self.input_lines = msg_into_lines_of_width(input_prompt
+ self.input_ + '█',
- self.window_width)
+ self.right_window_width)
def move_explorer(direction):
target = self.game.map_geometry.move_yx(self.explorer, direction)
def draw_history():
lines = []
for line in self.log:
- lines += msg_into_lines_of_width(line, self.window_width)
+ lines += msg_into_lines_of_width(line, self.right_window_width)
lines.reverse()
height_header = 2
max_y = self.size.y - len(self.input_lines)
for i in range(len(lines)):
if (i >= max_y - height_header):
break
- safe_addstr(max_y - i - 1, self.window_width, lines[i])
+ safe_addstr(max_y - i - 1, self.left_window_width, lines[i])
def draw_info():
info = 'MAP VIEW: %s\n%s' % (self.map_mode, self.get_info())
- lines = msg_into_lines_of_width(info, self.window_width)
+ lines = msg_into_lines_of_width(info, self.right_window_width)
height_header = 2
for i in range(len(lines)):
y = height_header + i
if y >= self.size.y - len(self.input_lines):
break
- safe_addstr(y, self.window_width, lines[i])
+ safe_addstr(y, self.left_window_width, lines[i])
def draw_input():
y = self.size.y - len(self.input_lines)
for i in range(len(self.input_lines)):
- safe_addstr(y, self.window_width, self.input_lines[i])
+ safe_addstr(y, self.left_window_width, self.input_lines[i])
y += 1
def draw_stats():
stats = 'ENERGY: %s BLADDER: %s' % (self.game.energy,
self.game.bladder_pressure)
- safe_addstr(0, self.window_width, stats)
+ safe_addstr(0, self.left_window_width, stats)
def draw_mode():
help = "hit [%s] for help" % self.keys['help']
if self.mode.has_input_prompt:
help = "enter /help for help"
- safe_addstr(1, self.window_width,
+ safe_addstr(1, self.left_window_width,
'MODE: %s – %s' % (self.mode.short_desc, help))
def draw_map():
for line in map_lines_split:
self.map_lines += [''.join(line)]
window_center = YX(int(self.size.y / 2),
- int(self.window_width / 2))
+ int(self.left_window_width / 2))
center = self.game.player.position
if self.mode.shows_info or self.mode.name == 'control_tile_draw':
center = self.explorer
map_y = max(0, self.offset.y)
map_x = max(0, self.offset.x)
while term_y < self.size.y and map_y < len(self.map_lines):
- to_draw = self.map_lines[map_y][map_x:self.window_width + self.offset.x]
+ to_draw = self.map_lines[map_y][map_x:self.left_window_width + self.offset.x]
safe_addstr(term_y, term_x, to_draw)
term_y += 1
map_y += 1
self.draw_face = False
return
- start_x = self.window_width - 10
+ start_x = self.left_window_width - 10
def draw_body_part(body_part, end_y):
safe_addstr(end_y - 3, start_x, '----------')
safe_addstr(end_y - 2, start_x, '| ' + body_part[0:6] + ' |')
content += self.mode.list_available_modes(self)
for i in range(self.size.y):
safe_addstr(i,
- self.window_width * (not self.mode.has_input_prompt),
- ' ' * self.window_width)
+ self.left_window_width * (not self.mode.has_input_prompt),
+ ' ' * self.left_window_width)
lines = []
for line in content.split('\n'):
- lines += msg_into_lines_of_width(line, self.window_width)
+ lines += msg_into_lines_of_width(line, self.right_window_width)
for i in range(len(lines)):
if i >= self.size.y:
break
safe_addstr(i,
- self.window_width * (not self.mode.has_input_prompt),
+ self.left_window_width * (not self.mode.has_input_prompt),
lines[i])
def draw_screen():
self.restore_input_values()
elif self.mode.has_input_prompt and key != '\n': # Return key
self.input_ += key
- max_length = self.window_width * self.size.y - len(input_prompt) - 1
+ max_length = self.right_window_width * self.size.y - len(input_prompt) - 1
if len(self.input_) > max_length:
self.input_ = self.input_[:max_length]
elif key == self.keys['help'] and not self.mode.is_single_char_entry: