Implement a background for the option menus
This commit is contained in:
parent
ebc11224e7
commit
380a844272
|
@ -79,8 +79,8 @@ pub struct Renderer {
|
||||||
|
|
||||||
trans: Option<TransInfo>,
|
trans: Option<TransInfo>,
|
||||||
|
|
||||||
last_width: u32,
|
pub width: u32,
|
||||||
last_height: u32,
|
pub height: u32,
|
||||||
|
|
||||||
// Light renderering
|
// Light renderering
|
||||||
pub light_level: f32,
|
pub light_level: f32,
|
||||||
|
@ -217,8 +217,8 @@ impl Renderer {
|
||||||
element_buffer_size: 0,
|
element_buffer_size: 0,
|
||||||
element_buffer_type: gl::UNSIGNED_BYTE,
|
element_buffer_type: gl::UNSIGNED_BYTE,
|
||||||
|
|
||||||
last_width: 0,
|
width: 0,
|
||||||
last_height: 0,
|
height: 0,
|
||||||
|
|
||||||
camera: Camera {
|
camera: Camera {
|
||||||
pos: cgmath::Point3::new(0.0, 0.0, 0.0),
|
pos: cgmath::Point3::new(0.0, 0.0, 0.0),
|
||||||
|
@ -255,9 +255,9 @@ impl Renderer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.last_height != height || self.last_width != width {
|
if self.height != height || self.width != width {
|
||||||
self.last_width = width;
|
self.width = width;
|
||||||
self.last_height = height;
|
self.height = height;
|
||||||
gl::viewport(0, 0, width as i32, height as i32);
|
gl::viewport(0, 0, width as i32, height as i32);
|
||||||
|
|
||||||
self.perspective_matrix = cgmath::Matrix4::from(
|
self.perspective_matrix = cgmath::Matrix4::from(
|
||||||
|
|
|
@ -41,14 +41,14 @@ macro_rules! get_matched_str {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct UIElement {
|
pub struct UIElements {
|
||||||
elements: ui::Collection
|
elements: ui::Collection,
|
||||||
// TODO: Add background of some sort
|
background: ui::ElementRef<ui::Image>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct SettingsMenu {
|
pub struct SettingsMenu {
|
||||||
console: Arc<Mutex<console::Console>>,
|
console: Arc<Mutex<console::Console>>,
|
||||||
elements: Option<UIElement>,
|
elements: Option<UIElements>,
|
||||||
show_disconnect_button: bool
|
show_disconnect_button: bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,6 +66,15 @@ impl super::Screen for SettingsMenu {
|
||||||
fn on_active(&mut self, renderer: &mut render::Renderer, ui_container: &mut ui::Container) {
|
fn on_active(&mut self, renderer: &mut render::Renderer, ui_container: &mut ui::Container) {
|
||||||
let mut elements = ui::Collection::new();
|
let mut elements = ui::Collection::new();
|
||||||
|
|
||||||
|
let mut background = ui::Image::new(
|
||||||
|
render::Renderer::get_texture(renderer.get_textures_ref(), "steven:solid"),
|
||||||
|
0.0, 0.0, 854.0, 480.0,
|
||||||
|
0.0, 0.0, 1.0, 1.0,
|
||||||
|
0, 0, 0
|
||||||
|
);
|
||||||
|
background.set_a(100);
|
||||||
|
let background = elements.add(ui_container.add(background));
|
||||||
|
|
||||||
// From top and down
|
// From top and down
|
||||||
let (btn_audio_settings, txt_audio_settings) = new_submenu_button("Audio settings...", renderer, ui_container, -160.0, -50.0);
|
let (btn_audio_settings, txt_audio_settings) = new_submenu_button("Audio settings...", renderer, ui_container, -160.0, -50.0);
|
||||||
super::button_action(ui_container, btn_audio_settings.clone(), Some(txt_audio_settings.clone()), move |game, _| {
|
super::button_action(ui_container, btn_audio_settings.clone(), Some(txt_audio_settings.clone()), move |game, _| {
|
||||||
|
@ -114,8 +123,9 @@ impl super::Screen for SettingsMenu {
|
||||||
elements.add(txt_exit_game);
|
elements.add(txt_exit_game);
|
||||||
}
|
}
|
||||||
|
|
||||||
self.elements = Some(UIElement {
|
self.elements = Some(UIElements {
|
||||||
elements: elements
|
elements: elements,
|
||||||
|
background: background,
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -128,7 +138,20 @@ impl super::Screen for SettingsMenu {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Called every frame the screen is active
|
// Called every frame the screen is active
|
||||||
fn tick(&mut self, _delta: f64, _renderer: &mut render::Renderer, _ui_container: &mut ui::Container) -> Option<Box<super::Screen>> {
|
fn tick(&mut self, _delta: f64, renderer: &mut render::Renderer, ui_container: &mut ui::Container) -> Option<Box<super::Screen>> {
|
||||||
|
let elements = self.elements.as_mut().unwrap();
|
||||||
|
{
|
||||||
|
let mode = ui_container.mode;
|
||||||
|
let background = ui_container.get_mut(&elements.background);
|
||||||
|
background.set_width(match mode {
|
||||||
|
ui::Mode::Unscaled(scale) => 854.0 / scale,
|
||||||
|
ui::Mode::Scaled => renderer.width as f64,
|
||||||
|
});
|
||||||
|
background.set_height(match mode {
|
||||||
|
ui::Mode::Unscaled(scale) => 480.0 / scale,
|
||||||
|
ui::Mode::Scaled => renderer.height as f64,
|
||||||
|
});
|
||||||
|
}
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -144,7 +167,7 @@ impl super::Screen for SettingsMenu {
|
||||||
|
|
||||||
pub struct VideoSettingsMenu {
|
pub struct VideoSettingsMenu {
|
||||||
console: Arc<Mutex<console::Console>>,
|
console: Arc<Mutex<console::Console>>,
|
||||||
elements: Option<UIElement>,
|
elements: Option<UIElements>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl VideoSettingsMenu {
|
impl VideoSettingsMenu {
|
||||||
|
@ -160,6 +183,15 @@ impl super::Screen for VideoSettingsMenu {
|
||||||
fn on_active(&mut self, renderer: &mut render::Renderer, ui_container: &mut ui::Container) {
|
fn on_active(&mut self, renderer: &mut render::Renderer, ui_container: &mut ui::Container) {
|
||||||
let mut elements = ui::Collection::new();
|
let mut elements = ui::Collection::new();
|
||||||
|
|
||||||
|
let mut background = ui::Image::new(
|
||||||
|
render::Renderer::get_texture(renderer.get_textures_ref(), "steven:solid"),
|
||||||
|
0.0, 0.0, 854.0, 480.0,
|
||||||
|
0.0, 0.0, 1.0, 1.0,
|
||||||
|
0, 0, 0
|
||||||
|
);
|
||||||
|
background.set_a(100);
|
||||||
|
let background = elements.add(ui_container.add(background));
|
||||||
|
|
||||||
// Load defaults
|
// Load defaults
|
||||||
let (r_max_fps, r_fov, r_vsync) = {
|
let (r_max_fps, r_fov, r_vsync) = {
|
||||||
let console = self.console.lock().unwrap();
|
let console = self.console.lock().unwrap();
|
||||||
|
@ -198,8 +230,9 @@ impl super::Screen for VideoSettingsMenu {
|
||||||
});
|
});
|
||||||
elements.add(btn_done);
|
elements.add(btn_done);
|
||||||
elements.add(txt_done);
|
elements.add(txt_done);
|
||||||
self.elements = Some(UIElement {
|
self.elements = Some(UIElements {
|
||||||
elements: elements
|
elements: elements,
|
||||||
|
background: background,
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -212,7 +245,20 @@ impl super::Screen for VideoSettingsMenu {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Called every frame the screen is active
|
// Called every frame the screen is active
|
||||||
fn tick(&mut self, _delta: f64, _renderer: &mut render::Renderer, _ui_container: &mut ui::Container) -> Option<Box<super::Screen>> {
|
fn tick(&mut self, _delta: f64, renderer: &mut render::Renderer, ui_container: &mut ui::Container) -> Option<Box<super::Screen>> {
|
||||||
|
let elements = self.elements.as_mut().unwrap();
|
||||||
|
{
|
||||||
|
let mode = ui_container.mode;
|
||||||
|
let background = ui_container.get_mut(&elements.background);
|
||||||
|
background.set_width(match mode {
|
||||||
|
ui::Mode::Unscaled(scale) => 854.0 / scale,
|
||||||
|
ui::Mode::Scaled => renderer.width as f64,
|
||||||
|
});
|
||||||
|
background.set_height(match mode {
|
||||||
|
ui::Mode::Unscaled(scale) => 480.0 / scale,
|
||||||
|
ui::Mode::Scaled => renderer.height as f64,
|
||||||
|
});
|
||||||
|
}
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,7 +274,7 @@ impl super::Screen for VideoSettingsMenu {
|
||||||
|
|
||||||
pub struct AudioSettingsMenu {
|
pub struct AudioSettingsMenu {
|
||||||
console: Arc<Mutex<console::Console>>,
|
console: Arc<Mutex<console::Console>>,
|
||||||
elements: Option<UIElement>
|
elements: Option<UIElements>
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AudioSettingsMenu {
|
impl AudioSettingsMenu {
|
||||||
|
@ -244,6 +290,15 @@ impl super::Screen for AudioSettingsMenu {
|
||||||
fn on_active(&mut self, renderer: &mut render::Renderer, ui_container: &mut ui::Container) {
|
fn on_active(&mut self, renderer: &mut render::Renderer, ui_container: &mut ui::Container) {
|
||||||
let mut elements = ui::Collection::new();
|
let mut elements = ui::Collection::new();
|
||||||
|
|
||||||
|
let mut background = ui::Image::new(
|
||||||
|
render::Renderer::get_texture(renderer.get_textures_ref(), "steven:solid"),
|
||||||
|
0.0, 0.0, 854.0, 480.0,
|
||||||
|
0.0, 0.0, 1.0, 1.0,
|
||||||
|
0, 0, 0
|
||||||
|
);
|
||||||
|
background.set_a(100);
|
||||||
|
let background = elements.add(ui_container.add(background));
|
||||||
|
|
||||||
let master_volume = {
|
let master_volume = {
|
||||||
let console = self.console.lock().unwrap();
|
let console = self.console.lock().unwrap();
|
||||||
(console.get(settings::CL_MASTER_VOLUME).clone())
|
(console.get(settings::CL_MASTER_VOLUME).clone())
|
||||||
|
@ -260,8 +315,9 @@ impl super::Screen for AudioSettingsMenu {
|
||||||
elements.add(btn_done);
|
elements.add(btn_done);
|
||||||
elements.add(txt_done);
|
elements.add(txt_done);
|
||||||
|
|
||||||
self.elements = Some(UIElement {
|
self.elements = Some(UIElements {
|
||||||
elements: elements
|
elements: elements,
|
||||||
|
background: background,
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -274,7 +330,20 @@ impl super::Screen for AudioSettingsMenu {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Called every frame the screen is active
|
// Called every frame the screen is active
|
||||||
fn tick(&mut self, _delta: f64, _renderer: &mut render::Renderer, _ui_container: &mut ui::Container) -> Option<Box<super::Screen>> {
|
fn tick(&mut self, _delta: f64, renderer: &mut render::Renderer, ui_container: &mut ui::Container) -> Option<Box<super::Screen>> {
|
||||||
|
let elements = self.elements.as_mut().unwrap();
|
||||||
|
{
|
||||||
|
let mode = ui_container.mode;
|
||||||
|
let background = ui_container.get_mut(&elements.background);
|
||||||
|
background.set_width(match mode {
|
||||||
|
ui::Mode::Unscaled(scale) => 854.0 / scale,
|
||||||
|
ui::Mode::Scaled => renderer.width as f64,
|
||||||
|
});
|
||||||
|
background.set_height(match mode {
|
||||||
|
ui::Mode::Unscaled(scale) => 480.0 / scale,
|
||||||
|
ui::Mode::Scaled => renderer.height as f64,
|
||||||
|
});
|
||||||
|
}
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -193,6 +193,7 @@ element_impl!(
|
||||||
Button
|
Button
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#[derive(Clone, Copy, PartialEq)]
|
||||||
pub enum Mode {
|
pub enum Mode {
|
||||||
Scaled,
|
Scaled,
|
||||||
Unscaled(f64),
|
Unscaled(f64),
|
||||||
|
@ -290,6 +291,7 @@ const SCREEN: Region = Region {
|
||||||
|
|
||||||
pub struct Container {
|
pub struct Container {
|
||||||
pub mode: Mode,
|
pub mode: Mode,
|
||||||
|
last_mode: Mode,
|
||||||
elements: HashMap<ElementRefInner, Element>,
|
elements: HashMap<ElementRefInner, Element>,
|
||||||
// We need the order
|
// We need the order
|
||||||
elements_list: Vec<ElementRefInner>,
|
elements_list: Vec<ElementRefInner>,
|
||||||
|
@ -305,6 +307,7 @@ impl Container {
|
||||||
pub fn new() -> Container {
|
pub fn new() -> Container {
|
||||||
Container {
|
Container {
|
||||||
mode: Mode::Scaled,
|
mode: Mode::Scaled,
|
||||||
|
last_mode: Mode::Scaled,
|
||||||
elements: HashMap::new(),
|
elements: HashMap::new(),
|
||||||
elements_list: Vec::new(),
|
elements_list: Vec::new(),
|
||||||
version: 0xFFFF,
|
version: 0xFFFF,
|
||||||
|
@ -356,11 +359,12 @@ impl Container {
|
||||||
};
|
};
|
||||||
|
|
||||||
if self.last_sw != sw || self.last_sh != sh || self.last_width != width ||
|
if self.last_sw != sw || self.last_sh != sh || self.last_width != width ||
|
||||||
self.last_height != height || self.version != renderer.ui.version {
|
self.last_height != height || self.version != renderer.ui.version || self.last_mode != self.mode {
|
||||||
self.last_sw = sw;
|
self.last_sw = sw;
|
||||||
self.last_sh = sh;
|
self.last_sh = sh;
|
||||||
self.last_width = width;
|
self.last_width = width;
|
||||||
self.last_height = height;
|
self.last_height = height;
|
||||||
|
self.last_mode = self.mode;
|
||||||
for (_, e) in &mut self.elements {
|
for (_, e) in &mut self.elements {
|
||||||
e.set_dirty(true);
|
e.set_dirty(true);
|
||||||
if self.version != renderer.ui.version {
|
if self.version != renderer.ui.version {
|
||||||
|
|
Loading…
Reference in New Issue