aboutsummaryrefslogtreecommitdiff
path: root/go/game
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2024-12-26 18:48:32 +0100
committerFlorian Fischer <florian.fischer@muhq.space>2025-08-20 15:57:11 +0200
commit65451383dcd1754c558379abf6e36d4cba5eee4a (patch)
tree18b5d6627e14a5fd8add50f93ef1d84230cb24d6 /go/game
parent18053f830f4674277cd80c09f72250810478da7e (diff)
downloadmuhqs-game-65451383dcd1754c558379abf6e36d4cba5eee4a.tar.gz
muhqs-game-65451383dcd1754c558379abf6e36d4cba5eee4a.zip
add helper to get the game state from an action
Diffstat (limited to 'go/game')
-rw-r--r--go/game/action.go9
1 files changed, 6 insertions, 3 deletions
diff --git a/go/game/action.go b/go/game/action.go
index b460a27a..30bad0b1 100644
--- a/go/game/action.go
+++ b/go/game/action.go
@@ -14,6 +14,7 @@ type (
type Action interface {
Source() interface{}
Controller() *Player
+ GameState() *State
Targets() *Targets
Target() *Target // Shortcut for to select the first target
@@ -28,6 +29,7 @@ type PassPriority struct{ player *Player }
func (a *PassPriority) Source() interface{} { return a.player }
func (a *PassPriority) Controller() *Player { return a.player }
+func (a *PassPriority) GameState() *State { return a.player.gameState }
func (*PassPriority) Targets() *Targets { return nil }
func (*PassPriority) Target() *Target { return nil }
func (*PassPriority) NeedsActionCostChoice() bool { return false }
@@ -44,6 +46,7 @@ type TargetSelection struct {
func (sel *TargetSelection) Source() interface{} { return sel.player }
func (sel *TargetSelection) Controller() *Player { return sel.player }
+func (sel *TargetSelection) GameState() *State { return sel.player.gameState }
func (sel *TargetSelection) Targets() *Targets { return sel.targets }
func (sel *TargetSelection) Target() *Target { return sel.targets.ts[0] }
func (*TargetSelection) NeedsActionCostChoice() bool { return false }
@@ -82,10 +85,9 @@ func (a *ActionBase) Controller() *Player {
log.Panicf("Unhandled source type %v", t)
return nil
}
-
- return nil
}
-func (a *ActionBase) resolve(s *State) { a.resolveFunc(s) }
+func (a *ActionBase) GameState() *State { return a.Controller().gameState }
+func (a *ActionBase) resolve(s *State) { a.resolveFunc(s) }
func (a *ActionBase) PayCosts(s *State) bool {
if a.costFunc != nil {
return a.costFunc(s)
@@ -131,6 +133,7 @@ type DeclareTriggeredActionsAction struct {
func (sel *DeclareTriggeredActionsAction) Source() interface{} { return nil }
func (sel *DeclareTriggeredActionsAction) Controller() *Player { return nil }
+func (sel *DeclareTriggeredActionsAction) GameState() *State { return nil }
func (sel *DeclareTriggeredActionsAction) Targets() *Targets { return nil }
func (sel *DeclareTriggeredActionsAction) Target() *Target { return nil }
func (*DeclareTriggeredActionsAction) NeedsActionCostChoice() bool { return false }