zworld/plugins/geometry/lines/lines.go
2024-01-14 22:56:06 +08:00

63 lines
1.1 KiB
Go

package lines
import (
"zworld/engine/object"
"zworld/engine/object/mesh"
"zworld/engine/renderapi/color"
"zworld/engine/renderapi/vertex"
"zworld/plugins/math/vec3"
)
type Lines struct {
*mesh.Static
Args
}
type Args struct {
Lines []Line
lineMesh vertex.MutableMesh[vertex.C, uint16]
}
func New(args Args) *Lines {
b := object.NewComponent(&Lines{
Static: mesh.NewLines(),
Args: args,
})
b.lineMesh = vertex.NewLines(object.Key("lines", b), []vertex.C{}, []uint16{})
b.VertexData.Set(b.lineMesh)
b.Refresh()
return b
}
func (li *Lines) Add(from, to vec3.T, clr color.T) {
li.Lines = append(li.Lines, Line{
Start: from,
End: to,
Color: clr,
})
}
func (li *Lines) Clear() {
li.Lines = li.Lines[:0]
}
func (li *Lines) Count() int {
return len(li.Lines)
}
func (li *Lines) Refresh() {
count := len(li.Lines)
vertices := make([]vertex.C, 2*count)
for i := 0; i < count; i++ {
line := li.Lines[i]
a := &vertices[2*i+0]
b := &vertices[2*i+1]
a.P = line.Start
a.C = line.Color.Vec4()
b.P = line.End
b.C = line.Color.Vec4()
}
li.lineMesh.Update(vertices, []uint16{})
}