diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2024-12-27 12:40:19 +0100 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-01-27 16:43:58 +0100 |
| commit | 4e2ab55d345fd5e5c5d2d5bc56948611b15564d5 (patch) | |
| tree | c6998ac54687c442ad0baa541edd0fbf917b1308 /go/game/kraken.go | |
| parent | 5aa8e7ddbc41aed55e7918e6afaec0b5c07fa510 (diff) | |
| download | muhqs-game-4e2ab55d345fd5e5c5d2d5bc56948611b15564d5.tar.gz muhqs-game-4e2ab55d345fd5e5c5d2d5bc56948611b15564d5.zip | |
introduce game.State interface abstraction
This allows to not use the internal game state directly from client
code.
Diffstat (limited to 'go/game/kraken.go')
| -rw-r--r-- | go/game/kraken.go | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/go/game/kraken.go b/go/game/kraken.go index a836cb77..fccaa6df 100644 --- a/go/game/kraken.go +++ b/go/game/kraken.go @@ -1,6 +1,7 @@ package game import ( + "image/color" "log" "strings" "sync" @@ -26,17 +27,17 @@ var KrakenDecklist = `2 kraken/angry_squid 2 kraken/tides_change! 2 kraken/unholy_cannonball` -func NewKraken(id int, s *State) *Player { - kraken := NewPlayer(id, KRAKEN_NAME, NewDeck(), s) +func NewKraken(id int, s *LocalState, color color.Color) *Player { + kraken := NewPlayer(id, KRAKEN_NAME, NewDeck(), s, color) d := NewDeckFromDeckList(KrakenDecklist) d.Shuffle(s.Rand) kraken.Deck = d kraken.DrawPerTurn = 0 - kraken_tile := s.Map.FilterTiles(func(t *Tile) bool { return t.Raw == "the kraken" }) + kraken_tile := s.Map().FilterTiles(func(t *Tile) bool { return t.Raw == "the kraken" }) if len(kraken_tile) != 1 { - log.Fatal("No kraken tile found in Map") + log.Fatal("No kraken tile found in Map()") } s.addPermanent(NewUnitFromPath("kraken/the_kraken", kraken_tile[0], kraken)) @@ -46,9 +47,9 @@ func NewKraken(id int, s *State) *Player { return kraken } -func (s *State) AddKraken() { - kraken := NewKraken(len(s.Players)+1, s) - s.Players = append(s.Players, kraken) +func (s *LocalState) AddKraken(color color.Color) { + kraken := NewKraken(len(s.Players())+1, s, color) + s.players = append(s.players, kraken) } type KrakenControl struct { @@ -70,7 +71,7 @@ func addKrakenControl(kraken *Player) { ctrl.syncGameState.Add(1) go func() { s := kraken.gameState - for len(s.Map.WinCondition(s)) == 0 { + for len(s.Map().WinCondition(s)) == 0 { ctrl.krakenTurn() } }() @@ -112,7 +113,7 @@ func (ctrl *KrakenControl) krakenTurn() { } kraken.Hand.AddCard(c) - var costFunc ActionCostFunc = func(s *State) bool { + var costFunc ActionCostFunc = func(s *LocalState) bool { kraken.Resource -= costs return true } @@ -154,7 +155,7 @@ func (ctrl *KrakenControl) RecvAction() Action { s := ctrl.kraken.gameState kraken := ctrl.kraken if !s.IsActivePlayer(kraken) || - s.ActivePhase != Phases.ActionPhase || !s.Stack.IsEmpty() { + s.activePhase != Phases.ActionPhase || !s.stack.IsEmpty() { return NewPassPriority(ctrl.kraken) } @@ -170,8 +171,8 @@ func (p *Player) IsKraken() bool { return p.Name == KRAKEN_NAME } -func (s *State) FindKraken() *Player { - for _, p := range s.Players { +func (s *LocalState) FindKraken() *Player { + for _, p := range s.Players() { if p.IsKraken() { return p } @@ -179,17 +180,17 @@ func (s *State) FindKraken() *Player { return nil } -func (s *State) KrakenSpawnTiles() []*Tile { +func (s *LocalState) KrakenSpawnTiles() []*Tile { kraken := s.FindKraken() if !kraken.Ctrl.(*KrakenControl).activeSuprise { - return s.Map.FilterTiles(func(t *Tile) bool { + 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)...) + spawns = append(spawns, TilesInRange(s.Map(), u, 1)...) } return spawns } |
