summaryrefslogtreecommitdiff
path: root/src/json.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/json.rs')
-rw-r--r--src/json.rs67
1 files changed, 36 insertions, 31 deletions
diff --git a/src/json.rs b/src/json.rs
index 1726f9f..fa90e06 100644
--- a/src/json.rs
+++ b/src/json.rs
@@ -1,5 +1,6 @@
use std::fs::File;
use std::io::prelude::*;
+use std::rc::Rc;
use anyhow::Result;
use serde::{Deserialize, Serialize};
@@ -102,37 +103,41 @@ impl JsonState {
GameState {
status: GameStatus::Continue,
players: [self.player.to_player(), self.opponent.to_player()],
- obstacles: self
- .world_map
- .iter()
- .flatten()
- .filter(|cell| {
- cell.surface_object == JsonSurfaceObject::Mud
- || cell.surface_object == JsonSurfaceObject::OilSpill
- })
- .map(|cell| cell.position.to_position())
- .collect(),
- powerup_oils: self
- .world_map
- .iter()
- .flatten()
- .filter(|cell| cell.surface_object == JsonSurfaceObject::OilItem)
- .map(|cell| cell.position.to_position())
- .collect(),
- powerup_boosts: self
- .world_map
- .iter()
- .flatten()
- .filter(|cell| cell.surface_object == JsonSurfaceObject::Boost)
- .map(|cell| cell.position.to_position())
- .collect(),
- finish_lines: self
- .world_map
- .iter()
- .flatten()
- .filter(|cell| cell.surface_object == JsonSurfaceObject::FinishLine)
- .map(|cell| cell.position.to_position())
- .collect(),
+ obstacles: Rc::new(
+ self.world_map
+ .iter()
+ .flatten()
+ .filter(|cell| {
+ cell.surface_object == JsonSurfaceObject::Mud
+ || cell.surface_object == JsonSurfaceObject::OilSpill
+ })
+ .map(|cell| cell.position.to_position())
+ .collect(),
+ ),
+ powerup_oils: Rc::new(
+ self.world_map
+ .iter()
+ .flatten()
+ .filter(|cell| cell.surface_object == JsonSurfaceObject::OilItem)
+ .map(|cell| cell.position.to_position())
+ .collect(),
+ ),
+ powerup_boosts: Rc::new(
+ self.world_map
+ .iter()
+ .flatten()
+ .filter(|cell| cell.surface_object == JsonSurfaceObject::Boost)
+ .map(|cell| cell.position.to_position())
+ .collect(),
+ ),
+ finish_lines: Rc::new(
+ self.world_map
+ .iter()
+ .flatten()
+ .filter(|cell| cell.surface_object == JsonSurfaceObject::FinishLine)
+ .map(|cell| cell.position.to_position())
+ .collect(),
+ ),
}
}
}