diff --git a/src/editor/level_editor.jai b/src/editor/level_editor.jai index 0519c01..8871b1b 100644 --- a/src/editor/level_editor.jai +++ b/src/editor/level_editor.jai @@ -5,8 +5,9 @@ get_level_editor_camera :: () -> Camera { camera.near = 0.1; camera.far = 100; - camera.position = .{5,5,5}; - camera.target = .{0,0,0}; + camera.position = .{xx (sin(get_time()) * 2),xx sin(get_time() * 0.3),xx (cos(get_time()) * 2)}; + camera.target = .{0.5,0.5,0.5}; + camera.position += .{0.5, 0.5, 0.5}; return camera; } diff --git a/src/editor/trile_editor.jai b/src/editor/trile_editor.jai index 5d08577..f48d4c9 100644 --- a/src/editor/trile_editor.jai +++ b/src/editor/trile_editor.jai @@ -43,10 +43,6 @@ current_trile : Trile; #scope_file apply_tool_to_trixel :: (x: s64, y: s64, z: s64) { - //temptest: - print("Testing meshgen!\n"); - set_trile("test", generate_mesh_matias(*current_trile)); - if current_tool == .PAINT { current_trile.trixels[x][y][z].material.color = current_color; } @@ -189,6 +185,12 @@ draw_tool_tab :: (theme: *GR.Overall_Theme, area: GR.Rect) { r.y += r.h; GR.slider(r, *brush_radius, 0, 12, 1, *theme.slider_theme); + r.y += r.h * 2; + if GR.button(r, "Save and gen", *theme.button_theme) { + //temptest: + print("Testing meshgen!\n"); + set_trile("test", generate_mesh_matias(*current_trile)); + }; } draw_material_tab :: (theme: *GR.Overall_Theme, area: GR.Rect) { diff --git a/src/meshgen.jai b/src/meshgen.jai index 6b9cc26..9971c54 100644 --- a/src/meshgen.jai +++ b/src/meshgen.jai @@ -1,6 +1,6 @@ Trile_Side :: enum_flags u8 { - TOP :: 0x0; // Larger Y - LEFT :: 0x1; // Larger Z + TOP :: 0x1; // Larger Y + LEFT :: 0x2; // Larger Z RIGHT :: 0x4; // Smaller Z FRONT :: 0x8; // Larger X BACK :: 0x10; // Smaller X @@ -233,9 +233,10 @@ init_quads :: (quads: *Quads) { // NOTE: unsure about if this is correctly porte for i : 0..15 { quadset : Quad_Set; table_add(*quadset, .{.{16,16}, .{0,0}}, true); - array_add(*quads.*[idx], quadset); + array_add(*(quads.*[idx]), quadset); } } + print("qcount??: %", quads[0].count); } // Looking at the side, what axis should be used as x,y and z, @@ -244,17 +245,17 @@ init_quads :: (quads: *Quads) { // NOTE: unsure about if this is correctly porte change_perspective :: (x: *$T, y: *T, z: *T, side: Trile_Side) -> (*T,*T,*T) { if #complete side == { case Trile_Side.TOP; - return y, x, z; - case Trile_Side.BOTTOM; - return y, z, x; - case Trile_Side.FRONT; return x, z, y; - case Trile_Side.BACK; - return x, y, z; - case Trile_Side.LEFT; - return z, y, x; - case Trile_Side.RIGHT; + case Trile_Side.BOTTOM; return z, x, y; + case Trile_Side.FRONT; + return z, y, x; + case Trile_Side.BACK; + return y, z, x; + case Trile_Side.LEFT; + return y, x, z; + case Trile_Side.RIGHT; + return x, y, z; } } @@ -312,9 +313,9 @@ quads_to_vecs :: (quads: *Quads, vecs: *[..]float, normals: *[..]float) { for side : trileSideValues { idx := side_to_quad_list_index(side); - for 0..quads[idx].count-1 { + for 0..quads.*[idx].count-1 { quads2d : [..]Vector2; - table := quads.*[idx][it]; + table := *(quads.*[idx][it]); for k, v : table { array_add(*quads2d, v.bottomLeft); array_add(*quads2d, .{v.bottomLeft.x, v.topRight.y}); @@ -343,11 +344,28 @@ a_is_inside_b :: (a: Quad, b: Quad) -> bool { remove_quad :: (quad: Quad, quadSet: *Quad_Set) { parent : Quad; + + qlist : [..]Quad; + for k,v : quadSet { - if v < quad then continue; - if a_is_inside_b(quad, v) { - table_remove(quadSet, v); - parent = v; + array_add(*qlist, v); + } + + Sort :: #import "Sort"; + + qcomp :: (a: Quad, b: Quad) -> s64 { + if a < b then return -1; + if b < a then return 1; + return 0; + } + + Sort.bubble_sort(qlist, qcomp); + + for qlist { + if it < quad then continue; + if a_is_inside_b(quad, it) { + parent = it; + table_remove(quadSet, it); break; } } @@ -406,7 +424,7 @@ generate_mesh_matias :: (trileptr : *Trile) -> Mesh { quadVecs : [..]float; quadNorms : [..]float; - generate_basic_quad_mesh(trileptr,*quadVecs,*quadNorms); + generate_optimized_quad_mesh(trileptr,*quadVecs,*quadNorms); print("Quad vecs size: %\n", quadVecs.count); quads_to_triangles(*quadVecs, *triangleVecs,*quadNorms, *triangleNorms); diff --git a/src/pipelines.jai b/src/pipelines.jai index eebb501..ed40bad 100644 --- a/src/pipelines.jai +++ b/src/pipelines.jai @@ -159,7 +159,7 @@ create_trixel_pipeline :: () { create_trile_pipeline :: () { pipeline: sg_pipeline_desc; - shader_desc := trixel_shader_desc(sg_query_backend()); + shader_desc := trile_shader_desc(sg_query_backend()); pipeline.shader = sg_make_shader(*shader_desc); pipeline.layout.buffers[0].stride = 4*3; pipeline.layout.buffers[1].stride = 4*3;