summaryrefslogtreecommitdiff
path: root/engine/vigour.go
blob: ca95fd97045c5777825814a9a3f7be2a8c3a271d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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
		},
	},
}