Example #1
0
// DeactivatePlayer gets the received player and marks it as inactive
// because the player has left the game. All player's
// assets are returned to its respective origin sets. If the deactivated player was in
// his/her turn, turn passes to the next player.
func (g *Game) DeactivatePlayer(pl interfaces.Player) {
	pl.Deactivate()
	pl.RemoveCash(pl.Cash())
	g.tileset.Add(pl.Tiles())
	for _, corp := range g.Corporations() {
		if pl.Shares(corp) > 0 {
			corp.AddStock(pl.Shares(corp))
			pl.RemoveShares(corp, pl.Shares(corp))
		}
	}
	if len(g.activePlayers()) < 3 {
		g.stateMachine.ToInsufficientPlayers()
		return
	}
	for i := range g.players {
		if g.players[i] == pl && g.currentPlayerNumber == i {
			g.endTurn()
			return
		}
	}
}