-
Notifications
You must be signed in to change notification settings - Fork 11
/
query.go
115 lines (98 loc) · 2.77 KB
/
query.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
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package botutil
import (
"github.com/chippydip/go-sc2ai/api"
"github.com/chippydip/go-sc2ai/client"
)
// Query ...
type Query struct {
info client.AgentInfo
request api.RequestQuery
}
// NewQuery ...
func NewQuery(info client.AgentInfo) Query {
return Query{info: info}
}
// IgnoreResourceRequirements ...
func (q *Query) IgnoreResourceRequirements() {
q.request.IgnoreResourceRequirements = true
}
// PathingFrom ...
func (q *Query) PathingFrom(start, end api.Point2D) int {
q.request.Pathing = append(q.request.Pathing, &api.RequestQueryPathing{
Start: &api.RequestQueryPathing_StartPos{
StartPos: &start,
},
EndPos: &end,
})
return len(q.request.Pathing) - 1
}
// UnitPathing ...
func (q *Query) UnitPathing(tag api.UnitTag, end api.Point2D) int {
q.request.Pathing = append(q.request.Pathing, &api.RequestQueryPathing{
Start: &api.RequestQueryPathing_UnitTag{
UnitTag: tag,
},
EndPos: &end,
})
return len(q.request.Pathing) - 1
}
// UnitAbilities ...
func (q *Query) UnitAbilities(tag api.UnitTag) int {
q.request.Abilities = append(q.request.Abilities, &api.RequestQueryAvailableAbilities{
UnitTag: tag,
})
return len(q.request.Abilities) - 1
}
// Placement ...
func (q *Query) Placement(ability api.AbilityID, pos api.Point2D) int {
q.request.Placements = append(q.request.Placements, &api.RequestQueryBuildingPlacement{
AbilityId: ability,
TargetPos: &pos,
})
return len(q.request.Placements) - 1
}
// PlacementWithUnit ...
func (q *Query) PlacementWithUnit(tag api.UnitTag, ability api.AbilityID, pos api.Point2D) int {
q.request.Placements = append(q.request.Placements, &api.RequestQueryBuildingPlacement{
AbilityId: ability,
TargetPos: &pos,
PlacingUnitTag: tag,
})
return len(q.request.Placements) - 1
}
// Execute runs the query and returns the result
func (q *Query) Execute() QueryResult {
return QueryResult{
request: q.request,
response: q.info.Query(q.request),
}
}
// QueryResult ...
type QueryResult struct {
request api.RequestQuery
response *api.ResponseQuery
}
// Pathing ...
func (q QueryResult) Pathing() []*api.ResponseQueryPathing {
return q.response.GetPathing()
}
// PathingQuery ...
func (q QueryResult) PathingQuery(i int) *api.RequestQueryPathing {
return q.request.Pathing[i]
}
// Abilities ...
func (q QueryResult) Abilities() []*api.ResponseQueryAvailableAbilities {
return q.response.GetAbilities()
}
// AbilitiesQuery ...
func (q QueryResult) AbilitiesQuery(i int) *api.RequestQueryAvailableAbilities {
return q.request.Abilities[i]
}
// Placements ...
func (q QueryResult) Placements() []*api.ResponseQueryBuildingPlacement {
return q.response.GetPlacements()
}
// PlacementQuery ...
func (q QueryResult) PlacementQuery(i int) *api.RequestQueryBuildingPlacement {
return q.request.Placements[i]
}