From 3ab0deac1dea9acc7684000aa393ffb590dcf2f2 Mon Sep 17 00:00:00 2001 From: Ben Frankel Date: Sun, 28 Jul 2024 13:50:26 -0700 Subject: [PATCH] Set up victory/defeat menu layouting --- assets/mockup/pyrious.aseprite | Bin 3555 -> 4500 bytes src/screen/playing/defeat_menu.rs | 183 +++++++++++++++++++++------ src/screen/playing/level_up_menu.rs | 6 +- src/screen/playing/victory_menu.rs | 184 +++++++++++++++++++--------- src/ui/widget.rs | 9 +- 5 files changed, 283 insertions(+), 99 deletions(-) diff --git a/assets/mockup/pyrious.aseprite b/assets/mockup/pyrious.aseprite index 7fa160753ef59d599901d8728e3e85af2cb1168d..97d37a8f1e25a4a5c8aa3e75546f5cd5546408ea 100644 GIT binary patch delta 1630 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 Xy1qCP3+r0rM=Y#szq%i1>2M@3yQWKx diff --git a/src/screen/playing/defeat_menu.rs b/src/screen/playing/defeat_menu.rs index 6763125..b1fa0bb 100644 --- a/src/screen/playing/defeat_menu.rs +++ b/src/screen/playing/defeat_menu.rs @@ -5,7 +5,9 @@ use pyri_state::extra::entity_scope::StateScope; use pyri_state::prelude::*; use crate::core::pause::Pause; +use crate::game::actor::health::Health; use crate::game::actor::player::IsPlayer; +use crate::game::combat::death::IsDead; use crate::game::combat::death::OnDeath; use crate::screen::fade_out; use crate::screen::playing::PlayingAssets; @@ -52,22 +54,37 @@ fn defeat_overlay(mut entity: EntityWorldMut) { fn defeat_menu(mut entity: EntityWorldMut) { entity + .add(Style::ABS_COLUMN_CENTER.div()) .insert(( - Name::new("DefeatMenu"), - NodeBundle { - style: Style::ABS_COLUMN_MID, - z_index: ZIndex::Global(2), - ..default() - }, + Name::new("DefeatMenuContainer"), StateScope::::default(), )) .with_children(|children| { - children.spawn_with(header); - children.spawn_with(button_container); + children + .spawn(( + Name::new("DefeatMenu"), + NodeBundle { + style: Style { + height: VMin(75.0), + top: Vw(-5.2), + align_items: AlignItems::Center, + justify_content: JustifyContent::SpaceBetween, + flex_direction: FlexDirection::Column, + ..default() + }, + z_index: ZIndex::Global(2), + ..default() + }, + )) + .with_children(|children| { + children.spawn_with(header); + children.spawn_with(body); + children.spawn_with(button_container); + }); }); } -const HEADER: &str = "Defeat :("; +const HEADER: &str = "Party over :("; fn header(mut entity: EntityWorldMut) { entity.insert(( @@ -88,6 +105,59 @@ fn header(mut entity: EntityWorldMut) { )); } +fn body(mut entity: EntityWorldMut) { + entity + .insert(( + Name::new("Body"), + NodeBundle { + style: Style { + display: Display::Grid, + grid_template_columns: RepeatedGridTrack::auto(2), + row_gap: Vw(1.2), + column_gap: Vw(2.5), + ..default() + }, + ..default() + }, + )) + .with_children(|children| { + // TODO: Real stats. + for (i, text) in [ + "[b]125", + "seconds partied", + "[b]23", + "blobos impressed", + "[b]125", + "dances performed", + "[b]241", + "notes played", + "[b]45", + "rests taken", + ] + .into_iter() + .enumerate() + { + children.spawn(( + Name::new("BodySpan"), + TextBundle::from_sections(parse_rich(text)).with_style(Style { + justify_self: if i % 2 == 0 { + JustifySelf::End + } else { + JustifySelf::Start + }, + ..default() + }), + DynamicFontSize::new(Vw(3.0)).with_step(8.0), + ThemeColorForText(vec![if i % 2 == 0 { + ThemeColor::Indicator + } else { + ThemeColor::BodyText + }]), + )); + } + }); +} + fn button_container(mut entity: EntityWorldMut) { entity .insert(( @@ -95,49 +165,82 @@ fn button_container(mut entity: EntityWorldMut) { NodeBundle { style: Style { align_items: AlignItems::Center, - flex_direction: FlexDirection::Column, - margin: UiRect::top(VMin(6.0)), - row_gap: Vw(2.5), + column_gap: Vw(3.8), ..default() }, ..default() }, )) .with_children(|children| { + children.spawn_with(dance_on_button); children.spawn_with(restart_button); - children.spawn_with(quit_to_title_button); + children.spawn_with(quit_button); }); } +fn dance_on_button(mut entity: EntityWorldMut) { + entity + .add(widget::menu_button_with_font_size("Dance on", Vw(3.5))) + .insert(( + On::>::run( + |mut commands: Commands, + mut player_query: Query<(Entity, &mut Health), (With, With)>, + audio: Res