|
|
|
|
@ -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; |
|
|
|
|
|