- bump github.com/tribalwarshelp/map-generator and github.com/tribalwarshelp/shared
- add one new field to the PlayerFilter and VillageFilter server map generator: - make player village color configurable - make barbarian village color configurable - fix issue with missing villages - refactor map_usecase.GetMarkers
This commit is contained in:
parent
def2bc1356
commit
6fc64fadbf
4
go.mod
4
go.mod
|
@ -15,8 +15,8 @@ require (
|
|||
github.com/modern-go/reflect2 v1.0.1 // indirect
|
||||
github.com/pkg/errors v0.9.1
|
||||
github.com/segmentio/encoding v0.1.14 // indirect
|
||||
github.com/tribalwarshelp/map-generator v0.0.0-20200801113621-fb8892ceb243
|
||||
github.com/tribalwarshelp/shared v0.0.0-20201225112152-d1d8bc92fc33
|
||||
github.com/tribalwarshelp/map-generator v0.0.0-20201230155505-86ffb35e095b
|
||||
github.com/tribalwarshelp/shared v0.0.0-20201230135308-316413cf7f53
|
||||
github.com/vektah/gqlparser/v2 v2.1.0
|
||||
go.opentelemetry.io/otel v0.9.0 // indirect
|
||||
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208
|
||||
|
|
8
go.sum
8
go.sum
|
@ -190,12 +190,12 @@ github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd
|
|||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc h1:9lRDQMhESg+zvGYmW5DyG0UqvY96Bu5QYsTLvCHdrgo=
|
||||
github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc/go.mod h1:bciPuU6GHm1iF1pBvUfxfsH0Wmnc2VbpgvbI9ZWuIRs=
|
||||
github.com/tribalwarshelp/map-generator v0.0.0-20200801113621-fb8892ceb243 h1:keKNUTnzglR6bfNiFR7xlXNGrQ4bPG4bgNPq2lv5GBI=
|
||||
github.com/tribalwarshelp/map-generator v0.0.0-20200801113621-fb8892ceb243/go.mod h1:hVGbToOex7CV5+DAV6QfVMx1XDgp30DOoyOapbr+Vj4=
|
||||
github.com/tribalwarshelp/shared v0.0.0-20200622084436-3a768c8bf574 h1:y2EoH6zRK9Uc0AeswnJRYUUIQYcSLZB5VDFuxPCKxNM=
|
||||
github.com/tribalwarshelp/shared v0.0.0-20200622084436-3a768c8bf574/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
|
||||
github.com/tribalwarshelp/map-generator v0.0.0-20201230155505-86ffb35e095b h1:ISOo9/QADwRp+IWEkXF91atkaQhqAvEPF9yVVJnyv70=
|
||||
github.com/tribalwarshelp/map-generator v0.0.0-20201230155505-86ffb35e095b/go.mod h1:LD8bRgTmZn9CA/0Yk4MrleDTJ5OYzvd8uALznvVUslI=
|
||||
github.com/tribalwarshelp/shared v0.0.0-20201225112152-d1d8bc92fc33 h1:ItFd9kzpvO69r3Ta7S8+3OT6Wc56Ga5MEGBYW7DotUE=
|
||||
github.com/tribalwarshelp/shared v0.0.0-20201225112152-d1d8bc92fc33/go.mod h1:Lxk6zaQhPTPrgz9ksMgg51m8XgflrCo/kRBx2cM3yfk=
|
||||
github.com/tribalwarshelp/shared v0.0.0-20201230135308-316413cf7f53 h1:uIkJ6PVqnGHBM5QE0mcsN+3fFv0103DMeUmx2Wzw/E4=
|
||||
github.com/tribalwarshelp/shared v0.0.0-20201230135308-316413cf7f53/go.mod h1:Lxk6zaQhPTPrgz9ksMgg51m8XgflrCo/kRBx2cM3yfk=
|
||||
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
|
||||
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
|
||||
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
|
||||
|
|
|
@ -3795,6 +3795,7 @@ input PlayerFilter {
|
|||
deletedAtLTE: Time
|
||||
|
||||
tribeID: [Int!]
|
||||
tribeIDNEQ: [Int!]
|
||||
tribeFilter: TribeFilter
|
||||
|
||||
offset: Int
|
||||
|
@ -4602,6 +4603,7 @@ input VillageFilter {
|
|||
bonusLTE: Int
|
||||
|
||||
playerID: [Int!]
|
||||
playerIDNEQ: [Int!]
|
||||
playerFilter: PlayerFilter
|
||||
|
||||
offset: Int
|
||||
|
@ -20919,6 +20921,14 @@ func (ec *executionContext) unmarshalInputPlayerFilter(ctx context.Context, obj
|
|||
if err != nil {
|
||||
return it, err
|
||||
}
|
||||
case "tribeIDNEQ":
|
||||
var err error
|
||||
|
||||
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("tribeIDNEQ"))
|
||||
it.TribeIdNEQ, err = ec.unmarshalOInt2ᚕintᚄ(ctx, v)
|
||||
if err != nil {
|
||||
return it, err
|
||||
}
|
||||
case "tribeFilter":
|
||||
var err error
|
||||
|
||||
|
@ -22459,6 +22469,14 @@ func (ec *executionContext) unmarshalInputVillageFilter(ctx context.Context, obj
|
|||
if err != nil {
|
||||
return it, err
|
||||
}
|
||||
case "playerIDNEQ":
|
||||
var err error
|
||||
|
||||
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("playerIDNEQ"))
|
||||
it.PlayerIdNEQ, err = ec.unmarshalOInt2ᚕintᚄ(ctx, v)
|
||||
if err != nil {
|
||||
return it, err
|
||||
}
|
||||
case "playerFilter":
|
||||
var err error
|
||||
|
||||
|
|
|
@ -134,6 +134,7 @@ input PlayerFilter {
|
|||
deletedAtLTE: Time
|
||||
|
||||
tribeID: [Int!]
|
||||
tribeIDNEQ: [Int!]
|
||||
tribeFilter: TribeFilter
|
||||
|
||||
offset: Int
|
||||
|
|
|
@ -45,6 +45,7 @@ input VillageFilter {
|
|||
bonusLTE: Int
|
||||
|
||||
playerID: [Int!]
|
||||
playerIDNEQ: [Int!]
|
||||
playerFilter: PlayerFilter
|
||||
|
||||
offset: Int
|
||||
|
|
|
@ -60,6 +60,8 @@ func (h *handler) mapHandler(c *gin.Context) {
|
|||
ShowBarbarianVillages: showBarbarian == "true" || showBarbarian == "1",
|
||||
LargerMarkers: largerMarkers == "true" || largerMarkers == "1",
|
||||
ShowOtherPlayerVillages: !(markersOnly == "true" || markersOnly == "1"),
|
||||
PlayerVillageColor: c.Query("playerVillageColor"),
|
||||
BarbarianVillageColor: c.Query("barbarianVillageColor"),
|
||||
})
|
||||
if err != nil {
|
||||
c.JSON(http.StatusBadRequest, &gqlerror.Error{
|
||||
|
|
|
@ -13,6 +13,8 @@ type GetMarkersConfig struct {
|
|||
ShowBarbarianVillages bool
|
||||
ShowOtherPlayerVillages bool
|
||||
LargerMarkers bool
|
||||
PlayerVillageColor string
|
||||
BarbarianVillageColor string
|
||||
}
|
||||
|
||||
type Usecase interface {
|
||||
|
|
|
@ -17,8 +17,8 @@ import (
|
|||
)
|
||||
|
||||
const (
|
||||
defaultBarbarianVillagesColor = "#808080"
|
||||
defaultPlayerVillagesColor = "#FF0000"
|
||||
defaultBarbarianVillageColor = "#808080"
|
||||
defaultPlayerVillageColor = "#FF0000"
|
||||
)
|
||||
|
||||
type usecase struct {
|
||||
|
@ -30,7 +30,6 @@ func New(villageRepo village.Repository) servermap.Usecase {
|
|||
}
|
||||
|
||||
func (ucase *usecase) GetMarkers(ctx context.Context, cfg servermap.GetMarkersConfig) ([]*generator.Marker, error) {
|
||||
var mutex sync.Mutex
|
||||
g := new(errgroup.Group)
|
||||
|
||||
tribes := make(map[string][]int)
|
||||
|
@ -67,18 +66,20 @@ func (ucase *usecase) GetMarkers(ctx context.Context, cfg servermap.GetMarkersCo
|
|||
players[color] = append(players[color], id)
|
||||
}
|
||||
|
||||
markers := []*generator.Marker{}
|
||||
|
||||
otherMarkers := []*generator.Marker{}
|
||||
var otherMarkersMutex sync.Mutex
|
||||
if cfg.ShowOtherPlayerVillages {
|
||||
color := cfg.PlayerVillageColor
|
||||
if color == "" {
|
||||
color = defaultPlayerVillageColor
|
||||
}
|
||||
g.Go(func() error {
|
||||
villages, _, err := ucase.villageRepo.Fetch(ctx, village.FetchConfig{
|
||||
Server: cfg.Server,
|
||||
Filter: &models.VillageFilter{
|
||||
PlayerFilter: &models.PlayerFilter{
|
||||
IdNEQ: append(playerIDs, 0),
|
||||
TribeFilter: &models.TribeFilter{
|
||||
IdNEQ: tribeIDs,
|
||||
},
|
||||
IdNEQ: append(playerIDs, 0),
|
||||
TribeIdNEQ: tribeIDs,
|
||||
},
|
||||
},
|
||||
Columns: []string{"x", "y"},
|
||||
|
@ -87,17 +88,20 @@ func (ucase *usecase) GetMarkers(ctx context.Context, cfg servermap.GetMarkersCo
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
mutex.Lock()
|
||||
markers = append(markers, &generator.Marker{
|
||||
otherMarkersMutex.Lock()
|
||||
otherMarkers = append(otherMarkers, &generator.Marker{
|
||||
Villages: villages,
|
||||
Color: defaultPlayerVillagesColor,
|
||||
Color: color,
|
||||
})
|
||||
mutex.Unlock()
|
||||
otherMarkersMutex.Unlock()
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
if cfg.ShowBarbarianVillages {
|
||||
color := cfg.BarbarianVillageColor
|
||||
if color == "" {
|
||||
color = defaultBarbarianVillageColor
|
||||
}
|
||||
g.Go(func() error {
|
||||
villages, _, err := ucase.villageRepo.Fetch(ctx, village.FetchConfig{
|
||||
Server: cfg.Server,
|
||||
|
@ -110,16 +114,18 @@ func (ucase *usecase) GetMarkers(ctx context.Context, cfg servermap.GetMarkersCo
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
mutex.Lock()
|
||||
markers = append(markers, &generator.Marker{
|
||||
otherMarkersMutex.Lock()
|
||||
otherMarkers = append(otherMarkers, &generator.Marker{
|
||||
Villages: villages,
|
||||
Color: defaultBarbarianVillagesColor,
|
||||
Color: color,
|
||||
})
|
||||
mutex.Unlock()
|
||||
otherMarkersMutex.Unlock()
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
tribeMarkers := []*generator.Marker{}
|
||||
var tribeMarkersMutex sync.Mutex
|
||||
for color, tribeIDs := range tribes {
|
||||
c := color
|
||||
ids := tribeIDs
|
||||
|
@ -138,17 +144,19 @@ func (ucase *usecase) GetMarkers(ctx context.Context, cfg servermap.GetMarkersCo
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
mutex.Lock()
|
||||
markers = append(markers, &generator.Marker{
|
||||
tribeMarkersMutex.Lock()
|
||||
tribeMarkers = append(tribeMarkers, &generator.Marker{
|
||||
Villages: villages,
|
||||
Color: c,
|
||||
Larger: cfg.LargerMarkers,
|
||||
})
|
||||
mutex.Unlock()
|
||||
tribeMarkersMutex.Unlock()
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
playerMarkers := []*generator.Marker{}
|
||||
var playerMarkersMutex sync.Mutex
|
||||
for color, playerIDs := range players {
|
||||
c := color
|
||||
ids := playerIDs
|
||||
|
@ -164,22 +172,38 @@ func (ucase *usecase) GetMarkers(ctx context.Context, cfg servermap.GetMarkersCo
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
mutex.Lock()
|
||||
markers = append(markers, &generator.Marker{
|
||||
playerMarkersMutex.Lock()
|
||||
playerMarkers = append(playerMarkers, &generator.Marker{
|
||||
Villages: villages,
|
||||
Color: c,
|
||||
Larger: cfg.LargerMarkers,
|
||||
})
|
||||
mutex.Unlock()
|
||||
playerMarkersMutex.Unlock()
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
err := g.Wait()
|
||||
sort.SliceStable(markers, func(i, j int) bool {
|
||||
return markers[i].Color < markers[j].Color
|
||||
sort.SliceStable(playerMarkers, func(i, j int) bool {
|
||||
return len(playerMarkers[i].Villages) < len(playerMarkers[j].Villages)
|
||||
})
|
||||
return markers, err
|
||||
sort.SliceStable(tribeMarkers, func(i, j int) bool {
|
||||
return len(tribeMarkers[i].Villages) < len(tribeMarkers[j].Villages)
|
||||
})
|
||||
return concatMarkers(otherMarkers, tribeMarkers, playerMarkers), err
|
||||
}
|
||||
|
||||
func concatMarkers(slices ...[]*generator.Marker) []*generator.Marker {
|
||||
var totalLen int
|
||||
for _, s := range slices {
|
||||
totalLen += len(s)
|
||||
}
|
||||
tmp := make([]*generator.Marker, totalLen)
|
||||
var i int
|
||||
for _, s := range slices {
|
||||
i += copy(tmp[i:], s)
|
||||
}
|
||||
return tmp
|
||||
}
|
||||
|
||||
func parseMarker(str string) (int, string, error) {
|
||||
|
|
Reference in New Issue