generated map is now scalable
This commit is contained in:
parent
b5421f3c70
commit
a749d8e0ba
|
@ -3,9 +3,12 @@ package generator
|
|||
import (
|
||||
"fmt"
|
||||
"image"
|
||||
"image/draw"
|
||||
"image/png"
|
||||
"io"
|
||||
|
||||
"github.com/nfnt/resize"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/tribalwarshelp/shared/models"
|
||||
)
|
||||
|
@ -31,6 +34,9 @@ type Config struct {
|
|||
BackgroundColor string
|
||||
GridLineColor string
|
||||
ContinentNumberColor string
|
||||
Scale float32
|
||||
CenterX int
|
||||
CenterY int
|
||||
}
|
||||
|
||||
func (cfg *Config) init() {
|
||||
|
@ -46,6 +52,18 @@ func (cfg *Config) init() {
|
|||
if cfg.MapSize <= 0 {
|
||||
cfg.MapSize = defaultMapSize
|
||||
}
|
||||
if cfg.Scale <= 0 {
|
||||
cfg.Scale = 1
|
||||
}
|
||||
if cfg.CenterX <= 0 {
|
||||
cfg.CenterX = cfg.MapSize / 2
|
||||
}
|
||||
if cfg.CenterY <= 0 {
|
||||
cfg.CenterY = cfg.MapSize / 2
|
||||
}
|
||||
|
||||
cfg.CenterX = int(float32(cfg.CenterX) * cfg.Scale)
|
||||
cfg.CenterY = int(float32(cfg.CenterY) * cfg.Scale)
|
||||
}
|
||||
|
||||
func Generate(cfg Config) error {
|
||||
|
@ -53,6 +71,9 @@ func Generate(cfg Config) error {
|
|||
upLeft := image.Point{0, 0}
|
||||
lowRight := image.Point{cfg.MapSize, cfg.MapSize}
|
||||
img := image.NewRGBA(image.Rectangle{upLeft, lowRight})
|
||||
mapSizeDividedBy10 := cfg.MapSize / 10
|
||||
imgHalfWidth := cfg.MapSize / 2
|
||||
imgHalfHeight := imgHalfWidth
|
||||
|
||||
backgroundColor, err := parseHexColorFast(cfg.BackgroundColor)
|
||||
if err != nil {
|
||||
|
@ -83,12 +104,12 @@ func Generate(cfg Config) error {
|
|||
if err != nil {
|
||||
return errors.Wrap(err, "map-generator")
|
||||
}
|
||||
for y := cfg.MapSize / 10; y < cfg.MapSize; y += cfg.MapSize / 10 {
|
||||
for y := mapSizeDividedBy10; y < cfg.MapSize; y += mapSizeDividedBy10 {
|
||||
for x := 0; x < cfg.MapSize; x++ {
|
||||
img.Set(x, y, gridLineColor)
|
||||
}
|
||||
}
|
||||
for x := cfg.MapSize / 10; x < cfg.MapSize; x += cfg.MapSize / 10 {
|
||||
for x := mapSizeDividedBy10; x < cfg.MapSize; x += mapSizeDividedBy10 {
|
||||
for y := 0; y < cfg.MapSize; y++ {
|
||||
img.Set(x, y, gridLineColor)
|
||||
}
|
||||
|
@ -101,8 +122,8 @@ func Generate(cfg Config) error {
|
|||
if err != nil {
|
||||
return errors.Wrap(err, "map-generator")
|
||||
}
|
||||
for y := cfg.MapSize / 10; y <= cfg.MapSize; y += cfg.MapSize / 10 {
|
||||
for x := cfg.MapSize / 10; x <= cfg.MapSize; x += cfg.MapSize / 10 {
|
||||
for y := mapSizeDividedBy10; y <= cfg.MapSize; y += mapSizeDividedBy10 {
|
||||
for x := mapSizeDividedBy10; x <= cfg.MapSize; x += mapSizeDividedBy10 {
|
||||
continentStr := fmt.Sprintf("%d", continent)
|
||||
if continent < 10 {
|
||||
continentStr = fmt.Sprintf("0%d", continent)
|
||||
|
@ -113,7 +134,20 @@ func Generate(cfg Config) error {
|
|||
}
|
||||
}
|
||||
|
||||
if err := png.Encode(cfg.Destination, img); err != nil {
|
||||
var resizedImg image.Image = img
|
||||
if cfg.Scale != 1 {
|
||||
width := uint(float32(cfg.MapSize) * cfg.Scale)
|
||||
resizedImg = resize.Resize(width, width, img, resize.Lanczos3)
|
||||
}
|
||||
|
||||
b := resizedImg.Bounds()
|
||||
centered := image.NewRGBA(image.Rectangle{upLeft, lowRight})
|
||||
draw.Draw(centered, b, resizedImg, image.Point{
|
||||
X: cfg.CenterX - imgHalfWidth,
|
||||
Y: cfg.CenterY - imgHalfHeight,
|
||||
}, draw.Src)
|
||||
|
||||
if err := png.Encode(cfg.Destination, centered); err != nil {
|
||||
return errors.Wrap(err, "map-generator")
|
||||
}
|
||||
return nil
|
||||
|
|
1
go.mod
1
go.mod
|
@ -3,6 +3,7 @@ module github.com/tribalwarshelp/map-generator
|
|||
go 1.14
|
||||
|
||||
require (
|
||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
|
||||
github.com/pkg/errors v0.9.1
|
||||
github.com/tribalwarshelp/shared v0.0.0-20200622084436-3a768c8bf574
|
||||
golang.org/x/image v0.0.0-20200618115811-c13761719519
|
||||
|
|
2
go.sum
2
go.sum
|
@ -1,3 +1,5 @@
|
|||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
|
||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
|
||||
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=
|
||||
|
|
Reference in New Issue