Files
sumi/blinds.go
2026-01-11 23:31:25 -06:00

59 lines
1.1 KiB
Go

package main
import (
sg "github.com/d2fn/sumi/internal/graphics"
rl "github.com/gen2brain/raylib-go/raylib"
)
type BlindsLayer struct {
Field Field
Dirty bool
}
func NewBlindsLayer(field Field) *BlindsLayer {
return &BlindsLayer {
Field: field,
Dirty: true,
}
}
func (l *BlindsLayer) Draw(env *Env, g *sg.Graphics) {
g.BeginAdditiveBlend()
rows := 200
rowHeight := g.Bounds.Height / float32(rows)
g.Clear()
g.SetStrokeWeight(1.0)
y := float32(10.0)
for range rows {
for x := 10; x < int(g.Width()) - 10; x++ {
fieldValue := l.Field.Get(float32(x), float32(y))
c := rl.White
c.A = uint8(rl.Remap(fieldValue, 0.0, 1.0, 10, 75))
g.SetStrokeColor(c)
strokeHeight := rl.Remap(fieldValue, 0.0, 1.0, 0, rowHeight * 10.0)
a := sg.Point { X: float32(x), Y: float32(y) - strokeHeight / 2.0 }
b := sg.Point { X: float32(x), Y: float32(y) + strokeHeight / 2.0 }
g.DrawLine(a, b)
}
y += rowHeight
}
l.Dirty = false
g.EndBlend()
}
func (l *BlindsLayer) Update(env *Env, g *sg.Graphics) {
}
func (l *BlindsLayer) IsDirty() bool {
return l.Dirty
}