From 866af1f3a0d3c3371906f90fac8cdf5231df5e42 Mon Sep 17 00:00:00 2001 From: cinnaboot Date: Tue, 15 Jan 2019 18:59:09 -0500 Subject: [PATCH] add/remove painting --- src/hexgame.cpp | 46 ++++++++++++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/src/hexgame.cpp b/src/hexgame.cpp index 2ba4f9c..3e05bca 100644 --- a/src/hexgame.cpp +++ b/src/hexgame.cpp @@ -153,14 +153,6 @@ mapMouseToViewport(int32 x, int32 y) return coords; } -void -setStartHex(hex_info *hex) -{ - hex->selected = true; - g_game_state->grid.start_hex = g_game_state->grid.current_hex = hex; - g_game_state->grid.is_selecting = true; -} - void startDrawHelper(int32 x, int32 y) { @@ -168,8 +160,10 @@ startDrawHelper(int32 x, int32 y) v2i dims = g_render_state->viewport_dims; v2f v = cameraUnproject(g_render_state->cam, x, y, dims.x, dims.y); hex_info *hex = hgGetSingleHex(g_game_state->grid, v.x, v.y); - if (hex) - setStartHex(hex); + if (hex) { + hex->selected = true; + g_game_state->grid.start_hex = g_game_state->grid.current_hex = hex; + } } void @@ -223,22 +217,42 @@ handleMouseDown(SDL_MouseButtonEvent &e) void handleMouseMove(SDL_MouseMotionEvent &e) { + game_state* gs = g_game_state; + render_state* rs = g_render_state; v2i coords = mapMouseToViewport(e.x, e.y); - v2i dims = g_render_state->viewport_dims; - v2f v = cameraUnproject(g_render_state->cam, coords.x, coords.y, dims.x, dims.y); + v2i dims = rs->viewport_dims; + v2f v = cameraUnproject(rs->cam, coords.x, coords.y, dims.x, dims.y); - switch (g_game_state->grid.draw_mode) { + switch (gs->grid.draw_mode) { case FILL: - hgUpdateHexFill(g_game_state->grid, v.x, v.y); + hgUpdateHexFill(gs->grid, v.x, v.y); break; case LINE: - hgUpdateHexLineDraw(g_game_state->grid, v.x, v.y); + hgUpdateHexLineDraw(gs->grid, v.x, v.y); break; case CONE_FILL: - hgUpdateHexConeFill(g_game_state->grid, v.x, v.y, CONE_ANGLE, g_polygon_select_vertices); + hgUpdateHexConeFill(gs->grid, v.x, v.y, CONE_ANGLE, g_polygon_select_vertices); break; case PATHFINDING: break; + case ADD_HEXES: { + if (gs->grid.is_selecting) { + v3f ray = cameraCreateRay(rs->cam, coords, dims); + v3f xsect; + if (cameraIntersectPlane(rs->cam, ray, gs->grid.position, gs->grid.normal, xsect)) + hgAddHex(gs->grid, xsect, rs->filled_hex_render_group, rs->hex_line_render_group); + } + break; + } + case REMOVE_HEXES: { + if (gs->grid.is_selecting) { + v3f ray = cameraCreateRay(rs->cam, coords, dims); + v3f xsect; + if (cameraIntersectPlane(rs->cam, ray, gs->grid.position, gs->grid.normal, xsect)) + hgRemoveHex(gs->grid, xsect, rs->filled_hex_render_group, rs->hex_line_render_group); + } + break; + } case NONE: default: break;