diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2023-02-08 12:03:16 +0100 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-01-27 16:43:48 +0100 |
| commit | a3f7abf2e2aa0a0d65bf36239233b1563eae082b (patch) | |
| tree | 46e5ddffc1e55ff699559980fc6db4f4224f83b0 /go/game/kraken.go | |
| parent | 7c288f65c4e821d9bbb9b8d880f1378d0eaea816 (diff) | |
| download | muhqs-game-a3f7abf2e2aa0a0d65bf36239233b1563eae082b.tar.gz muhqs-game-a3f7abf2e2aa0a0d65bf36239233b1563eae082b.zip | |
kraken: implement suprise!
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 } |
