diff options
author | Nao Pross <naopross@thearcway.org> | 2018-12-17 04:45:02 +0100 |
---|---|---|
committer | Nao Pross <naopross@thearcway.org> | 2018-12-17 04:45:02 +0100 |
commit | 5a3a9a55eb3cdd816a97a9e6452ed1eed07b94cf (patch) | |
tree | 51d2c032b3a6b4b2dc9d05d4a16512c69bf7c553 /src/graphics.rs | |
parent | Add demo map (diff) | |
download | Subconscious-rs-5a3a9a55eb3cdd816a97a9e6452ed1eed07b94cf.tar.gz Subconscious-rs-5a3a9a55eb3cdd816a97a9e6452ed1eed07b94cf.zip |
Load tilesets from assets
Diffstat (limited to '')
-rw-r--r-- | src/graphics.rs | 58 |
1 files changed, 56 insertions, 2 deletions
diff --git a/src/graphics.rs b/src/graphics.rs index 003f182..deff94e 100644 --- a/src/graphics.rs +++ b/src/graphics.rs @@ -1,5 +1,6 @@ extern crate sfml; +use std::collections::HashMap; use sfml::window::{ ContextSettings, Event, @@ -9,9 +10,17 @@ use sfml::window::{ 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; @@ -34,8 +43,53 @@ pub fn start() -> RenderWindow { return window; } -pub fn render(window: &mut RenderWindow) { - window.clear(&Color::BLACK); +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<u32, Texture> = 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(); } |