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