summaryrefslogtreecommitdiff
path: root/src/gizmo/gizmo.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gizmo/gizmo.c')
-rw-r--r--src/gizmo/gizmo.c75
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) {