59 lines
1.1 KiB
Go
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
|
|
}
|
|
|