1use 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}