mirror of
https://github.com/griffi-gh/kubi.git
synced 2024-12-26 05:38:20 -06:00
wip settings
This commit is contained in:
parent
69e7ae23db
commit
0a352ac291
|
@ -21,8 +21,8 @@ pub(crate) use ui::{
|
||||||
connecting_screen,
|
connecting_screen,
|
||||||
chat_ui,
|
chat_ui,
|
||||||
crosshair_ui,
|
crosshair_ui,
|
||||||
|
settings_ui,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub(crate) mod rendering;
|
pub(crate) mod rendering;
|
||||||
pub(crate) mod world;
|
pub(crate) mod world;
|
||||||
pub(crate) mod player;
|
pub(crate) mod player;
|
||||||
|
@ -93,6 +93,7 @@ use client_physics::{init_client_physics, update_client_physics_late};
|
||||||
use chat_ui::render_chat;
|
use chat_ui::render_chat;
|
||||||
use chat::init_chat_manager;
|
use chat::init_chat_manager;
|
||||||
use crosshair_ui::{init_crosshair_image, draw_crosshair};
|
use crosshair_ui::{init_crosshair_image, draw_crosshair};
|
||||||
|
use settings_ui::render_settings_ui;
|
||||||
|
|
||||||
/// stuff required to init the renderer and other basic systems
|
/// stuff required to init the renderer and other basic systems
|
||||||
fn pre_startup() -> Workload {
|
fn pre_startup() -> Workload {
|
||||||
|
@ -153,8 +154,10 @@ fn update() -> Workload {
|
||||||
update_raycasts,
|
update_raycasts,
|
||||||
update_block_placement,
|
update_block_placement,
|
||||||
apply_queued_blocks,
|
apply_queued_blocks,
|
||||||
|
//UI:
|
||||||
render_chat,
|
render_chat,
|
||||||
draw_crosshair,
|
draw_crosshair,
|
||||||
|
render_settings_ui,
|
||||||
).into_sequential_workload().run_if(is_ingame),
|
).into_sequential_workload().run_if(is_ingame),
|
||||||
update_networking_late.run_if(is_multiplayer),
|
update_networking_late.run_if(is_multiplayer),
|
||||||
compute_cameras,
|
compute_cameras,
|
||||||
|
|
|
@ -2,3 +2,4 @@ pub(crate) mod loading_screen;
|
||||||
pub(crate) mod connecting_screen;
|
pub(crate) mod connecting_screen;
|
||||||
pub(crate) mod chat_ui;
|
pub(crate) mod chat_ui;
|
||||||
pub(crate) mod crosshair_ui;
|
pub(crate) mod crosshair_ui;
|
||||||
|
pub(crate) mod settings_ui;
|
||||||
|
|
52
kubi/src/ui/settings_ui.rs
Normal file
52
kubi/src/ui/settings_ui.rs
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
use hui::{color, element::{br::Break, container::Container, slider::Slider, text::Text, UiElementExt}, layout::{Alignment, Direction}, signal::Signal, size};
|
||||||
|
use shipyard::{NonSendSync, UniqueView, UniqueViewMut};
|
||||||
|
use winit::keyboard::KeyCode;
|
||||||
|
use crate::{hui_integration::UiState, input::RawKbmInputState, rendering::WindowSize, settings::GameSettings};
|
||||||
|
|
||||||
|
#[derive(Signal)]
|
||||||
|
enum SettingsSignal {
|
||||||
|
SetRenderDistance(f32),
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn render_settings_ui(
|
||||||
|
mut ui: NonSendSync<UniqueViewMut<UiState>>,
|
||||||
|
size: UniqueView<WindowSize>,
|
||||||
|
mut settings: UniqueViewMut<GameSettings>,
|
||||||
|
kbd: UniqueView<RawKbmInputState>,
|
||||||
|
) {
|
||||||
|
//f1 must be held down to open settings
|
||||||
|
if !kbd.keyboard_state.contains(KeyCode::F1 as u32) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
Container::default()
|
||||||
|
.with_size(size!(100%))
|
||||||
|
.with_align(Alignment::Center)
|
||||||
|
.with_children(|ui| {
|
||||||
|
Container::default()
|
||||||
|
.with_background(color::BLACK)
|
||||||
|
.with_size(size!(50%, 50%))
|
||||||
|
.with_direction(Direction::Horizontal)
|
||||||
|
.with_gap(10.)
|
||||||
|
.with_padding(10.)
|
||||||
|
.with_children(|ui| {
|
||||||
|
Text::new("Settings")
|
||||||
|
.add_child(ui);
|
||||||
|
Break.add_child(ui);
|
||||||
|
Text::new("Render Distance")
|
||||||
|
.add_child(ui);
|
||||||
|
Slider::new(settings.render_distance as f32 / 16.)
|
||||||
|
.with_size(size!(300, (Slider::DEFAULT_HEIGHT)))
|
||||||
|
.on_change(SettingsSignal::SetRenderDistance)
|
||||||
|
.add_child(ui);
|
||||||
|
Break.add_child(ui);
|
||||||
|
})
|
||||||
|
.add_child(ui);
|
||||||
|
})
|
||||||
|
.add_root(&mut ui.hui, size.0.as_vec2());
|
||||||
|
|
||||||
|
ui.hui.process_signals(|signal: SettingsSignal| match signal {
|
||||||
|
SettingsSignal::SetRenderDistance(value) => {
|
||||||
|
settings.render_distance = (value * 16.).round() as u8;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
Loading…
Reference in a new issue