1#[macro_use]
2extern crate anyhow;
3#[macro_use]
4extern crate log;
5
6use widgetry::Settings;
7
8mod after_level;
9mod animation;
10mod before_level;
11mod buildings;
12mod controls;
13mod game;
14mod levels;
15mod meters;
16mod music;
17mod player;
18mod session;
19mod title;
20mod vehicles;
21
22type App = map_gui::SimpleApp<session::Session>;
23type Transition = widgetry::Transition<App>;
24
25pub fn main() {
26 let settings = Settings::new("15-minute Santa");
27 run(settings);
28}
29
30fn run(mut settings: Settings) {
31 let mut opts = map_gui::options::Options::load_or_default();
32 opts.color_scheme = map_gui::colors::ColorSchemeChoice::NightMode;
33 settings = settings
36 .read_svg(Box::new(abstio::slurp_bytes))
37 .window_icon(abstio::path("system/assets/pregame/icon.png"))
38 .canvas_settings(opts.canvas_settings.clone());
39 widgetry::run(settings, |ctx| {
40 let session = session::Session::load();
41 session.save();
42
43 let mut start_map = Some(abstio::MapName::seattle("qa"));
46 if cfg!(not(target_arch = "wasm32"))
47 && !abstio::file_exists(start_map.as_ref().unwrap().path())
48 {
49 start_map = None;
50 }
51
52 map_gui::SimpleApp::new(ctx, opts, start_map, None, session, |ctx, app| {
53 if app.opts.dev {
54 app.session.unlock_all();
55 }
56 app.session.music = music::Music::start(ctx, app.session.play_music, "jingle_bells");
57 app.session.music.specify_volume(music::OUT_OF_GAME);
58
59 vec![title::TitleScreen::new_state(ctx, app)]
60 })
61 });
62}
63
64#[cfg(target_arch = "wasm32")]
65use wasm_bindgen::prelude::*;
66
67#[cfg(target_arch = "wasm32")]
68#[wasm_bindgen(js_name = "run")]
69pub fn run_wasm(root_dom_id: String, assets_base_url: String, assets_are_gzipped: bool) {
70 let settings = Settings::new("15-minute Santa")
71 .root_dom_element_id(root_dom_id)
72 .assets_base_url(assets_base_url)
73 .assets_are_gzipped(assets_are_gzipped);
74
75 run(settings);
76}