diff --git a/assets/filled_circle_green.png b/assets/filled_circle_green.png index da697aa..b3ae7ee 100644 --- a/assets/filled_circle_green.png +++ b/assets/filled_circle_green.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e11d4be3647ce9557f886d321200a83b02f784247a22fb00282cc94c0ccf1f40 -size 500 +oid sha256:37c51276968aac520b5b2fd02512dbc224e657d18b4c53569d4dd243406b12c6 +size 380 diff --git a/assets/filled_circle_purple.png b/assets/filled_circle_purple.png index 54f51b9..e92bada 100644 --- a/assets/filled_circle_purple.png +++ b/assets/filled_circle_purple.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cfb41ede3ce141099ed812be9fba131b1c63536265fd1627172e9ad70afdefa3 -size 500 +oid sha256:a57e585af1f78b2b8becec7eb5ca1e1d5e6b2e7f884504fe581da8d5c384749f +size 379 diff --git a/assets/filled_circle_red.png b/assets/filled_circle_red.png index 020dea6..c892453 100644 --- a/assets/filled_circle_red.png +++ b/assets/filled_circle_red.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:988dc8091aa9ca11bfef70244f669cf52ae22d17738641d1aae7d12cd41956d3 -size 500 +oid sha256:0bd243986816550b660f898084adf0b65cd1e0d8dbcf9d76aacf7df81ef2c495 +size 379 diff --git a/assets/filled_diamond_green.png b/assets/filled_diamond_green.png index c2382a6..98f0d20 100644 --- a/assets/filled_diamond_green.png +++ b/assets/filled_diamond_green.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a7e619368c0e9b25c999ceafec9848ccce3d3f60034bbb09890ba55a35e4abc -size 457 +oid sha256:a11721c0018a2a1742c42b4b42cb36a1c2948118a1aaf1adc5728329676ddd6b +size 407 diff --git a/assets/filled_diamond_purple.png b/assets/filled_diamond_purple.png index 2d0006c..9065886 100644 --- a/assets/filled_diamond_purple.png +++ b/assets/filled_diamond_purple.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a69e980054bcc9b1d242f6cee813c47c19dad504aaafcd140b39cbb8c1d14bd7 -size 456 +oid sha256:c765f3f8874f3036faa83d33a2c4f41131ed28b408b411617cbdf7dca4a689ae +size 407 diff --git a/assets/filled_diamond_red.png b/assets/filled_diamond_red.png index 6449a18..b324977 100644 --- a/assets/filled_diamond_red.png +++ b/assets/filled_diamond_red.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:014225d78c04b05552b258d30e67881b6c154ec734987a367bac6e69461d769d -size 456 +oid sha256:1c506608c003bab04c7fbdd4699dcbee23cce9b4450e85ea9f2a7c3ea4b774af +size 407 diff --git a/assets/filled_squiggle_green.png b/assets/filled_squiggle_green.png index 19c4faf..9fce2ce 100644 --- a/assets/filled_squiggle_green.png +++ b/assets/filled_squiggle_green.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d0f4803c2848aaead4fbe62a62163757d05981f844c58726ead443114521fcc0 -size 673 +oid sha256:f5b181208d61fda86b2ab87f3407ac01ba7ce07f1c52c324d4eee8182e790910 +size 501 diff --git a/assets/filled_squiggle_purple.png b/assets/filled_squiggle_purple.png index 703c122..af6a452 100644 --- a/assets/filled_squiggle_purple.png +++ b/assets/filled_squiggle_purple.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4124d21c0ac83a77c707de52221eb390a25585e07ca9dfe8c4552f1ff4dd8372 -size 673 +oid sha256:0f35e96e119365434bacc419cc9a4575da87e8a8b5665f954e32f0af36380ad4 +size 500 diff --git a/assets/filled_squiggle_red.png b/assets/filled_squiggle_red.png index 84af086..4df2bb9 100644 --- a/assets/filled_squiggle_red.png +++ b/assets/filled_squiggle_red.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c5d0ddde810865450154eb55bacc727fd0c6c57da8d914b668f82a38f1486f1 -size 673 +oid sha256:1f2c1735fbb412fdace8546abd52955b1ea5366d128cf104fd6b45c7a0b7937e +size 500 diff --git a/assets/open_circle_green.png b/assets/open_circle_green.png index 41fc0bb..85f79e4 100644 --- a/assets/open_circle_green.png +++ b/assets/open_circle_green.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9bddb1313394c1b655f8ed22346c79b471316a68f5f0851ffdc7edabbfa435f9 -size 578 +oid sha256:320d404ff63cc085a5ae37bcc4a0d81e669a8b6fb4dcef3bb08b6114a71ed67f +size 423 diff --git a/assets/open_circle_purple.png b/assets/open_circle_purple.png index fad1c01..aabc9b7 100644 --- a/assets/open_circle_purple.png +++ b/assets/open_circle_purple.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:596f917622ddddb46ea432d3f466190208bb0f4beb4d6bb1adc25f5143e2868c -size 577 +oid sha256:b8ebf92d8f45dc524592e94e5b5d46a2c1c96276b09dfed74910c79adf8322fa +size 422 diff --git a/assets/open_circle_red.png b/assets/open_circle_red.png index b1f394c..5b61bd3 100644 --- a/assets/open_circle_red.png +++ b/assets/open_circle_red.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:336c5b13451f1a37ef992c10d6193693de17309963909d33689e03af4414096f -size 577 +oid sha256:0d81f6d5726a174015a77df4434eebed31eb07b287914098048a4844229bf0cf +size 422 diff --git a/assets/open_diamond_green.png b/assets/open_diamond_green.png index 10d92c6..7596c26 100644 --- a/assets/open_diamond_green.png +++ b/assets/open_diamond_green.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6aec4da69c70315971213dc4933e27d645ddca8dd48396eab07de9918d02d1a5 -size 500 +oid sha256:cde2ef3a8689ccd48fda2d12bbe00e09b83f8a07493fdd29d3ebb5b7a18729d9 +size 440 diff --git a/assets/open_diamond_purple.png b/assets/open_diamond_purple.png index b799076..76c6015 100644 --- a/assets/open_diamond_purple.png +++ b/assets/open_diamond_purple.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d2601ddb1c7cd3f28c8df87404e3794fac1d42924fc42ca61d05964fce42acf4 -size 499 +oid sha256:ca4bb1e52f759cd872f8c764922e622c18a3cf906c401bd06b5d13c193534e45 +size 439 diff --git a/assets/open_diamond_red.png b/assets/open_diamond_red.png index ec25550..001353b 100644 --- a/assets/open_diamond_red.png +++ b/assets/open_diamond_red.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1ef78a8ecdf78032a335363540f5fe992f18bc149dcefcbad054b3d3b011c4ea -size 499 +oid sha256:b002cf3695ced26ff1ddee69b883a63d34f967c89380a54fb468eb1b8ff16986 +size 439 diff --git a/assets/open_squiggle_green.png b/assets/open_squiggle_green.png index 9bb86ae..17ed0d3 100644 --- a/assets/open_squiggle_green.png +++ b/assets/open_squiggle_green.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4cac93fa37b8f472837f6db8a688c6fe014bd783b326f44135eae15bc373a13e -size 786 +oid sha256:7860fad7c506a2e6f1447898cd56ff01843140b6f852ea8063fc502a55652a37 +size 571 diff --git a/assets/open_squiggle_purple.png b/assets/open_squiggle_purple.png index 3e21a0a..05f70fc 100644 --- a/assets/open_squiggle_purple.png +++ b/assets/open_squiggle_purple.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c276b4266af0a43c1c87a0947a5abf8ced30d44b30cb84975b15f69f453c910b -size 786 +oid sha256:00d077d6080705a14c446859c40cfb4b5c3077a9ba53a82949fb0a8135f07a80 +size 571 diff --git a/assets/open_squiggle_red.png b/assets/open_squiggle_red.png index 6f28e5e..a37964c 100644 --- a/assets/open_squiggle_red.png +++ b/assets/open_squiggle_red.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7027c5d242f8bc5155208cf3144a5c64347c6b140ef6a18bde7617f522713ae2 -size 786 +oid sha256:122e6f4e2f1e875f80ed7415fed3a3ad6270b4139da6c4a71a884ac89113a03a +size 571 diff --git a/assets/shaded_circle_green.png b/assets/shaded_circle_green.png index 5daec2d..2202c35 100644 --- a/assets/shaded_circle_green.png +++ b/assets/shaded_circle_green.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e71c96c94bf1372f9a2a9d2fbb0e519dc25b85c590960ef3315c8ac2614bd9ce -size 583 +oid sha256:032c9a18e22641108acbba59e9ffcaae9cf3603485f8393d99acba0888f3b100 +size 400 diff --git a/assets/shaded_circle_purple.png b/assets/shaded_circle_purple.png index 871eb84..d57e626 100644 --- a/assets/shaded_circle_purple.png +++ b/assets/shaded_circle_purple.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:df72a8a0bc97ad929ac7061e701108a98f0cfcb9378c3adda46bc3085ef689d2 -size 582 +oid sha256:f05c7dc140ff1c1e52c2395c163bf8d7ea40919c32333cab271d6c3a17c06347 +size 399 diff --git a/assets/shaded_circle_red.png b/assets/shaded_circle_red.png index 0d40d4f..68e3861 100644 --- a/assets/shaded_circle_red.png +++ b/assets/shaded_circle_red.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d5f9e01c9ff05d46ffb4af9926a16c810f3e04ca123a796af139a9d402734e8 -size 582 +oid sha256:0a1fcb3adb00a0de8c0bdf6104ad1153bf04328399af99179a2201f51cc84483 +size 399 diff --git a/assets/shaded_diamond_green.png b/assets/shaded_diamond_green.png index a3d87a7..36f2f68 100644 --- a/assets/shaded_diamond_green.png +++ b/assets/shaded_diamond_green.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0d43e354dce59b863abd2ca231774e513f6d5df82daee3ec29d71d7480bc2606 -size 684 +oid sha256:07c18c268080dbacaf8a868abea145eb08fc5572f756601e3554a38e95ac34ca +size 501 diff --git a/assets/shaded_diamond_purple.png b/assets/shaded_diamond_purple.png index 1ebc9c5..08146f7 100644 --- a/assets/shaded_diamond_purple.png +++ b/assets/shaded_diamond_purple.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7a0f716eb1fdef58863ca29d6ea63a4b58f6f22757a30a8fda42817d90c89857 -size 683 +oid sha256:9a15720e3c21b58497e702a877b8375ddb7abf952b55b1904148c662147de236 +size 500 diff --git a/assets/shaded_diamond_red.png b/assets/shaded_diamond_red.png index 132f33b..e0796cc 100644 --- a/assets/shaded_diamond_red.png +++ b/assets/shaded_diamond_red.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6bad0cb96cab3d470b8bd9d770cb3a565e9f7e1e1144906b874962b81a0b3da7 -size 683 +oid sha256:cf9e65b32f81e8bf7a219d95910f798f00e28454ffca58494dbcbccf5d4f2392 +size 500 diff --git a/assets/shaded_squiggle_green.png b/assets/shaded_squiggle_green.png index 4c1a36b..0f3a961 100644 --- a/assets/shaded_squiggle_green.png +++ b/assets/shaded_squiggle_green.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d3d93b39df971b039447198fbd031d435295b64026e7cc352e4f272ea11f7bf3 -size 759 +oid sha256:9cf08cfda0fbd1e3323246ca60e872e9ecf10e721b06083e68e1f1b52ab4b70b +size 545 diff --git a/assets/shaded_squiggle_purple.png b/assets/shaded_squiggle_purple.png index 18e59ab..a8410f7 100644 --- a/assets/shaded_squiggle_purple.png +++ b/assets/shaded_squiggle_purple.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2d3ec1cb30f4c183199e0b919adf0b66f6c75d06cd9858818a4e61531718dd4c -size 759 +oid sha256:ea26f29f8b62d09f587826d677c489a93d2b673f2b6c0c1ab0b7121ca7f2f26d +size 544 diff --git a/assets/shaded_squiggle_red.png b/assets/shaded_squiggle_red.png index c7d6055..a237e45 100644 --- a/assets/shaded_squiggle_red.png +++ b/assets/shaded_squiggle_red.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2f92269240943902bfa5e2ef65edc7da9763a24e8d7a2c6b929517e213f373f4 -size 759 +oid sha256:93c5056012e6a5d37225be4237fdb8bf7dc3a34b52d656bda68181d84749d3bd +size 544 diff --git a/src/debug.rs b/src/debug.rs index 98b493f..b8f2014 100644 --- a/src/debug.rs +++ b/src/debug.rs @@ -1,10 +1,73 @@ use bevy::prelude::*; +use crate::deck::Card; + /// Debugging systems pub struct DebugPlugin; impl Plugin for DebugPlugin { - fn build(&self, _app: &mut App) { - // Nothing yet! + fn build(&self, app: &mut App) { + app.add_observer(track_card_info) + .add_systems(Startup, init_ui); } } + +#[derive(Component)] +pub(crate) struct DebugText; + +fn init_ui(mut commands: Commands) { + commands + .spawn(( + Sprite::from_color(Color::BLACK.with_alpha(0.9), [100.0, 100.0].into()), + DebugText, + Visibility::Hidden, + Transform::default().with_translation(Vec3::new(0.0, 0.0, 1.0)), + PickingBehavior::IGNORE, + )) + .with_children(|parent| { + parent.spawn(( + Text2d("...".to_string()), + DebugText, + Transform::default().with_translation(Vec3::new(0.0, 0.0, 2.0)), + PickingBehavior::IGNORE, + )); + }); +} + +fn track_card_info( + trigger: Trigger>, + mut transforms: Query<&mut Transform, (With, With)>, + window: Query<&Window>, +) { + let p = trigger.pointer_location.position; + transforms.iter_mut().for_each(|mut t| { + let offset = window.single().resolution.size() / 2.0; + let pos = p - offset + Vec2::new(-50.0, 50.0); + t.translation.x = pos.x; + t.translation.y = -pos.y; + }); +} + +pub(crate) fn set_debug_card( + trigger: Trigger>, + cards: Query<&Card>, + mut vis: Query<&mut Visibility, With>, + mut debug_text: Query<&mut Text2d, With>, +) { + let card = cards.get(trigger.entity()).unwrap(); + debug_text.iter_mut().for_each(|mut text| { + text.0 = format!("{}", card); + }); + vis.iter_mut().for_each(|mut v| { + *v = Visibility::Inherited; + }); +} + +pub(crate) fn hide_debug_card( + _trigger: Trigger>, + mut vis: Query<&mut Visibility, With>, +) { + vis.iter_mut().for_each(|mut v| { + *v = Visibility::Hidden; + }); +} diff --git a/src/deck.rs b/src/deck.rs index d36bf9c..d14b230 100644 --- a/src/deck.rs +++ b/src/deck.rs @@ -81,12 +81,23 @@ impl Card { ItemNumber::Two => 1, ItemNumber::Three => 2, }; - let layout = TextureAtlasLayout::from_grid(UVec2 { x: 20, y: 32 }, 3, 1, None, None); + let size = UVec2 { x: 20, y: 32 }; + let layout = TextureAtlasLayout::from_grid(size, 3, 1, None, None); (fname, layout, num) } } +impl std::fmt::Display for Card { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + write!( + f, + "{}\n{}\n{}\n{}", + self.number, self.pattern, self.color, self.shape + ) + } +} + /// Item colors for the card may be red, green or purple /// All items must be the same color #[derive(PartialEq, Eq, Hash, Clone, Copy, Debug)] @@ -96,6 +107,17 @@ pub(crate) enum ItemColor { Purple, } +impl std::fmt::Display for ItemColor { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + let color = match self { + ItemColor::Red => "red", + ItemColor::Green => "green", + ItemColor::Purple => "purple", + }; + write!(f, "{}", color) + } +} + /// A card may have 1 to 3 items #[derive(PartialEq, Eq, Hash, Clone, Copy, Debug)] pub(crate) enum ItemNumber { @@ -104,6 +126,17 @@ pub(crate) enum ItemNumber { Three, } +impl std::fmt::Display for ItemNumber { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + let num = match self { + ItemNumber::One => 1, + ItemNumber::Two => 2, + ItemNumber::Three => 3, + }; + write!(f, "{}", num) + } +} + /// Each item can be solid, striped, or open /// a card has all of it's item as one pattern #[derive(PartialEq, Eq, Hash, Clone, Copy, Debug)] @@ -113,6 +146,17 @@ pub(crate) enum ItemPattern { Open, } +impl std::fmt::Display for ItemPattern { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + let fill = match self { + ItemPattern::Open => "empty", + ItemPattern::Striped => "shaded", + ItemPattern::Solid => "solid", + }; + write!(f, "{}", fill) + } +} + /// Each item can be an oval, diamond, or squiggle /// All items on a card are one shape #[derive(PartialEq, Eq, Hash, Clone, Copy, Debug)] @@ -121,3 +165,14 @@ pub(crate) enum ItemShape { Diamond, Squiggle, } + +impl std::fmt::Display for ItemShape { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + let shape = match self { + ItemShape::Oval => "oval", + ItemShape::Diamond => "diamond", + ItemShape::Squiggle => "squiggle", + }; + write!(f, "{}", shape) + } +} diff --git a/src/main.rs b/src/main.rs index f8887da..2966f55 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,10 +11,10 @@ fn main() { .add_plugins(DefaultPlugins.set(ImagePlugin::default_nearest())) .add_plugins(( deck::DeckPlugin, - debug::DebugPlugin, boot::BootPlugin, setup::SetupPlugin, play::PlayPlugin, + debug::DebugPlugin, )) .init_state::() .run(); diff --git a/src/play.rs b/src/play.rs index d486c5c..56922c7 100644 --- a/src/play.rs +++ b/src/play.rs @@ -1,9 +1,18 @@ use bevy::prelude::*; +use crate::deck::Card; + pub struct PlayPlugin; impl Plugin for PlayPlugin { - fn build(&self, _app: &mut App) { - // Nothing yet! + fn build(&self, app: &mut App) { + app.add_systems(Update, rotate_cards); } } + +fn rotate_cards(mut query: Query<&mut Transform, With>, time: Res