use godot::{ classes::{HBoxContainer, IHBoxContainer, Label, Slider}, prelude::*, }; #[derive(GodotClass)] #[class(base=HBoxContainer, init, tool)] pub struct SliderContainer { #[export] label: Option>, #[export] slider: Option>, #[export] pub value: f64, #[export] pub min: f64, #[export] pub max: f64, last_value: f64, base: Base, } #[godot_api] impl IHBoxContainer for SliderContainer { fn ready(&mut self) {} fn process(&mut self, _delta: f64) { if let Some(slider) = &mut self.slider { slider.set_min(self.min); slider.set_max(self.max); if self.last_value != self.value { slider.set_value(self.value); } self.value = slider.get_value(); if self.last_value != self.value { let value = self.value; self.signals().on_change().emit(value); } self.last_value = self.value; } if let Some(label) = &mut self.label && let Some(slider) = &self.slider { label.set_text(&format!("{}", slider.get_value())); } } } #[godot_api] impl SliderContainer { #[signal] pub fn on_change(value: f64); }