diff options
| author | troido <troido@protonmail.com> | 2020-02-24 14:39:04 +0100 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2020-02-24 14:39:04 +0100 |
| commit | 481e03e04b055cebaf230b3a3cdce3446418c68c (patch) | |
| tree | 565a2d8afc2fba8d73e310cd1a32b6a94b84039f /src/world.rs | |
| parent | f6a037faa2b675cd7318d6dd8ccee5133c89845d (diff) | |
added volatile wounds
Diffstat (limited to 'src/world.rs')
| -rw-r--r-- | src/world.rs | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/world.rs b/src/world.rs index 40d600a..aed60ff 100644 --- a/src/world.rs +++ b/src/world.rs @@ -57,15 +57,19 @@ impl <'a, 'b>World<'a, 'b> { } fn add_loaded_player(&mut self, state: PlayerState) -> Result<()> { - let roomid = state.clone().room.unwrap_or(self.default_room.clone()); + let roomid = state.clone().room.unwrap_or_else(|| self.default_room.clone()); let room = self.get_room_mut(&roomid)?; room.add_player(&state); - self.players.insert(state.id.clone(), roomid); + self.players.insert(state.id, roomid); Ok(()) } pub fn add_player(&mut self, playerid: &PlayerId) -> Result<()> { - let state = self.persistence.load_player(playerid.clone()).unwrap_or(PlayerState::new(playerid.clone())); + let state = self.persistence + .load_player(playerid.clone()) + .unwrap_or_else(|_err| // todo: what if player exists but can't be loaded for another reason? + PlayerState::new(playerid.clone()) + ); self.add_loaded_player(state) } @@ -84,7 +88,8 @@ impl <'a, 'b>World<'a, 'b> { pub fn control_player(&mut self, player: PlayerId, control: Control) -> Result<()>{ let roomid = self.players.get(&player).ok_or(aerr!("player not found"))?.clone(); - Ok(self.get_room_mut(&roomid)?.control_player(player, control)) + self.get_room_mut(&roomid)?.control_player(player, control); + Ok(()) } fn migrate_player(&mut self, player: &PlayerId, destination: RoomId, roompos: RoomPos) -> Result<()> { |
