This commit is contained in:
Dawid Wysokiński 2020-06-22 14:09:39 +02:00
commit 791e7fb506
4 changed files with 127 additions and 0 deletions

68
generator/generator.go Normal file
View File

@ -0,0 +1,68 @@
package generator
import (
"image"
"image/color"
"image/png"
"io"
"github.com/pkg/errors"
"github.com/tribalwarshelp/shared/models"
)
type Marker struct {
Villages []*models.Village
Color string
}
type Config struct {
Markers []*Marker
Destination io.Writer
MapSize int
}
func Generate(cfg Config) error {
upLeft := image.Point{0, 0}
lowRight := image.Point{cfg.MapSize, cfg.MapSize}
img := image.NewRGBA(image.Rectangle{upLeft, lowRight})
backgroundColor, err := parseHexColorFast("#69380e")
if err != nil {
return err
}
// Background.
for y := 0; y < cfg.MapSize; y++ {
for x := 0; x < cfg.MapSize; x++ {
img.Set(x, y, backgroundColor)
}
}
// Markers
for _, marker := range cfg.Markers {
parsedColor, err := parseHexColorFast(marker.Color)
if err != nil {
return err
}
for _, village := range marker.Villages {
img.Set(village.X, village.Y, parsedColor)
}
}
//Continents
for y := cfg.MapSize / 10; y < cfg.MapSize; y += cfg.MapSize / 10 {
for x := 0; x < cfg.MapSize; x++ {
img.Set(x, y, color.Black)
}
}
for x := cfg.MapSize / 10; x < cfg.MapSize; x += cfg.MapSize / 10 {
for y := 0; y < cfg.MapSize; y++ {
img.Set(x, y, color.Black)
}
}
if err := png.Encode(cfg.Destination, img); err != nil {
return errors.Wrap(err, "map-generator")
}
return nil
}

47
generator/helpers.go Normal file
View File

@ -0,0 +1,47 @@
package generator
import (
"fmt"
"image/color"
)
var (
errInvalidFormat = fmt.Errorf("invalid format")
)
func parseHexColorFast(s string) (color.RGBA, error) {
var err error
c := color.RGBA{}
c.A = 0xff
if s[0] != '#' {
return c, errInvalidFormat
}
hexToByte := func(b byte) byte {
switch {
case b >= '0' && b <= '9':
return b - '0'
case b >= 'a' && b <= 'f':
return b - 'a' + 10
case b >= 'A' && b <= 'F':
return b - 'A' + 10
}
err = errInvalidFormat
return 0
}
switch len(s) {
case 7:
c.R = hexToByte(s[1])<<4 + hexToByte(s[2])
c.G = hexToByte(s[3])<<4 + hexToByte(s[4])
c.B = hexToByte(s[5])<<4 + hexToByte(s[6])
case 4:
c.R = hexToByte(s[1]) * 17
c.G = hexToByte(s[2]) * 17
c.B = hexToByte(s[3]) * 17
default:
err = errInvalidFormat
}
return c, err
}

8
go.mod Normal file
View File

@ -0,0 +1,8 @@
module github.com/tribalwarshelp/map-generator
go 1.14
require (
github.com/pkg/errors v0.9.1 // indirect
github.com/tribalwarshelp/shared v0.0.0-20200622084436-3a768c8bf574 // indirect
)

4
go.sum Normal file
View File

@ -0,0 +1,4 @@
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
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=