Skip to main content

musi_lili/
run.rs

1// SPDX-FileCopyrightText: 2023 jan Wiwi <vivi-ui@tuta.io>
2// SPDX-License-Identifier: LGPL-3.0-only
3
4use crate::GameData;
5#[cfg(not(feature = "private_api"))]
6use crate::{Game, Lili};
7use tawa_lili::runner;
8
9#[cfg(feature = "private_api")]
10use tawa_lili::editor::LanguagePlugin;
11
12#[cfg(feature = "private_api")]
13pub fn run<G: tan_lili::Game + 'static>(
14    data: GameData,
15    language_plugin: impl LanguagePlugin + Clone + 'static,
16) {
17    use super::slint_ui;
18
19    slint_ui::run_event_loop(runner::create::<G>(data, language_plugin));
20}
21
22#[cfg(not(feature = "private_api"))]
23pub struct GameWrapper<G: Game + 'static> {
24    lili: Lili,
25    game: G,
26}
27
28#[cfg(not(feature = "private_api"))]
29impl<G: Game + 'static> tan_lili::Game for GameWrapper<G> {
30    fn init(lili: &tan_lili::Lili) -> Self {
31        let lili = Lili::new(lili.clone());
32        let game = G::init(&lili);
33
34        Self { lili, game }
35    }
36
37    fn update(&mut self, lili: &tan_lili::Lili) {
38        self.game.update(&self.lili);
39
40        if self.lili.quit_game() {
41            lili.quit();
42        }
43    }
44
45    fn draw(&mut self, _lili: &tan_lili::Lili) {
46        self.game.draw(&self.lili);
47    }
48}
49
50#[cfg(not(feature = "private_api"))]
51pub fn run<G: Game + 'static>(data: GameData) {
52    use super::slint_ui;
53
54    slint_ui::run_event_loop(runner::create::<GameWrapper<G>>(data));
55}