x to farlook, now playable with 0 mouse input
This commit is contained in:
parent
81a48d5a6e
commit
7da00ed2b1
5 changed files with 82 additions and 4 deletions
54
src/gui/farlook.rs
Normal file
54
src/gui/farlook.rs
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
use super::{ State, RunState, tooltip::draw_tooltips, camera::get_screen_bounds };
|
||||||
|
use rltk::prelude::*;
|
||||||
|
|
||||||
|
#[derive(PartialEq, Copy, Clone)]
|
||||||
|
pub enum FarlookResult {
|
||||||
|
NoResponse {
|
||||||
|
x: i32,
|
||||||
|
y: i32,
|
||||||
|
},
|
||||||
|
Cancel,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn show_farlook(gs: &mut State, ctx: &mut Rltk) -> FarlookResult {
|
||||||
|
let runstate = gs.ecs.fetch::<RunState>();
|
||||||
|
let (min_x, _max_x, min_y, _max_y, x_offset, y_offset) = get_screen_bounds(&gs.ecs, ctx);
|
||||||
|
|
||||||
|
ctx.print_color(
|
||||||
|
1 + x_offset,
|
||||||
|
1 + y_offset,
|
||||||
|
RGB::named(WHITE),
|
||||||
|
RGB::named(BLACK),
|
||||||
|
"Look at what? [move keys][Esc.]"
|
||||||
|
);
|
||||||
|
|
||||||
|
if let RunState::Farlook { x, y } = *runstate {
|
||||||
|
let (screen_x, screen_y) = (69, 41);
|
||||||
|
let x = x.clamp(x_offset, x_offset - 1 + (screen_x as i32));
|
||||||
|
let y = y.clamp(y_offset, y_offset - 1 + (screen_y as i32));
|
||||||
|
|
||||||
|
ctx.set(x, y, RGB::named(WHITE), RGB::named(BLACK), rltk::to_cp437('X'));
|
||||||
|
draw_tooltips(&gs.ecs, ctx, Some((x, y)));
|
||||||
|
|
||||||
|
return match ctx.key {
|
||||||
|
None => FarlookResult::NoResponse { x, y },
|
||||||
|
Some(key) =>
|
||||||
|
match key {
|
||||||
|
VirtualKeyCode::Escape | VirtualKeyCode::X => FarlookResult::Cancel,
|
||||||
|
VirtualKeyCode::Numpad9 => FarlookResult::NoResponse { x: x + 1, y: y - 1 },
|
||||||
|
VirtualKeyCode::Numpad8 => FarlookResult::NoResponse { x, y: y - 1 },
|
||||||
|
VirtualKeyCode::Numpad7 => FarlookResult::NoResponse { x: x - 1, y: y - 1 },
|
||||||
|
VirtualKeyCode::Numpad6 => FarlookResult::NoResponse { x: x + 1, y },
|
||||||
|
VirtualKeyCode::Numpad4 => FarlookResult::NoResponse { x: x - 1, y },
|
||||||
|
VirtualKeyCode::Numpad3 => FarlookResult::NoResponse { x: x + 1, y: y + 1 },
|
||||||
|
VirtualKeyCode::Numpad2 => FarlookResult::NoResponse { x, y: y + 1 },
|
||||||
|
VirtualKeyCode::Numpad1 => FarlookResult::NoResponse { x: x - 1, y: y + 1 },
|
||||||
|
_ => FarlookResult::NoResponse { x, y },
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
let ppos = gs.ecs.fetch::<Point>();
|
||||||
|
// TODO: PPOS + offsets (should get these from screen_bounds())
|
||||||
|
return FarlookResult::NoResponse { x: ppos.x + x_offset, y: ppos.x + y_offset };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -48,6 +48,8 @@ pub use identify_menu::*;
|
||||||
mod tooltip;
|
mod tooltip;
|
||||||
pub use cheat_menu::*;
|
pub use cheat_menu::*;
|
||||||
use crate::data::events::*;
|
use crate::data::events::*;
|
||||||
|
mod farlook;
|
||||||
|
pub use farlook::*;
|
||||||
|
|
||||||
/// Gives a popup box with a message and a title, and waits for a keypress.
|
/// Gives a popup box with a message and a title, and waits for a keypress.
|
||||||
#[allow(unused)]
|
#[allow(unused)]
|
||||||
|
|
@ -338,7 +340,7 @@ pub fn draw_ui(ecs: &World, ctx: &mut Rltk) {
|
||||||
ctx.draw_hollow_box(0, 9, 70, 42, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK)); // Camera box
|
ctx.draw_hollow_box(0, 9, 70, 42, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK)); // Camera box
|
||||||
ctx.draw_hollow_box(0, 52, 70, 3, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK)); // Stats box
|
ctx.draw_hollow_box(0, 52, 70, 3, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK)); // Stats box
|
||||||
ctx.draw_hollow_box(71, 0, 33, 55, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK)); // Side box
|
ctx.draw_hollow_box(71, 0, 33, 55, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK)); // Side box
|
||||||
tooltip::draw_tooltips(ecs, ctx);
|
tooltip::draw_tooltips(ecs, ctx, None);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_input_direction(
|
pub fn get_input_direction(
|
||||||
|
|
@ -680,7 +682,7 @@ pub fn show_help(ctx: &mut Rltk) -> YesNoResult {
|
||||||
y += 1;
|
y += 1;
|
||||||
ctx.print(x, y, "o open c close");
|
ctx.print(x, y, "o open c close");
|
||||||
y += 1;
|
y += 1;
|
||||||
ctx.print(x, y, "f force");
|
ctx.print(x, y, "f force x farlook");
|
||||||
y += 2;
|
y += 2;
|
||||||
ctx.print_color(x, y, RGB::named(rltk::GREEN), RGB::named(rltk::BLACK), "MOUSE CONTROL");
|
ctx.print_color(x, y, RGB::named(rltk::GREEN), RGB::named(rltk::BLACK), "MOUSE CONTROL");
|
||||||
y += 2;
|
y += 2;
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ impl Tooltip {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
pub fn draw_tooltips(ecs: &World, ctx: &mut Rltk) {
|
pub fn draw_tooltips(ecs: &World, ctx: &mut Rltk, xy: Option<(i32, i32)>) {
|
||||||
let (min_x, _max_x, min_y, _max_y, x_offset, y_offset) = get_screen_bounds(ecs, ctx);
|
let (min_x, _max_x, min_y, _max_y, x_offset, y_offset) = get_screen_bounds(ecs, ctx);
|
||||||
let map = ecs.fetch::<Map>();
|
let map = ecs.fetch::<Map>();
|
||||||
let names = ecs.read_storage::<Name>();
|
let names = ecs.read_storage::<Name>();
|
||||||
|
|
@ -54,7 +54,7 @@ pub fn draw_tooltips(ecs: &World, ctx: &mut Rltk) {
|
||||||
let entities = ecs.entities();
|
let entities = ecs.entities();
|
||||||
let player_entity = ecs.fetch::<Entity>();
|
let player_entity = ecs.fetch::<Entity>();
|
||||||
|
|
||||||
let mouse_pos = ctx.mouse_pos();
|
let mouse_pos = if xy.is_none() { ctx.mouse_pos() } else { xy.unwrap() };
|
||||||
let mut mouse_pos_adjusted = mouse_pos;
|
let mut mouse_pos_adjusted = mouse_pos;
|
||||||
mouse_pos_adjusted.0 += min_x - x_offset;
|
mouse_pos_adjusted.0 += min_x - x_offset;
|
||||||
mouse_pos_adjusted.1 += min_y - y_offset;
|
mouse_pos_adjusted.1 += min_y - y_offset;
|
||||||
|
|
|
||||||
15
src/main.rs
15
src/main.rs
|
|
@ -78,6 +78,10 @@ pub enum RunState {
|
||||||
cursed: bool,
|
cursed: bool,
|
||||||
}, // Animates magic mapping effect
|
}, // Animates magic mapping effect
|
||||||
MapGeneration,
|
MapGeneration,
|
||||||
|
Farlook {
|
||||||
|
x: i32,
|
||||||
|
y: i32,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct State {
|
pub struct State {
|
||||||
|
|
@ -286,6 +290,17 @@ impl GameState for State {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
RunState::Farlook { .. } => {
|
||||||
|
let result = gui::show_farlook(self, ctx);
|
||||||
|
match result {
|
||||||
|
gui::FarlookResult::NoResponse { x, y } => {
|
||||||
|
new_runstate = RunState::Farlook { x, y };
|
||||||
|
}
|
||||||
|
gui::FarlookResult::Cancel => {
|
||||||
|
new_runstate = RunState::AwaitingInput;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
RunState::ShowCheatMenu => {
|
RunState::ShowCheatMenu => {
|
||||||
let result = gui::show_cheat_menu(self, ctx);
|
let result = gui::show_cheat_menu(self, ctx);
|
||||||
match result {
|
match result {
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ use super::{
|
||||||
gui::obfuscate_name_ecs,
|
gui::obfuscate_name_ecs,
|
||||||
gui::renderable_colour_ecs,
|
gui::renderable_colour_ecs,
|
||||||
gui::item_colour_ecs,
|
gui::item_colour_ecs,
|
||||||
|
camera::get_screen_bounds,
|
||||||
raws::Reaction,
|
raws::Reaction,
|
||||||
Attributes,
|
Attributes,
|
||||||
BlocksTile,
|
BlocksTile,
|
||||||
|
|
@ -672,6 +673,12 @@ pub fn player_input(gs: &mut State, ctx: &mut Rltk) -> RunState {
|
||||||
VirtualKeyCode::Escape => {
|
VirtualKeyCode::Escape => {
|
||||||
return RunState::SaveGame;
|
return RunState::SaveGame;
|
||||||
}
|
}
|
||||||
|
VirtualKeyCode::X => {
|
||||||
|
let (min_x, _max_x, min_y, _max_y, x_offset, y_offset) = get_screen_bounds(&gs.ecs, ctx);
|
||||||
|
let ppos = gs.ecs.fetch::<Point>();
|
||||||
|
let (x, y) = (ppos.x + x_offset - min_x, ppos.y + y_offset - min_y);
|
||||||
|
return RunState::Farlook { x, y };
|
||||||
|
}
|
||||||
_ => {
|
_ => {
|
||||||
return RunState::AwaitingInput;
|
return RunState::AwaitingInput;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue