diff --git a/src/play.rs b/src/play.rs index b2820b9..2c5b65f 100644 --- a/src/play.rs +++ b/src/play.rs @@ -33,7 +33,7 @@ pub(crate) fn toggle_selected( } } -pub(crate) fn check_set(trigger: Trigger>, query: Query<&Card, With>) { +pub(crate) fn check_set(_trigger: Trigger>, query: Query<&Card, With>) { let mut cards = query.iter(); if cards.len() == 3 { let (a, b, c) = ( @@ -41,7 +41,7 @@ pub(crate) fn check_set(trigger: Trigger>, query: Query<&Card, Wi cards.next().unwrap(), cards.next().unwrap(), ); - _is_set((a, b, c)); + info!("Is set: {}", is_set((a, b, c))); } else if cards.len() > 3 { info!("Too many cards!") } else if cards.len() < 3 { @@ -49,6 +49,22 @@ pub(crate) fn check_set(trigger: Trigger>, query: Query<&Card, Wi } } -fn _is_set((_a, _b, _c): (&Card, &Card, &Card)) -> bool { - todo!() +fn is_set((a, b, c): (&Card, &Card, &Card)) -> bool { + let color = { + ((a.color == b.color) && (b.color == c.color) && (c.color == a.color)) + || ((a.color != b.color) && (b.color != c.color) && (c.color != a.color)) + }; + let number = { + ((a.number == b.number) && (b.number == c.number) && (c.number == a.number)) + || ((a.number != b.number) && (b.number != c.number) && (c.number != a.number)) + }; + let pattern = { + ((a.pattern == b.pattern) && (b.pattern == c.pattern) && (c.pattern == a.pattern)) + || ((a.pattern != b.pattern) && (b.pattern != c.pattern) && (c.pattern != a.pattern)) + }; + let shape = { + ((a.shape == b.shape) && (b.shape == c.shape) && (c.shape == a.shape)) + || ((a.shape != b.shape) && (b.shape != c.shape) && (c.shape != a.shape)) + }; + color && number && pattern && shape }