MCPcopy Create free account
hub / github.com/and3rson/raid / GenerateMap

Method GenerateMap

raid/mapgenerator.go:102–144  ·  view source on GitHub ↗
(updaterState *UpdaterState, title string, transparent bool)

Source from the content-addressed store, hash-verified

100}
101
102func (g *MapGenerator) GenerateMap(updaterState *UpdaterState, title string, transparent bool) error {
103 stateAlerts := map[int]bool{}
104 for _, state := range updaterState.States {
105 stateAlerts[state.ID] = state.Alert
106 }
107
108 mapStr := bytes.NewBuffer(nil)
109 if err := g.mapTemplate.Execute(mapStr, map[string]interface{}{"alerts": stateAlerts}); err != nil {
110 return fmt.Errorf("mapgenerator: execute map template: %w", err)
111 }
112
113 svg, _ := oksvg.ReadIconStream(mapStr)
114 svg.SetTarget(0, 0, MapWidth, MapHeight)
115 rect := image.Rect(0, 0, MapWidth, MapHeight)
116 rgba := image.NewRGBA(rect)
117
118 if !transparent {
119 draw.Draw(rgba, rect, image.White, image.Point{}, draw.Src)
120 }
121
122 svg.Draw(rasterx.NewDasher(MapWidth, MapHeight, rasterx.NewScannerGV(MapWidth, MapHeight, rgba, rgba.Bounds())), 1)
123
124 if len(title) > 0 {
125 g.fontContext.SetClip(rgba.Bounds())
126 g.fontContext.SetDst(rgba)
127
128 if _, err := g.fontContext.DrawString(title, freetype.Pt(50, 500)); err != nil {
129 return fmt.Errorf("mapgenerator: draw text: %w", err)
130 }
131 }
132
133 out := bytes.NewBuffer(nil)
134 if err := png.Encode(out, rgba); err != nil {
135 return fmt.Errorf("mapgenerator: encode png map: %w", err)
136 }
137
138 g.MapData.ContentType = "image/png"
139 g.MapData.Bytes = out.Bytes()
140
141 log.Infof("mapgenerator: generate map complete, size = %d B", len(g.MapData.Bytes))
142
143 return nil
144}

Callers 3

mainFunction · 0.95
NewMapGeneratorFunction · 0.95
RunMethod · 0.95

Calls

no outgoing calls

Tested by

no test coverage detected