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