|
|
@ -15,6 +15,15 @@
|
|
|
|
#include <math.h>
|
|
|
|
#include <math.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct EditorContextStruct {
|
|
|
|
|
|
|
|
uint32_t selected_region;
|
|
|
|
|
|
|
|
uint32_t last_selected_region;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint32_t last_clicked_region;
|
|
|
|
|
|
|
|
uint32_t last_clicked_hex;
|
|
|
|
|
|
|
|
uint32_t last_clicked_vertex;
|
|
|
|
|
|
|
|
} EditorContext;
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct ClientContextStruct {
|
|
|
|
typedef struct ClientContextStruct {
|
|
|
|
GLFWwindow* window;
|
|
|
|
GLFWwindow* window;
|
|
|
|
RenderContext* render;
|
|
|
|
RenderContext* render;
|
|
|
@ -43,12 +52,7 @@ typedef struct ClientContextStruct {
|
|
|
|
float zoom_speed;
|
|
|
|
float zoom_speed;
|
|
|
|
float move_speed;
|
|
|
|
float move_speed;
|
|
|
|
|
|
|
|
|
|
|
|
uint32_t selected_region;
|
|
|
|
EditorContext editor;
|
|
|
|
uint32_t last_selected_region;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint32_t last_clicked_region;
|
|
|
|
|
|
|
|
uint32_t last_clicked_hex;
|
|
|
|
|
|
|
|
uint32_t last_clicked_vertex;
|
|
|
|
|
|
|
|
} ClientContext;
|
|
|
|
} ClientContext;
|
|
|
|
|
|
|
|
|
|
|
|
void* network_thread(void* data) {
|
|
|
|
void* network_thread(void* data) {
|
|
|
@ -252,11 +256,11 @@ VkResult region_info_ui(ClientContext* context) {
|
|
|
|
VkResult update_region_info_ui(ClientContext* context) {
|
|
|
|
VkResult update_region_info_ui(ClientContext* context) {
|
|
|
|
char temp[20];
|
|
|
|
char temp[20];
|
|
|
|
VkResult result;
|
|
|
|
VkResult result;
|
|
|
|
HexRegion* selected_region = context->hex->regions[context->selected_region];
|
|
|
|
HexRegion* selected_region = context->hex->regions[context->editor.selected_region];
|
|
|
|
|
|
|
|
|
|
|
|
snprintf(temp,
|
|
|
|
snprintf(temp,
|
|
|
|
sizeof(temp),
|
|
|
|
sizeof(temp),
|
|
|
|
"Region %4d", context->selected_region);
|
|
|
|
"Region %4d", context->editor.selected_region);
|
|
|
|
VK_RESULT(update_ui_string(temp, 0, 0, 0, context->ui, context->render));
|
|
|
|
VK_RESULT(update_ui_string(temp, 0, 0, 0, context->ui, context->render));
|
|
|
|
|
|
|
|
|
|
|
|
if(selected_region == NULL) {
|
|
|
|
if(selected_region == NULL) {
|
|
|
@ -418,17 +422,17 @@ VkResult main_thread(ClientContext* context) {
|
|
|
|
|
|
|
|
|
|
|
|
glfwPollEvents();
|
|
|
|
glfwPollEvents();
|
|
|
|
|
|
|
|
|
|
|
|
if(context->last_clicked_region != context->hex->data.clicked_region ||
|
|
|
|
if(context->editor.last_clicked_region != context->hex->data.clicked_region ||
|
|
|
|
context->last_clicked_hex != context->hex->data.clicked_hex ||
|
|
|
|
context->editor.last_clicked_hex != context->hex->data.clicked_hex ||
|
|
|
|
context->last_clicked_vertex != context->hex->data.clicked_vertex) {
|
|
|
|
context->editor.last_clicked_vertex != context->hex->data.clicked_vertex) {
|
|
|
|
context->last_clicked_region = context->hex->data.clicked_region;
|
|
|
|
context->editor.last_clicked_region = context->hex->data.clicked_region;
|
|
|
|
context->last_clicked_hex = context->hex->data.clicked_hex;
|
|
|
|
context->editor.last_clicked_hex = context->hex->data.clicked_hex;
|
|
|
|
context->last_clicked_vertex = context->hex->data.clicked_vertex;
|
|
|
|
context->editor.last_clicked_vertex = context->hex->data.clicked_vertex;
|
|
|
|
update_hex_info_ui(context);
|
|
|
|
update_hex_info_ui(context);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(context->selected_region != context->last_selected_region) {
|
|
|
|
if(context->editor.selected_region != context->editor.last_selected_region) {
|
|
|
|
context->last_selected_region = context->selected_region;
|
|
|
|
context->editor.last_selected_region = context->editor.selected_region;
|
|
|
|
update_region_info_ui(context);
|
|
|
|
update_region_info_ui(context);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -577,34 +581,34 @@ void key_callback(GLFWwindow* window, int key, int scancode, int action, int mod
|
|
|
|
|
|
|
|
|
|
|
|
case GLFW_KEY_EQUAL:
|
|
|
|
case GLFW_KEY_EQUAL:
|
|
|
|
if(action == GLFW_PRESS) {
|
|
|
|
if(action == GLFW_PRESS) {
|
|
|
|
context->selected_region = add_hex_region(context);
|
|
|
|
context->editor.selected_region = add_hex_region(context);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GLFW_KEY_LEFT_BRACKET:
|
|
|
|
case GLFW_KEY_LEFT_BRACKET:
|
|
|
|
if(action == GLFW_PRESS) {
|
|
|
|
if(action == GLFW_PRESS) {
|
|
|
|
context->selected_region -= 1;
|
|
|
|
context->editor.selected_region -= 1;
|
|
|
|
if(context->selected_region > MAX_LOADED_REGIONS) {
|
|
|
|
if(context->editor.selected_region > MAX_LOADED_REGIONS) {
|
|
|
|
context->selected_region = MAX_LOADED_REGIONS;
|
|
|
|
context->editor.selected_region = MAX_LOADED_REGIONS;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case GLFW_KEY_RIGHT_BRACKET:
|
|
|
|
case GLFW_KEY_RIGHT_BRACKET:
|
|
|
|
if(action == GLFW_PRESS) {
|
|
|
|
if(action == GLFW_PRESS) {
|
|
|
|
context->selected_region += 1;
|
|
|
|
context->editor.selected_region += 1;
|
|
|
|
if(context->selected_region > MAX_LOADED_REGIONS) {
|
|
|
|
if(context->editor.selected_region > MAX_LOADED_REGIONS) {
|
|
|
|
context->selected_region = 0;
|
|
|
|
context->editor.selected_region = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case GLFW_KEY_I:
|
|
|
|
case GLFW_KEY_I:
|
|
|
|
if(action == GLFW_PRESS) {
|
|
|
|
if(action == GLFW_PRESS) {
|
|
|
|
if(context->hex->regions[context->selected_region] != NULL) {
|
|
|
|
if(context->hex->regions[context->editor.selected_region] != NULL) {
|
|
|
|
context->hex->regions[context->selected_region]->data.q += 1;
|
|
|
|
context->hex->regions[context->editor.selected_region]->data.q += 1;
|
|
|
|
add_transfer(
|
|
|
|
add_transfer(
|
|
|
|
&context->hex->regions[context->selected_region]->data.q,
|
|
|
|
&context->hex->regions[context->editor.selected_region]->data.q,
|
|
|
|
context->hex->regions[context->selected_region]->region,
|
|
|
|
context->hex->regions[context->editor.selected_region]->region,
|
|
|
|
offsetof(GPUHexRegion, q),
|
|
|
|
offsetof(GPUHexRegion, q),
|
|
|
|
sizeof(uint32_t),
|
|
|
|
sizeof(uint32_t),
|
|
|
|
context->render->current_frame,
|
|
|
|
context->render->current_frame,
|
|
|
@ -615,11 +619,11 @@ void key_callback(GLFWwindow* window, int key, int scancode, int action, int mod
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case GLFW_KEY_K:
|
|
|
|
case GLFW_KEY_K:
|
|
|
|
if(action == GLFW_PRESS) {
|
|
|
|
if(action == GLFW_PRESS) {
|
|
|
|
if(context->hex->regions[context->selected_region] != NULL) {
|
|
|
|
if(context->hex->regions[context->editor.selected_region] != NULL) {
|
|
|
|
context->hex->regions[context->selected_region]->data.q -= 1;
|
|
|
|
context->hex->regions[context->editor.selected_region]->data.q -= 1;
|
|
|
|
add_transfer(
|
|
|
|
add_transfer(
|
|
|
|
&context->hex->regions[context->selected_region]->data.q,
|
|
|
|
&context->hex->regions[context->editor.selected_region]->data.q,
|
|
|
|
context->hex->regions[context->selected_region]->region,
|
|
|
|
context->hex->regions[context->editor.selected_region]->region,
|
|
|
|
offsetof(GPUHexRegion, q),
|
|
|
|
offsetof(GPUHexRegion, q),
|
|
|
|
sizeof(uint32_t),
|
|
|
|
sizeof(uint32_t),
|
|
|
|
context->render->current_frame,
|
|
|
|
context->render->current_frame,
|
|
|
@ -630,11 +634,11 @@ void key_callback(GLFWwindow* window, int key, int scancode, int action, int mod
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case GLFW_KEY_J:
|
|
|
|
case GLFW_KEY_J:
|
|
|
|
if(action == GLFW_PRESS) {
|
|
|
|
if(action == GLFW_PRESS) {
|
|
|
|
if(context->hex->regions[context->selected_region] != NULL) {
|
|
|
|
if(context->hex->regions[context->editor.selected_region] != NULL) {
|
|
|
|
context->hex->regions[context->selected_region]->data.r += 1;
|
|
|
|
context->hex->regions[context->editor.selected_region]->data.r += 1;
|
|
|
|
add_transfer(
|
|
|
|
add_transfer(
|
|
|
|
&context->hex->regions[context->selected_region]->data.r,
|
|
|
|
&context->hex->regions[context->editor.selected_region]->data.r,
|
|
|
|
context->hex->regions[context->selected_region]->region,
|
|
|
|
context->hex->regions[context->editor.selected_region]->region,
|
|
|
|
offsetof(GPUHexRegion, r),
|
|
|
|
offsetof(GPUHexRegion, r),
|
|
|
|
sizeof(uint32_t),
|
|
|
|
sizeof(uint32_t),
|
|
|
|
context->render->current_frame,
|
|
|
|
context->render->current_frame,
|
|
|
@ -645,11 +649,11 @@ void key_callback(GLFWwindow* window, int key, int scancode, int action, int mod
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case GLFW_KEY_L:
|
|
|
|
case GLFW_KEY_L:
|
|
|
|
if(action == GLFW_PRESS) {
|
|
|
|
if(action == GLFW_PRESS) {
|
|
|
|
if(context->hex->regions[context->selected_region] != NULL) {
|
|
|
|
if(context->hex->regions[context->editor.selected_region] != NULL) {
|
|
|
|
context->hex->regions[context->selected_region]->data.r -= 1;
|
|
|
|
context->hex->regions[context->editor.selected_region]->data.r -= 1;
|
|
|
|
add_transfer(
|
|
|
|
add_transfer(
|
|
|
|
&context->hex->regions[context->selected_region]->data.r,
|
|
|
|
&context->hex->regions[context->editor.selected_region]->data.r,
|
|
|
|
context->hex->regions[context->selected_region]->region,
|
|
|
|
context->hex->regions[context->editor.selected_region]->region,
|
|
|
|
offsetof(GPUHexRegion, r),
|
|
|
|
offsetof(GPUHexRegion, r),
|
|
|
|
sizeof(uint32_t),
|
|
|
|
sizeof(uint32_t),
|
|
|
|
context->render->current_frame,
|
|
|
|
context->render->current_frame,
|
|
|
@ -660,11 +664,11 @@ void key_callback(GLFWwindow* window, int key, int scancode, int action, int mod
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case GLFW_KEY_O:
|
|
|
|
case GLFW_KEY_O:
|
|
|
|
if(action == GLFW_PRESS) {
|
|
|
|
if(action == GLFW_PRESS) {
|
|
|
|
if(context->hex->regions[context->selected_region] != NULL) {
|
|
|
|
if(context->hex->regions[context->editor.selected_region] != NULL) {
|
|
|
|
context->hex->regions[context->selected_region]->data.y += 1;
|
|
|
|
context->hex->regions[context->editor.selected_region]->data.y += 1;
|
|
|
|
add_transfer(
|
|
|
|
add_transfer(
|
|
|
|
&context->hex->regions[context->selected_region]->data.y,
|
|
|
|
&context->hex->regions[context->editor.selected_region]->data.y,
|
|
|
|
context->hex->regions[context->selected_region]->region,
|
|
|
|
context->hex->regions[context->editor.selected_region]->region,
|
|
|
|
offsetof(GPUHexRegion, y),
|
|
|
|
offsetof(GPUHexRegion, y),
|
|
|
|
sizeof(int32_t),
|
|
|
|
sizeof(int32_t),
|
|
|
|
context->render->current_frame,
|
|
|
|
context->render->current_frame,
|
|
|
@ -675,11 +679,11 @@ void key_callback(GLFWwindow* window, int key, int scancode, int action, int mod
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case GLFW_KEY_U:
|
|
|
|
case GLFW_KEY_U:
|
|
|
|
if(action == GLFW_PRESS) {
|
|
|
|
if(action == GLFW_PRESS) {
|
|
|
|
if(context->hex->regions[context->selected_region] != NULL) {
|
|
|
|
if(context->hex->regions[context->editor.selected_region] != NULL) {
|
|
|
|
context->hex->regions[context->selected_region]->data.y -= 1;
|
|
|
|
context->hex->regions[context->editor.selected_region]->data.y -= 1;
|
|
|
|
add_transfer(
|
|
|
|
add_transfer(
|
|
|
|
&context->hex->regions[context->selected_region]->data.y,
|
|
|
|
&context->hex->regions[context->editor.selected_region]->data.y,
|
|
|
|
context->hex->regions[context->selected_region]->region,
|
|
|
|
context->hex->regions[context->editor.selected_region]->region,
|
|
|
|
offsetof(GPUHexRegion, y),
|
|
|
|
offsetof(GPUHexRegion, y),
|
|
|
|
sizeof(int32_t),
|
|
|
|
sizeof(int32_t),
|
|
|
|
context->render->current_frame,
|
|
|
|
context->render->current_frame,
|
|
|
@ -826,10 +830,12 @@ int main() {
|
|
|
|
.zoom_speed = 1.0,
|
|
|
|
.zoom_speed = 1.0,
|
|
|
|
.move_speed = 0.1,
|
|
|
|
.move_speed = 0.1,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.editor = {
|
|
|
|
.selected_region = MAX_LOADED_REGIONS,
|
|
|
|
.selected_region = MAX_LOADED_REGIONS,
|
|
|
|
.last_selected_region = 0,
|
|
|
|
.last_selected_region = 0,
|
|
|
|
|
|
|
|
|
|
|
|
.last_clicked_region = MAX_LOADED_REGIONS,
|
|
|
|
.last_clicked_region = MAX_LOADED_REGIONS,
|
|
|
|
|
|
|
|
},
|
|
|
|
};
|
|
|
|
};
|
|
|
|
if(context.window == NULL || context.render == NULL || context.ui == NULL || context.hex == NULL) {
|
|
|
|
if(context.window == NULL || context.render == NULL || context.ui == NULL || context.hex == NULL) {
|
|
|
|
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
|
|
|
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
|
|
|