- 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:
Dawid Wysokiński 2020-12-30 17:04:40 +01:00
parent def2bc1356
commit 6fc64fadbf
8 changed files with 81 additions and 33 deletions

4
go.mod
View File

@ -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
View File

@ -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=

View File

@ -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

View File

@ -134,6 +134,7 @@ input PlayerFilter {
deletedAtLTE: Time
tribeID: [Int!]
tribeIDNEQ: [Int!]
tribeFilter: TribeFilter
offset: Int

View File

@ -45,6 +45,7 @@ input VillageFilter {
bonusLTE: Int
playerID: [Int!]
playerIDNEQ: [Int!]
playerFilter: PlayerFilter
offset: Int

View File

@ -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{

View File

@ -13,6 +13,8 @@ type GetMarkersConfig struct {
ShowBarbarianVillages bool
ShowOtherPlayerVillages bool
LargerMarkers bool
PlayerVillageColor string
BarbarianVillageColor string
}
type Usecase interface {

View File

@ -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) {