more settings

This commit is contained in:
griffi-gh 2024-05-02 02:43:58 +02:00
parent a63deb5173
commit 8e39fc24fd

View file

@ -10,7 +10,10 @@ use crate::{hui_integration::UiState, input::RawKbmInputState, rendering::Window
#[derive(Signal)] #[derive(Signal)]
enum SettingsSignal { enum SettingsSignal {
SetRenderDistance(f32), SetRenderDistance(u8),
SetEnableDynamicCrosshair(bool),
SetEnableDebugChunkBorder(bool),
SetMouseSensitivity(f32),
} }
pub fn render_settings_ui( pub fn render_settings_ui(
@ -20,9 +23,11 @@ pub fn render_settings_ui(
kbd: UniqueView<RawKbmInputState>, kbd: UniqueView<RawKbmInputState>,
) { ) {
//f1 must be held down to open settings //f1 must be held down to open settings
//TODO implement ModalManager instead of this
if !kbd.keyboard_state.contains(KeyCode::F1 as u32) { if !kbd.keyboard_state.contains(KeyCode::F1 as u32) {
return return
} }
Container::default() Container::default()
.with_size(size!(100%)) .with_size(size!(100%))
.with_background((0., 0., 0., 0.5)) .with_background((0., 0., 0., 0.5))
@ -33,29 +38,73 @@ pub fn render_settings_ui(
color: (0.2, 0.2, 0.2), color: (0.2, 0.2, 0.2),
corner_radius: 8. corner_radius: 8.
}) })
.with_size(size!(50%, 50%)) .with_size(size!(600, 300))
.with_direction(Direction::Horizontal) .with_direction(Direction::Horizontal)
.with_gap(10.) .with_gap(10.)
.with_padding(10.) .with_padding(10.)
.with_children(|ui| { .with_children(|ui| {
Text::new("Settings") Container::default()
.with_size(size!(100%, auto))
.with_align(Alignment::Center)
.with_children(|ui| {
Text::new("Settings")
.with_text_size(32)
.add_child(ui);
})
.add_child(ui); .add_child(ui);
Break.add_child(ui); Break.add_child(ui);
Text::new("Render Distance") Text::new("Render Distance")
.add_child(ui); .add_child(ui);
Slider::new(settings.render_distance as f32 / 16.) Slider::new(settings.render_distance as f32 / 16.)
.with_size(size!(300, (Slider::DEFAULT_HEIGHT))) .with_size(size!(300, auto))
.on_change(SettingsSignal::SetRenderDistance) .on_change(|f| SettingsSignal::SetRenderDistance((f * 16.).round() as u8))
.add_child(ui);
Text::new(format!("{} Chunks", settings.render_distance))
.add_child(ui); .add_child(ui);
Break.add_child(ui); Break.add_child(ui);
Text::new("Dynamic Crosshair")
.add_child(ui);
Slider::new(settings.dynamic_crosshair as u32 as f32)
.with_size(size!(50, auto))
.with_track_height(1.)
.with_handle_size((25., 1.))
.on_change(|f| SettingsSignal::SetEnableDynamicCrosshair(f >= 0.5))
.add_child(ui);
Text::new(if settings.dynamic_crosshair { "On" } else { "Off" })
.add_child(ui);
Break.add_child(ui);
Text::new("Enable debug chunk border")
.add_child(ui);
Slider::new(settings.debug_draw_current_chunk_border as u32 as f32)
.with_size(size!(50, (Slider::DEFAULT_HEIGHT)))
.with_track_height(1.)
.with_handle_size((25., 1.))
.on_change(|f| SettingsSignal::SetEnableDebugChunkBorder(f >= 0.5))
.add_child(ui);
Text::new(if settings.debug_draw_current_chunk_border { "On" } else { "Off" })
.add_child(ui);
Break.add_child(ui);
Text::new("Mouse Sensitivity")
.add_child(ui);
Slider::new(settings.mouse_sensitivity / 5.)
.with_size(size!(300, (Slider::DEFAULT_HEIGHT)))
.on_change(|f| SettingsSignal::SetMouseSensitivity(5. * f))
.add_child(ui);
Text::new(format!("{:.2}", settings.mouse_sensitivity))
.add_child(ui);
}) })
.add_child(ui); .add_child(ui);
}) })
.add_root(&mut ui.hui, size.0.as_vec2()); .add_root(&mut ui.hui, size.0.as_vec2());
ui.hui.process_signals(|signal: SettingsSignal| match signal { ui.hui.process_signals(|signal: SettingsSignal| match signal {
SettingsSignal::SetRenderDistance(value) => { SettingsSignal::SetRenderDistance(value) => settings.render_distance = value,
settings.render_distance = (value * 16.).round() as u8; SettingsSignal::SetEnableDynamicCrosshair(value) => settings.dynamic_crosshair = value,
} SettingsSignal::SetEnableDebugChunkBorder(value) => settings.debug_draw_current_chunk_border = value && cfg!(not(target_os = "android")),
SettingsSignal::SetMouseSensitivity(value) => settings.mouse_sensitivity = value,
}); });
} }