Use the machine entity ID in the button handler prototype. Now to see about getting the FuelGauge to show the value after a button press.
155 lines
4.8 KiB
Rust
155 lines
4.8 KiB
Rust
use bevy::{color::palettes::css::*, prelude::*};
|
|
|
|
use crate::{
|
|
game::{consumables::FuelChanged, machines::*},
|
|
resources::UiTheme,
|
|
widgets::{BigRedButton, SpawnUi, fuel_gauge::FuelGauge, machine_ui_base},
|
|
};
|
|
|
|
impl SpawnUi for CuttingMachine {
|
|
fn spawn_ui(mut commands: Commands, theme: Res<UiTheme>, machine_id: Entity) {
|
|
let base_entity = machine_ui_base(&mut commands, "Cutting Machine", &theme);
|
|
commands.entity(base_entity).with_children(|commands| {
|
|
// Left panel. For fuel or machine stats or whatever.
|
|
// TODO: Pass along target machine, not the UI's root entity.
|
|
commands.spawn(FuelGauge::bundle(Entity::PLACEHOLDER));
|
|
|
|
// Center panel (placeholder for the Card view)
|
|
commands.spawn((
|
|
Node::default(),
|
|
BackgroundColor(BLUE.into()),
|
|
Pickable::default(),
|
|
children![(
|
|
Text::new("Card cut view placeholder"),
|
|
TextColor(MAGENTA.into()),
|
|
TextShadow::default(),
|
|
),],
|
|
));
|
|
// Right panel for the "CUT" button
|
|
commands
|
|
.spawn((
|
|
Node {
|
|
align_items: AlignItems::End,
|
|
..Default::default()
|
|
},
|
|
BackgroundColor(DARK_GRAY.into()),
|
|
Pickable::default(),
|
|
))
|
|
.with_children(|cmds| {
|
|
let mut button_cmds = cmds.spawn(BigRedButton::bundle("CUT"));
|
|
button_cmds.observe(move |trigger: Trigger<Pointer<Click>>, mut com: Commands| {
|
|
dbg!("Cut button pressed. Triggering a FuelChanged event");
|
|
com.trigger_targets(FuelChanged, machine_id);
|
|
});
|
|
// TODO: Attach on-press observer so this machine can do something
|
|
// in response to that button being pressed
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
impl SpawnUi for RotatingMachine {
|
|
fn spawn_ui(mut commands: Commands, theme: Res<UiTheme>, machine_id: Entity) {
|
|
let base_entity = machine_ui_base(&mut commands, "Rotating Machine", &theme);
|
|
commands.entity(base_entity).with_children(|commands| {
|
|
commands.spawn(FuelGauge::bundle(Entity::PLACEHOLDER));
|
|
|
|
// Center panel (placeholder for input-output rotation)
|
|
commands.spawn((
|
|
Node::default(),
|
|
BackgroundColor(BLUE.into()),
|
|
Pickable::default(),
|
|
children![
|
|
Text::new("Card rotation side-by-side placeholder"),
|
|
TextColor(MAGENTA.into()),
|
|
],
|
|
));
|
|
|
|
// Right panel for the rotation controls
|
|
commands
|
|
.spawn((
|
|
Node {
|
|
align_items: AlignItems::End,
|
|
..Default::default()
|
|
},
|
|
BackgroundColor(DARK_GRAY.into()),
|
|
Pickable::default(),
|
|
))
|
|
.with_children(|cmds| {
|
|
let _button_cmds = cmds.spawn(BigRedButton::bundle("TURN"));
|
|
// TODO: Attach on-press observer to the button.
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
impl SpawnUi for FlippingMachine {
|
|
fn spawn_ui(mut commands: Commands, theme: Res<UiTheme>, machine_id: Entity) {
|
|
let base_entity = machine_ui_base(&mut commands, "Flipping Machine", &theme);
|
|
commands.entity(base_entity).with_children(|commands| {
|
|
commands.spawn(FuelGauge::bundle(Entity::PLACEHOLDER));
|
|
|
|
// Center panel (placeholder)
|
|
commands.spawn((
|
|
Node::default(),
|
|
BackgroundColor(BLUE.into()),
|
|
Pickable::default(),
|
|
children![
|
|
Text::new("Card Flipping placeholder"),
|
|
TextColor(MAGENTA.into()),
|
|
],
|
|
));
|
|
|
|
// Right panel go button
|
|
commands
|
|
.spawn((
|
|
Node {
|
|
align_items: AlignItems::End,
|
|
..Default::default()
|
|
},
|
|
BackgroundColor(DARK_GRAY.into()),
|
|
Pickable::default(),
|
|
))
|
|
.with_children(|cmds| {
|
|
let _button_cmds = cmds.spawn(BigRedButton::bundle("FLIP"));
|
|
// TODO: Attach on-press observer to the button.
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
impl SpawnUi for TransposingMachine {
|
|
fn spawn_ui(mut commands: Commands, theme: Res<UiTheme>, machine_id: Entity) {
|
|
let base_entity = machine_ui_base(&mut commands, "Transposing Machine", &theme);
|
|
commands.entity(base_entity).with_children(|commands| {
|
|
commands.spawn(FuelGauge::bundle(Entity::PLACEHOLDER));
|
|
|
|
// Center panel (placeholder)
|
|
commands.spawn((
|
|
Node::default(),
|
|
BackgroundColor(BLUE.into()),
|
|
Pickable::default(),
|
|
children![
|
|
Text::new("Card Transposition placeholder"),
|
|
TextColor(MAGENTA.into()),
|
|
],
|
|
));
|
|
|
|
// Right panel go button
|
|
commands
|
|
.spawn((
|
|
Node {
|
|
align_items: AlignItems::End,
|
|
..Default::default()
|
|
},
|
|
BackgroundColor(DARK_GRAY.into()),
|
|
Pickable::default(),
|
|
))
|
|
.with_children(|cmds| {
|
|
let _button_cmds = cmds.spawn(BigRedButton::bundle("SWAP"));
|
|
// TODO: Attach on-press observer to the button.
|
|
});
|
|
});
|
|
}
|
|
}
|