summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-02-21 19:43:43 +0100
committertroido <troido@protonmail.com>2020-02-21 19:43:43 +0100
commit1f85c11d0ebb0a879b7825b8e78e473a77d8b778 (patch)
treea1d4d274bd107bddefa425fdf255cbdc123cd904 /src
parent4ed2d71e76f04c75a214e43363dc1b64e109fe3d (diff)
sprites are not strings anymore
Diffstat (limited to 'src')
-rw-r--r--src/components.rs4
-rw-r--r--src/componentwrapper.rs4
-rw-r--r--src/main.rs2
-rw-r--r--src/playerstate.rs5
-rw-r--r--src/sprite.rs16
-rw-r--r--src/systems/view.rs12
-rw-r--r--src/worldmessages.rs9
7 files changed, 36 insertions, 16 deletions
diff --git a/src/components.rs b/src/components.rs
index 60b32d6..2adddaa 100644
--- a/src/components.rs
+++ b/src/components.rs
@@ -7,7 +7,7 @@ use specs::{
Component
};
-use crate::{Pos, PlayerId, RoomId};
+use crate::{Pos, PlayerId, RoomId, Sprite};
use crate::controls::Control;
use crate::template::Template;
@@ -28,7 +28,7 @@ impl Component for Position {
#[derive(Debug, Clone)]
pub struct Visible {
- pub sprite: String,
+ pub sprite: Sprite,
pub height: f64
}
impl Component for Visible {
diff --git a/src/componentwrapper.rs b/src/componentwrapper.rs
index 9e98332..8ee4e0b 100644
--- a/src/componentwrapper.rs
+++ b/src/componentwrapper.rs
@@ -2,7 +2,7 @@
use std::collections::HashMap;
use specs::Builder;
-use crate::{PlayerId, RoomId};
+use crate::{PlayerId, RoomId, Sprite};
use crate::components::{Visible, Blocking, Player, Floor, Item, Inventory, Health, Serialise, RoomExit};
use crate::parameter::{Parameter, ParameterType};
@@ -86,7 +86,7 @@ macro_rules! components {
components!(
Visible (sprite: String, height: Float) {
Visible {
- sprite,
+ sprite: Sprite{name: sprite},
height
}
};
diff --git a/src/main.rs b/src/main.rs
index 6da6d57..b0ffb77 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -30,11 +30,13 @@ mod roomid;
mod persistence;
mod worldloader;
mod world;
+mod sprite;
pub use self::pos::Pos;
pub use self::playerid::PlayerId;
pub use self::roomid::RoomId;
pub use self::util::Result;
+pub use self::sprite::Sprite;
use self::gameserver::GameServer;
use self::server::unixserver::UnixServer;
diff --git a/src/playerstate.rs b/src/playerstate.rs
index f167d36..2103f22 100644
--- a/src/playerstate.rs
+++ b/src/playerstate.rs
@@ -8,7 +8,8 @@ use crate::{
RoomId,
components::{Visible, Player, Inventory, Health, Item},
Result,
- aerr
+ aerr,
+ Sprite
};
#[derive(Debug, Clone)]
@@ -86,7 +87,7 @@ impl PlayerState {
pub fn construct(&self) -> PreEntity {
vec![
- ComponentWrapper::Visible(Visible{sprite: "player".to_string(), height: 1.0}),
+ ComponentWrapper::Visible(Visible{sprite: Sprite{name: "player".to_string()}, height: 1.0}),
ComponentWrapper::Player(Player::new(self.id.clone())),
ComponentWrapper::Inventory(Inventory{
items: self.inventory.iter().map(
diff --git a/src/sprite.rs b/src/sprite.rs
new file mode 100644
index 0000000..d6f40ca
--- /dev/null
+++ b/src/sprite.rs
@@ -0,0 +1,16 @@
+
+use serde::{Serialize, Serializer};
+
+#[derive(Debug, Clone, PartialEq)]
+pub struct Sprite {
+ pub name: String
+}
+
+impl Serialize for Sprite {
+ fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
+ where
+ S: Serializer,
+ {
+ serializer.serialize_str(self.name.as_str())
+ }
+}
diff --git a/src/systems/view.rs b/src/systems/view.rs
index c452b2f..f82ae0a 100644
--- a/src/systems/view.rs
+++ b/src/systems/view.rs
@@ -11,7 +11,7 @@ use specs::{
Entity
};
-use crate::Pos;
+use crate::{Pos, Sprite};
use crate::components::{Visible, Player, Position, Inventory, New, Moved, Removed, Health};
use crate::resources::{Size, Output, Ground};
use crate::worldmessages::{WorldMessage, WorldUpdate, FieldMessage};
@@ -51,7 +51,7 @@ impl <'a> System<'a> for View {
let has_changed: bool = !changed.is_empty();
- let mut changes: Vec<(Pos, Vec<String>)> = Vec::new();
+ let mut changes: Vec<(Pos, Vec<Sprite>)> = Vec::new();
for pos in changed {
changes.push((pos, cell_sprites(ground.cells.get(&pos).unwrap_or(&HashSet::new()), &visible)));
}
@@ -87,20 +87,20 @@ impl <'a> System<'a> for View {
}
}
-fn cell_sprites(entities: &HashSet<Entity>, visible: &ReadStorage<Visible>) -> Vec<String> {
+fn cell_sprites(entities: &HashSet<Entity>, visible: &ReadStorage<Visible>) -> Vec<Sprite> {
let mut visibles: Vec<&Visible> = entities.iter().filter_map(|ent| visible.get(*ent)).collect();
visibles.sort_by(|a, b| b.height.partial_cmp(&a.height).unwrap());
visibles.iter().map(|vis| vis.sprite.clone()).collect()
}
-fn draw_room(ground: &HashMap<Pos, HashSet<Entity>>, (width, height): (i64, i64), visible: &ReadStorage<Visible>) -> (Vec<usize>, Vec<Vec<String>>){
+fn draw_room(ground: &HashMap<Pos, HashSet<Entity>>, (width, height): (i64, i64), visible: &ReadStorage<Visible>) -> (Vec<usize>, Vec<Vec<Sprite>>){
let size = width * height;
let mut values :Vec<usize> = Vec::with_capacity(size as usize);
- let mut mapping: Vec<Vec<String>> = Vec::new();
+ let mut mapping: Vec<Vec<Sprite>> = Vec::new();
for y in 0..height {
for x in 0..width {
- let sprites: Vec<String> = match ground.get(&Pos{x, y}) {
+ let sprites: Vec<Sprite> = match ground.get(&Pos{x, y}) {
Some(ents) => {cell_sprites(ents, visible)}
None => {vec![]}
};
diff --git a/src/worldmessages.rs b/src/worldmessages.rs
index 39eee6a..2e80763 100644
--- a/src/worldmessages.rs
+++ b/src/worldmessages.rs
@@ -1,8 +1,9 @@
use serde_json::{Value, json};
use serde::Serialize;
-use super::util::ToJson;
-use super::pos::Pos;
+use crate::util::ToJson;
+use crate::{Pos, Sprite};
+
#[derive(Debug, Clone)]
pub struct WorldMessage {
@@ -20,7 +21,7 @@ impl ToJson for WorldMessage {
pub enum WorldUpdate {
Field(FieldMessage),
Pos(Pos),
- Change(Vec<(Pos, Vec<String>)>),
+ Change(Vec<(Pos, Vec<Sprite>)>),
Inventory(Vec<String>),
Health(i64, i64)
}
@@ -42,7 +43,7 @@ pub struct FieldMessage {
pub width: i64,
pub height: i64,
pub field: Vec<usize>,
- pub mapping: Vec<Vec<String>>
+ pub mapping: Vec<Vec<Sprite>>
}