From f65f6d65d7b440e715379bfbc9b5d4a6933dc65c Mon Sep 17 00:00:00 2001 From: bvanvugt <1531419+bvanvugt@users.noreply.github.com> Date: Fri, 2 Jul 2021 20:36:37 -0700 Subject: [PATCH] CLI: No longer send /move requests to eliminated snakes. --- cli/commands/play.go | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/cli/commands/play.go b/cli/commands/play.go index 3ab7241..5b110c2 100644 --- a/cli/commands/play.go +++ b/cli/commands/play.go @@ -14,6 +14,7 @@ import ( "net/url" "path" "strconv" + "sync" "time" ) @@ -249,15 +250,30 @@ func createNextBoardState(ruleset rules.Ruleset, state *rules.BoardState, outOfB var moves []rules.SnakeMove if Sequential { for _, snake := range snakes { - moves = append(moves, getMoveForSnake(ruleset, state, snake, outOfBounds)) + for _, stateSnake := range state.Snakes { + if snake.ID == stateSnake.ID && stateSnake.EliminatedCause == rules.NotEliminated { + moves = append(moves, getMoveForSnake(ruleset, state, snake, outOfBounds)) + } + } } } else { + var wg sync.WaitGroup c := make(chan rules.SnakeMove, len(snakes)) + for _, snake := range snakes { - go getConcurrentMoveForSnake(ruleset, state, snake, outOfBounds, c) + for _, stateSnake := range state.Snakes { + if snake.ID == stateSnake.ID && stateSnake.EliminatedCause == rules.NotEliminated { + wg.Add(1) + go getConcurrentMoveForSnake(&wg, ruleset, state, snake, outOfBounds, c) + } + } } - for range snakes { - moves = append(moves, <-c) + + wg.Wait() + close(c) + + for move := range c { + moves = append(moves, move) } } for _, move := range moves { @@ -273,7 +289,8 @@ func createNextBoardState(ruleset rules.Ruleset, state *rules.BoardState, outOfB return state } -func getConcurrentMoveForSnake(ruleset rules.Ruleset, state *rules.BoardState, snake Battlesnake, outOfBounds []rules.Point, c chan rules.SnakeMove) { +func getConcurrentMoveForSnake(wg *sync.WaitGroup, ruleset rules.Ruleset, state *rules.BoardState, snake Battlesnake, outOfBounds []rules.Point, c chan rules.SnakeMove) { + defer wg.Done() c <- getMoveForSnake(ruleset, state, snake, outOfBounds) }