Skip to content

A card crate for the Bevy game engine

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

Rabbival/bevy_play_card

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

bevy_play_card

A card crate for the Bevy game engine

bevy_card_showcase - Trim

How to Use

Registering the Plugin

First, you should add BevyCardPlugin, it has a ::default() implementation but can be reconfigured, for example:

app.add_plugins(
  BevyCardPlugin {
    card_hover_height: 40.0,
    ..default()
  },
);

Spawning Cards

The basic functionality derived from Bevy Picking is added to Cards automatically. It's recommended to instantiate a card using card bundles:

commands.spawn((
  CardBundle::new(Transform::default()),
  Sprite {
      image: asset_server.load("your card sprite path here"),
      ..default ()
  },
));

Cards are named automatically by the card_namer.

Spawning Card Lines

Cards can live on a card line, that'll allow you to reorder them and keep them neatly organized. All you need to instantiate a card line is:

commands
  .spawn(CardLineBundle::from_transform(Transform::default()));

Or more specifically using from_card_line:

commands
  .spawn(CardLineBundle::from_card_line(
      CardLine::default()
        .with_origin(
          Transform::from_translation(location.into())
              .with_rotation(Quat::from_rotation_z(rotation)),
        )
        .with_max_cards(MAX_CARDS)
        .with_card_origin_gap(60.0),
  ));

Although you could interact with the entities directly, you can spare yourself some boilerplate by firing events using EventWriter<CardLineRequest>, already listened to by the plugin. Each CardLineRequest contains the entity of the line to which it'll be applied and a request type with relevant additional data if there's any. The variants of CardLineRequestType are as follows:

Variant Role
RaiseCardLine Raises the card line to it's relative up
LowerCardLine Lowers the card line back to place after being raised
AddToCardLine Inserts the card to the line if possible
RemoveCardFromLine Removes the card from the line if it was there

Hovered And Dragged Tags

Cards are being tagged for easier queries when they're hovered and dragged (the tags are removed when the action is done). This way you can, for example, get all hovered card with queries like: Query<&Card, With<Hovered>> For use examples, see using_hovered_and_dragged_cards.rs

Workflow Example

Let's spawn a line and add a few cards to it, see cards_on_a_line.rs for another example of that scenario.

First, let's spawn a defaultly-configured line in the middle of the screen.

let line_entity = commands
  .spawn(CardLineBundle::from_transform(Transfrom::default())).id();

Now, let's spawn three cards, sending a request to add each to a line. Sending the requests separately ensures the line stays within capacity, leaving out the last cards to be spawned if any. The shape of the loop is as follows:

for _ in 0..3 {
  let card_entity = commands.spawn(( ... )).id();
  card_line_request_writer.send(CardLineRequest { ... });
}

An example for card spawning would be:

let card_entity = commands
  .spawn((
      Sprite {
        image: asset_server.load("path to your card sprite here"),
        ..default()
      },
      CardBundle::new(Transform::default()),
    )).id();

With the appropriate addition request:

  card_line_request_writer.send(CardLineRequest {
    line: line_entity,
    request_type: CardLineRequestType::AddToCardLine { card_entity },
  });

Ending up with:

let line_entity = commands
  .spawn(CardLineBundle::from_transform(Transfrom::default())).id();
for _ in 0..3 {
  let card_entity = commands
      .spawn((
        Sprite {
          image: asset_server.load("path to your card sprite here"),
          ..default()
        },
        CardBundle::new(Transform::default()),
      )).id();
  card_line_request_writer.send(CardLineRequest {
    line: line_entity,
    request_type: CardLineRequestType::AddToCardLine { card_entity },
  });
}

Bevy Version Support

bevy bevy_tween
0.15 0.1

Credits

  • bevy_tween The crate this one is built upon. Thanks to it I was able to set bevy_card up rather quickly and easily.

About

A card crate for the Bevy game engine

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages