57 lines
1.3 KiB
Rust
57 lines
1.3 KiB
Rust
use godot::{
|
|
classes::{HBoxContainer, IHBoxContainer, Label, Slider},
|
|
prelude::*,
|
|
};
|
|
|
|
#[derive(GodotClass)]
|
|
#[class(base=HBoxContainer, init, tool)]
|
|
pub struct SliderContainer {
|
|
#[export]
|
|
label: Option<Gd<Label>>,
|
|
#[export]
|
|
slider: Option<Gd<Slider>>,
|
|
#[export]
|
|
pub value: f64,
|
|
#[export]
|
|
pub min: f64,
|
|
#[export]
|
|
pub max: f64,
|
|
|
|
last_value: f64,
|
|
|
|
base: Base<HBoxContainer>,
|
|
}
|
|
|
|
#[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);
|
|
}
|