diff options
| -rw-r--r-- | go/game/card.go | 2 | ||||
| -rw-r--r-- | go/game/cardImplementations.go | 10 | ||||
| -rw-r--r-- | go/game/cardParsing.go | 7 | ||||
| -rw-r--r-- | go/game/state.go | 2 |
4 files changed, 21 insertions, 0 deletions
diff --git a/go/game/card.go b/go/game/card.go index 81464cce..b1d913a8 100644 --- a/go/game/card.go +++ b/go/game/card.go @@ -76,6 +76,7 @@ type cardImplementation interface { fullActions(*Unit) []*FullAction freeActions(Permanent) []*FreeAction + onPlay(*State, *Player, *Targets) onPile(Permanent) onUnpile(Permanent) onDrop(Permanent) @@ -90,6 +91,7 @@ type cardImplementationBase struct{} func (*cardImplementationBase) spawnTiles(*State, *Player) []*Tile { return nil } func (*cardImplementationBase) fullActions(*Unit) []*FullAction { return nil } func (*cardImplementationBase) freeActions(Permanent) []*FreeAction { return nil } +func (*cardImplementationBase) onPlay(*State, *Player, *Targets) {} func (*cardImplementationBase) onPile(Permanent) {} func (*cardImplementationBase) onUnpile(Permanent) {} func (*cardImplementationBase) onDrop(Permanent) {} diff --git a/go/game/cardImplementations.go b/go/game/cardImplementations.go index 99994a41..271c88ea 100644 --- a/go/game/cardImplementations.go +++ b/go/game/cardImplementations.go @@ -62,6 +62,14 @@ func (*swordImplementation) onUnpile(p Permanent) { } } +type tidesChangeImplementation struct { + cardImplementation +} + +func (*tidesChangeImplementation) onPlay(s *State, _ *Player, _ *Targets) { + s.Map.redistributeStoreCards(s.Rand) +} + func init() { cardImplementations = map[string]cardImplementation{ "base/advisor": &advisorImplementation{}, @@ -69,5 +77,7 @@ func init() { "base/sword": &swordImplementation{}, "misc/farmer": &farmerImplementation{}, + + "kraken/tides_change!": &tidesChangeImplementation{}, } } diff --git a/go/game/cardParsing.go b/go/game/cardParsing.go index dd64c7b8..9fcb48aa 100644 --- a/go/game/cardParsing.go +++ b/go/game/cardParsing.go @@ -12,6 +12,7 @@ type parsedCardImplementation struct { spawnTilesFunc func(*State, *Player) []*Tile genFullActions func(*Unit) []*FullAction genFreeActions func(Permanent) []*FreeAction + _onPlay func(*State, *Player, *Targets) _onPile func(Permanent) _onUnpile func(Permanent) _onDrop func(Permanent) @@ -38,6 +39,12 @@ func (impl *parsedCardImplementation) freeActions(p Permanent) []*FreeAction { return nil } +func (impl *parsedCardImplementation) onPlay(s *State, p *Player, t *Targets) { + if impl._onPlay != nil { + impl._onPlay(s, p, t) + } +} + func (impl *parsedCardImplementation) onPile(p Permanent) { if impl._onPile != nil { impl._onPile(p) diff --git a/go/game/state.go b/go/game/state.go index 744f0b11..87e2133a 100644 --- a/go/game/state.go +++ b/go/game/state.go @@ -381,6 +381,8 @@ func (s *State) resolvePlay(p *Player, c *Card, targets *Targets) { case CardTypes.Artifact: tile := targets.sel[0].(*Tile) s.AddNewArtifact(c, tile.Position, p) + case CardTypes.Spell: + c.Impl.onPlay(s, p, targets) default: log.Printf("Resolving unhandled card type: %s\n", c.Type.String()) } |
