// generateBackground creates a background of green tiles - might not be the most efficient way to do this func generateBackground() *ecs.Entity { rect := image.Rect(0, 0, int(worldWidth), int(worldHeight)) img := image.NewNRGBA(rect) c1 := color.RGBA{102, 153, 0, 255} c2 := color.RGBA{102, 173, 0, 255} for i := rect.Min.X; i < rect.Max.X; i++ { for j := rect.Min.Y; j < rect.Max.Y; j++ { if i%40 > 20 { if j%40 > 20 { img.Set(i, j, c1) } else { img.Set(i, j, c2) } } else { if j%40 > 20 { img.Set(i, j, c2) } else { img.Set(i, j, c1) } } } } bgTexture := engi.NewImageObject(img) field := ecs.NewEntity([]string{"RenderSystem"}) fieldRender := engi.NewRenderComponent(engi.NewTexture(bgTexture), engi.Point{1, 1}, "Background1") fieldRender.SetPriority(engi.Background) fieldSpace := &engi.SpaceComponent{engi.Point{0, 0}, worldWidth, worldHeight} field.AddComponent(fieldRender) field.AddComponent(fieldSpace) return field }
// generateBackground creates a background of green tiles - might not be the most efficient way to do this func generateBackground() *engi.RenderComponent { rect := image.Rect(0, 0, int(boxWidth), int(boxHeight)) img := image.NewNRGBA(rect) c1 := color.RGBA{102, 153, 0, 255} for i := rect.Min.X; i < rect.Max.X; i++ { for j := rect.Min.Y; j < rect.Max.Y; j++ { img.Set(i, j, c1) } } bgTexture := engi.NewImageObject(img) fieldRender := engi.NewRenderComponent(engi.NewTexture(bgTexture), engi.Point{1, 1}, "Background1") fieldRender.SetPriority(engi.Background) return fieldRender }
// generateHUDBackground creates a violet HUD on the left side of the screen - might be inefficient func generateHUDBackground(width, height float32) *ecs.Entity { rect := image.Rect(0, 0, int(width), int(height)) img := image.NewNRGBA(rect) c1 := color.RGBA{255, 0, 255, 180} for i := rect.Min.X; i < rect.Max.X; i++ { for j := rect.Min.Y; j < rect.Max.Y; j++ { img.Set(i, j, c1) } } bgTexture := engi.NewImageObject(img) field := ecs.NewEntity([]string{"RenderSystem"}) fieldRender := engi.NewRenderComponent(engi.NewTexture(bgTexture), engi.Point{1, 1}, "HUDBackground1") fieldRender.SetPriority(hudBackgroundPriority) fieldSpace := &engi.SpaceComponent{engi.Point{-1, -1}, width, height} field.AddComponent(fieldRender) field.AddComponent(fieldSpace) return field }
func (c *Calibrate) Update(entity *ecs.Entity, dt float32) { if c.frameIndex != 0 { return } var ( cal *CalibrateComponent ok bool ) if cal, ok = entity.ComponentFast(cal).(*CalibrateComponent); !ok { return } // Render the image again plt, err := plot.New() if err != nil { log.Fatal(err) } plotutil.AddLinePoints(plt, "CH"+strconv.Itoa(int(cal.ChannelIndex)), plotter.XYer(c.channels[cal.ChannelIndex])) img := image.NewRGBA(image.Rect(0, 0, 3*dpi, 3*dpi)) canv := vgimg.NewWith(vgimg.UseImage(img)) plt.Draw(draw.New(canv)) bgTexture := engi.NewImageRGBA(img) // Give it to engi erender := &engi.RenderComponent{ Display: engi.NewRegion(engi.NewTexture(bgTexture), 0, 0, 3*dpi, 3*dpi), Scale: engi.Point{1, 1}, Transparency: 1, Color: color.RGBA{255, 255, 255, 255}, } erender.SetPriority(engi.HUDGround) entity.AddComponent(erender) }
// GenerateSquareComonent creates a square, alternating two colors, with given size and priority levl func GenerateSquareComonent(c1, c2 color.NRGBA, w, h float32, priority engi.PriorityLevel) *engi.RenderComponent { rect := image.Rect(0, 0, int(w), int(h)) img := image.NewNRGBA(rect) if c1 == c2 { // Solid color for i := 0; i < len(img.Pix); i += 4 { img.Pix[i] = c1.R img.Pix[i+1] = c1.G img.Pix[i+2] = c1.B img.Pix[i+3] = c1.A } } else { // TODO: we can optimize this as well for i := rect.Min.X; i < rect.Max.X; i++ { for j := rect.Min.Y; j < rect.Max.Y; j++ { if i%40 > 20 { if j%40 > 20 { img.Set(i, j, c1) } else { img.Set(i, j, c2) } } else { if j%40 > 20 { img.Set(i, j, c2) } else { img.Set(i, j, c1) } } } } } bgTexture := engi.NewImageObject(img) fieldRender := engi.NewRenderComponent(engi.NewRegion(engi.NewTexture(bgTexture), 0, 0, int(w), int(h)), engi.Point{1, 1}, "") fieldRender.SetPriority(priority) return fieldRender }