diff --git a/js/pathfinding.js b/js/pathfinding.js index 6947e0c..43a5521 100644 --- a/js/pathfinding.js +++ b/js/pathfinding.js @@ -80,7 +80,18 @@ class Cache { */ getCacheLayer(token) { const tokenData = buildTokenData(token); - const cacheId = JSON.stringify(tokenData); + // TODO Request this from the speed providers so they can set their own options + let terrainData = canvas.terrain.listTerrain({token}); + terrainData = terrainData.map(data => { + return { + x: data.object.x, + y: data.object.y, + cost: data.cost, + shape: data.shape, + }; + }); + const cacheIdData = {tokenData, terrainData}; + const cacheId = GridlessPathfinding.sha1(JSON.stringify(cacheIdData)); let cacheLayer = this.layers.get(cacheId); // If we don't already have a cache layer for this cache ID, create one now if (!cacheLayer) { diff --git a/rust/Cargo.lock b/rust/Cargo.lock index c0676ea..1a86120 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -2,6 +2,15 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "block-buffer" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" +dependencies = [ + "generic-array", +] + [[package]] name = "bumpalo" version = "3.9.1" @@ -24,6 +33,45 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "cpufeatures" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "generic-array" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "gridless-pathfinding" version = "1.12.8" @@ -31,6 +79,7 @@ dependencies = [ "console_error_panic_hook", "js-sys", "rustc-hash", + "sha1", "wasm-bindgen", ] @@ -49,6 +98,12 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +[[package]] +name = "libc" +version = "0.2.125" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5916d2ae698f6de9bfb891ad7a8d65c09d232dc58cc4ac433c7da3b2fd84bc2b" + [[package]] name = "log" version = "0.4.14" @@ -82,6 +137,17 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "sha1" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c77f4e7f65455545c2153c1253d25056825e77ee2533f0e41deb65a93a34852f" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "syn" version = "1.0.86" @@ -93,12 +159,24 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "typenum" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" + [[package]] name = "unicode-xid" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + [[package]] name = "wasm-bindgen" version = "0.2.79" diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 226a9b6..02b8521 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -16,4 +16,5 @@ lto = true console_error_panic_hook = "0.1.7" js-sys = "0.3.56" rustc-hash = "1.1.0" +sha1 = "0.10.1" wasm-bindgen = "0.2.79" diff --git a/rust/src/js_api.rs b/rust/src/js_api.rs index c90a532..d2fbc8c 100644 --- a/rust/src/js_api.rs +++ b/rust/src/js_api.rs @@ -1,4 +1,5 @@ use js_sys::Array; +use sha1::{Sha1, Digest}; use wasm_bindgen::prelude::*; use crate::{ @@ -262,6 +263,14 @@ pub fn debug_get_pathfinding_points(pathfinder: &Pathfinder) -> Array { .collect() } +#[allow(dead_code)] +#[wasm_bindgen] +pub fn sha1(input: &str) -> String { + let mut hasher = Sha1::new(); + hasher.update(input); + format!("{:x}", hasher.finalize()) +} + trait IteratePath { fn iter_path(&self) -> PathIterator; }