|
|
|
|
@ -50,19 +50,19 @@ loadSceneFromJson(game_state* s, render_state* rs)
|
|
|
|
|
slSceneDoc* sd = slLoadFile(DATA_DIR, DEFAULT_SCENE_FILE, SCENE_SCHEMA_FILE); |
|
|
|
|
|
|
|
|
|
if (sd != nullptr) { |
|
|
|
|
game_state* g = g_game_state; |
|
|
|
|
game_state* gs = g_game_state; |
|
|
|
|
render_state* rs = g_render_state; |
|
|
|
|
|
|
|
|
|
if (!slParseEntities(sd, g->entities, g->entity_count, MAX_ENTITIES, DATA_DIR)) { |
|
|
|
|
if (!slParseEntities(sd, gs->entities, gs->entity_count, MAX_ENTITIES, DATA_DIR)) { |
|
|
|
|
LOG(ERROR) << "Error loading Entities, exiting\n"; |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
slParseCamera(sd, rs->cam); |
|
|
|
|
slParseHexGrid(sd, g->grid, rs->palette_image); |
|
|
|
|
hgCreateHexes(g->grid); |
|
|
|
|
slParseHexGrid(sd, gs->grid, rs->palette_image); |
|
|
|
|
hgCreateHexes(gs->grid); |
|
|
|
|
|
|
|
|
|
if (!slCreateHexRenderGroups(g->grid, rs)) |
|
|
|
|
if (!slCreateHexRenderGroups(gs->grid, rs)) |
|
|
|
|
{ |
|
|
|
|
LOG(ERROR) << "Error creating hex render groups\n"; |
|
|
|
|
return false; |
|
|
|
|
@ -245,7 +245,7 @@ processSDLEvents()
|
|
|
|
|
// TODO: need to check for both io.WantCaptureKeyboard and io.WantCaptureMouse
|
|
|
|
|
// to fix bug with 'ESC' not passing through while in imgui
|
|
|
|
|
bool gooey_wants = gooProcessEvent(e); |
|
|
|
|
game_state* g = g_game_state; |
|
|
|
|
game_state* gs = g_game_state; |
|
|
|
|
|
|
|
|
|
switch (e.type) |
|
|
|
|
{ |
|
|
|
|
@ -256,27 +256,27 @@ processSDLEvents()
|
|
|
|
|
switch (e.key.keysym.sym) |
|
|
|
|
{ |
|
|
|
|
case SDLK_ESCAPE: run = false; break; |
|
|
|
|
case SDLK_e: g->is_moveforward = true; break; |
|
|
|
|
case SDLK_s: g->is_moveleft = true; break; |
|
|
|
|
case SDLK_d: g->is_movebackward = true; break; |
|
|
|
|
case SDLK_f: g->is_moveright = true; break; |
|
|
|
|
case SDLK_SPACE: g->is_moveup = true; break; |
|
|
|
|
case SDLK_c: g->is_movedown = true; break; |
|
|
|
|
case SDLK_r: g->is_rotateCW = true; break; |
|
|
|
|
case SDLK_w: g->is_rotateCCW = true; break; |
|
|
|
|
case SDLK_e: gs->is_moveforward = true; break; |
|
|
|
|
case SDLK_s: gs->is_moveleft = true; break; |
|
|
|
|
case SDLK_d: gs->is_movebackward = true; break; |
|
|
|
|
case SDLK_f: gs->is_moveright = true; break; |
|
|
|
|
case SDLK_SPACE: gs->is_moveup = true; break; |
|
|
|
|
case SDLK_c: gs->is_movedown = true; break; |
|
|
|
|
case SDLK_r: gs->is_rotateCW = true; break; |
|
|
|
|
case SDLK_w: gs->is_rotateCCW = true; break; |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case SDL_KEYUP: |
|
|
|
|
switch (e.key.keysym.sym) |
|
|
|
|
{ |
|
|
|
|
case SDLK_e: g->is_moveforward = false; break; |
|
|
|
|
case SDLK_s: g->is_moveleft = false; break; |
|
|
|
|
case SDLK_d: g->is_movebackward = false; break; |
|
|
|
|
case SDLK_f: g->is_moveright = false; break; |
|
|
|
|
case SDLK_SPACE: g->is_moveup = false; break; |
|
|
|
|
case SDLK_c: g->is_movedown = false; break; |
|
|
|
|
case SDLK_r: g->is_rotateCW = false; break; |
|
|
|
|
case SDLK_w: g->is_rotateCCW = false; break; |
|
|
|
|
case SDLK_e: gs->is_moveforward = false; break; |
|
|
|
|
case SDLK_s: gs->is_moveleft = false; break; |
|
|
|
|
case SDLK_d: gs->is_movebackward = false; break; |
|
|
|
|
case SDLK_f: gs->is_moveright = false; break; |
|
|
|
|
case SDLK_SPACE: gs->is_moveup = false; break; |
|
|
|
|
case SDLK_c: gs->is_movedown = false; break; |
|
|
|
|
case SDLK_r: gs->is_rotateCW = false; break; |
|
|
|
|
case SDLK_w: gs->is_rotateCCW = false; break; |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case SDL_MOUSEBUTTONDOWN: |
|
|
|
|
@ -284,12 +284,12 @@ processSDLEvents()
|
|
|
|
|
{ |
|
|
|
|
if (e.button.button == SDL_BUTTON_LEFT) |
|
|
|
|
{ |
|
|
|
|
g->grid.is_selecting = true; |
|
|
|
|
gs->grid.is_selecting = true; |
|
|
|
|
handleMouseDown(e.button); |
|
|
|
|
} |
|
|
|
|
else if (e.button.button == SDL_BUTTON_RIGHT) |
|
|
|
|
{ |
|
|
|
|
g->is_camera_rotate = true; |
|
|
|
|
gs->is_camera_rotate = true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
@ -297,15 +297,15 @@ processSDLEvents()
|
|
|
|
|
if (!gooey_wants) |
|
|
|
|
{ |
|
|
|
|
if (e.button.button == SDL_BUTTON_LEFT) |
|
|
|
|
g->grid.is_selecting = false; |
|
|
|
|
gs->grid.is_selecting = false; |
|
|
|
|
else if (e.button.button == SDL_BUTTON_RIGHT) |
|
|
|
|
g->is_camera_rotate = false; |
|
|
|
|
gs->is_camera_rotate = false; |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case SDL_MOUSEMOTION: |
|
|
|
|
if (!gooey_wants && g->grid.is_selecting) |
|
|
|
|
if (!gooey_wants && gs->grid.is_selecting) |
|
|
|
|
handleMouseMove(e.motion); |
|
|
|
|
else if(!gooey_wants && g->is_camera_rotate) |
|
|
|
|
else if(!gooey_wants && gs->is_camera_rotate) |
|
|
|
|
cameraRotate(g_render_state->cam, e.motion.xrel, e.motion.yrel); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
@ -328,17 +328,17 @@ cleanUp(SDL_Handles &handles)
|
|
|
|
|
SDL_DestroyWindow(handles.window); |
|
|
|
|
SDL_Quit(); |
|
|
|
|
|
|
|
|
|
game_state* g = g_game_state; |
|
|
|
|
game_state* gs = g_game_state; |
|
|
|
|
|
|
|
|
|
if (g_game_state->grid.hex_array) |
|
|
|
|
delete g_game_state->grid.hex_array; |
|
|
|
|
|
|
|
|
|
for (uint i = 0; i < g->entity_count; i++) { |
|
|
|
|
meFreeMeshGroup(g->entities[i].mesh_group); |
|
|
|
|
rgFree(g->entities[i].ren_group); |
|
|
|
|
for (uint i = 0; i < gs->entity_count; i++) { |
|
|
|
|
meFreeMeshGroup(gs->entities[i].mesh_group); |
|
|
|
|
rgFree(gs->entities[i].ren_group); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
utilSafeFree(g->entities); |
|
|
|
|
utilSafeFree(gs->entities); |
|
|
|
|
utilSafeFree(g_render_state); |
|
|
|
|
utilSafeFree(g_game_state); |
|
|
|
|
|
|
|
|
|
@ -373,20 +373,20 @@ int main(int argc, char* argv[])
|
|
|
|
|
while (processSDLEvents()) { |
|
|
|
|
frameStart = SDL_GetTicks(); |
|
|
|
|
|
|
|
|
|
game_state* g = g_game_state; |
|
|
|
|
render_state* r = g_render_state; |
|
|
|
|
game_state* gs = g_game_state; |
|
|
|
|
render_state* rs = g_render_state; |
|
|
|
|
|
|
|
|
|
cameraMove(r->cam, g->is_moveup, g->is_moveleft, g->is_movedown, g->is_moveright, |
|
|
|
|
g->is_moveforward, g->is_movebackward); |
|
|
|
|
cameraMove(rs->cam, gs->is_moveup, gs->is_moveleft, gs->is_movedown, gs->is_moveright, |
|
|
|
|
gs->is_moveforward, gs->is_movebackward); |
|
|
|
|
|
|
|
|
|
renRenderFrame(r, g->grid, g->entities, g->entity_count); |
|
|
|
|
renRenderFrame(rs, gs->grid, gs->entities, gs->entity_count); |
|
|
|
|
|
|
|
|
|
if (r->is_debug_draw && g->grid.draw_mode == CONE_FILL) |
|
|
|
|
renRenderDebug(r, g_polygon_select_vertices); |
|
|
|
|
if (rs->is_debug_draw && gs->grid.draw_mode == CONE_FILL) |
|
|
|
|
renRenderDebug(rs, g_polygon_select_vertices); |
|
|
|
|
|
|
|
|
|
gooRender(r->handles, &g->grid, r->is_debug_draw, &r->cam); |
|
|
|
|
gooRender(gs, rs); |
|
|
|
|
|
|
|
|
|
SDL_GL_SwapWindow(r->handles.window); |
|
|
|
|
SDL_GL_SwapWindow(rs->handles.window); |
|
|
|
|
|
|
|
|
|
// TODO: test SDL_Delay on Win32
|
|
|
|
|
//platform_wait_for_vblank(VSYNC_ENABLED);
|
|
|
|
|
|