-
Notifications
You must be signed in to change notification settings - Fork 22
/
common.go
61 lines (57 loc) · 1.55 KB
/
common.go
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
package main
import (
"github.com/zond/godip"
"github.com/zond/godip/state"
"github.com/zond/godip/variants/classical"
"github.com/zond/godip/variants/common"
)
type Phase struct {
Season godip.Season
Year int
Type godip.PhaseType
Units map[godip.Province]godip.Unit
Orders map[godip.Nation]map[godip.Province][]string
SupplyCenters map[godip.Province]godip.Nation
Dislodgeds map[godip.Province]godip.Unit
Dislodgers map[godip.Province]godip.Province
Bounces map[godip.Province]map[godip.Province]bool
Resolutions map[godip.Province]string
}
func NewPhase(state *state.State) *Phase {
currentPhase := state.Phase()
p := &Phase{
Orders: map[godip.Nation]map[godip.Province][]string{},
Resolutions: map[godip.Province]string{},
Season: currentPhase.Season(),
Year: currentPhase.Year(),
Type: currentPhase.Type(),
}
var resolutions map[godip.Province]error
p.Units, p.SupplyCenters, p.Dislodgeds, p.Dislodgers, p.Bounces, resolutions = state.Dump()
for prov, err := range resolutions {
if err == nil {
p.Resolutions[prov] = "OK"
} else {
p.Resolutions[prov] = err.Error()
}
}
return p
}
func (self *Phase) State(variant common.Variant) (*state.State, error) {
parsedOrders, err := classical.Parser.ParseAll(self.Orders)
if err != nil {
return nil, err
}
return classical.Blank(variant.Phase(
self.Year,
self.Season,
self.Type,
)).Load(
self.Units,
self.SupplyCenters,
self.Dislodgeds,
self.Dislodgers,
self.Bounces,
parsedOrders,
), nil
}