init
This commit is contained in:
commit
791e7fb506
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
)
|
|
@ -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=
|
Reference in New Issue