@@ 14,7 14,10 @@ use crate::game_status::Card;
pub struct CardPlugin;
impl Plugin for CardPlugin {
- fn build(&self, app: &mut App) {}
+ fn build(&self, app: &mut App) {
+ app.init_resource::<VisualCardData>()
+ .add_system(on_spawn_card);
+ }
}
// NOTE: kind of like using enum variants
@@ 33,7 36,7 @@ pub struct VisualCard {
}
impl VisualCard {
- pub const WIDTH: f32 = 0.35;
+ pub const ASPECT_RATIO: f32 = 5. / 8.;
}
impl Default for VisualCard {
@@ 55,6 58,8 @@ pub struct VisualCardBundle {
pub visual_card: VisualCard,
pub transform: Transform,
pub global_transform: GlobalTransform,
+ pub visibility: Visibility,
+ pub computed_visibility: ComputedVisibility,
pub collider: Collider,
pub rigid_body: RigidBody,
}
@@ 75,8 80,63 @@ impl Default for VisualCardBundle {
..Default::default()
},
global_transform: GlobalTransform::default(),
- collider: Collider::cuboid(VisualCard::WIDTH, VisualCard::WIDTH * 1.6, 0.01),
+ visibility: Visibility::default(),
+ computed_visibility: ComputedVisibility::default(),
+ collider: Collider::cuboid(VisualCard::ASPECT_RATIO / 2., VisualCard::ASPECT_RATIO, 0.01),
rigid_body: RigidBody::Dynamic,
}
}
}
+
+#[derive(Resource)]
+pub struct VisualCardData {
+ mesh: Handle<Mesh>,
+ card_background: Handle<StandardMaterial>,
+}
+
+impl FromWorld for VisualCardData {
+ fn from_world(world: &mut World) -> Self {
+ let world = world.cell();
+ let mut meshes = world.resource_mut::<Assets<Mesh>>();
+ let mut materials = world.resource_mut::<Assets<StandardMaterial>>();
+ let asset_server = world.resource::<AssetServer>();
+
+ let card_background_material = StandardMaterial {
+ unlit: true,
+ alpha_mode: AlphaMode::Blend,
+ base_color_texture: Some(asset_server.load("card_background.png")),
+ ..Default::default()
+ };
+
+ Self {
+ mesh: meshes.add(
+ shape::Quad {
+ size: Vec2::new(VisualCard::ASPECT_RATIO / 2., VisualCard::ASPECT_RATIO),
+ ..Default::default()
+ }
+ .into(),
+ ),
+ card_background: materials.add(card_background_material),
+ }
+ }
+}
+
+fn on_spawn_card(
+ mut commands: Commands,
+ card_data: Res<VisualCardData>,
+ new_cards: Query<(Entity, &VisualCard), Added<VisualCard>>,
+) {
+ for (entity, card) in &new_cards {
+ commands.entity(entity).with_children(|parent| {
+ parent.spawn(PbrBundle {
+ material: card_data.card_background.clone(),
+ mesh: card_data.mesh.clone(),
+ transform: Transform {
+ scale: Vec3::new(2., 2., 1.),
+ ..Default::default()
+ },
+ ..Default::default()
+ });
+ });
+ }
+}