mirror of
https://github.com/armory3d/armorpaint.git
synced 2026-10-02 02:54:34 +08:00
minits progress
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -66,7 +66,11 @@ function tab_objects_draw_list(ui: zui_t, list_handle: zui_handle_t, current_obj
|
||||
|
||||
if (current_object.children.length > 0) {
|
||||
zui_row([1 / 13, 12 / 13]);
|
||||
b = zui_panel(zui_nest(list_handle, tab_objects_line_counter, {selected: true}), "", true, false, false);
|
||||
let h: zui_handle_t = zui_nest(list_handle, tab_objects_line_counter);
|
||||
if (h.init) {
|
||||
h.selected = true;
|
||||
}
|
||||
b = zui_panel(h, "", true, false, false);
|
||||
zui_text(current_object.name);
|
||||
}
|
||||
else {
|
||||
@@ -120,7 +124,12 @@ function tab_objects_draw(htab: zui_handle_t) {
|
||||
}
|
||||
zui_end_sticky();
|
||||
|
||||
if (zui_panel(zui_handle(__ID__, {selected: true}), "Outliner")) {
|
||||
let outliner_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (outliner_handle.init) {
|
||||
outliner_handle.selected = true;
|
||||
}
|
||||
|
||||
if (zui_panel(outliner_handle, "Outliner")) {
|
||||
// ui.indent();
|
||||
ui._y -= zui_ELEMENT_OFFSET(ui);
|
||||
|
||||
@@ -134,7 +143,12 @@ function tab_objects_draw(htab: zui_handle_t) {
|
||||
// ui.unindent();
|
||||
}
|
||||
|
||||
if (zui_panel(zui_handle(__ID__, {selected: true}), "Properties")) {
|
||||
let properties_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (properties_handle.init) {
|
||||
properties_handle.selected = true;
|
||||
}
|
||||
|
||||
if (zui_panel(properties_handle, "Properties")) {
|
||||
// ui.indent();
|
||||
|
||||
if (context_raw.selected_object != null) {
|
||||
@@ -263,7 +277,13 @@ function tab_objects_draw(htab: zui_handle_t) {
|
||||
|
||||
if (context_raw.selected_object.name == "Scene") {
|
||||
let p = scene_world;
|
||||
p.strength = zui_slider(zui_handle(__ID__, {value: p.strength}), "Environment", 0.0, 5.0, true);
|
||||
|
||||
let p_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (p_handle.init) {
|
||||
p_handle.value = p.strength;
|
||||
}
|
||||
|
||||
p.strength = zui_slider(p_handle, "Environment", 0.0, 5.0, true);
|
||||
}
|
||||
else if (context_raw.selected_object.ext_type == "light_object_t") {
|
||||
let light = context_raw.selected_object.ext;
|
||||
|
||||
Binary file not shown.
@@ -64,7 +64,7 @@ let image_texture_node_def: zui_node_t = {
|
||||
name: _tr("Alpha"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 1.0,
|
||||
default_value: f32_array_create_x(1.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
@@ -76,8 +76,8 @@ let image_texture_node_def: zui_node_t = {
|
||||
name: _tr("file"),
|
||||
type: "ENUM",
|
||||
output: -1,
|
||||
default_value: 0,
|
||||
data: "",
|
||||
default_value: f32_array_create_x(0),
|
||||
data: u8_array_create_from_string(""),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
@@ -87,8 +87,8 @@ let image_texture_node_def: zui_node_t = {
|
||||
name: _tr("color_space"),
|
||||
type: "ENUM",
|
||||
output: -1,
|
||||
default_value: 0,
|
||||
data: ["linear", "srgb"],
|
||||
default_value: f32_array_create_x(0),
|
||||
data: u8_array_create_from_string("linear\0srgb"),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
|
||||
@@ -51,7 +51,13 @@ function inpaint_node_init() {
|
||||
function inpaint_node_buttons(ui: zui_t, nodes: zui_nodes_t, node: zui_node_t) {
|
||||
inpaint_node_auto = node.buttons[0].default_value == 0 ? false : true;
|
||||
if (!inpaint_node_auto) {
|
||||
inpaint_node_strength = zui_slider(zui_handle(__ID__, { value: inpaint_node_strength }), tr("strength"), 0, 1, true);
|
||||
|
||||
let inpaint_node_strength_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (inpaint_node_strength_handle.init) {
|
||||
inpaint_node_strength_handle.value = inpaint_node_strength;
|
||||
}
|
||||
|
||||
inpaint_node_strength = zui_slider(inpaint_node_strength_handle, tr("strength"), 0, 1, true);
|
||||
inpaint_node_prompt = zui_text_area(zui_handle(__ID__), zui_align_t.LEFT, true, tr("prompt"), true);
|
||||
node.buttons[1].height = 1 + string_split(inpaint_node_prompt, "\n").length;
|
||||
}
|
||||
@@ -223,7 +229,7 @@ let inpaint_node_def: zui_node_t = {
|
||||
name: _tr("auto"),
|
||||
type: "BOOL",
|
||||
output: 0,
|
||||
default_value: true,
|
||||
default_value: f32_array_create_x(1),
|
||||
data: null,
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
|
||||
@@ -217,7 +217,7 @@ let photo_to_pbr_node_def: zui_node_t = {
|
||||
name: _tr("Occlusion"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 1.0,
|
||||
default_value: f32_array_create_x(1.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
@@ -229,7 +229,7 @@ let photo_to_pbr_node_def: zui_node_t = {
|
||||
name: _tr("Roughness"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 1.0,
|
||||
default_value: f32_array_create_x(1.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
@@ -241,7 +241,7 @@ let photo_to_pbr_node_def: zui_node_t = {
|
||||
name: _tr("Metallic"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 0.0,
|
||||
default_value: f32_array_create_x(0.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
@@ -265,7 +265,7 @@ let photo_to_pbr_node_def: zui_node_t = {
|
||||
name: _tr("Height"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 1.0,
|
||||
default_value: f32_array_create_x(1.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
|
||||
@@ -277,7 +277,7 @@ let text_to_photo_node_def: zui_node_t = {
|
||||
name: _tr("tiling"),
|
||||
type: "BOOL",
|
||||
output: 0,
|
||||
default_value: false,
|
||||
default_value: f32_array_create_x(0),
|
||||
data: null,
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
|
||||
@@ -27,7 +27,12 @@ function tiling_node_init() {
|
||||
function tiling_node_buttons(ui: zui_t, nodes: zui_nodes_t, node: zui_node_t) {
|
||||
tiling_node_auto = node.buttons[0].default_value == 0 ? false : true;
|
||||
if (!tiling_node_auto) {
|
||||
tiling_node_strength = zui_slider(zui_handle(__ID__, { value: tiling_node_strength }), tr("strength"), 0, 1, true);
|
||||
let tiling_node_strength_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (tiling_node_strength_handle.init) {
|
||||
tiling_node_strength_handle.value = tiling_node_strength;
|
||||
}
|
||||
|
||||
tiling_node_strength = zui_slider(tiling_node_strength_handle, tr("strength"), 0, 1, true);
|
||||
tiling_node_prompt = zui_text_area(zui_handle(__ID__), zui_align_t.LEFT, true, tr("prompt"), true);
|
||||
node.buttons[1].height = 1 + string_split(tiling_node_prompt, "\n").length;
|
||||
}
|
||||
@@ -136,7 +141,7 @@ let tiling_node_def: zui_node_t = {
|
||||
name: _tr("auto"),
|
||||
type: "BOOL",
|
||||
output: 0,
|
||||
default_value: true,
|
||||
default_value: f32_array_create_x(1),
|
||||
data: null,
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
|
||||
@@ -106,7 +106,7 @@ let variance_node_def: zui_node_t = {
|
||||
name: _tr("Strength"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 0.5,
|
||||
default_value: f32_array_create_x(0.5),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -125,7 +125,7 @@ function import_folder_run(path: string) {
|
||||
|
||||
function import_folder_place_image_node(nodes: zui_nodes_t, canvas: zui_node_canvas_t, asset: string, ny: i32, to_id: i32, to_socket: i32) {
|
||||
let n: zui_node_t = nodes_material_create_node("TEX_IMAGE");
|
||||
n.buttons[0].default_value = base_get_asset_index(asset);
|
||||
n.buttons[0].default_value = f32_array_create_x(base_get_asset_index(asset));
|
||||
n.x = 72;
|
||||
n.y = ny;
|
||||
let l: zui_node_link_t = { id: zui_get_link_id(canvas.links), from_id: n.id, from_socket: 0, to_id: to_id, to_socket: to_socket };
|
||||
|
||||
@@ -155,7 +155,7 @@ function brush_output_node_run(self: brush_output_node_t, from: i32) {
|
||||
// name: _tr("Position"),
|
||||
// type: "VECTOR",
|
||||
// color: 0xff63c763,
|
||||
// default_value: f32([0.0, 0.0, 0.0]),
|
||||
// default_value: f32_array_create_xyz(0.0, 0.0, 0.0),
|
||||
// min: 0.0,
|
||||
// max: 1.0,
|
||||
// precision: 100,
|
||||
@@ -167,7 +167,7 @@ function brush_output_node_run(self: brush_output_node_t, from: i32) {
|
||||
// name: _tr("Radius"),
|
||||
// type: "VALUE",
|
||||
// color: 0xffa1a1a1,
|
||||
// default_value: 1.0,
|
||||
// default_value: f32_array_create_x(1.0),
|
||||
// min: 0.0,
|
||||
// max: 1.0,
|
||||
// precision: 100,
|
||||
@@ -179,7 +179,7 @@ function brush_output_node_run(self: brush_output_node_t, from: i32) {
|
||||
// name: _tr("Scale"),
|
||||
// type: "VALUE",
|
||||
// color: 0xffa1a1a1,
|
||||
// default_value: 1.0,
|
||||
// default_value: f32_array_create_x(1.0),
|
||||
// min: 0.0,
|
||||
// max: 1.0,
|
||||
// precision: 100,
|
||||
@@ -191,7 +191,7 @@ function brush_output_node_run(self: brush_output_node_t, from: i32) {
|
||||
// name: _tr("Angle"),
|
||||
// type: "VALUE",
|
||||
// color: 0xffa1a1a1,
|
||||
// default_value: 0.0,
|
||||
// default_value: f32_array_create_x(0.0),
|
||||
// min: 0.0,
|
||||
// max: 1.0,
|
||||
// precision: 100,
|
||||
@@ -203,7 +203,7 @@ function brush_output_node_run(self: brush_output_node_t, from: i32) {
|
||||
// name: _tr("Opacity"),
|
||||
// type: "VALUE",
|
||||
// color: 0xffa1a1a1,
|
||||
// default_value: 1.0,
|
||||
// default_value: f32_array_create_x(1.0),
|
||||
// min: 0.0,
|
||||
// max: 1.0,
|
||||
// precision: 100,
|
||||
@@ -215,7 +215,7 @@ function brush_output_node_run(self: brush_output_node_t, from: i32) {
|
||||
// name: _tr("Hardness"),
|
||||
// type: "VALUE",
|
||||
// color: 0xffa1a1a1,
|
||||
// default_value: 1.0,
|
||||
// default_value: f32_array_create_x(1.0),
|
||||
// min: 0.0,
|
||||
// max: 1.0,
|
||||
// precision: 100,
|
||||
@@ -227,7 +227,7 @@ function brush_output_node_run(self: brush_output_node_t, from: i32) {
|
||||
// name: _tr("Stencil"),
|
||||
// type: "VALUE",
|
||||
// color: 0xffa1a1a1,
|
||||
// default_value: 1.0,
|
||||
// default_value: f32_array_create_x(1.0),
|
||||
// min: 0.0,
|
||||
// max: 1.0,
|
||||
// precision: 100,
|
||||
@@ -240,7 +240,7 @@ function brush_output_node_run(self: brush_output_node_t, from: i32) {
|
||||
// name: _tr("Directional"),
|
||||
// type: "BOOL",
|
||||
// output: 0,
|
||||
// default_value: false,
|
||||
// default_value: f32_array_create_x(0),
|
||||
// data: null,
|
||||
// min: 0.0,
|
||||
// max: 1.0,
|
||||
|
||||
@@ -141,7 +141,7 @@ let input_node_def: zui_node_t = {
|
||||
name: _tr("Lazy Radius"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 0.0,
|
||||
default_value: f32_array_create_x(0.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
@@ -153,7 +153,7 @@ let input_node_def: zui_node_t = {
|
||||
name: _tr("Lazy Step"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 0.0,
|
||||
default_value: f32_array_create_x(0.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
|
||||
@@ -63,7 +63,7 @@ let tex_image_node_def: zui_node_t = {
|
||||
name: _tr("Alpha"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 1.0,
|
||||
default_value: f32_array_create_x(1.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
@@ -75,8 +75,8 @@ let tex_image_node_def: zui_node_t = {
|
||||
name: _tr("file"),
|
||||
type: "ENUM",
|
||||
output: -1,
|
||||
default_value: 0,
|
||||
data: "",
|
||||
default_value: f32_array_create_x(0),
|
||||
data: u8_array_create_from_string(""),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
@@ -86,8 +86,8 @@ let tex_image_node_def: zui_node_t = {
|
||||
name: _tr("color_space"),
|
||||
type: "ENUM",
|
||||
output: -1,
|
||||
default_value: 0,
|
||||
data: ["linear", "srgb"],
|
||||
default_value: f32_array_create_x(0),
|
||||
data: u8_array_create_from_string("linear\0srgb"),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -318,9 +318,9 @@ function tab_layers_draw_layer_slot_full(l: slot_layer_t, i: i32) {
|
||||
|
||||
if (hasPanel) {
|
||||
ui._y += center;
|
||||
let layerPanel = zui_nest(zui_handle(__ID__), l.id);
|
||||
layerPanel.selected = l.show_panel;
|
||||
l.show_panel = zui_panel(layerPanel, "", true, false, false);
|
||||
let layer_panel = zui_nest(zui_handle(__ID__), l.id);
|
||||
layer_panel.selected = l.show_panel;
|
||||
l.show_panel = zui_panel(layer_panel, "", true, false, false);
|
||||
ui._y -= center;
|
||||
}
|
||||
|
||||
@@ -352,10 +352,10 @@ function tab_layers_draw_layer_slot_full(l: slot_layer_t, i: i32) {
|
||||
|
||||
function tab_layers_combo_object(ui: zui_t, l: slot_layer_t, label: bool = false): zui_handle_t {
|
||||
let ar = [tr("Shared")];
|
||||
let objectHandle = zui_nest(zui_handle(__ID__), l.id);
|
||||
objectHandle.position = l.object_mask;
|
||||
l.object_mask = zui_combo(objectHandle, ar, tr("Object"), label, zui_align_t.LEFT);
|
||||
return objectHandle;
|
||||
let object_handle = zui_nest(zui_handle(__ID__), l.id);
|
||||
object_handle.position = l.object_mask;
|
||||
l.object_mask = zui_combo(object_handle, ar, tr("Object"), label, zui_align_t.LEFT);
|
||||
return object_handle;
|
||||
}
|
||||
|
||||
function tab_layers_layer_toggle_visible(l: slot_layer_t) {
|
||||
|
||||
@@ -100,14 +100,26 @@ function box_export_tab_export_textures(ui: zui_t, title: string, bake_material:
|
||||
|
||||
zui_row([0.5, 0.5]);
|
||||
if (base_bits_handle.position == texture_bits_t.BITS8) {
|
||||
context_raw.format_type = zui_combo(zui_handle(__ID__, { position: context_raw.format_type }), ["png", "jpg"], tr("Format"), true);
|
||||
let h: zui_handle_t = zui_handle(__ID__);
|
||||
if (h.init) {
|
||||
h.position = context_raw.format_type;
|
||||
}
|
||||
context_raw.format_type = zui_combo(h, ["png", "jpg"], tr("Format"), true);
|
||||
}
|
||||
else {
|
||||
context_raw.format_type = zui_combo(zui_handle(__ID__, { position: context_raw.format_type }), ["exr"], tr("Format"), true);
|
||||
let h: zui_handle_t = zui_handle(__ID__);
|
||||
if (h.init) {
|
||||
h.position = context_raw.format_type;
|
||||
}
|
||||
context_raw.format_type = zui_combo(h, ["exr"], tr("Format"), true);
|
||||
}
|
||||
|
||||
ui.enabled = context_raw.format_type == texture_ldr_format_t.JPG && base_bits_handle.position == texture_bits_t.BITS8;
|
||||
context_raw.format_quality = zui_slider(zui_handle(__ID__, { value: context_raw.format_quality }), tr("Quality"), 0.0, 100.0, true, 1);
|
||||
let h_quality: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_quality.init) {
|
||||
h_quality.value = context_raw.format_quality;
|
||||
}
|
||||
context_raw.format_quality = zui_slider(h_quality, tr("Quality"), 0.0, 100.0, true, 1);
|
||||
ui.enabled = true;
|
||||
|
||||
///if is_paint
|
||||
@@ -189,7 +201,11 @@ function box_export_tab_presets(ui: zui_t) {
|
||||
let tab_vertical: bool = config_raw.touch_ui;
|
||||
if (zui_tab(zui_handle(__ID__), tr("New Preset"), tab_vertical)) {
|
||||
zui_row([0.5, 0.5]);
|
||||
let preset_name: string = zui_text_input(zui_handle(__ID__, { text: "new_preset" }), tr("Name"));
|
||||
let h_preset: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_preset.init) {
|
||||
h_preset.text = "new_preset";
|
||||
}
|
||||
let preset_name: string = zui_text_input(h_preset, tr("Name"));
|
||||
if (zui_button(tr("OK")) || ui.is_return_down) {
|
||||
box_export_new_preset(preset_name);
|
||||
box_export_fetch_presets();
|
||||
@@ -338,7 +354,11 @@ function box_export_tab_export_mesh(ui: zui_t, htab: zui_handle_t) {
|
||||
|
||||
zui_row([1 / 2, 1 / 2]);
|
||||
|
||||
context_raw.export_mesh_format = zui_combo(zui_handle(__ID__, { position: context_raw.export_mesh_format }), ["obj", "arm"], tr("Format"), true);
|
||||
let h_export_mesh_format: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_export_mesh_format.init) {
|
||||
h_export_mesh_format.position = context_raw.export_mesh_format;
|
||||
}
|
||||
context_raw.export_mesh_format = zui_combo(h_export_mesh_format, ["obj", "arm"], tr("Format"), true);
|
||||
|
||||
let ar: string[] = [tr("All")];
|
||||
for (let i: i32 = 0; i < project_paint_objects.length; ++i) {
|
||||
|
||||
+221
-50
@@ -16,7 +16,10 @@ function box_preferences_show() {
|
||||
box_preferences_locales = translator_get_supported_locales();
|
||||
}
|
||||
|
||||
let locale_handle: zui_handle_t = zui_handle(__ID__, { position: array_index_of(box_preferences_locales, config_raw.locale) });
|
||||
let locale_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (locale_handle.init) {
|
||||
locale_handle.position = array_index_of(box_preferences_locales, config_raw.locale);
|
||||
}
|
||||
zui_combo(locale_handle, box_preferences_locales, tr("Language"), true);
|
||||
if (locale_handle.changed) {
|
||||
let locale_code: string = box_preferences_locales[locale_handle.position];
|
||||
@@ -25,7 +28,10 @@ function box_preferences_show() {
|
||||
ui_base_tag_ui_redraw();
|
||||
}
|
||||
|
||||
let hscale: zui_handle_t = zui_handle(__ID__, { value: config_raw.window_scale });
|
||||
let hscale: zui_handle_t = zui_handle(__ID__);
|
||||
if (hscale.init) {
|
||||
hscale.value = config_raw.window_scale;
|
||||
}
|
||||
zui_slider(hscale, tr("UI Scale"), 1.0, 4.0, true, 10);
|
||||
if (context_raw.hscale_was_changed && !ui.input_down) {
|
||||
context_raw.hscale_was_changed = false;
|
||||
@@ -39,37 +45,65 @@ function box_preferences_show() {
|
||||
context_raw.hscale_was_changed = true;
|
||||
}
|
||||
|
||||
let hspeed: zui_handle_t = zui_handle(__ID__, { value: config_raw.camera_zoom_speed });
|
||||
let hspeed: zui_handle_t = zui_handle(__ID__);
|
||||
if (hspeed.init) {
|
||||
hspeed.value = config_raw.camera_zoom_speed;
|
||||
}
|
||||
config_raw.camera_zoom_speed = zui_slider(hspeed, tr("Camera Zoom Speed"), 0.1, 4.0, true);
|
||||
|
||||
hspeed = zui_handle(__ID__, { value: config_raw.camera_rotation_speed });
|
||||
hspeed = zui_handle(__ID__);
|
||||
if (hspeed.init) {
|
||||
hspeed.value = config_raw.camera_rotation_speed;
|
||||
}
|
||||
config_raw.camera_rotation_speed = zui_slider(hspeed, tr("Camera Rotation Speed"), 0.1, 4.0, true);
|
||||
|
||||
hspeed = zui_handle(__ID__, { value: config_raw.camera_pan_speed });
|
||||
hspeed = zui_handle(__ID__);
|
||||
if (hspeed.init) {
|
||||
hspeed.value = config_raw.camera_pan_speed;
|
||||
}
|
||||
config_raw.camera_pan_speed = zui_slider(hspeed, tr("Camera Pan Speed"), 0.1, 4.0, true);
|
||||
|
||||
let zoom_direction_handle: zui_handle_t = zui_handle(__ID__, { position: config_raw.zoom_direction });
|
||||
let zoom_direction_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (zoom_direction_handle.init) {
|
||||
zoom_direction_handle.position = config_raw.zoom_direction;
|
||||
}
|
||||
zui_combo(zoom_direction_handle, [tr("Vertical"), tr("Vertical Inverted"), tr("Horizontal"), tr("Horizontal Inverted"), tr("Vertical and Horizontal"), tr("Vertical and Horizontal Inverted")], tr("Direction to Zoom"), true);
|
||||
if (zoom_direction_handle.changed) {
|
||||
config_raw.zoom_direction = zoom_direction_handle.position;
|
||||
}
|
||||
|
||||
config_raw.wrap_mouse = zui_check(zui_handle(__ID__, { selected: config_raw.wrap_mouse }), tr("Wrap Mouse"));
|
||||
let h_wrap_mouse: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_wrap_mouse.init) {
|
||||
h_wrap_mouse.selected = config_raw.wrap_mouse;
|
||||
}
|
||||
config_raw.wrap_mouse = zui_check(h_wrap_mouse, tr("Wrap Mouse"));
|
||||
if (ui.is_hovered) {
|
||||
zui_tooltip(tr("Wrap mouse around view boundaries during camera control"));
|
||||
}
|
||||
|
||||
config_raw.node_preview = zui_check(zui_handle(__ID__, { selected: config_raw.node_preview }), tr("Show Node Preview"));
|
||||
let h_node_preview: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_node_preview.init) {
|
||||
h_node_preview.selected = config_raw.node_preview;
|
||||
}
|
||||
config_raw.node_preview = zui_check(h_node_preview, tr("Show Node Preview"));
|
||||
|
||||
ui.changed = false;
|
||||
config_raw.show_asset_names = zui_check(zui_handle(__ID__, { selected: config_raw.show_asset_names }), tr("Show Asset Names"));
|
||||
let h_show_asset_names: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_show_asset_names.init) {
|
||||
h_show_asset_names.selected = config_raw.show_asset_names;
|
||||
}
|
||||
config_raw.show_asset_names = zui_check(h_show_asset_names, tr("Show Asset Names"));
|
||||
if (ui.changed) {
|
||||
ui_base_tag_ui_redraw();
|
||||
}
|
||||
|
||||
///if !(krom_android || krom_ios)
|
||||
ui.changed = false;
|
||||
config_raw.touch_ui = zui_check(zui_handle(__ID__, { selected: config_raw.touch_ui }), tr("Touch UI"));
|
||||
let h_touch_ui: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_touch_ui.init) {
|
||||
h_touch_ui.selected = config_raw.touch_ui;
|
||||
}
|
||||
config_raw.touch_ui = zui_check(h_touch_ui, tr("Touch UI"));
|
||||
if (ui.changed) {
|
||||
zui_set_touch_scroll(config_raw.touch_ui);
|
||||
zui_set_touch_hold(config_raw.touch_ui);
|
||||
@@ -80,9 +114,13 @@ function box_preferences_show() {
|
||||
}
|
||||
///end
|
||||
|
||||
config_raw.splash_screen = zui_check(zui_handle(__ID__, { selected: config_raw.splash_screen }), tr("Splash Screen"));
|
||||
let h_splash_screen: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_splash_screen.init) {
|
||||
h_splash_screen.selected = config_raw.splash_screen;
|
||||
}
|
||||
config_raw.splash_screen = zui_check(h_splash_screen, tr("Splash Screen"));
|
||||
|
||||
// Zui.text("Node Editor");
|
||||
// zui_text("Node Editor");
|
||||
// let grid_snap: bool = Zui.check(Zui.handle("boxpreferences_11", { selected: false }), "Grid Snap");
|
||||
|
||||
zui_end_element();
|
||||
@@ -136,7 +174,10 @@ function box_preferences_show() {
|
||||
if (box_preferences_themes == null) {
|
||||
box_preferences_fetch_themes();
|
||||
}
|
||||
box_preferences_theme_handle = zui_handle(__ID__, { position: box_preferences_get_theme_index() });
|
||||
box_preferences_theme_handle = zui_handle(__ID__);
|
||||
if (box_preferences_theme_handle.init) {
|
||||
box_preferences_theme_handle.position = box_preferences_get_theme_index();
|
||||
}
|
||||
|
||||
zui_begin_sticky();
|
||||
zui_row([1 / 4, 1 / 4, 1 / 4, 1 / 4]);
|
||||
@@ -151,7 +192,11 @@ function box_preferences_show() {
|
||||
ui_box_show_custom(function (ui: zui_t) {
|
||||
if (zui_tab(zui_handle(__ID__), tr("New Theme"))) {
|
||||
zui_row([0.5, 0.5]);
|
||||
let theme_name: string = zui_text_input(zui_handle(__ID__, { text: "new_theme" }), tr("Name"));
|
||||
let h: zui_handle_t = zui_handle(__ID__);
|
||||
if (h.init) {
|
||||
h.text = "new_theme";
|
||||
}
|
||||
let theme_name: string = zui_text_input(h, tr("Name"));
|
||||
if (zui_button(tr("OK")) || ui.is_return_down) {
|
||||
let template: string = json_stringify(base_theme);
|
||||
if (!ends_with(theme_name, ".json")) {
|
||||
@@ -193,7 +238,10 @@ function box_preferences_show() {
|
||||
let hlist: zui_handle_t = zui_handle(__ID__);
|
||||
|
||||
// Viewport color
|
||||
let h: zui_handle_t = zui_nest(hlist, i++, { color: box_preferences_world_color });
|
||||
let h: zui_handle_t = zui_nest(hlist, i++);
|
||||
if (h.init) {
|
||||
h.color = box_preferences_world_color;
|
||||
}
|
||||
zui_row([1 / 8, 7 / 8]);
|
||||
zui_text("", 0, h.color);
|
||||
if (ui.is_hovered && ui.input_released) {
|
||||
@@ -294,7 +342,10 @@ function box_preferences_show() {
|
||||
}
|
||||
|
||||
if (zui_tab(box_preferences_htab, tr("Usage"), true)) {
|
||||
context_raw.undo_handle = zui_handle(__ID__, { value: config_raw.undo_steps });
|
||||
context_raw.undo_handle = zui_handle(__ID__);
|
||||
if (context_raw.undo_handle.init) {
|
||||
context_raw.undo_handle.value = config_raw.undo_steps;
|
||||
}
|
||||
config_raw.undo_steps = math_floor(zui_slider(context_raw.undo_handle, tr("Undo Steps"), 1, 64, false, 1));
|
||||
if (config_raw.undo_steps < 1) {
|
||||
config_raw.undo_steps = math_floor(context_raw.undo_handle.value = 1);
|
||||
@@ -319,12 +370,19 @@ function box_preferences_show() {
|
||||
}
|
||||
|
||||
///if is_paint
|
||||
config_raw.dilate_radius = math_floor(zui_slider(zui_handle(__ID__, { value: config_raw.dilate_radius }), tr("Dilate Radius"), 0.0, 16.0, true, 1));
|
||||
let h_dilate_radius: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_dilate_radius.init) {
|
||||
h_dilate_radius.value = config_raw.dilate_radius;
|
||||
}
|
||||
config_raw.dilate_radius = math_floor(zui_slider(h_dilate_radius, tr("Dilate Radius"), 0.0, 16.0, true, 1));
|
||||
if (ui.is_hovered) {
|
||||
zui_tooltip(tr("Dilate painted textures to prevent seams"));
|
||||
}
|
||||
|
||||
let dilate_handle: zui_handle_t = zui_handle(__ID__, { position: config_raw.dilate });
|
||||
let dilate_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (dilate_handle.init) {
|
||||
dilate_handle.position = config_raw.dilate;
|
||||
}
|
||||
zui_combo(dilate_handle, [tr("Instant"), tr("Delayed")], tr("Dilate"), true);
|
||||
if (dilate_handle.changed) {
|
||||
config_raw.dilate = dilate_handle.position;
|
||||
@@ -332,20 +390,29 @@ function box_preferences_show() {
|
||||
///end
|
||||
|
||||
///if is_lab
|
||||
let workspace_handle: zui_handle_t = zui_handle(__ID__, { position: config_raw.workspace });
|
||||
let workspace_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (workspace_handle.init) {
|
||||
workspace_handle.position = config_raw.workspace;
|
||||
}
|
||||
zui_combo(workspace_handle, [tr("3D View"), tr("2D View")], tr("Default Workspace"), true);
|
||||
if (workspace_handle.changed) {
|
||||
config_raw.workspace = workspace_handle.position;
|
||||
}
|
||||
///end
|
||||
|
||||
let camera_controls_handle: zui_handle_t = zui_handle(__ID__, { position: config_raw.camera_controls });
|
||||
let camera_controls_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (camera_controls_handle.init) {
|
||||
camera_controls_handle.position = config_raw.camera_controls;
|
||||
}
|
||||
zui_combo(camera_controls_handle, [tr("Orbit"), tr("Rotate"), tr("Fly")], tr("Default Camera Controls"), true);
|
||||
if (camera_controls_handle.changed) {
|
||||
config_raw.camera_controls = camera_controls_handle.position;
|
||||
}
|
||||
|
||||
let layer_res_handle: zui_handle_t = zui_handle(__ID__, { position: config_raw.layer_res });
|
||||
let layer_res_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (layer_res_handle.init) {
|
||||
layer_res_handle.position = config_raw.layer_res;
|
||||
}
|
||||
|
||||
///if is_paint
|
||||
///if (krom_android || krom_ios)
|
||||
@@ -367,17 +434,26 @@ function box_preferences_show() {
|
||||
config_raw.layer_res = layer_res_handle.position;
|
||||
}
|
||||
|
||||
let server_handle: zui_handle_t = zui_handle(__ID__, { text: config_raw.server });
|
||||
let server_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (server_handle.init) {
|
||||
server_handle.text = config_raw.server;
|
||||
}
|
||||
config_raw.server = zui_text_input(server_handle, tr("Cloud Server"));
|
||||
|
||||
///if (is_paint || is_sculpt)
|
||||
let material_live_handle: zui_handle_t = zui_handle(__ID__, {selected: config_raw.material_live });
|
||||
let material_live_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (material_live_handle.init) {
|
||||
material_live_handle.selected = config_raw.material_live;
|
||||
}
|
||||
config_raw.material_live = zui_check(material_live_handle, tr("Live Material Preview"));
|
||||
if (ui.is_hovered) {
|
||||
zui_tooltip(tr("Instantly update material preview on node change"));
|
||||
}
|
||||
|
||||
let brush_live_handle: zui_handle_t = zui_handle(__ID__, { selected: config_raw.brush_live });
|
||||
let brush_live_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (brush_live_handle.init) {
|
||||
brush_live_handle.selected = config_raw.brush_live;
|
||||
}
|
||||
config_raw.brush_live = zui_check(brush_live_handle, tr("Live Brush Preview"));
|
||||
if (ui.is_hovered) {
|
||||
zui_tooltip(tr("Draw live brush preview in viewport"));
|
||||
@@ -386,14 +462,20 @@ function box_preferences_show() {
|
||||
context_raw.ddirty = 2;
|
||||
}
|
||||
|
||||
let brush_3d_handle: zui_handle_t = zui_handle(__ID__, { selected: config_raw.brush_3d });
|
||||
let brush_3d_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (brush_3d_handle.init) {
|
||||
brush_3d_handle.selected = config_raw.brush_3d;
|
||||
}
|
||||
config_raw.brush_3d = zui_check(brush_3d_handle, tr("3D Cursor"));
|
||||
if (brush_3d_handle.changed) {
|
||||
make_material_parse_paint_material();
|
||||
}
|
||||
|
||||
ui.enabled = config_raw.brush_3d;
|
||||
let brush_depth_reject_handle: zui_handle_t = zui_handle(__ID__, { selected: config_raw.brush_depth_reject });
|
||||
let brush_depth_reject_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (brush_depth_reject_handle.init) {
|
||||
brush_depth_reject_handle.selected = config_raw.brush_depth_reject;
|
||||
}
|
||||
config_raw.brush_depth_reject = zui_check(brush_depth_reject_handle, tr("Depth Reject"));
|
||||
if (brush_depth_reject_handle.changed) {
|
||||
make_material_parse_paint_material();
|
||||
@@ -401,14 +483,20 @@ function box_preferences_show() {
|
||||
|
||||
zui_row([0.5, 0.5]);
|
||||
|
||||
let brush_angle_reject_handle: zui_handle_t = zui_handle(__ID__, { selected: config_raw.brush_angle_reject });
|
||||
let brush_angle_reject_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (brush_angle_reject_handle.init) {
|
||||
brush_angle_reject_handle.selected = config_raw.brush_angle_reject;
|
||||
}
|
||||
config_raw.brush_angle_reject = zui_check(brush_angle_reject_handle, tr("Angle Reject"));
|
||||
if (brush_angle_reject_handle.changed) {
|
||||
make_material_parse_paint_material();
|
||||
}
|
||||
|
||||
if (!config_raw.brush_angle_reject) ui.enabled = false;
|
||||
let angle_dot_handle: zui_handle_t = zui_handle(__ID__, { value: context_raw.brush_angle_reject_dot });
|
||||
let angle_dot_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (angle_dot_handle.init) {
|
||||
angle_dot_handle.value = context_raw.brush_angle_reject_dot;
|
||||
}
|
||||
context_raw.brush_angle_reject_dot = zui_slider(angle_dot_handle, tr("Angle"), 0.0, 1.0, true);
|
||||
if (angle_dot_handle.changed) {
|
||||
make_material_parse_paint_material();
|
||||
@@ -417,7 +505,11 @@ function box_preferences_show() {
|
||||
///end
|
||||
|
||||
///if is_lab
|
||||
config_raw.gpu_inference = zui_check(zui_handle(__ID__, { selected: config_raw.gpu_inference }), tr("Use GPU"));
|
||||
let h_gpu_inference: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_gpu_inference.init) {
|
||||
h_gpu_inference.selected = config_raw.gpu_inference;
|
||||
}
|
||||
config_raw.gpu_inference = zui_check(h_gpu_inference, tr("Use GPU"));
|
||||
if (ui.is_hovered) {
|
||||
zui_tooltip(tr("Use GPU to accelerate node graph processing"));
|
||||
}
|
||||
@@ -433,12 +525,36 @@ function box_preferences_show() {
|
||||
|
||||
if (zui_tab(box_preferences_htab, pen_name, true)) {
|
||||
zui_text(tr("Pressure controls"));
|
||||
config_raw.pressure_radius = zui_check(zui_handle(__ID__, { selected: config_raw.pressure_radius }), tr("Brush Radius"));
|
||||
config_raw.pressure_sensitivity = zui_slider(zui_handle(__ID__, { value: config_raw.pressure_sensitivity }), tr("Sensitivity"), 0.0, 10.0, true);
|
||||
let h_pressure_radius: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_pressure_radius.init) {
|
||||
h_pressure_radius.selected = config_raw.pressure_radius;
|
||||
}
|
||||
config_raw.pressure_radius = zui_check(h_pressure_radius, tr("Brush Radius"));
|
||||
|
||||
let h_pressure_sensitivity: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_pressure_sensitivity.init) {
|
||||
h_pressure_sensitivity.value = config_raw.pressure_sensitivity;
|
||||
}
|
||||
config_raw.pressure_sensitivity = zui_slider(h_pressure_sensitivity, tr("Sensitivity"), 0.0, 10.0, true);
|
||||
|
||||
///if (is_paint || is_sculpt)
|
||||
config_raw.pressure_hardness = zui_check(zui_handle(__ID__, { selected: config_raw.pressure_hardness }), tr("Brush Hardness"));
|
||||
config_raw.pressure_opacity = zui_check(zui_handle(__ID__, { selected: config_raw.pressure_opacity }), tr("Brush Opacity"));
|
||||
config_raw.pressure_angle = zui_check(zui_handle(__ID__, { selected: config_raw.pressure_angle }), tr("Brush Angle"));
|
||||
let h_pressure_hardness: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_pressure_hardness.init) {
|
||||
h_pressure_hardness.selected = config_raw.pressure_hardness;
|
||||
}
|
||||
config_raw.pressure_hardness = zui_check(h_pressure_hardness, tr("Brush Hardness"));
|
||||
|
||||
let h_pressure_opacity: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_pressure_opacity.init) {
|
||||
h_pressure_opacity.selected = config_raw.pressure_opacity;
|
||||
}
|
||||
config_raw.pressure_opacity = zui_check(h_pressure_opacity, tr("Brush Opacity"));
|
||||
|
||||
let h_pressure_angle: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_pressure_angle.init) {
|
||||
h_pressure_angle.selected = config_raw.pressure_angle;
|
||||
}
|
||||
config_raw.pressure_angle = zui_check(h_pressure_angle, tr("Brush Angle"));
|
||||
///end
|
||||
|
||||
zui_end_element();
|
||||
@@ -453,15 +569,38 @@ function box_preferences_show() {
|
||||
}
|
||||
}
|
||||
|
||||
context_raw.hssao = zui_handle(__ID__, { selected: config_raw.rp_ssao });
|
||||
context_raw.hssr = zui_handle(__ID__, { selected: config_raw.rp_ssr });
|
||||
context_raw.hbloom = zui_handle(__ID__, { selected: config_raw.rp_bloom });
|
||||
context_raw.hsupersample = zui_handle(__ID__, { position: config_get_super_sample_quality(config_raw.rp_supersample) });
|
||||
context_raw.hvxao = zui_handle(__ID__, { selected: config_raw.rp_gi });
|
||||
context_raw.hssao = zui_handle(__ID__);
|
||||
if (context_raw.hssao.init) {
|
||||
context_raw.hssao.selected = config_raw.rp_ssao;
|
||||
}
|
||||
|
||||
context_raw.hssr = zui_handle(__ID__);
|
||||
if (context_raw.hssr.init) {
|
||||
context_raw.hssr.selected = config_raw.rp_ssr;
|
||||
}
|
||||
|
||||
context_raw.hbloom = zui_handle(__ID__);
|
||||
if (context_raw.hbloom.init) {
|
||||
context_raw.hbloom.selected = config_raw.rp_bloom;
|
||||
}
|
||||
|
||||
context_raw.hsupersample = zui_handle(__ID__);
|
||||
if (context_raw.hsupersample.init) {
|
||||
context_raw.hsupersample.position = config_get_super_sample_quality(config_raw.rp_supersample);
|
||||
}
|
||||
|
||||
context_raw.hvxao = zui_handle(__ID__);
|
||||
if (context_raw.hvxao.init) {
|
||||
context_raw.hvxao.selected = config_raw.rp_gi;
|
||||
}
|
||||
|
||||
if (zui_tab(box_preferences_htab, tr("Viewport"), true)) {
|
||||
///if (krom_direct3d12 || krom_vulkan || krom_metal)
|
||||
|
||||
let hpathtrace_mode: zui_handle_t = zui_handle(__ID__, { position: context_raw.pathtrace_mode });
|
||||
let hpathtrace_mode: zui_handle_t = zui_handle(__ID__);
|
||||
if (hpathtrace_mode.init) {
|
||||
hpathtrace_mode.position = context_raw.pathtrace_mode;
|
||||
}
|
||||
context_raw.pathtrace_mode = zui_combo(hpathtrace_mode, [tr("Core"), tr("Full")], tr("Path Tracer"), true);
|
||||
if (hpathtrace_mode.changed) {
|
||||
render_path_raytrace_ready = false;
|
||||
@@ -469,7 +608,10 @@ function box_preferences_show() {
|
||||
|
||||
///end
|
||||
|
||||
let hrender_mode: zui_handle_t = zui_handle(__ID__, { position: context_raw.render_mode });
|
||||
let hrender_mode: zui_handle_t = zui_handle(__ID__);
|
||||
if (hrender_mode.init) {
|
||||
hrender_mode.position = context_raw.render_mode;
|
||||
}
|
||||
context_raw.render_mode = zui_combo(hrender_mode, [tr("Full"), tr("Mobile")], tr("Renderer"), true);
|
||||
if (hrender_mode.changed) {
|
||||
context_set_render_path();
|
||||
@@ -491,12 +633,18 @@ function box_preferences_show() {
|
||||
}
|
||||
|
||||
ui.enabled = context_raw.hvxao.selected;
|
||||
let h: zui_handle_t = zui_handle(__ID__, { value: context_raw.vxao_offset });
|
||||
let h: zui_handle_t = zui_handle(__ID__);
|
||||
if (h.init) {
|
||||
h.value = context_raw.vxao_offset;
|
||||
}
|
||||
context_raw.vxao_offset = zui_slider(h, tr("Cone Offset"), 1.0, 4.0, true);
|
||||
if (h.changed) {
|
||||
context_raw.ddirty = 2;
|
||||
}
|
||||
h = zui_handle(__ID__, { value: context_raw.vxao_aperture });
|
||||
h = zui_handle(__ID__);
|
||||
if (h.init) {
|
||||
h.value = context_raw.vxao_aperture;
|
||||
}
|
||||
context_raw.vxao_aperture = zui_slider(h, tr("Aperture"), 1.0, 4.0, true);
|
||||
if (h.changed) {
|
||||
context_raw.ddirty = 2;
|
||||
@@ -518,13 +666,19 @@ function box_preferences_show() {
|
||||
}
|
||||
}
|
||||
|
||||
let h: zui_handle_t = zui_handle(__ID__, { value: config_raw.rp_vignette });
|
||||
let h: zui_handle_t = zui_handle(__ID__);
|
||||
if (h.init) {
|
||||
h.value = config_raw.rp_vignette;
|
||||
}
|
||||
config_raw.rp_vignette = zui_slider(h, tr("Vignette"), 0.0, 1.0, true);
|
||||
if (h.changed) {
|
||||
context_raw.ddirty = 2;
|
||||
}
|
||||
|
||||
h = zui_handle(__ID__, { value: config_raw.rp_grain });
|
||||
h = zui_handle(__ID__);
|
||||
if (h.init) {
|
||||
h.value = config_raw.rp_grain;
|
||||
}
|
||||
config_raw.rp_grain = zui_slider(h, tr("Noise Grain"), 0.0, 1.0, true);
|
||||
if (h.changed) {
|
||||
context_raw.ddirty = 2;
|
||||
@@ -546,7 +700,10 @@ function box_preferences_show() {
|
||||
camera_object_build_proj(cam);
|
||||
}
|
||||
|
||||
let disp_handle: zui_handle_t = zui_handle(__ID__, { value: config_raw.displace_strength });
|
||||
let disp_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (disp_handle.init) {
|
||||
disp_handle.value = config_raw.displace_strength;
|
||||
}
|
||||
config_raw.displace_strength = zui_slider(disp_handle, tr("Displacement Strength"), 0.0, 10.0, true);
|
||||
if (disp_handle.changed) {
|
||||
context_raw.ddirty = 2;
|
||||
@@ -562,7 +719,10 @@ function box_preferences_show() {
|
||||
zui_begin_sticky();
|
||||
zui_row([1 / 4, 1 / 4, 1 / 4, 1 / 4]);
|
||||
|
||||
box_preferences_preset_handle = zui_handle(__ID__, { position: box_preferences_get_preset_index() });
|
||||
box_preferences_preset_handle = zui_handle(__ID__);
|
||||
if (box_preferences_preset_handle.init) {
|
||||
box_preferences_preset_handle.position = box_preferences_get_preset_index();
|
||||
}
|
||||
zui_combo(box_preferences_preset_handle, box_preferences_files_keymap, tr("Preset"));
|
||||
if (box_preferences_preset_handle.changed) {
|
||||
config_raw.keymap = box_preferences_files_keymap[box_preferences_preset_handle.position] + ".json";
|
||||
@@ -574,7 +734,11 @@ function box_preferences_show() {
|
||||
ui_box_show_custom(function (ui: zui_t) {
|
||||
if (zui_tab(zui_handle(__ID__), tr("New Keymap"))) {
|
||||
zui_row([0.5, 0.5]);
|
||||
let keymap_name: string = zui_text_input(zui_handle(__ID__, { text: "new_keymap" }), tr("Name"));
|
||||
let h: zui_handle_t = zui_handle(__ID__);
|
||||
if (h.init) {
|
||||
h.text = "new_keymap";
|
||||
}
|
||||
let keymap_name: string = zui_text_input(h, tr("Name"));
|
||||
if (zui_button(tr("OK")) || ui.is_return_down) {
|
||||
let template: string = json_stringify(base_get_default_keymap());
|
||||
if (!ends_with(keymap_name, ".json")) {
|
||||
@@ -634,7 +798,11 @@ function box_preferences_show() {
|
||||
ui_box_show_custom(function (ui: zui_t) {
|
||||
if (zui_tab(zui_handle(__ID__), tr("New Plugin"))) {
|
||||
zui_row([0.5, 0.5]);
|
||||
let plugin_name: string = zui_text_input(zui_handle(__ID__, { text: "new_plugin" }), tr("Name"));
|
||||
let h: zui_handle_t = zui_handle(__ID__);
|
||||
if (h.init) {
|
||||
h.text = "new_plugin";
|
||||
}
|
||||
let plugin_name: string = zui_text_input(h, tr("Name"));
|
||||
if (zui_button(tr("OK")) || ui.is_return_down) {
|
||||
let template: string =
|
||||
"let plugin = create();\
|
||||
@@ -674,7 +842,10 @@ plugin.draw_ui = function (ui) {\
|
||||
if (config_raw.plugins == null) {
|
||||
config_raw.plugins = [];
|
||||
}
|
||||
let h: zui_handle_t = zui_handle(__ID__, { selected: false });
|
||||
let h: zui_handle_t = zui_handle(__ID__);
|
||||
if (h.init) {
|
||||
h.selected = false;
|
||||
}
|
||||
for (let i: i32 = 0; i < box_preferences_files_plugin.length; ++i) {
|
||||
let f: string = box_preferences_files_plugin[i];
|
||||
let is_js: bool = ends_with(f, ".js");
|
||||
|
||||
+14
-9
@@ -317,9 +317,9 @@ function context_create(): context_t {
|
||||
c.picked_color = make_swatch();
|
||||
c.envmap_loaded = false;
|
||||
c.show_envmap = false;
|
||||
c.show_envmap_handle = zui_handle_create({ selected: false });
|
||||
c.show_envmap_handle = zui_handle_create();
|
||||
c.show_envmap_blur = false;
|
||||
c.show_envmap_blur_handle = zui_handle_create({ selected: false });
|
||||
c.show_envmap_blur_handle = zui_handle_create();
|
||||
c.envmap_angle = 0.0;
|
||||
c.light_angle = 0.0;
|
||||
c.cull_backfaces = true;
|
||||
@@ -409,9 +409,9 @@ function context_create(): context_t {
|
||||
c.nory_picked = 0.0;
|
||||
c.norz_picked = 0.0;
|
||||
c.draw_wireframe = false;
|
||||
c.wireframe_handle = zui_handle_create({ selected: false });
|
||||
c.wireframe_handle = zui_handle_create();
|
||||
c.draw_texels = false;
|
||||
c.texels_handle = zui_handle_create({ selected: false });
|
||||
c.texels_handle = zui_handle_create();
|
||||
c.colorid_handle = zui_handle_create();
|
||||
c.layers_export = export_mode_t.VISIBLE;
|
||||
c.decal_preview = false;
|
||||
@@ -457,17 +457,22 @@ function context_create(): context_t {
|
||||
c.brush_nodes_hardness = 1.0;
|
||||
c.brush_directional = false;
|
||||
c.brush_radius = 0.5;
|
||||
c.brush_radius_handle = zui_handle_create({ value: 0.5 });
|
||||
c.brush_radius_handle = zui_handle_create();
|
||||
c.brush_radius_handle.value = 0.5;
|
||||
c.brush_scale_x = 1.0;
|
||||
c.brush_decal_mask_radius = 0.5;
|
||||
c.brush_decal_mask_radius_handle = zui_handle_create({ value: 0.5 });
|
||||
c.brush_scale_x_handle = zui_handle_create({ value: 1.0 });
|
||||
c.brush_decal_mask_radius_handle = zui_handle_create();
|
||||
c.brush_decal_mask_radius_handle.value = 0.5;
|
||||
c.brush_scale_x_handle = zui_handle_create();
|
||||
c.brush_scale_x_handle.value = 1.0;
|
||||
c.brush_blending = blend_type_t.MIX;
|
||||
c.brush_opacity = 1.0;
|
||||
c.brush_opacity_handle = zui_handle_create({ value: 1.0 });
|
||||
c.brush_opacity_handle = zui_handle_create();
|
||||
c.brush_opacity_handle.value = 1.0;
|
||||
c.brush_scale = 1.0;
|
||||
c.brush_angle = 0.0;
|
||||
c.brush_angle_handle = zui_handle_create({ value: 0.0 });
|
||||
c.brush_angle_handle = zui_handle_create();
|
||||
c.brush_angle_handle.value = 0.0;
|
||||
///if is_paint
|
||||
c.brush_hardness = 0.8;
|
||||
///end
|
||||
|
||||
@@ -228,8 +228,8 @@ function export_arm_texture_node_name(): string {
|
||||
|
||||
function export_arm_export_node(n: zui_node_t, assets: asset_t[] = null) {
|
||||
if (n.type == export_arm_texture_node_name()) {
|
||||
let index: i32 = n.buttons[0].default_value;
|
||||
n.buttons[0].data = base_enum_texts(n.type)[index];
|
||||
let index: i32 = n.buttons[0].default_value[0];
|
||||
n.buttons[0].data = u8_array_create_from_string(base_enum_texts(n.type)[index]);
|
||||
|
||||
if (assets != null) {
|
||||
let asset: asset_t = project_assets[index];
|
||||
|
||||
@@ -625,8 +625,8 @@ function import_arm_init_nodes(nodes: zui_node_t[]) {
|
||||
for (let i: i32 = 0; i < nodes.length; ++i) {
|
||||
let node: zui_node_t = nodes[i];
|
||||
if (node.type == import_arm_texture_node_name()) {
|
||||
node.buttons[0].default_value = base_get_asset_index(node.buttons[0].data);
|
||||
node.buttons[0].data = "";
|
||||
node.buttons[0].default_value = f32_array_create_x(base_get_asset_index(u8_array_to_string(node.buttons[0].data)));
|
||||
node.buttons[0].data = u8_array_create_from_string("");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -127,27 +127,27 @@ function import_blend_material_run(path: string) {
|
||||
import_texture_run(file);
|
||||
let ar: string[] = string_split(file, path_sep);
|
||||
let filename: string = ar[ar.length - 1];
|
||||
n.buttons[0].default_value = base_get_asset_index(filename);
|
||||
n.buttons[0].default_value = f32_array_create_x(base_get_asset_index(filename));
|
||||
}
|
||||
else if (search == "valtorgb") {
|
||||
let ramp: any = bl_handle_get(node, "storage", 0, "ColorBand");
|
||||
n.buttons[0].data = bl_handle_get(ramp, "ipotype") == 0 ? 0 : 1; // Linear / Constant
|
||||
let elems: f32[][] = n.buttons[0].default_value;
|
||||
for (let i: i32 = 0; i < bl_handle_get(ramp, "tot"); ++i) {
|
||||
if (i >= elems.length) {
|
||||
array_push(elems, [1.0, 1.0, 1.0, 1.0, 0.0]);
|
||||
}
|
||||
let cbdata: any = bl_handle_get(ramp, "data", i, "CBData");
|
||||
elems[i][0] = math_floor(bl_handle_get(cbdata, "r") * 100) / 100;
|
||||
elems[i][1] = math_floor(bl_handle_get(cbdata, "g") * 100) / 100;
|
||||
elems[i][2] = math_floor(bl_handle_get(cbdata, "b") * 100) / 100;
|
||||
elems[i][3] = math_floor(bl_handle_get(cbdata, "a") * 100) / 100;
|
||||
elems[i][4] = math_floor(bl_handle_get(cbdata, "pos") * 100) / 100;
|
||||
}
|
||||
// let ramp: any = bl_handle_get(node, "storage", 0, "ColorBand");
|
||||
// n.buttons[0].data = bl_handle_get(ramp, "ipotype") == 0 ? 0 : 1; // Linear / Constant
|
||||
// let elems: f32[][] = n.buttons[0].default_value;
|
||||
// for (let i: i32 = 0; i < bl_handle_get(ramp, "tot"); ++i) {
|
||||
// if (i >= elems.length) {
|
||||
// array_push(elems, [1.0, 1.0, 1.0, 1.0, 0.0]);
|
||||
// }
|
||||
// let cbdata: any = bl_handle_get(ramp, "data", i, "CBData");
|
||||
// elems[i][0] = math_floor(bl_handle_get(cbdata, "r") * 100) / 100;
|
||||
// elems[i][1] = math_floor(bl_handle_get(cbdata, "g") * 100) / 100;
|
||||
// elems[i][2] = math_floor(bl_handle_get(cbdata, "b") * 100) / 100;
|
||||
// elems[i][3] = math_floor(bl_handle_get(cbdata, "a") * 100) / 100;
|
||||
// elems[i][4] = math_floor(bl_handle_get(cbdata, "pos") * 100) / 100;
|
||||
// }
|
||||
}
|
||||
else if (search == "mixrgb" || search == "math") {
|
||||
n.buttons[0].default_value = bl_handle_get(node, "custom1");
|
||||
n.buttons[1].default_value = bl_handle_get(node, "custom2") & 2;
|
||||
n.buttons[0].default_value = f32_array_create_x(bl_handle_get(node, "custom1"));
|
||||
n.buttons[1].default_value = f32_array_create_x(bl_handle_get(node, "custom2") & 2);
|
||||
}
|
||||
else if (search == "mapping") {
|
||||
let storage: any = bl_handle_get(node, "storage", 0, "TexMapping");
|
||||
|
||||
@@ -65,7 +65,7 @@ let float_node_def: zui_node_t = {
|
||||
name: _tr("Value"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 0.5,
|
||||
default_value: f32_array_create_x(0.5),
|
||||
min: 0.0,
|
||||
max: 10.0,
|
||||
precision: 100,
|
||||
@@ -79,7 +79,7 @@ let float_node_def: zui_node_t = {
|
||||
name: _tr("Value"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 0.5,
|
||||
default_value: f32_array_create_x(0.5),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
|
||||
@@ -145,7 +145,7 @@ let math_node_def: zui_node_t = {
|
||||
name: _tr("Value"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 0.5,
|
||||
default_value: f32_array_create_x(0.5),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
@@ -157,7 +157,7 @@ let math_node_def: zui_node_t = {
|
||||
name: _tr("Value"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 0.5,
|
||||
default_value: f32_array_create_x(0.5),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
@@ -171,7 +171,7 @@ let math_node_def: zui_node_t = {
|
||||
name: _tr("Value"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 0.0,
|
||||
default_value: f32_array_create_x(0.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
@@ -183,8 +183,8 @@ let math_node_def: zui_node_t = {
|
||||
name: _tr("operation"),
|
||||
type: "ENUM",
|
||||
output: 0,
|
||||
default_value: 0,
|
||||
data: ["Add", "Subtract", "Multiply", "Divide", "Power", "Logarithm", "Square Root", "Inverse Square Root", "Absolute", "Exponent", "Minimum", "Maximum", "Less Than", "Greater Than", "Sign", "Round", "Floor", "Ceil", "Truncate", "Fraction", "Modulo", "Snap", "Ping-Pong", "Sine", "Cosine", "Tangent", "Arcsine", "Arccosine", "Arctangent", "Arctan2", "Hyperbolic Sine", "Hyperbolic Cosine", "Hyperbolic Tangent", "To Radians", "To Degrees"],
|
||||
default_value: f32_array_create_x(0),
|
||||
data: u8_array_create_from_string("Add\0Subtract\0Multiply\0Divide\0Power\0Logarithm\0Square Root\0Inverse Square Root\0Absolute\0Exponent\0Minimum\0Maximum\0Less Than\0Greater Than\0Sign\0Round\0Floor\0Ceil\0Truncate\0Fraction\0Modulo\0Snap\0Ping-Pong\0Sine\0Cosine\0Tangent\0Arcsine\0Arccosine\0Arctangent\0Arctan2\0Hyperbolic Sine\0Hyperbolic Cosine\0Hyperbolic Tangent\0To Radians\0To Degrees"),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
@@ -194,7 +194,7 @@ let math_node_def: zui_node_t = {
|
||||
name: _tr("use_clamp"),
|
||||
type: "BOOL",
|
||||
output: 0,
|
||||
default_value: false,
|
||||
default_value: f32_array_create_x(0),
|
||||
data: null,
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
|
||||
@@ -70,7 +70,7 @@ let random_node_def: zui_node_t = {
|
||||
name: _tr("Min"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 0.0,
|
||||
default_value: f32_array_create_x(0.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
@@ -82,7 +82,7 @@ let random_node_def: zui_node_t = {
|
||||
name: _tr("Max"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 1.0,
|
||||
default_value: f32_array_create_x(1.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
@@ -96,7 +96,7 @@ let random_node_def: zui_node_t = {
|
||||
name: _tr("Value"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 0.5,
|
||||
default_value: f32_array_create_x(0.5),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
|
||||
@@ -54,7 +54,7 @@ let separate_vector_node_def: zui_node_t = {
|
||||
name: _tr("X"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 0.0,
|
||||
default_value: f32_array_create_x(0.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
@@ -66,7 +66,7 @@ let separate_vector_node_def: zui_node_t = {
|
||||
name: _tr("Y"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 0.0,
|
||||
default_value: f32_array_create_x(0.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
@@ -78,7 +78,7 @@ let separate_vector_node_def: zui_node_t = {
|
||||
name: _tr("Z"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 0.0,
|
||||
default_value: f32_array_create_x(0.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
|
||||
@@ -40,7 +40,7 @@ let time_node_def: zui_node_t = {
|
||||
name: _tr("Time"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 0.0,
|
||||
default_value: f32_array_create_x(0.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
@@ -52,7 +52,7 @@ let time_node_def: zui_node_t = {
|
||||
name: _tr("Delta"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 0.0,
|
||||
default_value: f32_array_create_x(0.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
@@ -64,7 +64,7 @@ let time_node_def: zui_node_t = {
|
||||
name: _tr("Brush"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 0.0,
|
||||
default_value: f32_array_create_x(0.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
|
||||
@@ -192,7 +192,7 @@ let vector_math_node_def: zui_node_t = {
|
||||
name: _tr("Value"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 0.0,
|
||||
default_value: f32_array_create_x(0.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
@@ -204,8 +204,8 @@ let vector_math_node_def: zui_node_t = {
|
||||
name: _tr("operation"),
|
||||
type: "ENUM",
|
||||
output: 0,
|
||||
default_value: 0,
|
||||
data: ["Add", "Subtract", "Multiply", "Divide", "Average", "Cross Product", "Project", "Reflect", "Dot Product", "Distance", "Length", "Scale", "Normalize", "Absolute", "Minimum", "Maximum", "Floor", "Ceil", "Fraction", "Modulo", "Snap", "Sine", "Cosine", "Tangent"],
|
||||
default_value: f32_array_create_x(0),
|
||||
data: u8_array_create_from_string("Add\0Subtract\0Multiply\0Divide\0Average\0Cross Product\0Project\0Reflect\0Dot Product\0Distance\0Length\0Scale\0Normalize\0Absolute\0Minimum\0Maximum\0Floor\0Ceil\0Fraction\0Modulo\0Snap\0Sine\0Cosine\0Tangent"),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
|
||||
@@ -70,7 +70,7 @@ let vector_node_def: zui_node_t = {
|
||||
name: _tr("X"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 0.0,
|
||||
default_value: f32_array_create_x(0.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
@@ -82,7 +82,7 @@ let vector_node_def: zui_node_t = {
|
||||
name: _tr("Y"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 0.0,
|
||||
default_value: f32_array_create_x(0.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
@@ -94,7 +94,7 @@ let vector_node_def: zui_node_t = {
|
||||
name: _tr("Z"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: 0.0,
|
||||
default_value: f32_array_create_x(0.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
|
||||
+183
-170
File diff suppressed because it is too large
Load Diff
@@ -111,18 +111,17 @@ function parser_logic_build_node(node: zui_node_t): string {
|
||||
map_set(parser_logic_raw_map, v, node);
|
||||
|
||||
// Expose button values in node
|
||||
for (let i: i32 = 0; i < node.buttons.length; ++i) {
|
||||
let b: zui_node_button_t = node.buttons[i];
|
||||
if (b.type == "ENUM") {
|
||||
// let array_data: bool = is_array(b.data);
|
||||
let array_data: bool = b.data.length > 1;
|
||||
let texts: string[] = array_data ? b.data : zui_enum_texts_js(node.type);
|
||||
v[b.name] = texts[b.default_value];
|
||||
}
|
||||
else {
|
||||
v[b.name] = b.default_value;
|
||||
}
|
||||
}
|
||||
// for (let i: i32 = 0; i < node.buttons.length; ++i) {
|
||||
// let b: zui_node_button_t = node.buttons[i];
|
||||
// if (b.type == "ENUM") {
|
||||
// let array_data: bool = b.data.length > 1;
|
||||
// let texts: string[] = array_data ? b.data : zui_enum_texts_js(node.type);
|
||||
// v[b.name] = texts[b.default_value];
|
||||
// }
|
||||
// else {
|
||||
// v[b.name] = b.default_value;
|
||||
// }
|
||||
// }
|
||||
|
||||
// Create inputs
|
||||
let inp_node: logic_node_t = null;
|
||||
@@ -193,19 +192,19 @@ function parser_logic_build_default_node(inp: zui_node_socket_t): logic_node_t {
|
||||
|
||||
if (inp.type == "VECTOR") {
|
||||
if (inp.default_value == null) {
|
||||
inp.default_value = [0, 0, 0]; // TODO
|
||||
inp.default_value = f32_array_create_xyz(0, 0, 0);
|
||||
}
|
||||
v = parser_logic_create_node_instance("vector_node", inp.default_value);
|
||||
}
|
||||
else if (inp.type == "RGBA") {
|
||||
if (inp.default_value == null) {
|
||||
inp.default_value = [0, 0, 0, 0]; // TODO
|
||||
inp.default_value = f32_array_create_xyzw(0, 0, 0, 0);
|
||||
}
|
||||
v = parser_logic_create_node_instance("color_node", inp.default_value);
|
||||
}
|
||||
else if (inp.type == "RGB") {
|
||||
if (inp.default_value == null) {
|
||||
inp.default_value = [0, 0, 0, 0]; // TODO
|
||||
inp.default_value = f32_array_create_xyzw(0, 0, 0, 0);
|
||||
}
|
||||
v = parser_logic_create_node_instance("color_node", inp.default_value);
|
||||
}
|
||||
|
||||
@@ -446,7 +446,7 @@ function parser_material_parse_vector_input(inp: zui_node_socket_t): string {
|
||||
}
|
||||
else {
|
||||
if (inp.type == "VALUE") { // Unlinked reroute
|
||||
return parser_material_vec3([0.0, 0.0, 0.0]);
|
||||
return parser_material_vec3(f32_array_create_xyz(0.0, 0.0, 0.0));
|
||||
}
|
||||
else {
|
||||
return parser_material_vec3(inp.default_value);
|
||||
@@ -511,7 +511,7 @@ function parser_material_parse_vector(node: zui_node_t, socket: zui_node_socket_
|
||||
else if (node.type == "TEX_GRADIENT") {
|
||||
let co: string = parser_material_get_coord(node);
|
||||
let but: zui_node_button_t = node.buttons[0]; //gradient_type;
|
||||
let grad: string = but.data[but.default_value].toUpperCase();
|
||||
let grad: string = to_upper_case(u8_array_string_at(but.data, but.default_value[0]));
|
||||
grad = string_replace_all(grad, " ", "_");
|
||||
let f: string = parser_material_get_gradient(grad, co);
|
||||
let res: string = parser_material_to_vec3("clamp(" + f + ", 0.0, 1.0)");
|
||||
@@ -526,7 +526,7 @@ function parser_material_parse_vector(node: zui_node_t, socket: zui_node_socket_
|
||||
let tex_name: string = parser_material_node_name(node);
|
||||
let tex: bind_tex_t = parser_material_make_texture(node, tex_name);
|
||||
if (tex != null) {
|
||||
let color_space: i32 = node.buttons[1].default_value;
|
||||
let color_space: i32 = node.buttons[1].default_value[0];
|
||||
let texstore: string = parser_material_texture_store(node, tex, tex_name, color_space);
|
||||
return texstore + ".rgb";
|
||||
}
|
||||
@@ -556,7 +556,7 @@ function parser_material_parse_vector(node: zui_node_t, socket: zui_node_socket_
|
||||
let co: string = parser_material_get_coord(node);
|
||||
let scale: string = parser_material_parse_value_input(node.inputs[1]);
|
||||
let but: zui_node_button_t = node.buttons[0]; //coloring;
|
||||
let coloring: string = but.data[but.default_value].toUpperCase();
|
||||
let coloring: string = to_upper_case(u8_array_string_at(but.data, but.default_value[0]));
|
||||
coloring = string_replace_all(coloring, " ", "_");
|
||||
let res: string = "";
|
||||
if (coloring == "INTENSITY") {
|
||||
@@ -642,9 +642,9 @@ function parser_material_parse_vector(node: zui_node_t, socket: zui_node_socket_
|
||||
let col1: string = parser_material_parse_vector_input(node.inputs[1]);
|
||||
let col2: string = parser_material_parse_vector_input(node.inputs[2]);
|
||||
let but: zui_node_button_t = node.buttons[0]; // blend_type
|
||||
let blend: string = but.data[but.default_value].toUpperCase();
|
||||
let blend: string = to_upper_case(u8_array_string_at(but.data, but.default_value[0]));
|
||||
blend = string_replace_all(blend, " ", "_");
|
||||
let use_clamp: bool = node.buttons[1].default_value == true;
|
||||
let use_clamp: bool = node.buttons[1].default_value[0] > 0;
|
||||
let out_col: string = "";
|
||||
if (blend == "MIX") {
|
||||
out_col = "mix(" + col1 + ", " + col2 + ", " + fac_var + ")";
|
||||
@@ -724,16 +724,16 @@ function parser_material_parse_vector(node: zui_node_t, socket: zui_node_socket_
|
||||
}
|
||||
else if (node.type == "VALTORGB") { // ColorRamp
|
||||
let fac: string = parser_material_parse_value_input(node.inputs[0]);
|
||||
let interp: string = node.buttons[0].data == 0 ? "LINEAR" : "CONSTANT";
|
||||
let elems: f32[][] = node.buttons[0].default_value;
|
||||
let interp: string = node.buttons[0].data[0] == 0 ? "LINEAR" : "CONSTANT";
|
||||
let elems: f32[][] = null; //node.buttons[0].default_value;
|
||||
if (elems.length == 1) {
|
||||
return parser_material_vec3(elems[0]);
|
||||
// return parser_material_vec3(elems[0]);
|
||||
}
|
||||
// Write cols array
|
||||
let cols_var: string = parser_material_node_name(node) + "_cols";
|
||||
node_shader_write(parser_material_curshader, "vec3 " + cols_var + "[" + elems.length + "];"); // TODO: Make const
|
||||
for (let i: i32 = 0; i < elems.length; ++i) {
|
||||
node_shader_write(parser_material_curshader, cols_var + "[" + i + "] = " + parser_material_vec3(elems[i]) + ";");
|
||||
// node_shader_write(parser_material_curshader, cols_var + "[" + i + "] = " + parser_material_vec3(elems[i]) + ";");
|
||||
}
|
||||
// Get index
|
||||
let fac_var: string = parser_material_node_name(node) + "_fac";
|
||||
@@ -1001,7 +1001,7 @@ function parser_material_parse_vector(node: zui_node_t, socket: zui_node_socket_
|
||||
let nm1: string = parser_material_parse_vector_input(node.inputs[0]);
|
||||
let nm2: string = parser_material_parse_vector_input(node.inputs[1]);
|
||||
let but: zui_node_button_t = node.buttons[0];
|
||||
let blend: string = but.data[but.default_value].toUpperCase(); // blend_type
|
||||
let blend: string = to_upper_case(u8_array_string_at(but.data, but.default_value[0])); // blend_type
|
||||
blend = string_replace_all(blend, " ", "_");
|
||||
let store: string = parser_material_store_var_name(node);
|
||||
|
||||
@@ -1040,7 +1040,7 @@ function parser_material_parse_vector(node: zui_node_t, socket: zui_node_socket_
|
||||
let vec1: string = parser_material_parse_vector_input(node.inputs[0]);
|
||||
let vec2: string = parser_material_parse_vector_input(node.inputs[1]);
|
||||
let but: zui_node_button_t = node.buttons[0]; //operation;
|
||||
let op: string = but.data[but.default_value].toUpperCase();
|
||||
let op: string = to_upper_case(u8_array_string_at(but.data, but.default_value[0]));
|
||||
op = string_replace_all(op, " ", "_");
|
||||
if (op == "ADD") {
|
||||
return "(" + vec1 + " + " + vec2 + ")";
|
||||
@@ -1170,7 +1170,7 @@ function parser_material_parse_value_input(inp: zui_node_socket_t, vector_as_gra
|
||||
}
|
||||
}
|
||||
else {
|
||||
return parser_material_vec1(inp.default_value);
|
||||
return parser_material_vec1(inp.default_value[0]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1351,7 +1351,7 @@ function parser_material_parse_value(node: zui_node_t, socket: zui_node_socket_t
|
||||
}
|
||||
}
|
||||
else if (node.type == "VALUE") {
|
||||
return parser_material_vec1(node.outputs[0].default_value);
|
||||
return parser_material_vec1(node.outputs[0].default_value[0]);
|
||||
}
|
||||
else if (node.type == "TEX_BRICK") {
|
||||
node_shader_add_function(parser_material_curshader, str_tex_brick);
|
||||
@@ -1370,7 +1370,7 @@ function parser_material_parse_value(node: zui_node_t, socket: zui_node_socket_t
|
||||
else if (node.type == "TEX_GRADIENT") {
|
||||
let co: string = parser_material_get_coord(node);
|
||||
let but: zui_node_button_t = node.buttons[0]; //gradient_type;
|
||||
let grad: string = but.data[but.default_value].toUpperCase();
|
||||
let grad: string = to_upper_case(u8_array_string_at(but.data, but.default_value[0]));
|
||||
grad = string_replace_all(grad, " ", "_");
|
||||
let f: string = parser_material_get_gradient(grad, co);
|
||||
let res: string = "(clamp(" + f + ", 0.0, 1.0))";
|
||||
@@ -1385,7 +1385,7 @@ function parser_material_parse_value(node: zui_node_t, socket: zui_node_socket_t
|
||||
let tex_name: string = parser_material_node_name(node);
|
||||
let tex: bind_tex_t = parser_material_make_texture(node, tex_name);
|
||||
if (tex != null) {
|
||||
let color_space: i32 = node.buttons[1].default_value;
|
||||
let color_space: i32 = node.buttons[1].default_value[0];
|
||||
let texstore: string = parser_material_texture_store(node, tex, tex_name, color_space);
|
||||
return texstore + ".a";
|
||||
}
|
||||
@@ -1417,7 +1417,7 @@ function parser_material_parse_value(node: zui_node_t, socket: zui_node_socket_t
|
||||
let co: string = parser_material_get_coord(node);
|
||||
let scale: string = parser_material_parse_value_input(node.inputs[1]);
|
||||
let but: zui_node_button_t = node.buttons[0]; // coloring
|
||||
let coloring: string = but.data[but.default_value].toUpperCase();
|
||||
let coloring: string = to_upper_case(u8_array_string_at(but.data, but.default_value[0]));
|
||||
coloring = string_replace_all(coloring, " ", "_");
|
||||
let res: string = "";
|
||||
if (coloring == "INTENSITY") {
|
||||
@@ -1464,9 +1464,9 @@ function parser_material_parse_value(node: zui_node_t, socket: zui_node_socket_t
|
||||
let val1: string = parser_material_parse_value_input(node.inputs[0]);
|
||||
let val2: string = parser_material_parse_value_input(node.inputs[1]);
|
||||
let but: zui_node_button_t = node.buttons[0]; // operation
|
||||
let op: string = but.data[but.default_value].toUpperCase();
|
||||
let op: string = to_upper_case(u8_array_string_at(but.data, but.default_value[0]));
|
||||
op = string_replace_all(op, " ", "_");
|
||||
let use_clamp: bool = node.buttons[1].default_value == true;
|
||||
let use_clamp: bool = node.buttons[1].default_value[0] > 0;
|
||||
let out_val: string = "";
|
||||
if (op == "ADD") {
|
||||
out_val = "(" + val1 + " + " + val2 + ")";
|
||||
@@ -1640,7 +1640,7 @@ function parser_material_parse_value(node: zui_node_t, socket: zui_node_socket_t
|
||||
let vec1: string = parser_material_parse_vector_input(node.inputs[0]);
|
||||
let vec2: string = parser_material_parse_vector_input(node.inputs[1]);
|
||||
let but: zui_node_button_t = node.buttons[0]; //operation;
|
||||
let op: string = but.data[but.default_value].toUpperCase();
|
||||
let op: string = to_upper_case(u8_array_string_at(but.data, but.default_value[0]));
|
||||
op = string_replace_all(op, " ", "_");
|
||||
if (op == "DOT_PRODUCT") {
|
||||
return "dot(" + vec1 + ", " + vec2 + ")";
|
||||
@@ -1660,7 +1660,7 @@ function parser_material_parse_value(node: zui_node_t, socket: zui_node_socket_t
|
||||
let min: string = parser_material_parse_value_input(node.inputs[1]);
|
||||
let max: string = parser_material_parse_value_input(node.inputs[2]);
|
||||
let but: zui_node_button_t = node.buttons[0]; //operation;
|
||||
let op: string = but.data[but.default_value].toUpperCase();
|
||||
let op: string = to_upper_case(u8_array_string_at(but.data, but.default_value[0]));
|
||||
op = string_replace_all(op, " ", "_");
|
||||
|
||||
if (op == "MIN_MAX") {
|
||||
@@ -1677,7 +1677,7 @@ function parser_material_parse_value(node: zui_node_t, socket: zui_node_socket_t
|
||||
let tmin: string = parser_material_parse_value_input(node.inputs[3]);
|
||||
let tmax: string = parser_material_parse_value_input(node.inputs[4]);
|
||||
|
||||
let use_clamp: bool = node.buttons[0].default_value == true;
|
||||
let use_clamp: bool = node.buttons[0].default_value[0] > 0;
|
||||
|
||||
let a: string = "((" + tmin + " - " + tmax + ") / (" + fmin + " - " + fmax + "))";
|
||||
let out_val: string = "(" + a + " * " + val + " + " + tmin + " - " + a + " * " + fmin + ")";
|
||||
@@ -1858,7 +1858,7 @@ function parser_material_vec1(v: f32): string {
|
||||
///end
|
||||
}
|
||||
|
||||
function parser_material_vec3(v: f32[]): string {
|
||||
function parser_material_vec3(v: f32_array_t): string {
|
||||
///if krom_android
|
||||
return "vec3(float(" + v[0] + "), float(" + v[1] + "), float(" + v[2] + "))";
|
||||
///else
|
||||
@@ -1937,7 +1937,7 @@ function parser_material_enum_data(s: string): string {
|
||||
}
|
||||
|
||||
function parser_material_make_texture(image_node: zui_node_t, tex_name: string, matname: string = null): bind_tex_t {
|
||||
let filepath: string = parser_material_enum_data(base_enum_texts(image_node.type)[image_node.buttons[0].default_value]);
|
||||
let filepath: string = parser_material_enum_data(base_enum_texts(image_node.type)[image_node.buttons[0].default_value[0]]);
|
||||
if (filepath == "" || string_index_of(filepath, ".") == -1) {
|
||||
return null;
|
||||
}
|
||||
@@ -1981,6 +1981,12 @@ function parser_material_safestr(s: string): string {
|
||||
return s;
|
||||
}
|
||||
|
||||
function u8_array_string_at(a: u8_array_t, i: i32): string {
|
||||
let s: string = u8_array_to_string(a);
|
||||
let ss: string[] = string_split(s, "\0");
|
||||
return ss[i];
|
||||
}
|
||||
|
||||
type shader_out_t = {
|
||||
out_basecol?: string;
|
||||
out_roughness?: string;
|
||||
|
||||
+17
-4
@@ -103,8 +103,17 @@ function project_new_box() {
|
||||
}
|
||||
|
||||
zui_row([0.5, 0.5]);
|
||||
context_raw.project_type = zui_combo(zui_handle(__ID__, { position: context_raw.project_type }), project_mesh_list, tr("Template"), true);
|
||||
context_raw.project_aspect_ratio = zui_combo(zui_handle(__ID__, { position: context_raw.project_aspect_ratio }), ["1:1", "2:1", "1:2"], tr("Aspect Ratio"), true);
|
||||
let h_project_type: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_project_type.init) {
|
||||
h_project_type.position = context_raw.project_type;
|
||||
}
|
||||
context_raw.project_type = zui_combo(h_project_type, project_mesh_list, tr("Template"), true);
|
||||
|
||||
let h_project_aspect_ratio: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_project_aspect_ratio.init) {
|
||||
h_project_aspect_ratio.position = context_raw.project_aspect_ratio;
|
||||
}
|
||||
context_raw.project_aspect_ratio = zui_combo(h_project_aspect_ratio, ["1:1", "2:1", "1:2"], tr("Aspect Ratio"), true);
|
||||
|
||||
zui_end_element();
|
||||
zui_row([0.5, 0.5]);
|
||||
@@ -358,7 +367,7 @@ function project_import_brush() {
|
||||
let n: zui_node_t = nodes_brush_create_node("TEX_IMAGE");
|
||||
n.x = 83;
|
||||
n.y = 340;
|
||||
n.buttons[0].default_value = asset_index;
|
||||
n.buttons[0].default_value = f32_array_create_x(asset_index);
|
||||
let links: zui_node_link_t[] = context_raw.brush.canvas.links;
|
||||
array_push(links, {
|
||||
id: zui_get_link_id(links),
|
||||
@@ -439,7 +448,11 @@ function project_import_mesh_box(path: string, replace_existing: bool = true, cl
|
||||
///if (is_paint || is_sculpt)
|
||||
// if (ends_with(to_lower_case(path), ".fbx") || ends_with(to_lower_case(path), ".blend")) {
|
||||
if (ends_with(to_lower_case(path), ".blend")) {
|
||||
context_raw.parse_vcols = zui_check(zui_handle(__ID__, { selected: context_raw.parse_vcols }), tr("Parse Vertex Colors"));
|
||||
let h: zui_handle_t = zui_handle(__ID__);
|
||||
if (h.init) {
|
||||
h.selected = context_raw.parse_vcols;
|
||||
}
|
||||
context_raw.parse_vcols = zui_check(h, tr("Parse Vertex Colors"));
|
||||
if (ui.is_hovered) {
|
||||
zui_tooltip(tr("Import vertex color data"));
|
||||
}
|
||||
|
||||
@@ -193,15 +193,51 @@ function tab_materials_draw_slots(mini: bool) {
|
||||
tab_materials_delete_material(m);
|
||||
}
|
||||
|
||||
let base_handle: zui_handle_t = zui_nest(zui_handle(__ID__), m.id, {selected: m.paint_base});
|
||||
let opac_handle: zui_handle_t = zui_nest(zui_handle(__ID__), m.id, {selected: m.paint_opac});
|
||||
let nor_handle: zui_handle_t = zui_nest(zui_handle(__ID__), m.id, {selected: m.paint_nor});
|
||||
let occ_handle: zui_handle_t = zui_nest(zui_handle(__ID__), m.id, {selected: m.paint_occ});
|
||||
let rough_handle: zui_handle_t = zui_nest(zui_handle(__ID__), m.id, {selected: m.paint_rough});
|
||||
let met_handle: zui_handle_t = zui_nest(zui_handle(__ID__), m.id, {selected: m.paint_met});
|
||||
let height_handle: zui_handle_t = zui_nest(zui_handle(__ID__), m.id, {selected: m.paint_height});
|
||||
let emis_handle: zui_handle_t = zui_nest(zui_handle(__ID__), m.id, {selected: m.paint_emis});
|
||||
let subs_handle: zui_handle_t = zui_nest(zui_handle(__ID__), m.id, {selected: m.paint_subs});
|
||||
let base_handle: zui_handle_t = zui_nest(zui_handle(__ID__), m.id);
|
||||
if (base_handle.init) {
|
||||
base_handle.selected = m.paint_base;
|
||||
}
|
||||
|
||||
let opac_handle: zui_handle_t = zui_nest(zui_handle(__ID__), m.id);
|
||||
if (opac_handle.init) {
|
||||
opac_handle.selected = m.paint_opac;
|
||||
}
|
||||
|
||||
let nor_handle: zui_handle_t = zui_nest(zui_handle(__ID__), m.id);
|
||||
if (nor_handle.init) {
|
||||
nor_handle.selected = m.paint_nor;
|
||||
}
|
||||
|
||||
let occ_handle: zui_handle_t = zui_nest(zui_handle(__ID__), m.id);
|
||||
if (occ_handle.init) {
|
||||
occ_handle.selected = m.paint_occ;
|
||||
}
|
||||
|
||||
let rough_handle: zui_handle_t = zui_nest(zui_handle(__ID__), m.id);
|
||||
if (rough_handle.init) {
|
||||
rough_handle.selected = m.paint_rough;
|
||||
}
|
||||
|
||||
let met_handle: zui_handle_t = zui_nest(zui_handle(__ID__), m.id);
|
||||
if (met_handle.init) {
|
||||
met_handle.selected = m.paint_met;
|
||||
}
|
||||
|
||||
let height_handle: zui_handle_t = zui_nest(zui_handle(__ID__), m.id);
|
||||
if (height_handle.init) {
|
||||
height_handle.selected = m.paint_height;
|
||||
}
|
||||
|
||||
let emis_handle: zui_handle_t = zui_nest(zui_handle(__ID__), m.id);
|
||||
if (emis_handle.init) {
|
||||
emis_handle.selected = m.paint_emis;
|
||||
}
|
||||
|
||||
let subs_handle: zui_handle_t = zui_nest(zui_handle(__ID__), m.id);
|
||||
if (subs_handle.init) {
|
||||
subs_handle.selected = m.paint_subs;
|
||||
}
|
||||
|
||||
ui_menu_fill(ui);
|
||||
m.paint_base = zui_check(base_handle, tr("Base Color"));
|
||||
ui_menu_fill(ui);
|
||||
@@ -306,11 +342,11 @@ function tab_materials_update_material_pointers(nodes: zui_node_t[], i: i32) {
|
||||
for (let i: i32 = 0; i < nodes.length; ++i) {
|
||||
let n: zui_node_t = nodes[i];
|
||||
if (n.type == "MATERIAL") {
|
||||
if (n.buttons[0].default_value == i) {
|
||||
n.buttons[0].default_value = 9999; // Material deleted
|
||||
if (n.buttons[0].default_value[0] == i) {
|
||||
n.buttons[0].default_value[0] = 9999; // Material deleted
|
||||
}
|
||||
else if (n.buttons[0].default_value > i) {
|
||||
n.buttons[0].default_value--; // Offset by deleted material
|
||||
else if (n.buttons[0].default_value[0] > i) {
|
||||
n.buttons[0].default_value[0]--; // Offset by deleted material
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -321,19 +357,19 @@ function tab_materials_accept_swatch_drag(swatch: swatch_color_t) {
|
||||
for (let i: i32 = 0; i < context_raw.material.canvas.nodes.length; ++i) {
|
||||
let node: zui_node_t = context_raw.material.canvas.nodes[i];
|
||||
if (node.type == "RGB" ) {
|
||||
node.outputs[0].default_value = [
|
||||
node.outputs[0].default_value = f32_array_create_xyzw(
|
||||
color_get_rb(swatch.base) / 255,
|
||||
color_get_gb(swatch.base) / 255,
|
||||
color_get_bb(swatch.base) / 255,
|
||||
color_get_ab(swatch.base) / 255
|
||||
];
|
||||
);
|
||||
}
|
||||
else if (node.type == "OUTPUT_MATERIAL_PBR") {
|
||||
node.inputs[1].default_value = swatch.opacity;
|
||||
node.inputs[2].default_value = swatch.occlusion;
|
||||
node.inputs[3].default_value = swatch.roughness;
|
||||
node.inputs[4].default_value = swatch.metallic;
|
||||
node.inputs[7].default_value = swatch.height;
|
||||
node.inputs[1].default_value[0] = swatch.opacity;
|
||||
node.inputs[2].default_value[0] = swatch.occlusion;
|
||||
node.inputs[3].default_value[0] = swatch.roughness;
|
||||
node.inputs[4].default_value[0] = swatch.metallic;
|
||||
node.inputs[7].default_value[0] = swatch.height;
|
||||
}
|
||||
}
|
||||
array_push(project_materials, context_raw.material);
|
||||
|
||||
@@ -253,11 +253,11 @@ function tab_textures_update_texture_pointers(nodes: zui_node_t[], i: i32) {
|
||||
for (let i: i32 = 0; i < nodes.length; ++i) {
|
||||
let n: zui_node_t = nodes[i];
|
||||
if (n.type == "TEX_IMAGE") {
|
||||
if (n.buttons[0].default_value == i) {
|
||||
n.buttons[0].default_value = 9999; // Texture deleted, use pink now
|
||||
if (n.buttons[0].default_value[0] == i) {
|
||||
n.buttons[0].default_value[0] = 9999; // Texture deleted, use pink now
|
||||
}
|
||||
else if (n.buttons[0].default_value > i) {
|
||||
n.buttons[0].default_value--; // Offset by deleted texture
|
||||
else if (n.buttons[0].default_value[0] > i) {
|
||||
n.buttons[0].default_value[0]--; // Offset by deleted texture
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+88
-23
@@ -1,11 +1,11 @@
|
||||
|
||||
let ui_header_default_h: i32 = 28;
|
||||
let ui_header_h: i32 = ui_header_default_h;
|
||||
let ui_header_handle: zui_handle_t = zui_handle_create({ layout: zui_layout_t.HORIZONTAL });
|
||||
let ui_header_handle: zui_handle_t = zui_handle_create();
|
||||
let ui_header_worktab: zui_handle_t = zui_handle_create();
|
||||
|
||||
function ui_header_init() {
|
||||
|
||||
ui_header_handle.layout = zui_layout_t.HORIZONTAL;
|
||||
}
|
||||
|
||||
function ui_header_render_ui() {
|
||||
@@ -171,7 +171,11 @@ function ui_header_draw_tool_properties(ui: zui_t) {
|
||||
zui_text(tr("Metallic") + " (" + metallic_picked + ")");
|
||||
zui_text(tr("Height") + " (" + height_picked + ")");
|
||||
zui_text(tr("Opacity") + " (" + opacity_picked + ")");
|
||||
context_raw.picker_select_material = zui_check(zui_handle(__ID__, { selected: context_raw.picker_select_material }), tr("Select Material"));
|
||||
let h_select_mat: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_select_mat.init) {
|
||||
h_select_mat.selected = context_raw.picker_select_material;
|
||||
}
|
||||
context_raw.picker_select_material = zui_check(h_select_mat, tr("Select Material"));
|
||||
zui_combo(context_raw.picker_mask_handle, [tr("None"), tr("Material")], tr("Mask"), true);
|
||||
if (context_raw.picker_mask_handle.changed) {
|
||||
make_material_parse_paint_material();
|
||||
@@ -205,7 +209,10 @@ function ui_header_draw_tool_properties(ui: zui_t) {
|
||||
///end
|
||||
}
|
||||
|
||||
let bake_handle: zui_handle_t = zui_handle(__ID__, { position: context_raw.bake_type });
|
||||
let bake_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (bake_handle.init) {
|
||||
bake_handle.position = context_raw.bake_type;
|
||||
}
|
||||
let bakes: string[] = [
|
||||
tr("AO"),
|
||||
tr("Curvature"),
|
||||
@@ -240,25 +247,43 @@ function ui_header_draw_tool_properties(ui: zui_t) {
|
||||
|
||||
///if (krom_direct3d12 || krom_vulkan || krom_metal)
|
||||
if (rt_bake) {
|
||||
let samples_handle: zui_handle_t = zui_handle(__ID__, { value: context_raw.bake_samples });
|
||||
let samples_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (samples_handle.init) {
|
||||
samples_handle.value = context_raw.bake_samples;
|
||||
}
|
||||
context_raw.bake_samples = math_floor(zui_slider(samples_handle, tr("Samples"), 1, 512, true, 1));
|
||||
}
|
||||
///end
|
||||
|
||||
if (context_raw.bake_type == bake_type_t.NORMAL_OBJECT || context_raw.bake_type == bake_type_t.POSITION || context_raw.bake_type == bake_type_t.BENT_NORMAL) {
|
||||
let bake_up_axis_handle: zui_handle_t = zui_handle(__ID__, { position: context_raw.bake_up_axis });
|
||||
let bake_up_axis_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (bake_up_axis_handle.init) {
|
||||
bake_up_axis_handle.position = context_raw.bake_up_axis;
|
||||
}
|
||||
context_raw.bake_up_axis = zui_combo(bake_up_axis_handle, [tr("Z"), tr("Y")], tr("Up Axis"), true);
|
||||
}
|
||||
if (context_raw.bake_type == bake_type_t.AO || context_raw.bake_type == bake_type_t.CURVATURE) {
|
||||
let bake_axis_handle: zui_handle_t = zui_handle(__ID__, { position: context_raw.bake_axis });
|
||||
let bake_axis_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (bake_axis_handle.init) {
|
||||
bake_axis_handle.position = context_raw.bake_axis;
|
||||
}
|
||||
context_raw.bake_axis = zui_combo(bake_axis_handle, [tr("XYZ"), tr("X"), tr("Y"), tr("Z"), tr("-X"), tr("-Y"), tr("-Z")], tr("Axis"), true);
|
||||
}
|
||||
if (context_raw.bake_type == bake_type_t.AO) {
|
||||
let strength_handle: zui_handle_t = zui_handle(__ID__, { value: context_raw.bake_ao_strength });
|
||||
let strength_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (strength_handle.init) {
|
||||
strength_handle.value = context_raw.bake_ao_strength;
|
||||
}
|
||||
context_raw.bake_ao_strength = zui_slider(strength_handle, tr("Strength"), 0.0, 2.0, true);
|
||||
let radius_handle: zui_handle_t = zui_handle(__ID__, { value: context_raw.bake_ao_radius });
|
||||
let radius_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (radius_handle.init) {
|
||||
radius_handle.value = context_raw.bake_ao_radius;
|
||||
}
|
||||
context_raw.bake_ao_radius = zui_slider(radius_handle, tr("Radius"), 0.0, 2.0, true);
|
||||
let offset_handle: zui_handle_t = zui_handle(__ID__, { value: context_raw.bake_ao_offset });
|
||||
let offset_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (offset_handle.init) {
|
||||
offset_handle.value = context_raw.bake_ao_offset;
|
||||
}
|
||||
context_raw.bake_ao_offset = zui_slider(offset_handle, tr("Offset"), 0.0, 2.0, true);
|
||||
}
|
||||
///if (krom_direct3d12 || krom_vulkan || krom_metal)
|
||||
@@ -277,13 +302,25 @@ function ui_header_draw_tool_properties(ui: zui_t) {
|
||||
}
|
||||
///end
|
||||
if (context_raw.bake_type == bake_type_t.CURVATURE) {
|
||||
let strength_handle: zui_handle_t = zui_handle(__ID__, { value: context_raw.bake_curv_strength });
|
||||
let strength_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (strength_handle.init) {
|
||||
strength_handle.value = context_raw.bake_curv_strength;
|
||||
}
|
||||
context_raw.bake_curv_strength = zui_slider(strength_handle, tr("Strength"), 0.0, 2.0, true);
|
||||
let radius_handle: zui_handle_t = zui_handle(__ID__, { value: context_raw.bake_curv_radius });
|
||||
let radius_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (radius_handle.init) {
|
||||
radius_handle.value = context_raw.bake_curv_radius;
|
||||
}
|
||||
context_raw.bake_curv_radius = zui_slider(radius_handle, tr("Radius"), 0.0, 2.0, true);
|
||||
let offset_handle: zui_handle_t = zui_handle(__ID__, { value: context_raw.bake_curv_offset });
|
||||
let offset_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (offset_handle.init) {
|
||||
offset_handle.value = context_raw.bake_curv_offset;
|
||||
}
|
||||
context_raw.bake_curv_offset = zui_slider(offset_handle, tr("Offset"), -2.0, 2.0, true);
|
||||
let smooth_handle: zui_handle_t = zui_handle(__ID__, { value: context_raw.bake_curv_smooth });
|
||||
let smooth_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (smooth_handle.init) {
|
||||
smooth_handle.value = context_raw.bake_curv_smooth;
|
||||
}
|
||||
context_raw.bake_curv_smooth = math_floor(zui_slider(smooth_handle, tr("Smooth"), 0, 5, false, 1));
|
||||
}
|
||||
if (context_raw.bake_type == bake_type_t.NORMAL || context_raw.bake_type == bake_type_t.HEIGHT || context_raw.bake_type == bake_type_t.DERIVATIVE) {
|
||||
@@ -292,7 +329,10 @@ function ui_header_draw_tool_properties(ui: zui_t) {
|
||||
let p: mesh_object_t = project_paint_objects[i];
|
||||
array_push(ar, p.base.name);
|
||||
}
|
||||
let poly_handle: zui_handle_t = zui_handle(__ID__, { position: context_raw.bake_high_poly });
|
||||
let poly_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (poly_handle.init) {
|
||||
poly_handle.position = context_raw.bake_high_poly;
|
||||
}
|
||||
context_raw.bake_high_poly = zui_combo(poly_handle, ar, tr("High Poly"));
|
||||
}
|
||||
if (ui.changed) {
|
||||
@@ -342,7 +382,10 @@ function ui_header_draw_tool_properties(ui: zui_t) {
|
||||
context_raw.tool == workspace_tool_t.FILL ||
|
||||
context_raw.tool == workspace_tool_t.DECAL ||
|
||||
context_raw.tool == workspace_tool_t.TEXT) {
|
||||
let brush_scale_handle: zui_handle_t = zui_handle(__ID__, { value: context_raw.brush_scale });
|
||||
let brush_scale_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (brush_scale_handle.init) {
|
||||
brush_scale_handle.value = context_raw.brush_scale;
|
||||
}
|
||||
context_raw.brush_scale = zui_slider(brush_scale_handle, tr("UV Scale"), 0.01, 5.0, true);
|
||||
if (brush_scale_handle.changed) {
|
||||
if (context_raw.tool == workspace_tool_t.DECAL || context_raw.tool == workspace_tool_t.TEXT) {
|
||||
@@ -373,11 +416,18 @@ function ui_header_draw_tool_properties(ui: zui_t) {
|
||||
}
|
||||
|
||||
if (context_raw.tool == workspace_tool_t.BRUSH || context_raw.tool == workspace_tool_t.ERASER || context_raw.tool == workspace_tool_t.CLONE || decal_mask) {
|
||||
context_raw.brush_hardness = zui_slider(zui_handle(__ID__, { value: context_raw.brush_hardness }), tr("Hardness"), 0.0, 1.0, true);
|
||||
let h: zui_handle_t = zui_handle(__ID__);
|
||||
if (h.init) {
|
||||
h.value = context_raw.brush_hardness;
|
||||
}
|
||||
context_raw.brush_hardness = zui_slider(h, tr("Hardness"), 0.0, 1.0, true);
|
||||
}
|
||||
|
||||
if (context_raw.tool != workspace_tool_t.ERASER) {
|
||||
let brush_blending_handle: zui_handle_t = zui_handle(__ID__, { value: context_raw.brush_blending });
|
||||
let brush_blending_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (brush_blending_handle.init) {
|
||||
brush_blending_handle.value = context_raw.brush_blending;
|
||||
}
|
||||
context_raw.brush_blending = zui_combo(brush_blending_handle, [
|
||||
tr("Mix"),
|
||||
tr("Darken"),
|
||||
@@ -454,15 +504,27 @@ function ui_header_draw_tool_properties(ui: zui_t) {
|
||||
}
|
||||
ui._w = math_floor((touch_header ? 54 : 60) * sc);
|
||||
|
||||
let xray_handle: zui_handle_t = zui_handle(__ID__, { selected: context_raw.xray });
|
||||
let xray_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (xray_handle.init) {
|
||||
xray_handle.selected = context_raw.xray;
|
||||
}
|
||||
context_raw.xray = zui_check(xray_handle, tr("X-Ray"));
|
||||
if (xray_handle.changed) {
|
||||
make_material_parse_paint_material();
|
||||
}
|
||||
|
||||
let sym_x_handle: zui_handle_t = zui_handle(__ID__, { selected: false });
|
||||
let sym_y_handle: zui_handle_t = zui_handle(__ID__, { selected: false });
|
||||
let sym_z_handle: zui_handle_t = zui_handle(__ID__, { selected: false });
|
||||
let sym_x_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (sym_x_handle.init) {
|
||||
sym_x_handle.selected = false;
|
||||
}
|
||||
let sym_y_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (sym_y_handle.init) {
|
||||
sym_y_handle.selected = false;
|
||||
}
|
||||
let sym_z_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (sym_z_handle.init) {
|
||||
sym_z_handle.selected = false;
|
||||
}
|
||||
|
||||
if (config_raw.layout[layout_size_t.HEADER] == 1) {
|
||||
if (config_raw.touch_ui) {
|
||||
@@ -502,7 +564,10 @@ function ui_header_draw_tool_properties(ui: zui_t) {
|
||||
///if arm_physics
|
||||
if (context_raw.tool == workspace_tool_t.PARTICLE) {
|
||||
ui._x += 10 * zui_SCALE(ui);
|
||||
let phys_handle: zui_handle_t = zui_handle(__ID__, { selected: false });
|
||||
let phys_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (phys_handle.init) {
|
||||
phys_handle.selected = false;
|
||||
}
|
||||
context_raw.particle_physics = zui_check(phys_handle, tr("Physics"));
|
||||
if (phys_handle.changed) {
|
||||
util_particle_init_physics();
|
||||
|
||||
+29
-7
@@ -245,7 +245,10 @@ function ui_menu_render() {
|
||||
|
||||
///if (is_paint || is_sculpt)
|
||||
ui_menu_fill(ui);
|
||||
let split_view_handle: zui_handle_t = zui_handle(__ID__, { selected: context_raw.split_view });
|
||||
let split_view_handle = zui_handle(__ID__);
|
||||
if (split_view_handle.init) {
|
||||
split_view_handle.selected = context_raw.split_view;
|
||||
}
|
||||
context_raw.split_view = zui_check(split_view_handle, " " + tr("Split View"));
|
||||
if (split_view_handle.changed) {
|
||||
base_resize();
|
||||
@@ -254,7 +257,10 @@ function ui_menu_render() {
|
||||
|
||||
///if is_lab
|
||||
ui_menu_fill(ui);
|
||||
let brush_scale_handle: zui_handle_t = zui_handle(__ID__, { value: context_raw.brush_scale });
|
||||
let brush_scale_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (brush_scale_handle.init) {
|
||||
brush_scale_handle.value = context_raw.brush_scale;
|
||||
}
|
||||
ui_menu_align(ui);
|
||||
context_raw.brush_scale = zui_slider(brush_scale_handle, tr("UV Scale"), 0.01, 5.0, true);
|
||||
if (brush_scale_handle.changed) {
|
||||
@@ -267,14 +273,20 @@ function ui_menu_render() {
|
||||
///end
|
||||
|
||||
ui_menu_fill(ui);
|
||||
let cull_handle: zui_handle_t = zui_handle(__ID__, { selected: context_raw.cull_backfaces });
|
||||
let cull_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (cull_handle.init) {
|
||||
cull_handle.selected = context_raw.cull_backfaces;
|
||||
}
|
||||
context_raw.cull_backfaces = zui_check(cull_handle, " " + tr("Cull Backfaces"));
|
||||
if (cull_handle.changed) {
|
||||
make_material_parse_mesh_material();
|
||||
}
|
||||
|
||||
ui_menu_fill(ui);
|
||||
let filter_handle: zui_handle_t = zui_handle(__ID__, { selected: context_raw.texture_filter });
|
||||
let filter_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (filter_handle.init) {
|
||||
filter_handle.selected = context_raw.texture_filter;
|
||||
}
|
||||
context_raw.texture_filter = zui_check(filter_handle, " " + tr("Filter Textures"));
|
||||
if (filter_handle.changed) {
|
||||
make_material_parse_paint_material();
|
||||
@@ -302,7 +314,10 @@ function ui_menu_render() {
|
||||
///end
|
||||
|
||||
ui_menu_fill(ui);
|
||||
let compass_handle: zui_handle_t = zui_handle(__ID__, { selected: context_raw.show_compass });
|
||||
let compass_handle: zui_handle_t = zui_handle(__ID__);
|
||||
if (compass_handle.init) {
|
||||
compass_handle.selected = context_raw.show_compass;
|
||||
}
|
||||
context_raw.show_compass = zui_check(compass_handle, " " + tr("Compass"));
|
||||
if (compass_handle.changed) {
|
||||
context_raw.ddirty = 2;
|
||||
@@ -430,7 +445,10 @@ function ui_menu_render() {
|
||||
|
||||
ui_menu_fill(ui);
|
||||
let cam: camera_object_t = scene_camera;
|
||||
context_raw.fov_handle = zui_handle(__ID__, { value: math_floor(cam.data.fov * 100) / 100 });
|
||||
context_raw.fov_handle = zui_handle(__ID__);
|
||||
if (context_raw.fov_handle.init) {
|
||||
context_raw.fov_handle.value = math_floor(cam.data.fov * 100) / 100;
|
||||
}
|
||||
ui_menu_align(ui);
|
||||
cam.data.fov = zui_slider(context_raw.fov_handle, tr("FoV"), 0.3, 1.4, true);
|
||||
if (context_raw.fov_handle.changed) {
|
||||
@@ -570,7 +588,11 @@ function ui_menu_render() {
|
||||
zui_image(img);
|
||||
zui_end_element();
|
||||
|
||||
zui_text_area(zui_handle(__ID__, { text: _ui_menu_render_msg }), zui_align_t.LEFT, false);
|
||||
let h: zui_handle_t = zui_handle(__ID__);
|
||||
if (h.init) {
|
||||
h.text = _ui_menu_render_msg;
|
||||
}
|
||||
zui_text_area(h, zui_align_t.LEFT, false);
|
||||
|
||||
zui_row([1 / 3, 1 / 3, 1 / 3]);
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
let ui_menubar_default_w: i32 = 330;
|
||||
let ui_menubar_workspace_handle: zui_handle_t = zui_handle_create({ layout: zui_layout_t.HORIZONTAL });
|
||||
let ui_menubar_menu_handle: zui_handle_t = zui_handle_create({ layout: zui_layout_t.HORIZONTAL });
|
||||
let ui_menubar_workspace_handle: zui_handle_t = zui_handle_create();
|
||||
let ui_menubar_menu_handle: zui_handle_t = zui_handle_create();
|
||||
let ui_menubar_w: i32 = ui_menubar_default_w;
|
||||
|
||||
///if is_lab
|
||||
@@ -10,6 +10,8 @@ let _ui_menubar_plane: mesh_object_t = null;
|
||||
///end
|
||||
|
||||
function ui_menubar_init() {
|
||||
ui_menubar_workspace_handle.layout = zui_layout_t.HORIZONTAL;
|
||||
ui_menubar_menu_handle.layout = zui_layout_t.HORIZONTAL;
|
||||
}
|
||||
|
||||
function ui_menubar_render_ui() {
|
||||
|
||||
+55
-13
@@ -149,7 +149,7 @@ function ui_nodes_on_socket_released(socket_id: i32) {
|
||||
}
|
||||
}
|
||||
else {
|
||||
_ui_nodes_hval0.value = socket.default_value;
|
||||
_ui_nodes_hval0.value = socket.default_value[0];
|
||||
}
|
||||
|
||||
app_notify_on_next_frame(function () {
|
||||
@@ -1308,7 +1308,7 @@ function ui_nodes_accept_asset_drag(index: i32) {
|
||||
let n: zui_node_t = nodes_brush_create_node("ImageTextureNode");
|
||||
///end
|
||||
|
||||
n.buttons[0].default_value = index;
|
||||
n.buttons[0].default_value[0] = index;
|
||||
ui_nodes_get_nodes().nodes_selected_id = [n.id];
|
||||
|
||||
///if is_lab
|
||||
@@ -1324,7 +1324,7 @@ function ui_nodes_accept_layer_drag(index: i32) {
|
||||
}
|
||||
let g: node_group_t = ui_nodes_group_stack.length > 0 ? ui_nodes_group_stack[ui_nodes_group_stack.length - 1] : null;
|
||||
let n: zui_node_t = nodes_material_create_node(slot_layer_is_mask(context_raw.layer) ? "LAYER_MASK" : "LAYER", g);
|
||||
n.buttons[0].default_value = index;
|
||||
n.buttons[0].default_value[0] = index;
|
||||
ui_nodes_get_nodes().nodes_selected_id = [n.id];
|
||||
}
|
||||
|
||||
@@ -1332,7 +1332,7 @@ function ui_nodes_accept_material_drag(index: i32) {
|
||||
ui_nodes_push_undo();
|
||||
let g: node_group_t = ui_nodes_group_stack.length > 0 ? ui_nodes_group_stack[ui_nodes_group_stack.length - 1] : null;
|
||||
let n: zui_node_t = nodes_material_create_node("MATERIAL", g);
|
||||
n.buttons[0].default_value = index;
|
||||
n.buttons[0].default_value[0] = index;
|
||||
ui_nodes_get_nodes().nodes_selected_id = [n.id];
|
||||
}
|
||||
///end
|
||||
@@ -1342,34 +1342,76 @@ function ui_nodes_accept_swatch_drag(swatch: swatch_color_t) {
|
||||
ui_nodes_push_undo();
|
||||
let g: node_group_t = ui_nodes_group_stack.length > 0 ? ui_nodes_group_stack[ui_nodes_group_stack.length - 1] : null;
|
||||
let n: zui_node_t = nodes_material_create_node("RGB", g);
|
||||
n.outputs[0].default_value = [
|
||||
n.outputs[0].default_value = f32_array_create_xyzw(
|
||||
color_get_rb(swatch.base) / 255,
|
||||
color_get_gb(swatch.base) / 255,
|
||||
color_get_bb(swatch.base) / 255,
|
||||
color_get_ab(swatch.base) / 255
|
||||
];
|
||||
);
|
||||
ui_nodes_get_nodes().nodes_selected_id = [n.id];
|
||||
///end
|
||||
}
|
||||
|
||||
function ui_nodes_make_node(n: zui_node_t, nodes: zui_nodes_t, canvas: zui_node_canvas_t): zui_node_t {
|
||||
let node: zui_node_t = json_parse(json_stringify(n));
|
||||
let node: zui_node_t = {};
|
||||
node.id = zui_get_node_id(canvas.nodes);
|
||||
node.name = n.name;
|
||||
node.type = n.type;
|
||||
node.x = ui_nodes_get_node_x();
|
||||
node.y = ui_nodes_get_node_y();
|
||||
node.color = n.color;
|
||||
node.inputs = [];
|
||||
node.outputs = [];
|
||||
node.buttons = [];
|
||||
node.width = 0;
|
||||
|
||||
let count: i32 = 0;
|
||||
for (let i: i32 = 0; i < node.inputs.length; ++i) {
|
||||
let soc: zui_node_socket_t = node.inputs[i];
|
||||
for (let i: i32 = 0; i < n.inputs.length; ++i) {
|
||||
let soc: zui_node_socket_t = {}
|
||||
soc.id = zui_get_socket_id(canvas.nodes) + count;
|
||||
soc.node_id = node.id;
|
||||
count++;
|
||||
soc.node_id = node.id;
|
||||
soc.name = n.inputs[i].name;
|
||||
soc.type = n.inputs[i].type;
|
||||
soc.color = n.inputs[i].color;
|
||||
soc.default_value = n.inputs[i].default_value;
|
||||
soc.min = n.inputs[i].min;
|
||||
soc.max = n.inputs[i].max;
|
||||
soc.precision = n.inputs[i].precision;
|
||||
soc.display = n.inputs[i].display;
|
||||
array_push(node.inputs, soc);
|
||||
}
|
||||
for (let i: i32 = 0; i < node.outputs.length; ++i) {
|
||||
let soc: zui_node_socket_t = node.outputs[i];
|
||||
|
||||
for (let i: i32 = 0; i < n.outputs.length; ++i) {
|
||||
let soc: zui_node_socket_t = {};
|
||||
soc.id = zui_get_socket_id(canvas.nodes) + count;
|
||||
soc.node_id = node.id;
|
||||
count++;
|
||||
soc.node_id = node.id;
|
||||
soc.name = n.outputs[i].name;
|
||||
soc.type = n.outputs[i].type;
|
||||
soc.color = n.outputs[i].color;
|
||||
soc.default_value = n.outputs[i].default_value;
|
||||
soc.min = n.outputs[i].min;
|
||||
soc.max = n.outputs[i].max;
|
||||
soc.precision = n.outputs[i].precision;
|
||||
soc.display = n.outputs[i].display;
|
||||
array_push(node.outputs, soc);
|
||||
}
|
||||
|
||||
for (let i: i32 = 0; i < n.buttons.length; ++i) {
|
||||
let but: zui_node_button_t = {};
|
||||
but.name = n.buttons[i].name;
|
||||
but.type = n.buttons[i].type;
|
||||
but.output = n.buttons[i].output;
|
||||
but.default_value = n.buttons[i].default_value;
|
||||
but.data = n.buttons[i].data;
|
||||
but.min = n.buttons[i].min;
|
||||
but.max = n.buttons[i].max;
|
||||
but.precision = n.buttons[i].precision;
|
||||
but.height = n.buttons[i].height;
|
||||
array_push(node.buttons, but);
|
||||
}
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
|
||||
@@ -351,7 +351,11 @@ function ui_view2d_render() {
|
||||
|
||||
///if (is_paint || is_sculpt)
|
||||
if (ui_view2d_type == view_2d_type_t.LAYER) {
|
||||
ui_view2d_layer_mode = zui_combo(zui_handle(__ID__, { position: ui_view2d_layer_mode }), [
|
||||
let h_layer_mode: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_layer_mode.init) {
|
||||
h_layer_mode.position = ui_view2d_layer_mode;
|
||||
}
|
||||
ui_view2d_layer_mode = zui_combo(h_layer_mode, [
|
||||
tr("Visible"),
|
||||
tr("Selected"),
|
||||
], tr("Layers"));
|
||||
@@ -359,7 +363,11 @@ function ui_view2d_render() {
|
||||
ui_view2d_ui._y = 2 + start_y;
|
||||
|
||||
if (!slot_layer_is_mask(context_raw.layer)) {
|
||||
ui_view2d_tex_type = zui_combo(zui_handle(__ID__, { position: ui_view2d_tex_type }), [
|
||||
let h_tex_type: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_tex_type.init) {
|
||||
h_tex_type.position = ui_view2d_tex_type;
|
||||
}
|
||||
ui_view2d_tex_type = zui_combo(h_tex_type, [
|
||||
tr("Base Color"),
|
||||
tr("Normal Map"),
|
||||
tr("Occlusion"),
|
||||
@@ -373,13 +381,21 @@ function ui_view2d_render() {
|
||||
}
|
||||
|
||||
ui_view2d_ui._w = math_floor(ew * 0.7 + 3);
|
||||
ui_view2d_uvmap_show = zui_check(zui_handle(__ID__, { selected: ui_view2d_uvmap_show }), tr("UV Map"));
|
||||
let h_uvmap_show: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_uvmap_show.init) {
|
||||
h_uvmap_show.selected = ui_view2d_uvmap_show;
|
||||
}
|
||||
ui_view2d_uvmap_show = zui_check(h_uvmap_show, tr("UV Map"));
|
||||
ui_view2d_ui._x += ew * 0.7 + 3;
|
||||
ui_view2d_ui._y = 2 + start_y;
|
||||
}
|
||||
///end
|
||||
|
||||
ui_view2d_tiled_show = zui_check(zui_handle(__ID__, { selected: ui_view2d_tiled_show }), tr("Tiled"));
|
||||
let h_tiled_show: zui_handle_t = zui_handle(__ID__);
|
||||
if (h_tiled_show.init) {
|
||||
h_tiled_show.selected = ui_view2d_tiled_show;
|
||||
}
|
||||
ui_view2d_tiled_show = zui_check(h_tiled_show, tr("Tiled"));
|
||||
ui_view2d_ui._x += ew * 0.7 + 3;
|
||||
ui_view2d_ui._y = 2 + start_y;
|
||||
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"WINDOW_BG_COL": 4278190080,
|
||||
"WINDOW_TINT_COL": 4294967295,
|
||||
"ACCENT_COL": 4282598211,
|
||||
"ACCENT_HOVER_COL": 4282598211,
|
||||
"ACCENT_SELECT_COL": 4283453520,
|
||||
"BUTTON_COL": 4278190080,
|
||||
"BUTTON_TEXT_COL": 4293453797,
|
||||
"BUTTON_HOVER_COL": 4282992969,
|
||||
"BUTTON_PRESSED_COL": 4279966491,
|
||||
"TEXT_COL": 4293453797,
|
||||
"LABEL_COL": 4291348680,
|
||||
"SEPARATOR_COL": 4278519045,
|
||||
"HIGHLIGHT_COL": 4282992969,
|
||||
"CONTEXT_COL": 4280427042,
|
||||
"PANEL_BG_COL": 4278190080,
|
||||
"FONT_SIZE": 24,
|
||||
"ELEMENT_W": 100,
|
||||
"ELEMENT_H": 24,
|
||||
"ELEMENT_OFFSET": 4,
|
||||
"ARROW_SIZE": 5,
|
||||
"BUTTON_H": 22,
|
||||
"CHECK_SIZE": 15,
|
||||
"CHECK_SELECT_SIZE": 8,
|
||||
"SCROLL_W": 9,
|
||||
"SCROLL_MINI_W": 3,
|
||||
"TEXT_OFFSET": 8,
|
||||
"TAB_W": 16,
|
||||
"FILL_WINDOW_BG": true,
|
||||
"FILL_BUTTON_BG": false,
|
||||
"FILL_ACCENT_BG": false,
|
||||
"LINK_STYLE": 0,
|
||||
"FULL_TABS": false,
|
||||
"ROUND_CORNERS": false
|
||||
}
|
||||
+58
-69
@@ -13,6 +13,7 @@ type storage_t = {
|
||||
};
|
||||
|
||||
let ui: zui_t;
|
||||
let theme: zui_theme_t;
|
||||
let text_handle: zui_handle_t = zui_handle_create();
|
||||
let sidebar_handle: zui_handle_t = zui_handle_create();
|
||||
let editor_handle: zui_handle_t = zui_handle_create();
|
||||
@@ -31,14 +32,13 @@ function drop_files(path: string) {
|
||||
}
|
||||
|
||||
function shutdown() {
|
||||
krom_file_save_bytes(krom_save_path() + "/config.json", sys_string_to_buffer(json_stringify(storage)));
|
||||
let storage_string: string = sys_string_to_buffer(json_stringify(storage));
|
||||
krom_file_save_bytes(krom_save_path() + "/config.json", storage_string, 0);
|
||||
}
|
||||
|
||||
function main() {
|
||||
zui_set_text_area_line_numbers(true);
|
||||
zui_set_text_area_scroll_past_end(true);
|
||||
|
||||
krom_set_app_name("ArmorPad");
|
||||
|
||||
let blob_storage: buffer_t = krom_load_blob(krom_save_path() + "/config.json");
|
||||
if (blob_storage == null) {
|
||||
storage = {};
|
||||
@@ -59,47 +59,37 @@ function main() {
|
||||
|
||||
text_handle.text = storage.text;
|
||||
|
||||
let ops: kinc_sys_ops_t = {};
|
||||
ops.title = "ArmorPad";
|
||||
ops.x = storage.window_x;
|
||||
ops.y = storage.window_y;
|
||||
ops.width = storage.window_w;
|
||||
ops.height = storage.window_h;
|
||||
ops.features = window_features_t.RESIZABLE | window_features_t.MAXIMIZABLE | window_features_t.MINIMIZABLE;
|
||||
ops.mode = window_mode_t.WINDOWED;
|
||||
ops.frequency = 60;
|
||||
ops.vsync = true;
|
||||
let ops: kinc_sys_ops_t = {
|
||||
title: "ArmorPad",
|
||||
x: storage.window_x,
|
||||
y: storage.window_y,
|
||||
width: storage.window_w,
|
||||
height: storage.window_h,
|
||||
features: window_features_t.RESIZABLE |
|
||||
window_features_t.MAXIMIZABLE |
|
||||
window_features_t.MINIMIZABLE,
|
||||
mode: window_mode_t.WINDOWED,
|
||||
frequency: 60,
|
||||
vsync: true,
|
||||
};
|
||||
sys_start(ops);
|
||||
|
||||
let font: g2_font_t = data_get_font("font_mono.ttf");
|
||||
let blob_theme: buffer_t = data_get_blob("themes/dark.json");
|
||||
let blob_coloring: buffer_t = data_get_blob("text_coloring.json");
|
||||
let parsed: any = json_parse(sys_buffer_to_string(blob_theme));
|
||||
let theme: any = zui_theme_create();
|
||||
for (let key of Object.getOwnPropertyNames(theme_t.prototype)) {
|
||||
if (key == "constructor") {
|
||||
continue;
|
||||
}
|
||||
theme[key] = parsed[key];
|
||||
}
|
||||
|
||||
g2_font_init(font);
|
||||
let zui_ops: zui_ops_t = {};
|
||||
zui_ops.theme = theme;
|
||||
zui_ops.font = font;
|
||||
zui_ops.scaleFactor = 1.0;
|
||||
zui_ops.color_wheel = null;
|
||||
zui_ops.black_white_gradient = null;
|
||||
ui = zui_create(zui_ops);
|
||||
zui_set_on_border_hover(on_border_hover);
|
||||
zui_set_on_text_hover(on_text_hover);
|
||||
|
||||
theme = {};
|
||||
zui_theme_default(theme);
|
||||
|
||||
let zui_ops: zui_options_t = { scale_factor: 1.0, theme: theme, font: font.font_ };
|
||||
ui = zui_create(zui_ops);
|
||||
|
||||
let blob_coloring: buffer_t = data_get_blob("text_coloring.json");
|
||||
let text_coloring: zui_text_coloring_t = json_parse(sys_buffer_to_string(blob_coloring));
|
||||
text_coloring.default_color = math_floor(text_coloring.default_color);
|
||||
for (let coloring of text_coloring.colorings) {
|
||||
coloring.color = math_floor(coloring.color);
|
||||
}
|
||||
zui_set_text_area_coloring(text_coloring);
|
||||
zui_text_area_coloring = text_coloring;
|
||||
zui_on_border_hover = on_border_hover;
|
||||
zui_on_text_hover = on_text_hover;
|
||||
zui_text_area_line_numbers = true;
|
||||
zui_text_area_scroll_past_end = true;
|
||||
|
||||
sys_notify_on_frames(render);
|
||||
krom_set_drop_files_callback(drop_files);
|
||||
@@ -116,7 +106,7 @@ function list_folder(path: string) {
|
||||
|
||||
// Active file
|
||||
if (abs == storage.file) {
|
||||
zui_fill(0, 1, ui._w - 1, zui_ELEMENT_H(ui) - 1, ui.t.BUTTON_PRESSED_COL);
|
||||
zui_fill(0, 1, ui._w - 1, ZUI_ELEMENT_H() - 1, theme.BUTTON_PRESSED_COL);
|
||||
}
|
||||
|
||||
let prefix: string = "";
|
||||
@@ -124,7 +114,7 @@ function list_folder(path: string) {
|
||||
prefix = is_expanded ? "- " : "+ ";
|
||||
}
|
||||
|
||||
if (zui_button(prefix + f, Align.Left)) {
|
||||
if (zui_button(prefix + f, ZUI_ALIGN_LEFT, "")) {
|
||||
// Open file
|
||||
if (is_file) {
|
||||
storage.file = abs;
|
||||
@@ -142,9 +132,7 @@ function list_folder(path: string) {
|
||||
}
|
||||
|
||||
if (is_expanded) {
|
||||
// ui.indent(false);
|
||||
list_folder(abs);
|
||||
// ui.unindent(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -161,41 +149,46 @@ function render() {
|
||||
zui_begin(ui);
|
||||
|
||||
if (zui_window(sidebar_handle, 0, 0, storage.sidebar_w, sys_height(), false)) {
|
||||
let _BUTTON_TEXT_COL: i32 = ui.t.BUTTON_TEXT_COL;
|
||||
ui.t.BUTTON_TEXT_COL = ui.t.ACCENT_COL;
|
||||
let _BUTTON_TEXT_COL: i32 = theme.BUTTON_TEXT_COL;
|
||||
theme.BUTTON_TEXT_COL = theme.ACCENT_COL;
|
||||
if (storage.project != "") {
|
||||
list_folder(storage.project);
|
||||
}
|
||||
else {
|
||||
zui_button("Drop folder here", Align.Left);
|
||||
zui_button("Drop folder here", ZUI_ALIGN_LEFT, "");
|
||||
}
|
||||
ui.t.BUTTON_TEXT_COL = _BUTTON_TEXT_COL;
|
||||
theme.BUTTON_TEXT_COL = _BUTTON_TEXT_COL;
|
||||
}
|
||||
|
||||
zui_fill(sys_width() - minimap_w, 0, minimap_w, zui_ELEMENT_H(ui) + zui_ELEMENT_OFFSET(ui) + 1, ui.t.SEPARATOR_COL);
|
||||
zui_fill(storage.sidebar_w, 0, 1, sys_height(), ui.t.SEPARATOR_COL);
|
||||
zui_fill(sys_width() - minimap_w, 0, minimap_w, ZUI_ELEMENT_H() + ZUI_ELEMENT_OFFSET() + 1, theme.SEPARATOR_COL);
|
||||
zui_fill(storage.sidebar_w, 0, 1, sys_height(), theme.SEPARATOR_COL);
|
||||
|
||||
let editor_updated: bool = false;
|
||||
|
||||
if (zui_window(editor_handle, storage.sidebar_w + 1, 0, sys_width() - storage.sidebar_w - minimap_w, sys_height(), false)) {
|
||||
editor_updated = true;
|
||||
let htab: zui_handle_t = zui_handle("main_0", { position: 0 });
|
||||
let file_name: string = substring(storage.file, string_last_index_of(storage.file, "/") + 1);
|
||||
let htab: zui_handle_t = zui_handle(__ID__);
|
||||
let file_name: string = substring(storage.file, string_last_index_of(storage.file, "/") + 1, storage.file.length);
|
||||
let file_names: string[] = [file_name];
|
||||
|
||||
for (let file_name of file_names) {
|
||||
if (zui_tab(htab, file_name + (storage.modified ? "*" : ""))) {
|
||||
for (let i: i32 = 0; i < file_names.length; ++i) {
|
||||
let tab_name: string = file_names[i];
|
||||
if (storage.modified) {
|
||||
tab_name += "*";
|
||||
}
|
||||
if (zui_tab(htab, tab_name, false, -1)) {
|
||||
// File modified
|
||||
if (ui.is_key_pressed) {
|
||||
storage.modified = true;
|
||||
}
|
||||
|
||||
// Save
|
||||
if (ui.is_ctrl_down && ui.key == key_code_t.S) {
|
||||
if (ui.is_ctrl_down && ui.key_code == key_code_t.S) {
|
||||
save_file();
|
||||
}
|
||||
|
||||
storage.text = zui_text_area(text_handle);
|
||||
// storage.text = zui_text_area(text_handle, ZUI_ALIGN_LEFT, true, "", false);
|
||||
zui_text_area(text_handle, ZUI_ALIGN_LEFT, true, "", false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -220,18 +213,16 @@ function render() {
|
||||
minimap_scrolling = false;
|
||||
}
|
||||
if (minimap_scrolling) {
|
||||
// editor_handle.scroll_offset -= ui.input_dy * zui_ELEMENT_H(ui) / 2;
|
||||
// // editor_handle.scroll_offset = -((ui.input_y - minimap_y - minimap_box_h / 2) * zui_ELEMENT_H(ui) / 2);
|
||||
redraw = true;
|
||||
}
|
||||
|
||||
// Build project
|
||||
if (ui.is_ctrl_down && ui.key == key_code_t.B) {
|
||||
if (ui.is_ctrl_down && ui.key_code == key_code_t.B) {
|
||||
save_file();
|
||||
build_project();
|
||||
}
|
||||
|
||||
zui_end();
|
||||
zui_end(false);
|
||||
|
||||
if (redraw) {
|
||||
editor_handle.redraws = 2;
|
||||
@@ -251,16 +242,16 @@ function render() {
|
||||
function save_file() {
|
||||
// Trim
|
||||
let lines: string[] = string_split(storage.text, "\n");
|
||||
for (let i = 0; i < lines.length; ++i) {
|
||||
for (let i: i32 = 0; i < lines.length; ++i) {
|
||||
lines[i] = trim_end(lines[i]);
|
||||
}
|
||||
storage.text = lines.join("\n");
|
||||
storage.text = string_array_join(lines, "\n");
|
||||
// Spaces to tabs
|
||||
storage.text = string_replace_all(storage.text, " ", "\t");
|
||||
text_handle.text = storage.text;
|
||||
// Write bytes
|
||||
let bytes = ends_with(storage.file, ".arm") ? armpack_encode(json_parse(storage.text)) : sys_string_to_buffer(storage.text);
|
||||
krom_file_save_bytes(storage.file, bytes, buffer_size(bytes));
|
||||
// let bytes: buffer_t = ends_with(storage.file, ".arm") ? armpack_encode(json_parse(storage.text)) : sys_string_to_buffer(storage.text);
|
||||
// krom_file_save_bytes(storage.file, bytes, buffer_size(bytes));
|
||||
storage.modified = false;
|
||||
}
|
||||
|
||||
@@ -273,7 +264,7 @@ function build_file(): string {
|
||||
}
|
||||
|
||||
function build_project() {
|
||||
krom_sys_command(storage.project + build_file() + " " + storage.project);
|
||||
krom_sys_command(storage.project + build_file() + " " + storage.project, null);
|
||||
}
|
||||
|
||||
function draw_minimap() {
|
||||
@@ -286,11 +277,11 @@ function draw_minimap() {
|
||||
}
|
||||
|
||||
g2_begin(minimap);
|
||||
g2_clear(ui.t.SEPARATOR_COL);
|
||||
g2_clear(theme.SEPARATOR_COL);
|
||||
g2_set_color(0xff333333);
|
||||
let lines: string[] = string_split(storage.text, "\n");
|
||||
let minimap_full_h: i32 = lines.length * 2;
|
||||
let scroll_progress: f32 = -editor_handle.scroll_offset / (lines.length * zui_ELEMENT_H(ui));
|
||||
let scroll_progress: f32 = -editor_handle.scroll_offset / (lines.length * ZUI_ELEMENT_H());
|
||||
let out_of_screen: i32 = minimap_full_h - minimap_h;
|
||||
if (out_of_screen < 0) {
|
||||
out_of_screen = 0;
|
||||
@@ -314,7 +305,7 @@ function draw_minimap() {
|
||||
// Current position
|
||||
let visible_area: i32 = out_of_screen > 0 ? minimap_h : minimap_full_h;
|
||||
g2_set_color(0x11ffffff);
|
||||
minimap_box_h = math_floor((sys_height() - window_header_h) / zui_ELEMENT_H(ui) * 2);
|
||||
minimap_box_h = math_floor((sys_height() - window_header_h) / ZUI_ELEMENT_H() * 2);
|
||||
g2_fill_rect(0, scroll_progress * visible_area, minimap_w, minimap_box_h);
|
||||
g2_end();
|
||||
}
|
||||
@@ -341,5 +332,3 @@ function on_border_hover(handle: zui_handle_t, side: i32) {
|
||||
function on_text_hover() {
|
||||
krom_set_mouse_cursor(2); // I-cursor
|
||||
}
|
||||
|
||||
main();
|
||||
|
||||
+1
-1
@@ -2,6 +2,7 @@
|
||||
let flags = globalThis.flags;
|
||||
flags.name = 'ArmorPad';
|
||||
flags.package = 'org.armorpad';
|
||||
flags.with_minits = true;
|
||||
flags.with_nfd = true;
|
||||
flags.with_tinydir = true;
|
||||
flags.with_g2 = true;
|
||||
@@ -14,7 +15,6 @@ flags.on_c_project_created = function(c_project, platform, graphics) {
|
||||
let project = new Project("ArmorPad");
|
||||
let root = "../../";
|
||||
project.addSources("Sources");
|
||||
project.addAssets("Assets/themes/*.json", { destination: "data/themes/{name}" });
|
||||
project.addShaders(root + "armorcore/Shaders/*.glsl",);
|
||||
project.addAssets(root + "base/Assets/font_mono.ttf", { destination: "data/{name}" });
|
||||
project.addAssets(root + "base/Assets/text_coloring.json", { destination: "data/{name}" });
|
||||
|
||||
Reference in New Issue
Block a user