WIP: 2.10
This commit is contained in:
117
src/gui.rs
117
src/gui.rs
@@ -1,6 +1,6 @@
|
||||
use rltk::Rltk;
|
||||
use rltk::RGB;
|
||||
use rltk::{BTerm, Point, VirtualKeyCode};
|
||||
use rltk::{Point, VirtualKeyCode};
|
||||
use specs::prelude::*;
|
||||
|
||||
use crate::gamelog::GameLog;
|
||||
@@ -8,7 +8,7 @@ use crate::Map;
|
||||
use crate::Name;
|
||||
use crate::Player;
|
||||
use crate::Position;
|
||||
use crate::{CombatStats, InBackpack, State, Viewshed};
|
||||
use crate::{CombatStats, InBackpack, RunState, State, Viewshed};
|
||||
|
||||
pub fn draw_ui(ecs: &World, ctx: &mut Rltk) {
|
||||
ctx.draw_box(
|
||||
@@ -388,3 +388,116 @@ pub fn ranged_target(
|
||||
|
||||
(ItemMenuResult::NoResponse, None)
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Copy, Clone)]
|
||||
pub enum MainMenuSelection {
|
||||
NewGame,
|
||||
LoadGame,
|
||||
Quit,
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Copy, Clone)]
|
||||
pub enum MainMenuResult {
|
||||
NoSelection { selected: MainMenuSelection },
|
||||
Selected { selected: MainMenuSelection },
|
||||
}
|
||||
|
||||
pub fn main_menu(gs: &mut State, ctx: &mut Rltk) -> MainMenuResult {
|
||||
let runstate = gs.ecs.fetch::<RunState>();
|
||||
|
||||
ctx.print_color_centered(
|
||||
15,
|
||||
RGB::named(rltk::YELLOW),
|
||||
RGB::named(rltk::BLACK),
|
||||
"Rust Roguelike Tutorial",
|
||||
);
|
||||
|
||||
if let RunState::MainMenu {
|
||||
menu_selection: selection,
|
||||
} = *runstate
|
||||
{
|
||||
if selection == MainMenuSelection::NewGame {
|
||||
ctx.print_color_centered(
|
||||
24,
|
||||
RGB::named(rltk::MAGENTA),
|
||||
RGB::named(rltk::BLACK),
|
||||
"Begin New Game",
|
||||
);
|
||||
} else {
|
||||
ctx.print_color_centered(
|
||||
24,
|
||||
RGB::named(rltk::WHITE),
|
||||
RGB::named(rltk::BLACK),
|
||||
"Begin New Game",
|
||||
);
|
||||
}
|
||||
|
||||
if selection == MainMenuSelection::LoadGame {
|
||||
ctx.print_color_centered(
|
||||
25,
|
||||
RGB::named(rltk::MAGENTA),
|
||||
RGB::named(rltk::BLACK),
|
||||
"Load Game",
|
||||
);
|
||||
} else {
|
||||
ctx.print_color_centered(
|
||||
25,
|
||||
RGB::named(rltk::WHITE),
|
||||
RGB::named(rltk::BLACK),
|
||||
"Load Game",
|
||||
);
|
||||
}
|
||||
|
||||
if selection == MainMenuSelection::Quit {
|
||||
ctx.print_color_centered(
|
||||
26,
|
||||
RGB::named(rltk::MAGENTA),
|
||||
RGB::named(rltk::BLACK),
|
||||
"Quit",
|
||||
);
|
||||
} else {
|
||||
ctx.print_color_centered(26, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), "Quit");
|
||||
}
|
||||
|
||||
return match ctx.key {
|
||||
None => MainMenuResult::NoSelection {
|
||||
selected: selection,
|
||||
},
|
||||
Some(key) => match key {
|
||||
VirtualKeyCode::Escape => MainMenuResult::NoSelection {
|
||||
selected: MainMenuSelection::Quit,
|
||||
},
|
||||
VirtualKeyCode::Up | VirtualKeyCode::K => {
|
||||
let newselection = match selection {
|
||||
MainMenuSelection::NewGame => MainMenuSelection::Quit,
|
||||
MainMenuSelection::LoadGame => MainMenuSelection::NewGame,
|
||||
MainMenuSelection::Quit => MainMenuSelection::LoadGame,
|
||||
};
|
||||
MainMenuResult::NoSelection {
|
||||
selected: newselection,
|
||||
}
|
||||
}
|
||||
VirtualKeyCode::Down | VirtualKeyCode::J => {
|
||||
let newselection = match selection {
|
||||
MainMenuSelection::NewGame => MainMenuSelection::LoadGame,
|
||||
MainMenuSelection::LoadGame => MainMenuSelection::Quit,
|
||||
MainMenuSelection::Quit => MainMenuSelection::NewGame,
|
||||
};
|
||||
MainMenuResult::NoSelection {
|
||||
selected: newselection,
|
||||
}
|
||||
}
|
||||
VirtualKeyCode::Return | VirtualKeyCode::I => MainMenuResult::Selected {
|
||||
selected: selection,
|
||||
},
|
||||
_ => MainMenuResult::NoSelection {
|
||||
selected: selection,
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
MainMenuResult::NoSelection {
|
||||
selected: MainMenuSelection::NewGame,
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user