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, 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>, 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, 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, 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, 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. }); }); } }