use std::collections::HashMap; use sfml::window::{ ContextSettings, Event, Style, }; use sfml::graphics::{ RenderWindow, RenderTarget, Texture, Color, Rect, }; #[derive(RustEmbed)] #[folder = "res"] pub struct Assets; pub fn start() -> RenderWindow { let default_window_size = (1280, 720); let default_framerate = 80; let context_settings = ContextSettings { antialiasing_level: 0, ..Default::default() }; let mut window = RenderWindow::new( default_window_size, "Subconscious", Style::CLOSE, &context_settings ); window.set_framerate_limit(default_framerate); window.set_vertical_sync_enabled(true); return window; } pub fn render(window: &mut RenderWindow, state: &crate::game::State) { // background let bgcolor = match state.map.background_colour { Some(color) => Color::rgb(color.red, color.green, color.blue), None => Color::BLACK, }; window.clear(&bgcolor); // load tilesets let mut textures: HashMap = HashMap::new(); for tileset in &state.map.tilesets { let image = &tileset.images[0]; let asset = Assets::get(&image.source); if let Some(asset) = asset { let texture = Texture::from_memory( asset.as_ref(), &Rect { left: 0, top: 0, width: image.width, height: image.height } ); if let Some(texture) = texture { textures.insert(tileset.first_gid, texture); } } } // render map // for each tile for y in 0 .. state.map.height { for x in 0 .. state.map.width { // for each layer for layer in &state.map.layers { state.map.get_tileset_by_gid(layer.tiles[y as usize][x as usize]); } } } window.display(); } pub fn update(window: &mut RenderWindow) { while let Some(ev) = window.poll_event() { match ev { Event::Closed => window.close(), _ => {}, } } }