diff options
author | metamuffin <metamuffin@disroot.org> | 2022-10-17 22:57:16 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2022-10-17 22:57:16 +0200 |
commit | ac18ff17a98236ace91ce7fd17e24a4756f3afdd (patch) | |
tree | 698d718202ee6eed7190bac0a0f20fc60aaaa8ab /src/tiling.rs | |
parent | 3baa2e9cb8f00be594fb90a74acc9972e3477c72 (diff) | |
download | trash-map-master.tar trash-map-master.tar.bz2 trash-map-master.tar.zst |
Diffstat (limited to 'src/tiling.rs')
-rw-r--r-- | src/tiling.rs | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/src/tiling.rs b/src/tiling.rs index 8ab7fc3..9a58ebd 100644 --- a/src/tiling.rs +++ b/src/tiling.rs @@ -1,4 +1,8 @@ -use std::{fs::File, io::Read}; +use std::{ + fs::File, + io::Read, + path::{Path, PathBuf}, +}; use log::info; @@ -10,16 +14,30 @@ pub struct Tiler { impl Tiler { pub fn new(renderer: Renderer) -> Self { + std::fs::create_dir_all("tiles").unwrap(); Self { renderer } } - pub fn get_tile(&self, z: isize, x: isize, y: isize) -> Vec<u8> { + pub fn path(z: isize, x: isize, y: isize) -> PathBuf { + Path::new(&format!("tiles/{},{},{}.png", z, x, y)).to_path_buf() + } + + pub fn generate_tile(&self, z: isize, x: isize, y: isize) { info!("generating tile (zoom={z}, x={x}, y={z})"); let segment = self.renderer.render_segment(x, y); - segment - .save(format!("tiles/{},{},{}.png", z, x, y)) - .unwrap(); + segment.save(Tiler::path(z, x, y)).unwrap(); + } - let mut f = File::open(format!("tiles/{},{},{}.png", z, x, y)).unwrap(); + pub fn update_tile(&self, z: isize, x: isize, y: isize) { + // TODO check mtime of region + if Tiler::path(z, x, y).exists() { + return; // already generated + } + self.generate_tile(z, x, y) + } + + pub fn get_tile(&self, z: isize, x: isize, y: isize) -> Vec<u8> { + self.update_tile(z, x, y); + let mut f = File::open(Tiler::path(z, x, y)).unwrap(); let mut buf = Vec::new(); f.read_to_end(&mut buf).unwrap(); buf |