diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2023-02-05 23:14:52 +0100 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-08-20 15:46:40 +0200 |
| commit | 4db8db0e847552077be9ebd9177ddc573c2b51d4 (patch) | |
| tree | 545cec81ab1ff844a73a53577b1a9378ce1c1c0f /go/game | |
| parent | e3e6955b60c909b6e84a233b547d08912a61a2ac (diff) | |
| download | muhqs-game-4db8db0e847552077be9ebd9177ddc573c2b51d4.tar.gz muhqs-game-4db8db0e847552077be9ebd9177ddc573c2b51d4.zip | |
add simple spell support
Diffstat (limited to 'go/game')
| -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()) } |
