veloren/voxygen/src/menu/title.rs

86 lines
2.3 KiB
Rust
Raw Normal View History

2019-01-02 22:08:13 +00:00
// Library
use vek::*;
use image;
use conrod_core::widget::image::Image as ImageWidget;
use conrod_core::{Positionable, Sizeable, Widget};
2019-01-02 22:08:13 +00:00
// Crate
use crate::{
PlayState,
2019-01-07 21:10:31 +00:00
PlayStateResult,
GlobalState,
window::Event,
session::SessionState,
render::{
Consts,
UiLocals,
Renderer,
},
ui::{
Ui
},
};
pub struct TitleState {
ui: Ui
}
impl TitleState {
/// Create a new `TitleState`
pub fn new(renderer: &mut Renderer) -> Self {
let mut ui = Ui::new(renderer, [500.0, 500.0]).unwrap();
let widget_id = ui.new_widget();
let image = image::open(concat!(env!("CARGO_MANIFEST_DIR"), "/test_assets/test.png")).unwrap();
let title_img = ui.new_image(renderer, &image).unwrap();
ui.set_widgets(|ui_cell| {
ImageWidget::new(title_img)
.x_y(0.0, 0.0)
.w_h(500.0,500.0)
.set(widget_id, ui_cell);
});
Self {
ui
}
}
}
// The background colour
2019-01-12 14:01:01 +00:00
const BG_COLOR: Rgba<f32> = Rgba { r: 0.0, g: 0.3, b: 1.0, a: 1.0 };
2019-01-11 20:14:37 +00:00
impl PlayState for TitleState {
2019-01-07 21:10:31 +00:00
fn play(&mut self, global_state: &mut GlobalState) -> PlayStateResult {
loop {
// Handle window events
2019-01-07 21:10:31 +00:00
for event in global_state.window.fetch_events() {
match event {
Event::Close => return PlayStateResult::Shutdown,
// When space is pressed, start a session
Event::Char(' ') => return PlayStateResult::Push(
Box::new(SessionState::new(global_state.window.renderer_mut()).unwrap()), // TODO: Handle this error
),
// Ignore all other events
_ => {},
2019-01-07 21:10:31 +00:00
}
}
global_state.window.renderer_mut().clear(BG_COLOR);
// Maintain the UI
//self.ui.maintain(global_state.window.renderer_mut());
// Draw the UI to the screen
self.ui.render(global_state.window.renderer_mut());
// Finish the frame
global_state.window.renderer_mut().flush();
global_state.window
.swap_buffers()
.expect("Failed to swap window buffers");
}
}
fn name(&self) -> &'static str { "Title" }
}