diff options
Diffstat (limited to 'src/gizmo/gizmo.c')
-rw-r--r-- | src/gizmo/gizmo.c | 75 |
1 files changed, 73 insertions, 2 deletions
diff --git a/src/gizmo/gizmo.c b/src/gizmo/gizmo.c index e3eaaf1..61acdcb 100644 --- a/src/gizmo/gizmo.c +++ b/src/gizmo/gizmo.c @@ -5,17 +5,24 @@ struct { bool show_grid, g_pressing; + bool show_axis, a_pressing; } gizmo_state; void gizmo_init() { gizmo_state.show_grid = FALSE; gizmo_state.g_pressing = FALSE; + gizmo_state.show_axis = FALSE; + gizmo_state.a_pressing = FALSE; } void gizmo_onevent(wog_Event* e, float dt) { if (e == NULL) return; if (e->type == WOG_EKEYDOWN) { - if (e->key == VK_G && !gizmo_state.g_pressing) { + if (e->key == VK_A && !gizmo_state.a_pressing) { + gizmo_state.show_axis = !gizmo_state.show_axis; + gizmo_state.a_pressing = TRUE; + } + else if (e->key == VK_G && !gizmo_state.g_pressing) { gizmo_state.show_grid = !gizmo_state.show_grid; gizmo_state.g_pressing = TRUE; } @@ -23,6 +30,8 @@ void gizmo_onevent(wog_Event* e, float dt) { else if (e->type == WOG_EKEYUP) { if(e->key == VK_G) gizmo_state.g_pressing = FALSE; + if(e->key == VK_A) + gizmo_state.a_pressing = FALSE; } } @@ -30,8 +39,10 @@ void gizmo_onupdate(float dt) { } void gizmo_ondraw() { - if (gizmo_state.show_grid) + if(gizmo_state.show_grid) gizmo_grid(); + if (gizmo_state.show_axis) + gizmo_axis(); } // varying @@ -51,6 +62,65 @@ static Program line_shader = { }; void gizmo_grid() { + const int field = 1000; + int vCount = 80 + 4; + Vert verts[84] = {0};//4*field/100*2 + int grid[84] = {0}; + int vertCount; + int i = 0; + Color color = 0xffaaaaaa; + for (int y = -field; y <= field; y += 100) + { + if (y == 0 && gizmo_state.show_axis) { + vCount -= 2; + continue; + } + verts[i].index = i; + verts[i].position = vec3_make(-field, 0, y); + verts[i].normal = vec3zero; + verts[i].tangent = vec4zero; + verts[i].texcoord = vec2zero; + verts[i].color = color; + grid[i] = i++; + verts[i].index = i; + verts[i].position = vec3_make(field, 0, y); + verts[i].normal = vec3zero; + verts[i].tangent = vec4zero; + verts[i].texcoord = vec2zero; + verts[i].color = color; + grid[i] = i++; + } + for (int x = -field; x <= field; x += 100) + { + if (x == 0 && gizmo_state.show_axis) { + vCount -= 2; + continue; + } + verts[i].index = i; + verts[i].position = vec3_make(x, 0, -field); + verts[i].normal = vec3zero; + verts[i].tangent = vec4zero; + verts[i].texcoord = vec2zero; + verts[i].color = color; + grid[i] = i++; + verts[i].index = i; + verts[i].position = vec3_make(x, 0, field); + verts[i].normal = vec3zero; + verts[i].tangent = vec4zero; + verts[i].texcoord = vec2zero; + verts[i].color = color; + grid[i] = i++; + } + ssr_bindvertices(&verts, vCount, &grid, vCount/2); + ssr_matrixmode(MATRIX_MODEL); + ssr_loadidentity(); + ssr_useprogram(&line_shader); + ssr_draw(PRIMITIVE_LINE); + ssr_unuseprogram(); + ssr_enable(ENABLE_WRITEDEPTH); +} + +void gizmo_axis() { Vert verts[] = { {0, {-10000, 0, 0}, vec3zero, vec4zero, vec2zero, 0xffff0000}, {1, {10000, 0, 0}, vec3zero, vec4zero, vec2zero, 0xffff0000}, @@ -66,6 +136,7 @@ void gizmo_grid() { ssr_useprogram(&line_shader); ssr_draw(PRIMITIVE_LINE); ssr_unuseprogram(); + ssr_enable(ENABLE_WRITEDEPTH); } void gizmo_line(Vec3 start, Vec3 end, Color32 color) { |