diff --git a/client/src/main.c b/client/src/main.c index a9b6ebf..6e138a2 100644 --- a/client/src/main.c +++ b/client/src/main.c @@ -54,12 +54,10 @@ void* network_thread(void* data) { return NULL; } -VkResult add_hex_region(ClientContext* context) { - VkResult result; - +uint32_t add_hex_region(ClientContext* context) { HexRegion* region; - VK_RESULT(allocate_hex_region(0, 0, 0, context->hex->data.current_map, ®ion, context->hex, context->render)); + allocate_hex_region(0, 0, 0, context->hex->data.current_map, ®ion, context->hex, context->render); for(uint32_t hex = 0; hex < REGION_HEX_COUNT; hex++) { region->data.hexes[hex].color[0] = 0xFFFFFFFF; @@ -78,9 +76,16 @@ VkResult add_hex_region(ClientContext* context) { region->data.hexes[hex].height[5] = 0; } - VK_RESULT(set_hex_region(region, context->hex, context->render)); + set_hex_region(region, context->hex, context->render); - return VK_SUCCESS; + uint32_t i = 0; + for(; i < MAX_LOADED_REGIONS; i++) { + if(region == context->hex->regions[i]) { + break; + } + } + + return i; } char region_info_strs[][20] = { @@ -172,6 +177,56 @@ VkResult region_info_ui(ClientContext* context) { return create_container(®ion_info, context->render, context->ui); } +VkResult update_region_info_ui(ClientContext* context) { + VkResult result; + HexRegion* selected_region = context->hex->regions[context->selected_region]; + + snprintf(region_info_strs[0], + sizeof(region_info_strs[0]), + "Region %4d", context->selected_region); + VK_RESULT(update_ui_string(region_info_strs[0], 0, 0, 0, context->ui, context->render)); + + if(selected_region == NULL) { + snprintf( + region_info_strs[1], + sizeof(region_info_strs[1]), + ""); + VK_RESULT(update_ui_string(region_info_strs[1], 0, 0, 1, context->ui, context->render)); + + snprintf( + region_info_strs[2], + sizeof(region_info_strs[2]), + ""); + VK_RESULT(update_ui_string(region_info_strs[2], 0, 0, 2, context->ui, context->render)); + + snprintf( + region_info_strs[3], + sizeof(region_info_strs[3]), + ""); + VK_RESULT(update_ui_string(region_info_strs[3], 0, 0, 3, context->ui, context->render)); + } else { + snprintf( + region_info_strs[1], + sizeof(region_info_strs[1]), + "Q: %4d", selected_region->data.q); + VK_RESULT(update_ui_string(region_info_strs[1], 0, 0, 1, context->ui, context->render)); + + snprintf( + region_info_strs[2], + sizeof(region_info_strs[2]), + "R: %4d", selected_region->data.r); + VK_RESULT(update_ui_string(region_info_strs[2], 0, 0, 2, context->ui, context->render)); + + snprintf( + region_info_strs[3], + sizeof(region_info_strs[3]), + "Y: %4d", selected_region->data.y); + VK_RESULT(update_ui_string(region_info_strs[3], 0, 0, 3, context->ui, context->render)); + } + + return VK_SUCCESS; +} + VkResult main_thread(ClientContext* context) { VkResult result; @@ -194,52 +249,7 @@ VkResult main_thread(ClientContext* context) { if(context->selected_region != context->last_selected_region) { context->last_selected_region = context->selected_region; - - - HexRegion* selected_region = context->hex->regions[context->selected_region]; - snprintf(region_info_strs[0], - sizeof(region_info_strs[0]), - "Region %4d", context->selected_region); - VK_RESULT(update_ui_string(region_info_strs[0], 0, 0, 0, context->ui, context->render)); - - if(selected_region == NULL) { - snprintf( - region_info_strs[1], - sizeof(region_info_strs[1]), - ""); - VK_RESULT(update_ui_string(region_info_strs[1], 0, 0, 1, context->ui, context->render)); - - snprintf( - region_info_strs[2], - sizeof(region_info_strs[2]), - ""); - VK_RESULT(update_ui_string(region_info_strs[2], 0, 0, 2, context->ui, context->render)); - - snprintf( - region_info_strs[3], - sizeof(region_info_strs[3]), - ""); - VK_RESULT(update_ui_string(region_info_strs[3], 0, 0, 3, context->ui, context->render)); - } else { - snprintf( - region_info_strs[1], - sizeof(region_info_strs[1]), - "Q: %4d", selected_region->data.q); - VK_RESULT(update_ui_string(region_info_strs[1], 0, 0, 1, context->ui, context->render)); - - snprintf( - region_info_strs[2], - sizeof(region_info_strs[2]), - "R: %4d", selected_region->data.r); - VK_RESULT(update_ui_string(region_info_strs[2], 0, 0, 2, context->ui, context->render)); - - snprintf( - region_info_strs[3], - sizeof(region_info_strs[3]), - "Y: %4d", selected_region->data.y); - VK_RESULT(update_ui_string(region_info_strs[3], 0, 0, 3, context->ui, context->render)); - } - + update_region_info_ui(context); } if((context->key_spin[0] != 0 || context->key_spin[1] != 0 || @@ -387,7 +397,7 @@ void key_callback(GLFWwindow* window, int key, int scancode, int action, int mod case GLFW_KEY_EQUAL: if(action == GLFW_PRESS) { - add_hex_region(context); + context->selected_region = add_hex_region(context); } break; @@ -407,6 +417,97 @@ void key_callback(GLFWwindow* window, int key, int scancode, int action, int mod } } break; + + case GLFW_KEY_I: + if(action == GLFW_PRESS) { + if(context->hex->regions[context->selected_region] != NULL) { + context->hex->regions[context->selected_region]->data.q += 1; + add_transfer( + &context->hex->regions[context->selected_region]->data.q, + context->hex->regions[context->selected_region]->region, + offsetof(GPUHexRegion, q), + sizeof(uint32_t), + context->render->current_frame, + context->render); + } + update_region_info_ui(context); + } + break; + case GLFW_KEY_K: + if(action == GLFW_PRESS) { + if(context->hex->regions[context->selected_region] != NULL) { + context->hex->regions[context->selected_region]->data.q -= 1; + add_transfer( + &context->hex->regions[context->selected_region]->data.q, + context->hex->regions[context->selected_region]->region, + offsetof(GPUHexRegion, q), + sizeof(uint32_t), + context->render->current_frame, + context->render); + } + update_region_info_ui(context); + } + break; + case GLFW_KEY_J: + if(action == GLFW_PRESS) { + if(context->hex->regions[context->selected_region] != NULL) { + context->hex->regions[context->selected_region]->data.r += 1; + add_transfer( + &context->hex->regions[context->selected_region]->data.r, + context->hex->regions[context->selected_region]->region, + offsetof(GPUHexRegion, r), + sizeof(uint32_t), + context->render->current_frame, + context->render); + } + update_region_info_ui(context); + } + break; + case GLFW_KEY_L: + if(action == GLFW_PRESS) { + if(context->hex->regions[context->selected_region] != NULL) { + context->hex->regions[context->selected_region]->data.r -= 1; + add_transfer( + &context->hex->regions[context->selected_region]->data.r, + context->hex->regions[context->selected_region]->region, + offsetof(GPUHexRegion, r), + sizeof(uint32_t), + context->render->current_frame, + context->render); + } + update_region_info_ui(context); + } + break; + case GLFW_KEY_O: + if(action == GLFW_PRESS) { + if(context->hex->regions[context->selected_region] != NULL) { + context->hex->regions[context->selected_region]->data.y += 1; + add_transfer( + &context->hex->regions[context->selected_region]->data.y, + context->hex->regions[context->selected_region]->region, + offsetof(GPUHexRegion, y), + sizeof(int32_t), + context->render->current_frame, + context->render); + } + update_region_info_ui(context); + } + break; + case GLFW_KEY_U: + if(action == GLFW_PRESS) { + if(context->hex->regions[context->selected_region] != NULL) { + context->hex->regions[context->selected_region]->data.y -= 1; + add_transfer( + &context->hex->regions[context->selected_region]->data.y, + context->hex->regions[context->selected_region]->region, + offsetof(GPUHexRegion, y), + sizeof(int32_t), + context->render->current_frame, + context->render); + } + update_region_info_ui(context); + } + break; } }