From: Ian Jackson Date: Fri, 31 Jul 2020 23:14:15 +0000 (+0100) Subject: removeplayer X-Git-Tag: otter-0.2.0~1208 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=650c5ea1f9e4e33d1ddaa4d5d66430bea9cd7c5f;p=otter.git removeplayer --- diff --git a/src/cmdlistener.rs b/src/cmdlistener.rs index 5ce15a63..629c5ce2 100644 --- a/src/cmdlistener.rs +++ b/src/cmdlistener.rs @@ -352,7 +352,7 @@ fn execute_for_game(cs: &CommandStream, ig: &mut InstanceGuard, let mut results = Vec::with_capacity(insns.len()); let ok = (||{ for insn in insns.drain(0..) { - let (upieces, ulogs, resp) = execute_game_insn(&mut ig.gs, insn)?; + let (upieces, ulogs, resp) = execute_game_insn(ig, insn)?; uh.accumulate(ig, upieces, ulogs)?; results.push(resp); } @@ -371,18 +371,31 @@ const XXX_DEFAULT_POSD : Pos = [5,5]; const CREATE_PIECES_MAX : u32 = 300; #[throws(ME)] -fn execute_game_insn(gs: &mut GameState, update: MgmtGameInstruction) - -> - (Vec<(PieceId,PieceUpdateOp<()>)>, - Vec, - MgmtGameResult, - ) { +fn execute_game_insn(ig: &mut InstanceGuard, update: MgmtGameInstruction) + -> (Vec<(PieceId,PieceUpdateOp<()>)>, + Vec, + MgmtGameResult) { use MgmtGameInstruction::*; use MgmtGameResult::*; match update { Noop { } => (vec![], vec![], Fine { }), + MgmtGameInstruction::AddPlayer(pl) => { + let player = ig.player_new(pl)?; + (vec![], + vec![ LogEntry { + html: format!("The facilitator added a player xxx"), + } ], + MgmtGameResult::AddPlayer { player }) + }, + + RemovePlayer(player) => { + ig.player_remove(player)?; + (vec![], vec![], Fine{}) + }, + AddPiece(PiecesSpec{ pos,posd,count,face,info }) => { + let gs = &mut ig.gs; let count = count.unwrap_or(1); if count > CREATE_PIECES_MAX { throw!(LimitExceeded) } let posd = posd.unwrap_or(XXX_DEFAULT_POSD); diff --git a/src/commands.rs b/src/commands.rs index 409faf03..d34f29b8 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -17,6 +17,8 @@ pub enum MgmtCommand { pub enum MgmtGameInstruction { Noop { }, AddPiece(PiecesSpec), + AddPlayer(PlayerState), + RemovePlayer(PlayerId), } #[derive(Debug,Serialize,Deserialize)]