63 lines
1.1 KiB
Go
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{})
|
|
}
|