use rust_rl::*; use specs::prelude::*; use specs::saveload::{ SimpleMarker, SimpleMarkerAllocator }; use bracket_lib::prelude::*; const DISPLAYWIDTH: i32 = 100; const DISPLAYHEIGHT: i32 = 56; fn main() -> BError { // Embedded resources for use in wasm build { const WORLD_16_16_BYTES: &[u8] = include_bytes!("../resources/world16x16.png"); const CURSES_16_16_BYTES: &[u8] = include_bytes!("../resources/curses16x16.png"); const CURSES_8_16_BYTES: &[u8] = include_bytes!("../resources/curses8x16.png"); const SINGLE_1_1_BYTES: &[u8] = include_bytes!("../resources/healthbar22x2.png"); let mut lock = bracket_lib::terminal::EMBED.lock(); lock.add_resource("resources/world16x16.png".to_string(), WORLD_16_16_BYTES); lock.add_resource("resources/curses16x16.png".to_string(), CURSES_16_16_BYTES); lock.add_resource("resources/curses8x16.png".to_string(), CURSES_8_16_BYTES); lock.add_resource("resources/healthbar22x2.png".to_string(), SINGLE_1_1_BYTES); } let world_sheet = SpriteSheet { filename: "resources/world16x16.png".to_string(), sprites: register_spritesheet(16, 16, 19, 16), backing: None, }; let mut context = BTermBuilder::new() .with_title("rust-rl") .with_dimensions(DISPLAYWIDTH, DISPLAYHEIGHT) .with_font("curses16x16.png", 16, 16) .with_font("curses8x16.png", 8, 16) .with_font("healthbar22x2.png", 1, 1) .with_tile_dimensions(16, 16) .with_gutter(2) .with_sprite_console(DISPLAYWIDTH * 16, DISPLAYHEIGHT * 16, 0) .with_sprite_sheet(world_sheet) .with_simple_console_no_bg(DISPLAYWIDTH, DISPLAYHEIGHT, "curses16x16.png") .with_simple_console_no_bg(DISPLAYWIDTH, DISPLAYHEIGHT, "curses16x16.png") .with_sparse_console(DISPLAYWIDTH * 2, DISPLAYHEIGHT, "curses8x16.png") .with_sparse_console(DISPLAYWIDTH * 16, DISPLAYHEIGHT * 16, "healthbar22x2.png") .build()?; if config::CONFIG.visuals.with_scanlines { context.with_post_scanlines(config::CONFIG.visuals.with_screen_burn); } context.set_active_console(0); for i in 0..16 { for j in 0..19 { context.add_sprite( Rect::with_size(i * 16, j * 16, 16, 16), 0, RGBA::named(WHITE), i + j * 16 ); } } context.set_active_console(1); let mut gs = State { ecs: World::new(), mapgen_next_state: Some(RunState::MainMenu { menu_selection: gui::MainMenuSelection::NewGame, }), mapgen_index: 0, mapgen_history: Vec::new(), mapgen_timer: 0.0, }; gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.register::>(); gs.ecs.register::(); gs.ecs.register::(); gs.ecs.insert(SimpleMarkerAllocator::::new()); raws::load_raws(); // Insert calls gs.ecs.insert(RandomNumberGenerator::new()); gs.ecs.insert(map::MasterDungeonMap::new()); // Master map list gs.ecs.insert(Map::new(true, 1, 64, 64, 0, "New Map", "N", 0)); // Map gs.ecs.insert(Point::new(0, 0)); // Player pos gs.ecs.insert(gui::Ancestry::Human); // ancestry let player_entity = spawner::player(&mut gs.ecs, 0, 0); gs.ecs.insert(player_entity); // Player entity gs.ecs.insert(RunState::MapGeneration {}); // RunState gs.ecs.insert(particle_system::ParticleBuilder::new()); gs.ecs.insert(rex_assets::RexAssets::new()); gamelog::setup_log(); gamelog::record_event(data::events::EVENT::Level(1)); gs.generate_world_map(1, TileType::Floor); main_loop(context, gs) } fn register_spritesheet(width: i32, height: i32, rows: i32, columns: i32) -> Vec { let mut sprites: Vec = Vec::new(); for y in 0..rows { for x in 0..columns { sprites.push( Sprite::new(Rect::with_size(x * width + 1, y * height + 1, width, height)) ); } } sprites }