1 module unecht.core.components.editor.grid; 2 3 version(UEIncludeEditor): 4 5 import std.array; 6 7 import gl3n.linalg; 8 9 import unecht.core.component; 10 import unecht.core.components.material; 11 import unecht.core.components.misc; 12 import unecht.core.components.renderer; 13 14 import unecht.gl.vertexBufferObject; 15 import unecht.gl.vertexArrayObject; 16 17 /// 18 final class UEEditorgridComponent : UEComponent { 19 20 mixin(UERegisterObject!()); 21 22 override void onCreate() { 23 super.onCreate; 24 25 import unecht.core.entity; 26 entity.layer = UELayer.editor; 27 28 auto renderer = entity.addComponent!UERenderer; 29 auto mesh = entity.addComponent!UEMesh; 30 31 renderer.mesh = mesh; 32 auto material = renderer.material = this.entity.addComponent!UEMaterial; 33 34 mesh.vertexArrayObject = new GLVertexArrayObject(); 35 mesh.vertexArrayObject.bind(); 36 37 enum cellsize = 10; 38 enum cnt = 10; 39 enum size = cnt*cellsize; 40 enum sized2 = size/2; 41 42 auto vertices = appender!(vec3[])(); 43 vertices.reserve(cnt*cnt); 44 foreach(x; 0..cnt) 45 { 46 foreach(y; 0..cnt) 47 { 48 vertices.put(vec3(x*cellsize - sized2,0,y*cellsize - sized2)); 49 } 50 } 51 52 mesh.setVertexData(vertices.data); 53 54 auto indices = appender!(uint[])(); 55 indices.reserve(cnt*cnt*4); 56 foreach(x; 0..cnt) 57 { 58 foreach(y; 0..cnt) 59 { 60 if(x<cnt-1) 61 { 62 indices.put(y*cnt + x); 63 indices.put(y*cnt + x+1); 64 } 65 if(y<cnt-1) 66 { 67 indices.put(y*cnt + x); 68 indices.put((y+1)*cnt + x); 69 } 70 } 71 } 72 73 mesh.indexBuffer = new GLVertexBufferObject(indices.data); 74 mesh.indexBuffer.primitiveType = GLRenderPrimitive.lines; 75 mesh.vertexArrayObject.unbind(); 76 } 77 78 override void onUpdate() { 79 super.onUpdate; 80 81 //TODO: change size depending on the distance of the editor cam 82 //this.sceneNode.scaling = this.sceneNode.scaling*1.1f; 83 } 84 }