restricts overmap actions (item use/drop/kick/open/close)

This commit is contained in:
Llywelwyn 2023-08-30 23:54:28 +01:00
parent 45461495fd
commit 568df55795
3 changed files with 49 additions and 36 deletions

View file

@ -772,13 +772,14 @@ pub fn show_inventory(gs: &mut State, ctx: &mut Rltk) -> (ItemMenuResult, Option
let (x_offset, y_offset) = (1, 10); let (x_offset, y_offset) = (1, 10);
ctx.print_color( let on_overmap = gs.ecs.fetch::<Map>().overmap;
1 + x_offset, let message = if !on_overmap {
1 + y_offset,
RGB::named(rltk::WHITE),
RGB::named(rltk::BLACK),
"Interact with what item? [aA-zZ][Esc.]" "Interact with what item? [aA-zZ][Esc.]"
); } else {
"You can't use items on the overmap [Esc.]"
};
ctx.print_color(1 + x_offset, 1 + y_offset, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), message);
let x = 1 + x_offset; let x = 1 + x_offset;
let y = 3 + y_offset; let y = 3 + y_offset;
@ -794,15 +795,19 @@ pub fn show_inventory(gs: &mut State, ctx: &mut Rltk) -> (ItemMenuResult, Option
_ => { _ => {
let selection = letter_to_option::letter_to_option(key, ctx.shift); let selection = letter_to_option::letter_to_option(key, ctx.shift);
if selection > -1 && selection < (count as i32) { if selection > -1 && selection < (count as i32) {
return ( if on_overmap {
ItemMenuResult::Selected, gamelog::Logger::new().append("You can't use items on the overmap.").log();
Some( } else {
player_inventory return (
.iter() ItemMenuResult::Selected,
.nth(selection as usize) Some(
.unwrap().1.0 player_inventory
), .iter()
); .nth(selection as usize)
.unwrap().1.0
),
);
}
} }
(ItemMenuResult::NoResponse, None) (ItemMenuResult::NoResponse, None)
} }
@ -816,13 +821,10 @@ pub fn drop_item_menu(gs: &mut State, ctx: &mut Rltk) -> (ItemMenuResult, Option
let (x_offset, y_offset) = (1, 10); let (x_offset, y_offset) = (1, 10);
ctx.print_color( let on_overmap = gs.ecs.fetch::<Map>().overmap;
1 + x_offset, let message = if !on_overmap { "Drop what? [aA-zZ][Esc.]" } else { "You can't drop items on the overmap [Esc.]" };
1 + y_offset,
RGB::named(rltk::WHITE), ctx.print_color(1 + x_offset, 1 + y_offset, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), message);
RGB::named(rltk::BLACK),
"Drop what? [aA-zZ][Esc.]"
);
let x = 1 + x_offset; let x = 1 + x_offset;
let y = 3 + y_offset; let y = 3 + y_offset;
@ -838,15 +840,19 @@ pub fn drop_item_menu(gs: &mut State, ctx: &mut Rltk) -> (ItemMenuResult, Option
_ => { _ => {
let selection = rltk::letter_to_option(key); let selection = rltk::letter_to_option(key);
if selection > -1 && selection < (count as i32) { if selection > -1 && selection < (count as i32) {
return ( if on_overmap {
ItemMenuResult::Selected, gamelog::Logger::new().append("You can't drop items on the overmap.").log();
Some( } else {
player_inventory return (
.iter() ItemMenuResult::Selected,
.nth(selection as usize) Some(
.unwrap().1.0 player_inventory
), .iter()
); .nth(selection as usize)
.unwrap().1.0
),
);
}
} }
(ItemMenuResult::NoResponse, None) (ItemMenuResult::NoResponse, None)
} }

View file

@ -263,7 +263,8 @@ impl GameState for State {
} }
} }
if can_act { if can_act {
new_runstate = player_input(self, ctx); let on_overmap = self.ecs.fetch::<Map>().overmap;
new_runstate = player_input(self, ctx, on_overmap);
} else { } else {
new_runstate = RunState::Ticking; new_runstate = RunState::Ticking;
} }

View file

@ -586,7 +586,7 @@ fn get_item(ecs: &mut World) -> RunState {
} }
} }
pub fn player_input(gs: &mut State, ctx: &mut Rltk) -> RunState { pub fn player_input(gs: &mut State, ctx: &mut Rltk, on_overmap: bool) -> RunState {
match ctx.key { match ctx.key {
None => { None => {
return RunState::AwaitingInput; return RunState::AwaitingInput;
@ -662,13 +662,19 @@ pub fn player_input(gs: &mut State, ctx: &mut Rltk) -> RunState {
// Items // Items
VirtualKeyCode::C => { VirtualKeyCode::C => {
return RunState::ActionWithDirection { function: try_door }; if !on_overmap {
return RunState::ActionWithDirection { function: try_door };
}
} }
VirtualKeyCode::O => { VirtualKeyCode::O => {
return RunState::ActionWithDirection { function: open }; if !on_overmap {
return RunState::ActionWithDirection { function: open };
}
} }
VirtualKeyCode::F => { VirtualKeyCode::F => {
return RunState::ActionWithDirection { function: kick }; if !on_overmap {
return RunState::ActionWithDirection { function: kick };
}
} }
VirtualKeyCode::G => { VirtualKeyCode::G => {
return get_item(&mut gs.ecs); return get_item(&mut gs.ecs);