summaryrefslogtreecommitdiffstats
path: root/src/graphics.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/graphics.rs')
-rw-r--r--src/graphics.rs58
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();
}