use ::rltk::{Rltk, VirtualKeyCode}; use crate::{colors, State}; #[derive(PartialEq, Copy, Clone)] pub enum CheatMenuResult { NoResponse, Cancel, TeleportToExit, Heal, Reveal, GodMode, } pub fn show_cheat_mode(_gs: &mut State, ctx: &mut Rltk) -> CheatMenuResult { let count = 4; let mut y = (25 - (count / 2)) as i32; ctx.draw_box( 15, y - 2, 31, (count + 3) as i32, colors::WHITE, colors::BLACK, ); ctx.print_color(18, y - 2, colors::YELLOW, colors::BLACK, "Cheating!"); ctx.print_color( 18, y + count as i32 + 1, colors::YELLOW, colors::BLACK, "ESCAPE to cancel", ); ctx.set(17, y, colors::WHITE, colors::BLACK, rltk::to_cp437('(')); ctx.set(18, y, colors::YELLOW, colors::BLACK, rltk::to_cp437('T')); ctx.set(19, y, colors::WHITE, colors::BLACK, rltk::to_cp437(')')); ctx.print(21, y, "Teleport to next level"); y += 1; ctx.set(17, y, colors::WHITE, colors::BLACK, rltk::to_cp437('(')); ctx.set(18, y, colors::YELLOW, colors::BLACK, rltk::to_cp437('H')); ctx.set(19, y, colors::WHITE, colors::BLACK, rltk::to_cp437(')')); ctx.print(21, y, "Heal all wounds"); y += 1; ctx.set(17, y, colors::WHITE, colors::BLACK, rltk::to_cp437('(')); ctx.set(18, y, colors::YELLOW, colors::BLACK, rltk::to_cp437('R')); ctx.set(19, y, colors::WHITE, colors::BLACK, rltk::to_cp437(')')); ctx.print(21, y, "Reveal the map"); y += 1; ctx.set(17, y, colors::WHITE, colors::BLACK, rltk::to_cp437('(')); ctx.set(18, y, colors::YELLOW, colors::BLACK, rltk::to_cp437('G')); ctx.set(19, y, colors::WHITE, colors::BLACK, rltk::to_cp437(')')); ctx.print(21, y, "God Mode (No Death)"); match ctx.key { None => CheatMenuResult::NoResponse, Some(key) => match key { VirtualKeyCode::T => CheatMenuResult::TeleportToExit, VirtualKeyCode::H => CheatMenuResult::Heal, VirtualKeyCode::R => CheatMenuResult::Reveal, VirtualKeyCode::G => CheatMenuResult::GodMode, VirtualKeyCode::Escape => CheatMenuResult::Cancel, _ => CheatMenuResult::NoResponse, }, } }