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{}) }