diff options
Diffstat (limited to 'go/game/kraken.go')
| -rw-r--r-- | go/game/kraken.go | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/go/game/kraken.go b/go/game/kraken.go index baf9a07b..d92d204b 100644 --- a/go/game/kraken.go +++ b/go/game/kraken.go @@ -56,10 +56,15 @@ type KrakenControl struct { actions chan Action syncGameState *sync.WaitGroup turn int + activeSuprise bool } func addKrakenControl(kraken *Player) { - ctrl := &KrakenControl{kraken, make(chan Action), new(sync.WaitGroup), 0} + ctrl := &KrakenControl{ + kraken: kraken, + actions: make(chan Action), + syncGameState: new(sync.WaitGroup), + } kraken.Ctrl = ctrl ctrl.syncGameState.Add(1) @@ -80,6 +85,8 @@ func (ctrl *KrakenControl) krakenTurn() { s := ctrl.kraken.gameState kraken := ctrl.kraken + ctrl.activeSuprise = false + ctrl.awaitGameStateSync() ctrl.turn++ if ctrl.turn != kraken.Turn { @@ -124,6 +131,10 @@ turn: ctrl.actions <- a ctrl.awaitGameStateSync() + + if c.IsPermanent() && ctrl.activeSuprise { + ctrl.activeSuprise = false + } } for _, u := range s.OwnUnits(kraken) { @@ -173,7 +184,16 @@ func (s *State) FindKraken() *Player { } func (s *State) KrakenSpawnTiles() []*Tile { - return s.Map.FilterTiles(func(t *Tile) bool { - return strings.Contains(t.Raw, "deep water spawn") - }) + kraken := s.FindKraken() + if !kraken.Ctrl.(*KrakenControl).activeSuprise { + return s.Map.FilterTiles(func(t *Tile) bool { + return strings.Contains(t.Raw, "deep water spawn") + }) + } + + spawns := []*Tile{} + for _, u := range s.EnemyUnits(kraken) { + spawns = append(spawns, TilesInRange(s.Map, u, 1)...) + } + return spawns } |
