summaryrefslogtreecommitdiff
path: root/src/room.rs
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2020-02-23 01:18:17 +0100
committertroido <troido@protonmail.com>2020-02-23 01:18:17 +0100
commit7262cfc53b4af978d6db1b91e3143200f906587f (patch)
treef6aa651a3040a1389a9c4e82796f1c04b3c5198c /src/room.rs
parent522aad7889cd62e96af7c420789507ccbf5b7aaa (diff)
rooms have named locations to be used by portals
Diffstat (limited to 'src/room.rs')
-rw-r--r--src/room.rs19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/room.rs b/src/room.rs
index 2d48363..dd5c736 100644
--- a/src/room.rs
+++ b/src/room.rs
@@ -46,7 +46,7 @@ use crate::encyclopedia::Encyclopedia;
use crate::roomtemplate::RoomTemplate;
use crate::savestate::SaveState;
use crate::template::Template;
-use crate::playerstate::PlayerState;
+use crate::playerstate::{PlayerState, RoomPos};
use crate::{Pos, PlayerId, RoomId, aerr};
use crate::util::Result;
@@ -55,7 +55,8 @@ use crate::util::Result;
pub struct Room<'a, 'b> {
world: World,
dispatcher: Dispatcher<'a, 'b>,
- pub id: RoomId
+ pub id: RoomId,
+ places: HashMap<String, Pos>
}
impl <'a, 'b>Room<'a, 'b> {
@@ -86,7 +87,8 @@ impl <'a, 'b>Room<'a, 'b> {
Room {
world,
dispatcher,
- id
+ id,
+ places: HashMap::new()
}
}
@@ -106,6 +108,9 @@ impl <'a, 'b>Room<'a, 'b> {
let _ = self.create_entity(template.clone().unsaved(), Pos{x, y});
}
}
+ for (name, place) in &template.places {
+ self.places.insert(name.clone(), *place);
+ }
}
@@ -131,7 +136,11 @@ impl <'a, 'b>Room<'a, 'b> {
pub fn add_player(&mut self, state: &PlayerState){
let pre_player = state.construct(&self.world.fetch::<NewEntities>().encyclopedia);
- let spawn = self.world.fetch::<Spawn>().pos;
+ let spawn = match &state.pos {
+ RoomPos::Unknown => self.world.fetch::<Spawn>().pos,
+ RoomPos::Pos(pos) => *pos,
+ RoomPos::Name(name) => *self.places.get(name).unwrap()
+ };
let mut builder = self.world.create_entity();
let ent = builder.entity;
for comp in pre_player {
@@ -207,7 +216,7 @@ impl <'a, 'b>Room<'a, 'b> {
Ok(())
}
- pub fn emigrate(&mut self) -> Vec<(PlayerId, RoomId)> {
+ pub fn emigrate(&mut self) -> Vec<(PlayerId, RoomId, RoomPos)> {
let emigrants = self.world.remove::<Emigration>().expect("World does not have Emigrating resource").emigrants;
self.world.insert(Emigration::default());
emigrants