aboutsummaryrefslogtreecommitdiff
path: root/go/game/cardImplementations.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/game/cardImplementations.go')
-rw-r--r--go/game/cardImplementations.go56
1 files changed, 56 insertions, 0 deletions
diff --git a/go/game/cardImplementations.go b/go/game/cardImplementations.go
new file mode 100644
index 00000000..8024e4fc
--- /dev/null
+++ b/go/game/cardImplementations.go
@@ -0,0 +1,56 @@
+package game
+
+type farmerImplementation struct {
+ cardImplementationBase
+}
+
+type advisorImplementation struct {
+ cardImplementationBase
+}
+
+func (impl *advisorImplementation) fullAction(u *Unit) []*FullAction {
+ resolvePrototype := func(a Action) ActionResolveFunc {
+ u := a.Source().(*Unit)
+ return func(s *State) {
+ controller := u.Controller()
+ controller.DrawN(1)
+ cards := controller.PromptHandCardSelection(0, 1)
+ if cards != nil {
+ controller.Deck.MoveCard(cards[0], s.Exile)
+ }
+ }
+ }
+ return []*FullAction{NewFullAction(u, resolvePrototype, "draw 1. exile 1")}
+}
+
+type missionaryImplementation struct {
+ cardImplementationBase
+}
+
+func (impl *missionaryImplementation) fullAction(u *Unit) []*FullAction {
+ resolvePrototype := func(a Action) ActionResolveFunc {
+ u := a.Source().(*Unit)
+ target := a.Targets().sel[0].(*Unit)
+ return func(s *State) {
+ faith, found := target.States[UnitMarks.Faith]
+ if !found {
+ target.States[UnitMarks.Faith] = 2
+ } else {
+ target.States[UnitMarks.Faith] = faith + 2
+ if faith+2 > target.Card().BuyCost {
+ target.controller = u.Controller()
+ }
+ }
+ }
+ }
+ return []*FullAction{NewFullAction(u, resolvePrototype, "put faith ...")}
+}
+
+func init() {
+ cardImplementations = map[string]cardImplementation{
+ "base/advisor": &advisorImplementation{},
+ "base/missionary": &missionaryImplementation{},
+
+ "misc/farmer": &farmerImplementation{},
+ }
+}