mirror of
https://github.com/slint-ui/slint.git
synced 2025-08-04 10:50:00 +00:00
66 lines
2.2 KiB
Rust
66 lines
2.2 KiB
Rust
// Copyright © SixtyFPS GmbH <info@slint.dev>
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
use slint::{Model, Timer, VecModel};
|
|
use std::rc::Rc;
|
|
use std::time::Duration;
|
|
|
|
#[cfg(target_arch = "wasm32")]
|
|
use wasm_bindgen::prelude::*;
|
|
|
|
slint::slint! {
|
|
export { MainWindow } from "memory.slint";
|
|
}
|
|
|
|
#[cfg_attr(target_arch = "wasm32", wasm_bindgen(start))]
|
|
pub fn main() {
|
|
// This provides better error messages in debug mode.
|
|
// It's disabled in release mode so it doesn't bloat up the file size.
|
|
#[cfg(all(debug_assertions, target_arch = "wasm32"))]
|
|
console_error_panic_hook::set_once();
|
|
|
|
let main_window = MainWindow::new().unwrap();
|
|
|
|
let mut tiles: Vec<TileData> = main_window.get_memory_tiles().iter().collect();
|
|
tiles.extend(tiles.clone());
|
|
|
|
use rand::seq::SliceRandom;
|
|
let mut rng = rand::thread_rng();
|
|
tiles.shuffle(&mut rng);
|
|
|
|
let tiles_model = Rc::new(VecModel::from(tiles));
|
|
|
|
main_window.set_memory_tiles(tiles_model.clone().into());
|
|
|
|
let main_window_weak = main_window.as_weak();
|
|
|
|
main_window.on_check_if_pair_solved(move || {
|
|
let mut flipped_tiles =
|
|
tiles_model.iter().enumerate().filter(|(_, tile)| tile.image_visible && !tile.solved);
|
|
|
|
if let (Some((t1_idx, mut t1)), Some((t2_idx, mut t2))) =
|
|
(flipped_tiles.next(), flipped_tiles.next())
|
|
{
|
|
let is_pair_solved = t1 == t2;
|
|
if is_pair_solved {
|
|
t1.solved = true;
|
|
tiles_model.set_row_data(t1_idx, t1);
|
|
t2.solved = true;
|
|
tiles_model.set_row_data(t2_idx, t2);
|
|
} else {
|
|
main_window_weak.unwrap().set_disable_tiles(true);
|
|
let main_window_weak = main_window_weak.clone();
|
|
let tiles_model = tiles_model.clone();
|
|
Timer::single_shot(Duration::from_secs(1), move || {
|
|
main_window_weak.unwrap().set_disable_tiles(false);
|
|
t1.image_visible = false;
|
|
tiles_model.set_row_data(t1_idx, t1);
|
|
t2.image_visible = false;
|
|
tiles_model.set_row_data(t2_idx, t2);
|
|
})
|
|
}
|
|
}
|
|
});
|
|
|
|
main_window.run().unwrap();
|
|
}
|