Files
shinespark/src/menus/character_select/character_box.rs
T
2026-09-12 17:01:15 +02:00

58 lines
1.8 KiB
Rust

use bevy::{picking::Pickable, prelude::*, text::FontSourceTemplate};
use crate::{
fighter::{FighterId, manifest::FighterManifest},
menus::{button::FGUiButton, style::FGUiButtonType},
};
#[derive(Component, Clone, FromTemplate)]
pub struct CharacterBox {
pub fighter_manifest: Handle<FighterManifest>,
pub fighter_id: FighterId,
}
impl CharacterBox {
pub fn scene(
manifest_handle: Handle<FighterManifest>,
manifests: &Res<Assets<FighterManifest>>,
) -> impl Scene {
let manifest = manifests
.get(&manifest_handle)
.expect("Fighter manifest should be valid");
let fighter_icon = manifest.icon.handle().clone();
let fighter_id = manifest.id;
bsn! {
Node {
width: px(128),
height: px(128),
flex_direction: FlexDirection::Column,
justify_content: JustifyContent::FlexEnd
}
ImageNode {
image: fighter_icon
}
FGUiButton {
button_type: FGUiButtonType::CharacterSelectCharacter
}
CharacterBox {
fighter_manifest: manifest_handle,
fighter_id: fighter_id
}
BackgroundColor(Color::srgb(1.0, 1.0, 1.0))
Children [
Pickable::IGNORE
Node {
width: percent(100)
}
Text("El Grande Padre")
TextFont {
font: FontSourceTemplate::Handle("fonts/roboto.ttf"),
font_size: px(crate::menus::style::TEXT_SIZE),
}
TextColor(Color::srgb(0.9, 0.9, 0.9))
BackgroundColor(Color::srgb(0.0, 0.0, 1.0))
]
}
}
}