From 1f8869879cc820927f8b0a7b019569ae5542aa6e Mon Sep 17 00:00:00 2001 From: Timothy Warren Date: Mon, 29 Nov 2021 14:59:46 -0500 Subject: [PATCH] Add background image to main menu --- src/gui.rs | 42 ++++++++++++++++++++++++++++++++++-------- src/main.rs | 2 ++ src/rex_assets.rs | 17 +++++++++++++++++ 3 files changed, 53 insertions(+), 8 deletions(-) create mode 100644 src/rex_assets.rs diff --git a/src/gui.rs b/src/gui.rs index 51f0697..b409add 100644 --- a/src/gui.rs +++ b/src/gui.rs @@ -1,7 +1,7 @@ use crate::components::{ CombatStats, HungerClock, HungerState, InBackpack, Name, Player, Position, Viewshed, }; -use crate::{game_log::GameLog, Equipped, Map, RunState, State}; +use crate::{game_log::GameLog, rex_assets::RexAssets, Equipped, Map, RunState, State}; use rltk::{Point, Rltk, VirtualKeyCode, RGB}; use specs::prelude::*; @@ -540,61 +540,87 @@ pub enum MainMenuResult { pub fn main_menu(gs: &mut State, ctx: &mut Rltk) -> MainMenuResult { let save_exists = crate::saveload_system::does_save_exist(); let runstate = gs.ecs.fetch::(); + let assets = gs.ecs.fetch::(); + ctx.render_xp_sprite(&assets.menu, 0, 0); + + ctx.draw_box_double( + 24, + 18, + 31, + 10, + RGB::named(rltk::WHEAT), + RGB::named(rltk::BLACK), + ); ctx.print_color_centered( - 15, + 20, RGB::named(rltk::YELLOW), RGB::named(rltk::BLACK), "Rust Roguelike Tutorial", ); + ctx.print_color_centered( + 21, + RGB::named(rltk::CYAN), + RGB::named(rltk::BLACK), + "by Herbert Wolverson", + ); + ctx.print_color_centered( + 22, + RGB::named(rltk::GRAY), + RGB::named(rltk::BLACK), + "Use Up/Down Arrows and Enter", + ); + let mut y = 24; if let RunState::MainMenu { menu_selection: selection, } = *runstate { if selection == MainMenuSelection::NewGame { ctx.print_color_centered( - 24, + y, RGB::named(rltk::MAGENTA), RGB::named(rltk::BLACK), "Begin New Game", ); } else { ctx.print_color_centered( - 24, + y, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), "Begin New Game", ); } + y += 1; if save_exists { if selection == MainMenuSelection::LoadGame { ctx.print_color_centered( - 25, + y, RGB::named(rltk::MAGENTA), RGB::named(rltk::BLACK), "Load Game", ); } else { ctx.print_color_centered( - 25, + y, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), "Load Game", ); } + y += 1; } if selection == MainMenuSelection::Quit { ctx.print_color_centered( - 26, + y, RGB::named(rltk::MAGENTA), RGB::named(rltk::BLACK), "Quit", ); } else { - ctx.print_color_centered(26, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), "Quit"); + ctx.print_color_centered(y, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), "Quit"); } match ctx.key { diff --git a/src/main.rs b/src/main.rs index ba452ab..5414cc7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -16,6 +16,7 @@ mod particle_system; mod player; pub mod random_table; mod rect; +mod rex_assets; pub mod saveload_system; mod spawner; mod visibility_system; @@ -532,6 +533,7 @@ fn main() -> rltk::BError { }); gs.ecs.insert(GameLog::new("Welcome to Rusty Roguelike")); gs.ecs.insert(particle_system::ParticleBuilder::new()); + gs.ecs.insert(rex_assets::RexAssets::new()); rltk::main_loop(context, gs) } diff --git a/src/rex_assets.rs b/src/rex_assets.rs new file mode 100644 index 0000000..cb0be47 --- /dev/null +++ b/src/rex_assets.rs @@ -0,0 +1,17 @@ +use rltk::rex::XpFile; + +rltk::embedded_resource!(SMALL_DUNGEON, "../resources/SmallDungeon_80x50.xp"); + +pub struct RexAssets { + pub menu: XpFile, +} + +impl RexAssets { + pub fn new() -> RexAssets { + rltk::link_resource!(SMALL_DUNGEON, "../resources/SmallDungeon_80x50.xp"); + + RexAssets { + menu: XpFile::from_resource("../resources/SmallDungeon_80x50.xp").unwrap(), + } + } +}