This repository has been archived on 2021-04-27. You can view files and clone it, but cannot push or open issues or pull requests.
ludum-dare-48/src/logic/gameend.rs

103 lines
3.1 KiB
Rust

use raylib::prelude::*;
use crate::{
gamecore::{GameCore, GameState},
lib::{utils::button::OnScreenButton, wrappers::audio::player::AudioPlayer},
};
use super::screen::Screen;
const SCREEN_PANEL_SIZE: Vector2 = Vector2 { x: 300.0, y: 300.0 };
pub struct GameEndScreen {}
impl GameEndScreen {
pub fn new() -> Self {
Self {}
}
}
impl Screen for GameEndScreen {
fn render(
&mut self,
draw_handle: &mut RaylibDrawHandle,
_thread: &RaylibThread,
_audio_system: &mut AudioPlayer,
game_core: &mut GameCore,
) -> Option<GameState> {
draw_handle.clear_background(Color::GRAY);
// TODO: Maybe we can stick some art here?
// Render the background
draw_handle.draw_texture(&game_core.resources.shop_background, 0, 0, Color::WHITE);
// Window dimensions
let win_height = draw_handle.get_screen_height();
let win_width = draw_handle.get_screen_width();
// Render the backing to the menu itself
draw_handle.draw_rectangle(
(win_width / 2) - ((SCREEN_PANEL_SIZE.x as i32 + 6) / 2),
(win_height / 2) - ((SCREEN_PANEL_SIZE.y as i32 + 6) / 2),
SCREEN_PANEL_SIZE.x as i32 + 6,
SCREEN_PANEL_SIZE.y as i32 + 6,
Color::BLACK,
);
draw_handle.draw_rectangle(
(win_width / 2) - (SCREEN_PANEL_SIZE.x as i32 / 2),
(win_height / 2) - (SCREEN_PANEL_SIZE.y as i32 / 2),
SCREEN_PANEL_SIZE.x as i32,
SCREEN_PANEL_SIZE.y as i32,
Color::WHITE,
);
// Render heading text
draw_handle.draw_text(
"OUT OF BREATH",
(win_width / 2) - ((SCREEN_PANEL_SIZE.x as i32 + 6) / 2) + 25,
(win_height / 2) - (SCREEN_PANEL_SIZE.y as i32 / 2) + 10,
30,
Color::BLACK,
);
// Render message
draw_handle.draw_text(
"Your clone can now buy items ",
((win_width / 2) - ((SCREEN_PANEL_SIZE.x as i32 + 6) / 2))
+ (0.15 * SCREEN_PANEL_SIZE.x) as i32,
(win_height / 2) - (SCREEN_PANEL_SIZE.y as i32 / 2) + 50,
15,
Color::BLACK,
);
// Creates
let go_to_menu_button = OnScreenButton::new(
String::from("Return to shop"),
Rectangle {
x: (((win_width / 2) - ((SCREEN_PANEL_SIZE.x as i32 + 6) / 2) + 5)
+ (0.15 * SCREEN_PANEL_SIZE.x) as i32) as f32,
y: (((win_height / 2) - (SCREEN_PANEL_SIZE.y as i32 / 2) + 90) as f32) + 100.0,
width: 210.0,
height: 50.0,
},
Color::WHITE,
Color::BLACK,
Color::GRAY,
25,
true,
);
// render button
go_to_menu_button.render(draw_handle);
// If the player clicks on the button send them to shop
if go_to_menu_button.is_hovered(draw_handle)
&& draw_handle.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON)
{
return Some(GameState::InShop);
}
return None;
}
}