Browse Source

copy/paste for removing hexes

master
cinnaboot 8 years ago
parent
commit
5e56a6faaf
  1. 7
      src/hexgame.cpp
  2. 49
      src/hexgrid.cpp
  3. 2
      src/hexgrid.h

7
src/hexgame.cpp

@ -199,6 +199,13 @@ handleMouseDown(SDL_MouseButtonEvent &e)
hgAddHex(gs->grid, xsect, rs->filled_hex_render_group, rs->hex_line_render_group);
break;
}
case REMOVE_HEXES: {
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:
v2f v = cameraUnproject(rs->cam, coords.x, coords.y, dims.x, dims.y);

49
src/hexgrid.cpp

@ -119,8 +119,55 @@ hgAddHex(hexgrid& hg, v3f hex_coords, render_group* rg_filled, render_group* rg_
}
bool
hgRemoveHex(hexgrid& hg, v3i hex_coords)
hgRemoveHex(hexgrid& hg, v3f hex_coords, render_group* rg_filled, render_group* rg_lines)
{
hex_info* hxi = hgGetSingleHex(hg, hex_coords.x, hex_coords.y);
if (hxi) {
render_object* ro_f = rg_filled->render_objects[0];
gl_buffer& vb_f = ro_f->vertex_buffer;
gl_buffer& nb_f = ro_f->normal_buffer;
gl_buffer& ub_f = ro_f->uv_buffer;
render_object* ro_l = rg_lines->render_objects[0];
gl_buffer& vb_l = ro_l->vertex_buffer;
gl_buffer& nb_l = ro_l->normal_buffer;
gl_buffer& ub_l = ro_l->uv_buffer;
// NOTE: don't need sanity checks to delete from buffers
vb_f.count -= IDX_PER_HEX_FILLED;
nb_f.count -= IDX_PER_HEX_FILLED;
ub_f.count -= IDX_PER_HEX_FILLED;
vb_l.count -= IDX_PER_HEX_LINES;
nb_l.count -= IDX_PER_HEX_LINES;
ub_l.count -= IDX_PER_HEX_LINES;
assert(hg.hex_map.erase(hxi->hex) == 1);
// NOTE: have to repopulate all the buffers, and re-index
uint i = 0;
for (auto it : hg.hex_map) {
it.second.hexID = i;
populateFilledHexGLBuffers(hg, it.second, rg_filled);
populateLineGLBuffers(hg, it.second, rg_lines);
i++;
}
// NOTE: we do need to update the whole buffer when removing data
glBindBuffer(GL_ARRAY_BUFFER, vb_f.buffer_id);
glBufferSubData(GL_ARRAY_BUFFER, 0, vb_f.count * sizeof(GLfloat), vb_f.buffer);
glBindBuffer(GL_ARRAY_BUFFER, nb_f.buffer_id);
glBufferSubData(GL_ARRAY_BUFFER, 0, nb_f.count * sizeof(GLfloat), nb_f.buffer);
glBindBuffer(GL_ARRAY_BUFFER, ub_f.buffer_id);
glBufferSubData(GL_ARRAY_BUFFER, 0, ub_f.count * sizeof(GLfloat), ub_f.buffer);
glBindBuffer(GL_ARRAY_BUFFER, vb_l.buffer_id);
glBufferSubData(GL_ARRAY_BUFFER, 0, vb_l.count * sizeof(GLfloat), vb_l.buffer);
glBindBuffer(GL_ARRAY_BUFFER, nb_l.buffer_id);
glBufferSubData(GL_ARRAY_BUFFER, 0, nb_l.count * sizeof(GLfloat), nb_l.buffer);
glBindBuffer(GL_ARRAY_BUFFER, ub_l.buffer_id);
glBufferSubData(GL_ARRAY_BUFFER, 0, ub_l.count * sizeof(GLfloat), ub_l.buffer);
return true;
}
return false;
}

2
src/hexgrid.h

@ -89,7 +89,7 @@ bool hgInit(hexgrid& hg, render_group* rg_filled, render_group* rg_lines);
bool hgAddHex(hexgrid& hg, v3f hex_coords, render_group* rg_filled, render_group* rg_lines);
bool hgRemoveHex(hexgrid& hg, v3i hex_coords);
bool hgRemoveHex(hexgrid& hg, v3f hex_coords, render_group* rg_filled, render_group* rg_lines);
// -------------------

Loading…
Cancel
Save