last_light/engine/raw.go

78 lines
1.3 KiB
Go
Raw Permalink Normal View History

2024-05-06 20:43:35 +03:00
package engine
2024-04-24 17:11:33 +03:00
import (
"github.com/gdamore/tcell/v2"
"github.com/gdamore/tcell/v2/views"
"github.com/google/uuid"
)
type Raw struct {
id uuid.UUID
buffer [][]rune
2024-05-06 21:19:08 +03:00
position Position
2024-04-24 17:11:33 +03:00
style tcell.Style
}
func CreateRawDrawable(x, y int, style tcell.Style, buffer ...string) *Raw {
2024-04-24 17:11:33 +03:00
r := new(Raw)
2024-05-06 21:19:08 +03:00
r.position = PositionAt(x, y)
2024-04-24 17:11:33 +03:00
r.buffer = make([][]rune, 0)
for _, row := range buffer {
r.buffer = append(r.buffer, []rune(row))
}
r.style = style
return r
}
func CreateRawDrawableFromBuffer(x, y int, style tcell.Style, buffer [][]rune) *Raw {
r := new(Raw)
2024-05-06 21:19:08 +03:00
r.position = PositionAt(x, y)
r.buffer = buffer
return r
}
2024-04-24 17:11:33 +03:00
func (r *Raw) UniqueId() uuid.UUID {
return r.id
}
func (r *Raw) DrawWithin(screenX, screenY, originX, originY, width, height int, v views.View) {
for h := originY; h < originY+height; h++ {
if h < 0 || h >= len(r.buffer) {
screenY += 1
continue
}
for w := originX; w < originX+width; w++ {
if w < 0 || w >= len(r.buffer[h]) {
screenX += 1
continue
}
v.SetContent(screenX, screenY, r.buffer[h][w], nil, r.style)
screenX += 1
}
screenX = 0
screenY += 1
}
}
2024-04-24 17:11:33 +03:00
func (r *Raw) Draw(v views.View) {
x := r.position.X()
y := r.position.Y()
for h, row := range r.buffer {
for i, ru := range row {
v.SetContent(x+i, y+h, ru, nil, r.style)
}
}
}