|
|
|
@ -26,6 +26,7 @@ |
|
|
|
|
#include <assert.h> |
|
|
|
|
#include <string.h> |
|
|
|
|
#include <float.h> |
|
|
|
|
#include <limits.h> |
|
|
|
|
#include <math.h> |
|
|
|
|
|
|
|
|
|
struct Editor_State |
|
|
|
@ -46,17 +47,18 @@ static struct Editor_State editor_state; |
|
|
|
|
static struct Debug_Variable* debug_vars_list = NULL; |
|
|
|
|
static int* empty_indices = NULL; |
|
|
|
|
|
|
|
|
|
static void editor_color_combo(struct nk_context* context, vec4* color, int width, int height); |
|
|
|
|
static bool editor_widget_vec3(struct nk_context* context, |
|
|
|
|
vec3* value, |
|
|
|
|
const char* name_x, |
|
|
|
|
const char* name_y, |
|
|
|
|
const char* name_z, |
|
|
|
|
float min, |
|
|
|
|
float max, |
|
|
|
|
float step, |
|
|
|
|
float inc_per_pixel, |
|
|
|
|
int row_height); |
|
|
|
|
static void editor_widget_color_combov3(struct nk_context* context, vec3* color, int width, int height); |
|
|
|
|
static void editor_widget_color_combov4(struct nk_context* context, vec4* color, int width, int height); |
|
|
|
|
static bool editor_widget_v3(struct nk_context* context, |
|
|
|
|
vec3* value, |
|
|
|
|
const char* name_x, |
|
|
|
|
const char* name_y, |
|
|
|
|
const char* name_z, |
|
|
|
|
float min, |
|
|
|
|
float max, |
|
|
|
|
float step, |
|
|
|
|
float inc_per_pixel, |
|
|
|
|
int row_height); |
|
|
|
|
|
|
|
|
|
void editor_init(void) |
|
|
|
|
{ |
|
|
|
@ -145,9 +147,9 @@ void editor_update(float dt) |
|
|
|
|
{ |
|
|
|
|
if(!editor_state.enabled) return; |
|
|
|
|
|
|
|
|
|
struct Game_State* game_state = game_state_get(); |
|
|
|
|
struct Gui_State* gui_state = gui_state_get(); |
|
|
|
|
struct nk_context* context = &gui_state->context; |
|
|
|
|
struct Game_State* game_state = game_state_get(); |
|
|
|
|
struct Gui_State* gui_state = gui_state_get(); |
|
|
|
|
struct nk_context* context = &gui_state->context; |
|
|
|
|
int win_width = 0, win_height = 0; |
|
|
|
|
window_get_drawable_size(game_state->window, &win_width, &win_height); |
|
|
|
|
int half_width = win_width / 2, half_height = win_height / 2; |
|
|
|
@ -267,55 +269,104 @@ void editor_update(float dt) |
|
|
|
|
/* Entity Inspector */ |
|
|
|
|
if(nk_tree_push(context, NK_TREE_TAB, "Inspector", NK_MAXIMIZED)) |
|
|
|
|
{ |
|
|
|
|
const int row_height = 18; |
|
|
|
|
if(editor_state.selected_entity_id != -1) |
|
|
|
|
{ |
|
|
|
|
struct Entity* entity = entity_get(editor_state.selected_entity_id); |
|
|
|
|
static const int row_height = 15; |
|
|
|
|
nk_layout_row_dynamic(context, row_height, 2); |
|
|
|
|
nk_label(context, "Name", NK_TEXT_ALIGN_LEFT); nk_label(context, entity->name, NK_TEXT_ALIGN_RIGHT); |
|
|
|
|
nk_layout_row_dynamic(context, row_height, 2); |
|
|
|
|
nk_label(context, "ID", NK_TEXT_ALIGN_LEFT); nk_labelf(context, NK_TEXT_ALIGN_RIGHT, "%d", entity->id); |
|
|
|
|
nk_layout_row_dynamic(context, row_height, 2); |
|
|
|
|
nk_label(context, "Entity Type", NK_TEXT_ALIGN_LEFT); nk_labelf(context, NK_TEXT_ALIGN_RIGHT, "%s", entity_type_name_get(entity)); |
|
|
|
|
|
|
|
|
|
/* Transform */ |
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); nk_label(context, "Position", NK_TEXT_ALIGN_CENTERED); |
|
|
|
|
vec3 abs_pos = {0.f, 0.f, 0.f}; |
|
|
|
|
transform_get_absolute_pos(entity, &abs_pos); |
|
|
|
|
if(editor_widget_vec3(context, &abs_pos, "Px", "Py", "Pz", -FLT_MAX, FLT_MAX, 5.f, 1.f, row_height)) transform_set_position(entity, &abs_pos); |
|
|
|
|
|
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); nk_label(context, "Rotation", NK_TEXT_ALIGN_CENTERED); |
|
|
|
|
quat abs_rot = {0.f, 0.f, 0.f, 1.f}; |
|
|
|
|
transform_get_absolute_rot(entity, &abs_rot); |
|
|
|
|
vec3 rot_angles = {0.f, 0.f, 0.f}; |
|
|
|
|
rot_angles.x = TO_DEGREES(quat_get_pitch(&abs_rot)); |
|
|
|
|
rot_angles.y = TO_DEGREES(quat_get_yaw(&abs_rot)); |
|
|
|
|
rot_angles.z = TO_DEGREES(quat_get_roll(&abs_rot)); |
|
|
|
|
vec3 curr_rot = {rot_angles.x, rot_angles.y, rot_angles.z}; |
|
|
|
|
|
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); nk_property_float(context, "Rx", -FLT_MAX, &curr_rot.x, FLT_MAX, 5.f, 1.f); |
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); nk_property_float(context, "Ry", -FLT_MAX, &curr_rot.y, FLT_MAX, 5.f, 1.f); |
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); nk_property_float(context, "Rz", -FLT_MAX, &curr_rot.z, FLT_MAX, 5.f, 1.f); |
|
|
|
|
|
|
|
|
|
vec3 delta = {0.f, 0.f, 0.f}; |
|
|
|
|
vec3_sub(&delta, &rot_angles, &curr_rot); |
|
|
|
|
|
|
|
|
|
vec3 AXIS_X = {1.f, 0.f, 0.f}; |
|
|
|
|
vec3 AXIS_Y = {0.f, 1.f, 0.f}; |
|
|
|
|
vec3 AXIS_Z = {0.f, 0.f, 1.f}; |
|
|
|
|
|
|
|
|
|
const float epsilon = 0.0001f; |
|
|
|
|
if(fabsf(delta.x) > epsilon) transform_rotate(entity, &AXIS_X, delta.x, TS_WORLD); |
|
|
|
|
if(fabsf(delta.y) > epsilon) transform_rotate(entity, &AXIS_Y, delta.y, TS_WORLD); |
|
|
|
|
if(fabsf(delta.z) > epsilon) transform_rotate(entity, &AXIS_Z, delta.z, TS_WORLD); |
|
|
|
|
|
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); nk_label(context, "Scale", NK_TEXT_ALIGN_CENTERED); |
|
|
|
|
vec3 abs_scale = {0.f, 0.f, 0.f}; |
|
|
|
|
transform_get_absolute_scale(entity, &abs_scale); |
|
|
|
|
if(editor_widget_vec3(context, &abs_scale, "SX", "SY", "SZ", 0.1f, FLT_MAX, 1.f, 0.1f, row_height)) |
|
|
|
|
{ |
|
|
|
|
entity->transform.scale = abs_scale; |
|
|
|
|
transform_update_transmat(entity); |
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); nk_label(context, "Position", NK_TEXT_ALIGN_CENTERED); |
|
|
|
|
vec3 abs_pos = {0.f, 0.f, 0.f}; |
|
|
|
|
transform_get_absolute_pos(entity, &abs_pos); |
|
|
|
|
if(editor_widget_v3(context, &abs_pos, "Px", "Py", "Pz", -FLT_MAX, FLT_MAX, 5.f, 1.f, row_height)) transform_set_position(entity, &abs_pos); |
|
|
|
|
|
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); nk_label(context, "Rotation", NK_TEXT_ALIGN_CENTERED); |
|
|
|
|
quat abs_rot = {0.f, 0.f, 0.f, 1.f}; |
|
|
|
|
transform_get_absolute_rot(entity, &abs_rot); |
|
|
|
|
vec3 rot_angles = {0.f, 0.f, 0.f}; |
|
|
|
|
rot_angles.x = TO_DEGREES(quat_get_pitch(&abs_rot)); |
|
|
|
|
rot_angles.y = TO_DEGREES(quat_get_yaw(&abs_rot)); |
|
|
|
|
rot_angles.z = TO_DEGREES(quat_get_roll(&abs_rot)); |
|
|
|
|
vec3 curr_rot = {rot_angles.x, rot_angles.y, rot_angles.z}; |
|
|
|
|
|
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); nk_property_float(context, "Rx", -FLT_MAX, &curr_rot.x, FLT_MAX, 5.f, 1.f); |
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); nk_property_float(context, "Ry", -FLT_MAX, &curr_rot.y, FLT_MAX, 5.f, 1.f); |
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); nk_property_float(context, "Rz", -FLT_MAX, &curr_rot.z, FLT_MAX, 5.f, 1.f); |
|
|
|
|
|
|
|
|
|
vec3 delta = {0.f, 0.f, 0.f}; |
|
|
|
|
vec3_sub(&delta, &rot_angles, &curr_rot); |
|
|
|
|
|
|
|
|
|
vec3 AXIS_X = {1.f, 0.f, 0.f}; |
|
|
|
|
vec3 AXIS_Y = {0.f, 1.f, 0.f}; |
|
|
|
|
vec3 AXIS_Z = {0.f, 0.f, 1.f}; |
|
|
|
|
|
|
|
|
|
const float epsilon = 0.0001f; |
|
|
|
|
if(fabsf(delta.x) > epsilon) transform_rotate(entity, &AXIS_X, delta.x, TS_WORLD); |
|
|
|
|
if(fabsf(delta.y) > epsilon) transform_rotate(entity, &AXIS_Y, delta.y, TS_WORLD); |
|
|
|
|
if(fabsf(delta.z) > epsilon) transform_rotate(entity, &AXIS_Z, delta.z, TS_WORLD); |
|
|
|
|
|
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); nk_label(context, "Scale", NK_TEXT_ALIGN_CENTERED); |
|
|
|
|
vec3 abs_scale = {0.f, 0.f, 0.f}; |
|
|
|
|
transform_get_absolute_scale(entity, &abs_scale); |
|
|
|
|
if(editor_widget_v3(context, &abs_scale, "SX", "SY", "SZ", 0.1f, FLT_MAX, 1.f, 0.1f, row_height)) |
|
|
|
|
{ |
|
|
|
|
entity->transform.scale = abs_scale; |
|
|
|
|
transform_update_transmat(entity); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* Light */ |
|
|
|
|
if(entity->type == ET_LIGHT) |
|
|
|
|
{ |
|
|
|
|
if(nk_tree_push(context, NK_TREE_TAB, "Light", NK_MAXIMIZED)) |
|
|
|
|
{ |
|
|
|
|
struct Light* light = &entity->light; |
|
|
|
|
if(light->type > LT_POINT) |
|
|
|
|
{ |
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); |
|
|
|
|
nk_label(context, "Invalid light type!", NK_TEXT_ALIGN_CENTERED); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
static const char* light_types[] = {"Spot", "Directional", "Point"}; |
|
|
|
|
float combo_width = nk_widget_width(context), combo_height = row_height * (LT_MAX); |
|
|
|
|
|
|
|
|
|
nk_layout_row_dynamic(context, row_height, 2); |
|
|
|
|
nk_label(context, "Light Type", NK_TEXT_ALIGN_LEFT); |
|
|
|
|
nk_combobox(context, light_types, LT_MAX - 1, &light->type, row_height, nk_vec2(combo_width, combo_height)); |
|
|
|
|
|
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); nk_label(context, "Light Color", NK_TEXT_ALIGN_CENTERED); |
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); |
|
|
|
|
editor_widget_color_combov3(context, &light->color, 200, 300); |
|
|
|
|
|
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); |
|
|
|
|
nk_property_float(context, "Intensity", 0.f, &light->intensity, 100.f, 0.1f, 0.05f); |
|
|
|
|
|
|
|
|
|
if(light->type != LT_DIR) |
|
|
|
|
{ |
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); |
|
|
|
|
light->outer_angle = TO_RADIANS(nk_propertyf(context, "Outer Angle", TO_DEGREES(light->inner_angle), TO_DEGREES(light->outer_angle), 360, 1.f, 0.5f)); |
|
|
|
|
|
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); |
|
|
|
|
light->inner_angle = TO_RADIANS(nk_propertyf(context, "Inner Angle", 1.f, TO_DEGREES(light->inner_angle), TO_DEGREES(light->outer_angle), 1.f, 0.5f)); |
|
|
|
|
|
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); |
|
|
|
|
nk_property_int(context, "Radius", 1, &light->radius, INT_MAX, 1, 1); |
|
|
|
|
|
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); |
|
|
|
|
nk_property_float(context, "Falloff", 0.f, &light->falloff, 100.f, 0.1f, 0.05f); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
nk_tree_pop(context); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
@ -326,7 +377,6 @@ void editor_update(float dt) |
|
|
|
|
|
|
|
|
|
nk_group_end(context); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
nk_end(context); |
|
|
|
|
context->style.window.padding = default_padding; |
|
|
|
@ -334,6 +384,7 @@ void editor_update(float dt) |
|
|
|
|
/* Render Settings Window */ |
|
|
|
|
if(editor_state.renderer_settings_window) |
|
|
|
|
{ |
|
|
|
|
const int row_height = 25; |
|
|
|
|
if(nk_begin_titled(context, "Renderer_Settings_Window", "Renderer Settings", nk_rect(half_width, half_height, 300, 350), window_flags)) |
|
|
|
|
{ |
|
|
|
|
static struct Render_Settings render_settings; |
|
|
|
@ -341,31 +392,28 @@ void editor_update(float dt) |
|
|
|
|
if(nk_tree_push(context, NK_TREE_TAB, "Debug", NK_MAXIMIZED)) |
|
|
|
|
{ |
|
|
|
|
static const char* draw_modes[] = {"Triangles", "Lines", "Points"}; |
|
|
|
|
nk_layout_row_dynamic(context, 25, 2); |
|
|
|
|
nk_layout_row_dynamic(context, row_height, 2); |
|
|
|
|
nk_label(context, "Debug Draw", NK_TEXT_ALIGN_LEFT | NK_TEXT_ALIGN_MIDDLE); |
|
|
|
|
nk_checkbox_label(context, "", &render_settings.debug_draw_enabled); |
|
|
|
|
|
|
|
|
|
nk_layout_row_dynamic(context, 25, 2); |
|
|
|
|
nk_layout_row_dynamic(context, row_height, 2); |
|
|
|
|
nk_label(context, "Debug Draw Mode", NK_TEXT_ALIGN_LEFT | NK_TEXT_ALIGN_MIDDLE); |
|
|
|
|
render_settings.debug_draw_mode = nk_combo(context, draw_modes, 3, render_settings.debug_draw_mode, 20, nk_vec2(180, 100)); |
|
|
|
|
|
|
|
|
|
nk_layout_row_dynamic(context, 25, 2); |
|
|
|
|
nk_layout_row_dynamic(context, row_height, 2); |
|
|
|
|
nk_label(context, "Debug Color", NK_TEXT_ALIGN_LEFT | NK_TEXT_ALIGN_MIDDLE); |
|
|
|
|
editor_color_combo(context, &render_settings.debug_draw_color, 200, 400); |
|
|
|
|
editor_widget_color_combov4(context, &render_settings.debug_draw_color, 200, 400); |
|
|
|
|
nk_tree_pop(context); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(nk_tree_push(context, NK_TREE_TAB, "Fog", NK_MAXIMIZED)) |
|
|
|
|
{ |
|
|
|
|
static const char* fog_modes[] = {"None", "Linear", "Exponential", "Exponential Squared"}; |
|
|
|
|
nk_layout_row_dynamic(context, 25, 2); |
|
|
|
|
nk_layout_row_dynamic(context, row_height, 2); |
|
|
|
|
nk_label(context, "Color", NK_TEXT_ALIGN_LEFT | NK_TEXT_ALIGN_MIDDLE); |
|
|
|
|
static vec4 fog_color; |
|
|
|
|
vec4_fill_vec3(&fog_color, &render_settings.fog.color, 1.f); |
|
|
|
|
editor_color_combo(context, &fog_color, 200, 400); |
|
|
|
|
vec3_fill(&render_settings.fog.color, fog_color.x, fog_color.y, fog_color.z); |
|
|
|
|
editor_widget_color_combov3(context, &render_settings.fog.color, 200, 400); |
|
|
|
|
|
|
|
|
|
nk_layout_row_dynamic(context, 25, 2); |
|
|
|
|
nk_layout_row_dynamic(context, row_height, 2); |
|
|
|
|
nk_label(context, "Fog Mode", NK_TEXT_ALIGN_LEFT | NK_TEXT_ALIGN_MIDDLE); |
|
|
|
|
render_settings.fog.mode = nk_combo(context, |
|
|
|
|
fog_modes, |
|
|
|
@ -374,19 +422,21 @@ void editor_update(float dt) |
|
|
|
|
20, |
|
|
|
|
nk_vec2(180, 100)); |
|
|
|
|
|
|
|
|
|
nk_layout_row_dynamic(context, 25, 2); |
|
|
|
|
nk_layout_row_dynamic(context, row_height, 2); |
|
|
|
|
nk_label(context, "Density", NK_TEXT_ALIGN_LEFT | NK_TEXT_ALIGN_MIDDLE); |
|
|
|
|
struct nk_rect bounds = nk_widget_bounds(context); |
|
|
|
|
nk_slider_float(context, 0.f, &render_settings.fog.density, 1.f, 0.005); |
|
|
|
|
if(nk_input_is_mouse_hovering_rect(&context->input, bounds)) |
|
|
|
|
{ |
|
|
|
|
static char float_str[10] = {'\0'}; |
|
|
|
|
snprintf(float_str, 6, "%.4f", render_settings.fog.density); |
|
|
|
|
float_str[6] = '\0'; |
|
|
|
|
nk_tooltip(context, float_str); |
|
|
|
|
if(nk_tooltip_begin(context, 100)) |
|
|
|
|
{ |
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); |
|
|
|
|
nk_labelf(context, NK_TEXT_ALIGN_CENTERED, "%.3f", render_settings.fog.density); |
|
|
|
|
nk_tooltip_end(context); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
nk_layout_row_dynamic(context, 25, 1); |
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); |
|
|
|
|
nk_property_float(context, |
|
|
|
|
"Start Distance", |
|
|
|
|
0.f, |
|
|
|
@ -394,7 +444,7 @@ void editor_update(float dt) |
|
|
|
|
render_settings.fog.max_dist, |
|
|
|
|
5.f, 10.f); |
|
|
|
|
|
|
|
|
|
nk_layout_row_dynamic(context, 25, 1); |
|
|
|
|
nk_layout_row_dynamic(context, row_height, 1); |
|
|
|
|
nk_property_float(context, |
|
|
|
|
"Max Distance", |
|
|
|
|
render_settings.fog.start_dist, |
|
|
|
@ -419,7 +469,41 @@ void editor_toggle(void) |
|
|
|
|
editor_state.enabled = !editor_state.enabled; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void editor_color_combo(struct nk_context* context, vec4* color, int width, int height) |
|
|
|
|
void editor_widget_color_combov3(struct nk_context* context, vec3* color, int width, int height) |
|
|
|
|
{ |
|
|
|
|
struct nk_color temp_color = nk_rgba_f(color->x, color->y, color->z, 1.f); |
|
|
|
|
if(nk_combo_begin_color(context, temp_color, nk_vec2(width, height))) |
|
|
|
|
{ |
|
|
|
|
enum color_mode {COL_RGB, COL_HSV}; |
|
|
|
|
static int col_mode = COL_RGB; |
|
|
|
|
nk_layout_row_dynamic(context, 25, 2); |
|
|
|
|
col_mode = nk_option_label(context, "RGB", col_mode == COL_RGB) ? COL_RGB : col_mode; |
|
|
|
|
col_mode = nk_option_label(context, "HSV", col_mode == COL_HSV) ? COL_HSV : col_mode; |
|
|
|
|
nk_layout_row_dynamic(context, 120, 1); |
|
|
|
|
temp_color = nk_color_picker(context, temp_color, NK_RGB); |
|
|
|
|
nk_layout_row_dynamic(context, 25, 1); |
|
|
|
|
if(col_mode == COL_RGB) |
|
|
|
|
{ |
|
|
|
|
temp_color.r = (nk_byte)nk_propertyi(context, "#R:", 0, temp_color.r, 255, 1,1); |
|
|
|
|
temp_color.g = (nk_byte)nk_propertyi(context, "#G:", 0, temp_color.g, 255, 1,1); |
|
|
|
|
temp_color.b = (nk_byte)nk_propertyi(context, "#B:", 0, temp_color.b, 255, 1,1); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
nk_byte tmp[4]; |
|
|
|
|
nk_color_hsva_bv(tmp, temp_color); |
|
|
|
|
tmp[0] = (nk_byte)nk_propertyi(context, "#H:", 0, tmp[0], 255, 1,1); |
|
|
|
|
tmp[1] = (nk_byte)nk_propertyi(context, "#S:", 0, tmp[1], 255, 1,1); |
|
|
|
|
tmp[2] = (nk_byte)nk_propertyi(context, "#V:", 0, tmp[2], 255, 1,1); |
|
|
|
|
temp_color = nk_hsva_bv(tmp); |
|
|
|
|
} |
|
|
|
|
float empty = 1.f; |
|
|
|
|
nk_color_f(&color->x, &color->y, &color->z, &empty, temp_color); |
|
|
|
|
nk_combo_end(context); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void editor_widget_color_combov4(struct nk_context* context, vec4* color, int width, int height) |
|
|
|
|
{ |
|
|
|
|
struct nk_color temp_color = nk_rgba_f(color->x, color->y, color->z, color->w); |
|
|
|
|
if(nk_combo_begin_color(context, temp_color, nk_vec2(width, height))) |
|
|
|
@ -463,7 +547,7 @@ void editor_cleanup(void) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool editor_widget_vec3(struct nk_context* context, vec3* value, const char* name_x, const char* name_y, const char* name_z, float min, float max, float step, float inc_per_pixel, int row_height) |
|
|
|
|
bool editor_widget_v3(struct nk_context* context, vec3* value, const char* name_x, const char* name_y, const char* name_z, float min, float max, float step, float inc_per_pixel, int row_height) |
|
|
|
|
{ |
|
|
|
|
bool changed = false; |
|
|
|
|
vec3 val_copy = {0.f, 0.f, 0.f}; |
|
|
|
|