package engine import ( "sakura/engine/pool" ) type Vigour int type VigorAction struct { *BaseAction Name string From func(p *Player) *pool.Pool `json:"-"` To func(p *Player) *pool.Pool `json:"-"` } func (v *VigorAction) Then(g *Game) { v.From(v.Actor(g)).Add(-1) v.To(v.Actor(g)).Add(1) v.Actor(g).Vigour -= 1 } func (v *VigorAction) Can(p *Player) bool { return p.Vigour > 0 && v.From(p).Has(1) && v.To(p).Fits(1) } func VigorActions(g *Game, p *Player) []Action { var acs []Action for _, a := range Actions { if a.Can(p) { acs = append(acs, a) } } return acs } var Actions = []*VigorAction{ { Name: "Approach", BaseAction: &BaseAction{ User: nil, BaseSource: nil, Description: "Move a sakura from Distance to Aura", }, From: func(p *Player) *pool.Pool { return p.Game.Distance }, To: func(p *Player) *pool.Pool { return p.Aura }, }, { Name: "Retreat", BaseAction: &BaseAction{ User: nil, BaseSource: nil, Description: "Move a sakura from Aura to Distance", }, From: func(p *Player) *pool.Pool { return p.Aura }, To: func(p *Player) *pool.Pool { return p.Game.Distance }, }, { Name: "Charge", BaseAction: &BaseAction{ User: nil, BaseSource: nil, Description: "Move a sakura from your Aura to Flare", }, From: func(p *Player) *pool.Pool { return p.Aura }, To: func(p *Player) *pool.Pool { return p.Flare }, }, { Name: "Charge", BaseAction: &BaseAction{ User: nil, BaseSource: nil, Description: "Move a sakura from Aura to Flare", }, From: func(p *Player) *pool.Pool { return p.Game.Shadow }, To: func(p *Player) *pool.Pool { return p.Aura }, }, }