screeps_pathfinding/utils/cache/
terrain_cache_struct.rs1use std::collections::HashMap;
2
3use screeps::{LocalRoomTerrain, RoomName};
4
5#[derive(Debug, Clone)]
9pub struct TerrainCache {
10 cache: HashMap<RoomName, LocalRoomTerrain>,
11}
12
13impl Default for TerrainCache {
14 fn default() -> Self {
15 Self::new()
16 }
17}
18
19impl TerrainCache {
20 pub fn new() -> Self {
22 Self {
23 cache: HashMap::new(),
24 }
25 }
26
27 pub fn get_cached_terrain(&self, room_name: &RoomName) -> Option<&LocalRoomTerrain> {
31 self.cache.get(room_name)
32 }
33
34 pub fn is_terrain_cached(&self, room_name: &RoomName) -> bool {
36 self.cache.contains_key(room_name)
37 }
38
39 pub fn get_terrain(&mut self, room_name: &RoomName) -> Option<&LocalRoomTerrain> {
45 if !self.is_terrain_cached(room_name) {
46 let js_terrain_opt = screeps::objects::RoomTerrain::new(*room_name);
48 if let Some(js_terrain) = js_terrain_opt {
49 let local_terrain = screeps::local::LocalRoomTerrain::from(js_terrain);
50 let _ = self.cache.insert(*room_name, local_terrain);
51 }
52 }
53
54 self.get_cached_terrain(room_name)
55 }
56
57 pub fn update_cached_terrain(&mut self, room_name: RoomName, local_terrain: LocalRoomTerrain) {
62 let _ = self.cache.insert(room_name, local_terrain);
63 }
64
65 pub fn remove_cached_terrain(&mut self, room_name: &RoomName) {
67 self.cache.remove(room_name);
68 }
69}