Loading app-backend/main.go +3 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ import ( "github.com/taironas/route" "github.com/taironas/tinygraphs/controllers/checkerboard" "github.com/taironas/tinygraphs/controllers/isogrids" "github.com/taironas/tinygraphs/controllers/spaceinvaders" "github.com/taironas/tinygraphs/controllers/squares" ) Loading Loading @@ -40,6 +41,8 @@ func main() { r.HandleFunc("/isogrids/labs/gridbw", isogrids.GridBW) r.HandleFunc("/isogrids/labs/grid2colors", isogrids.Grid2Colors) r.HandleFunc("/spaceinvaders/:key", spaceinvaders.SpaceInvaders) r.AddStaticResource(root) log.Println("Listening on " + os.Getenv("PORT")) Loading controllers/spaceinvaders/spaceinvaders.go 0 → 100644 +51 −0 Original line number Diff line number Diff line package spaceinvaders import ( "crypto/md5" "fmt" "image/color" "io" "log" "net/http" "github.com/taironas/route" "github.com/taironas/tinygraphs/colors" "github.com/taironas/tinygraphs/draw/spaceinvaders" "github.com/taironas/tinygraphs/extract" "github.com/taironas/tinygraphs/write" ) // SpaceInvaders handler for /spaceinvaders/:key func SpaceInvaders(w http.ResponseWriter, r *http.Request) { var err error var key string if key, err = route.Context.Get(r, "key"); err != nil { log.Println("Unable to get 'key' value: ", err) key = "" } h := md5.New() io.WriteString(h, key) key = fmt.Sprintf("%x", h.Sum(nil)[:]) colorMap := colors.MapOfColorThemes() bg, fg := extract.ExtraColors(r, colorMap) theme := extract.Theme(r) numColors := extract.NumColors(r) var colors []color.RGBA if theme != "base" { if _, ok := colorMap[theme]; ok { colors = append(colors, colorMap[theme][0:numColors]...) } else { colors = append(colors, colorMap["base"]...) } } else { colors = append(colors, bg, fg) } size := extract.Size(r) write.ImageSVG(w) spaceinvaders.SpaceInvaders(w, key, colors, size) } draw/spaceinvaders/spaceinvaders.go 0 → 100644 +39 −0 Original line number Diff line number Diff line package spaceinvaders import ( "image/color" "math" "net/http" "github.com/ajstarks/svgo" "github.com/taironas/tinygraphs/draw" ) func SpaceInvaders(w http.ResponseWriter, key string, colors []color.RGBA, size int) { canvas := svg.New(w) canvas.Start(size, size) squares := 6 quadrantSize := size / squares middle := math.Ceil(float64(squares) / float64(2)) colorMap := make(map[int]color.RGBA) for yQ := 0; yQ < squares; yQ++ { y := yQ * quadrantSize colorMap = make(map[int]color.RGBA) for xQ := 0; xQ < squares; xQ++ { x := xQ * quadrantSize if _, ok := colorMap[xQ]; !ok { if float64(xQ) < middle { colorMap[xQ] = draw.PickColor(key, colors, xQ+3*yQ) } else if xQ < squares { colorMap[xQ] = colorMap[squares-xQ-1] } else { colorMap[xQ] = colorMap[0] } } canvas.Rect(x, y, quadrantSize, quadrantSize, draw.FillFromRGBA(colorMap[xQ])) } } canvas.End() } Loading
app-backend/main.go +3 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ import ( "github.com/taironas/route" "github.com/taironas/tinygraphs/controllers/checkerboard" "github.com/taironas/tinygraphs/controllers/isogrids" "github.com/taironas/tinygraphs/controllers/spaceinvaders" "github.com/taironas/tinygraphs/controllers/squares" ) Loading Loading @@ -40,6 +41,8 @@ func main() { r.HandleFunc("/isogrids/labs/gridbw", isogrids.GridBW) r.HandleFunc("/isogrids/labs/grid2colors", isogrids.Grid2Colors) r.HandleFunc("/spaceinvaders/:key", spaceinvaders.SpaceInvaders) r.AddStaticResource(root) log.Println("Listening on " + os.Getenv("PORT")) Loading
controllers/spaceinvaders/spaceinvaders.go 0 → 100644 +51 −0 Original line number Diff line number Diff line package spaceinvaders import ( "crypto/md5" "fmt" "image/color" "io" "log" "net/http" "github.com/taironas/route" "github.com/taironas/tinygraphs/colors" "github.com/taironas/tinygraphs/draw/spaceinvaders" "github.com/taironas/tinygraphs/extract" "github.com/taironas/tinygraphs/write" ) // SpaceInvaders handler for /spaceinvaders/:key func SpaceInvaders(w http.ResponseWriter, r *http.Request) { var err error var key string if key, err = route.Context.Get(r, "key"); err != nil { log.Println("Unable to get 'key' value: ", err) key = "" } h := md5.New() io.WriteString(h, key) key = fmt.Sprintf("%x", h.Sum(nil)[:]) colorMap := colors.MapOfColorThemes() bg, fg := extract.ExtraColors(r, colorMap) theme := extract.Theme(r) numColors := extract.NumColors(r) var colors []color.RGBA if theme != "base" { if _, ok := colorMap[theme]; ok { colors = append(colors, colorMap[theme][0:numColors]...) } else { colors = append(colors, colorMap["base"]...) } } else { colors = append(colors, bg, fg) } size := extract.Size(r) write.ImageSVG(w) spaceinvaders.SpaceInvaders(w, key, colors, size) }
draw/spaceinvaders/spaceinvaders.go 0 → 100644 +39 −0 Original line number Diff line number Diff line package spaceinvaders import ( "image/color" "math" "net/http" "github.com/ajstarks/svgo" "github.com/taironas/tinygraphs/draw" ) func SpaceInvaders(w http.ResponseWriter, key string, colors []color.RGBA, size int) { canvas := svg.New(w) canvas.Start(size, size) squares := 6 quadrantSize := size / squares middle := math.Ceil(float64(squares) / float64(2)) colorMap := make(map[int]color.RGBA) for yQ := 0; yQ < squares; yQ++ { y := yQ * quadrantSize colorMap = make(map[int]color.RGBA) for xQ := 0; xQ < squares; xQ++ { x := xQ * quadrantSize if _, ok := colorMap[xQ]; !ok { if float64(xQ) < middle { colorMap[xQ] = draw.PickColor(key, colors, xQ+3*yQ) } else if xQ < squares { colorMap[xQ] = colorMap[squares-xQ-1] } else { colorMap[xQ] = colorMap[0] } } canvas.Rect(x, y, quadrantSize, quadrantSize, draw.FillFromRGBA(colorMap[xQ])) } } canvas.End() }