use std::{env, path}; use ggez::*; use mooeye::scene_manager::SceneManager; // # Setup // This example contains the setup of any mooeye application using the provided SceneManager. // Except for names, loaded fonts and the specific initial scene, you can copy & paste this into the main method of your own projects. /// A setup function that initializes a ggez environment and mooeye scene manager. /// The only reason this isn't the main function is that then it could not be in the top most file. pub fn setup_and_run() -> GameResult{ // Fetch and set resource directory. let resource_dir = if let Ok(manifest_dir) = env::var("CARGO_MANIFEST_DIR") { let mut path = path::PathBuf::from(manifest_dir); path.push("resources"); path } else { path::PathBuf::from("./resources") }; // Generate game context and event loop. let (mut ctx, event_loop): (ggez::context::Context, ggez::event::EventLoop<()>) = ContextBuilder::new("Mooeye Examples", "Linus Mußmächer") .add_resource_path(resource_dir) .window_setup(conf::WindowSetup::default().title("Mooeye Examples")) .window_mode( conf::WindowMode::default() .fullscreen_type(conf::FullscreenType::Windowed) .resizable(true) .dimensions(800., 600.), ) .build()?; // Add fonts from the resource folder. ctx.gfx.add_font( "Bahnschrift", graphics::FontData::from_path(&ctx, "/bahnschrift.ttf")?, ); // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // Everyting above is normal ggez initialization and not specific to mooeye. // Below, we will start our game loop not with event::run as one would normally, but use a SceneManager instead. // Create StartScene. let start_scene = super::g_selector_scene::SelectorScene::new(&ctx)?; // Create Scene Manager and run it immediately. SceneManager::new_and_run(event_loop, ctx, start_scene) }