|
|
|
@ -16,14 +16,23 @@
|
|
|
|
|
#include <math.h>
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
|
|
typedef struct EditorContextStruct {
|
|
|
|
|
typedef struct EditorDataStruct {
|
|
|
|
|
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;
|
|
|
|
|
} EditorData;
|
|
|
|
|
|
|
|
|
|
#define COLOR_PICK_CONTAINER_ID 0x03
|
|
|
|
|
typedef struct ColorUIDataStruct {
|
|
|
|
|
double current_hsv[3];
|
|
|
|
|
vec4 current;
|
|
|
|
|
vec4 saved[12];
|
|
|
|
|
char string[10];
|
|
|
|
|
int string_len;
|
|
|
|
|
} ColorUIData;
|
|
|
|
|
|
|
|
|
|
typedef struct ClientContextStruct {
|
|
|
|
|
GLFWwindow* window;
|
|
|
|
@ -48,7 +57,8 @@ typedef struct ClientContextStruct {
|
|
|
|
|
float zoom_speed;
|
|
|
|
|
float move_speed;
|
|
|
|
|
|
|
|
|
|
EditorContext editor;
|
|
|
|
|
EditorData editor;
|
|
|
|
|
ColorUIData color;
|
|
|
|
|
} ClientContext;
|
|
|
|
|
|
|
|
|
|
void* network_thread(void* data) {
|
|
|
|
@ -58,6 +68,11 @@ void* network_thread(void* data) {
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
uint32_t hex_color(vec4 color) {
|
|
|
|
|
// TODO: implement vec4 -> uint32 color conversion
|
|
|
|
|
return 0x0000000;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
uint32_t add_hex_region(ClientContext* context) {
|
|
|
|
|
HexRegion* region;
|
|
|
|
|
|
|
|
|
@ -92,15 +107,6 @@ uint32_t add_hex_region(ClientContext* context) {
|
|
|
|
|
return i;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#define COLOR_PICK_CONTAINER_ID 0x03
|
|
|
|
|
typedef struct ColorUIDataStruct {
|
|
|
|
|
double current_hsv[3];
|
|
|
|
|
vec4 current;
|
|
|
|
|
vec4 saved[12];
|
|
|
|
|
char string[10];
|
|
|
|
|
int string_len;
|
|
|
|
|
} ColorUIData;
|
|
|
|
|
|
|
|
|
|
void update_hex_string(UIContext* ui, RenderContext* gpu, ColorUIData* data) {
|
|
|
|
|
snprintf(data->string, 10, "#%02X%02X%02X%02X",
|
|
|
|
|
(uint)rintf(data->current[0]*255),
|
|
|
|
@ -607,7 +613,7 @@ VkResult color_ui(ClientContext* context) {
|
|
|
|
|
.num_drawables = sizeof(drawables)/sizeof(GPUDrawable),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
ColorUIData* data = malloc(sizeof(ColorUIData));
|
|
|
|
|
ColorUIData* data = &context->color;
|
|
|
|
|
data->string_len = 8;
|
|
|
|
|
data->string[0] = '#';
|
|
|
|
|
data->string[1] = '0';
|
|
|
|
@ -1382,6 +1388,26 @@ void key_callback(GLFWwindow* window, int key, int scancode, int action, int mod
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case GLFW_KEY_E:
|
|
|
|
|
if(action == GLFW_PRESS) {
|
|
|
|
|
HexRegion* region = context->hex->regions[context->hex->data.clicked_region];
|
|
|
|
|
if(region != NULL) {
|
|
|
|
|
region->data.hexes[context->hex->data.clicked_hex].color[context->hex->data.clicked_vertex] = hex_color(context->color.current);
|
|
|
|
|
add_transfer(
|
|
|
|
|
®ion->data.hexes[context->hex->data.clicked_hex].color[context->hex->data.clicked_vertex],
|
|
|
|
|
region->region,
|
|
|
|
|
offsetof(GPUHexRegion, hexes)
|
|
|
|
|
+ sizeof(GPUHex)*context->hex->data.clicked_hex
|
|
|
|
|
+ offsetof(GPUHex, color)
|
|
|
|
|
+ sizeof(uint32_t)*(context->hex->data.clicked_vertex),
|
|
|
|
|
sizeof(uint32_t),
|
|
|
|
|
context->render->current_frame,
|
|
|
|
|
context->render);
|
|
|
|
|
update_hex_info_ui(context);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|