aboutsummaryrefslogtreecommitdiff
path: root/go/game/kraken.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/game/kraken.go')
-rw-r--r--go/game/kraken.go28
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
}