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{}, } }