alang fixes

This commit is contained in:
luboslenco
2024-08-26 22:14:53 +02:00
parent 31e45762c9
commit 5533c53932
5 changed files with 102 additions and 90 deletions
+19 -18
View File
@@ -1,24 +1,10 @@
/// <reference path="./nodes/tex_image_node.ts"/>
/// <reference path="./nodes/input_node.ts"/>
/// <reference path="./nodes/brush_output_node.ts"/>
let nodes_brush_categories: string[] = [_tr("Nodes")]; let nodes_brush_categories: string[] = [
_tr("Nodes")
let nodes_brush_category0: zui_node_t[] = [
tex_image_node_def,
input_node_def,
math_node_def,
random_node_def,
separate_vector_node_def,
time_node_def,
float_node_def,
vector_node_def,
vector_math_node_def
]; ];
let nodes_brush_list: node_list_t[] = [ let nodes_brush_category0: zui_node_t[];
nodes_brush_category0 let nodes_brush_list: node_list_t[];
];
let nodes_brush_creates: map_t<string, (args: f32_array_t)=>logic_node_ext_t>; let nodes_brush_creates: map_t<string, (args: f32_array_t)=>logic_node_ext_t>;
@@ -34,6 +20,21 @@ function nodes_brush_init() {
map_set(nodes_brush_creates, "float_node", float_node_create); map_set(nodes_brush_creates, "float_node", float_node_create);
map_set(nodes_brush_creates, "vector_node", vector_node_create); map_set(nodes_brush_creates, "vector_node", vector_node_create);
map_set(nodes_brush_creates, "vector_math_node", vector_math_node_create); map_set(nodes_brush_creates, "vector_math_node", vector_math_node_create);
nodes_brush_category0 = [
tex_image_node_def,
input_node_def,
math_node_def,
random_node_def,
separate_vector_node_def,
time_node_def,
float_node_def,
vector_node_def,
vector_math_node_def
];
nodes_brush_list = [
nodes_brush_category0
];
} }
function nodes_brush_create_node(node_type: string): zui_node_t { function nodes_brush_create_node(node_type: string): zui_node_t {
+8 -8
View File
@@ -1656,7 +1656,7 @@ let nodes_material_texture: zui_node_t[] = [
type: "ENUM", type: "ENUM",
output: 0, output: 0,
default_value: f32_array_create_x(0), default_value: f32_array_create_x(0),
data: u8_array_create_from_string(_tr("Linear") + "\0" + _tr("Diagonal") + "\0" + _tr("Radial") + "\0" + _tr("Spherical")), data: u8_array_create_from_string(_tr("Linear") + "\n" + _tr("Diagonal") + "\n" + _tr("Radial") + "\n" + _tr("Spherical")),
min: 0.0, min: 0.0,
max: 1.0, max: 1.0,
precision: 100, precision: 100,
@@ -1729,7 +1729,7 @@ let nodes_material_texture: zui_node_t[] = [
type: "ENUM", type: "ENUM",
output: -1, output: -1,
default_value: f32_array_create_x(0), default_value: f32_array_create_x(0),
data: u8_array_create_from_string(_tr("Auto") + "\0" + _tr("Linear") + "\0" + _tr("sRGB") + "\0" + _tr("DirectX Normal Map")), data: u8_array_create_from_string(_tr("Auto") + "\n" + _tr("Linear") + "\n" + _tr("sRGB") + "\n" + _tr("DirectX Normal Map")),
min: 0.0, min: 0.0,
max: 1.0, max: 1.0,
precision: 100, precision: 100,
@@ -1977,7 +1977,7 @@ let nodes_material_texture: zui_node_t[] = [
type: "ENUM", type: "ENUM",
output: 0, output: 0,
default_value: f32_array_create_x(0), default_value: f32_array_create_x(0),
data: u8_array_create_from_string(_tr("Intensity") + "\0" + _tr("Cells")), data: u8_array_create_from_string(_tr("Intensity") + "\n" + _tr("Cells")),
min: 0.0, min: 0.0,
max: 1.0, max: 1.0,
precision: 100, precision: 100,
@@ -2414,7 +2414,7 @@ let nodes_material_color: zui_node_t[] = [
type: "ENUM", type: "ENUM",
output: 0, output: 0,
default_value: f32_array_create_x(0), default_value: f32_array_create_x(0),
data: u8_array_create_from_string(_tr("Mix") + "\0" + _tr("Darken") + "\0" + _tr("Multiply") + "\0" + _tr("Burn") + "\0" + _tr("Lighten") + "\0" + _tr("Screen") + "\0" + _tr("Dodge") + "\0" + _tr("Add") + "\0" + _tr("Overlay") + "\0" + _tr("Soft Light") + "\0" + _tr("Linear Light") + "\0" + _tr("Difference") + "\0" + _tr("Subtract") + "\0" + _tr("Divide") + "\0" + _tr("Hue") + "\0" + _tr("Saturation") + "\0" + _tr("Color") + "\0" + _tr("Value")), data: u8_array_create_from_string(_tr("Mix") + "\n" + _tr("Darken") + "\n" + _tr("Multiply") + "\n" + _tr("Burn") + "\n" + _tr("Lighten") + "\n" + _tr("Screen") + "\n" + _tr("Dodge") + "\n" + _tr("Add") + "\n" + _tr("Overlay") + "\n" + _tr("Soft Light") + "\n" + _tr("Linear Light") + "\n" + _tr("Difference") + "\n" + _tr("Subtract") + "\n" + _tr("Divide") + "\n" + _tr("Hue") + "\n" + _tr("Saturation") + "\n" + _tr("Color") + "\n" + _tr("Value")),
min: 0.0, min: 0.0,
max: 1.0, max: 1.0,
precision: 100, precision: 100,
@@ -2750,7 +2750,7 @@ let nodes_material_vector: zui_node_t[] = [
type: "ENUM", type: "ENUM",
output: 0, output: 0,
default_value: f32_array_create_x(0), default_value: f32_array_create_x(0),
data: u8_array_create_from_string(_tr("Partial Derivative") + "\0" + _tr("Whiteout") + "\0" + _tr("Reoriented")), data: u8_array_create_from_string(_tr("Partial Derivative") + "\n" + _tr("Whiteout") + "\n" + _tr("Reoriented")),
min: 0.0, min: 0.0,
max: 1.0, max: 1.0,
precision: 100, precision: 100,
@@ -3002,7 +3002,7 @@ let nodes_material_converter: zui_node_t[] = [
type: "ENUM", type: "ENUM",
output: 0, output: 0,
default_value: f32_array_create_x(0), default_value: f32_array_create_x(0),
data: u8_array_create_from_string(_tr("Min Max") + "\0" + _tr("Range")), data: u8_array_create_from_string(_tr("Min Max") + "\n" + _tr("Range")),
min: 0.0, min: 0.0,
max: 1.0, max: 1.0,
precision: 100, precision: 100,
@@ -3485,7 +3485,7 @@ let nodes_material_converter: zui_node_t[] = [
type: "ENUM", type: "ENUM",
output: 0, output: 0,
default_value: f32_array_create_x(0), default_value: f32_array_create_x(0),
data: u8_array_create_from_string(_tr("Add") + "\0" + _tr("Subtract") + "\0" + _tr("Multiply") + "\0" + _tr("Divide") + "\0" + _tr("Power") + "\0" + _tr("Logarithm") + "\0" + _tr("Square Root") + "\0" + _tr("Inverse Square Root") + "\0" + _tr("Absolute") + "\0" + _tr("Exponent") + "\0" + _tr("Minimum") + "\0" + _tr("Maximum") + "\0" + _tr("Less Than") + "\0" + _tr("Greater Than") + "\0" + _tr("Sign") + "\0" + _tr("Round") + "\0" + _tr("Floor") + "\0" + _tr("Ceil") + "\0" + _tr("Truncate") + "\0" + _tr("Fraction") + "\0" + _tr("Modulo") + "\0" + _tr("Snap") + "\0" + _tr("Ping-Pong") + "\0" + _tr("Sine") + "\0" + _tr("Cosine") + "\0" + _tr("Tangent") + "\0" + _tr("Arcsine") + "\0" + _tr("Arccosine") + "\0" + _tr("Arctangent") + "\0" + _tr("Arctan2") + "\0" + _tr("Hyperbolic Sine") + "\0" + _tr("Hyperbolic Cosine") + "\0" + _tr("Hyperbolic Tangent") + "\0" + _tr("To Radians") + "\0" + _tr("To Degrees")), data: u8_array_create_from_string(_tr("Add") + "\n" + _tr("Subtract") + "\n" + _tr("Multiply") + "\n" + _tr("Divide") + "\n" + _tr("Power") + "\n" + _tr("Logarithm") + "\n" + _tr("Square Root") + "\n" + _tr("Inverse Square Root") + "\n" + _tr("Absolute") + "\n" + _tr("Exponent") + "\n" + _tr("Minimum") + "\n" + _tr("Maximum") + "\n" + _tr("Less Than") + "\n" + _tr("Greater Than") + "\n" + _tr("Sign") + "\n" + _tr("Round") + "\n" + _tr("Floor") + "\n" + _tr("Ceil") + "\n" + _tr("Truncate") + "\n" + _tr("Fraction") + "\n" + _tr("Modulo") + "\n" + _tr("Snap") + "\n" + _tr("Ping-Pong") + "\n" + _tr("Sine") + "\n" + _tr("Cosine") + "\n" + _tr("Tangent") + "\n" + _tr("Arcsine") + "\n" + _tr("Arccosine") + "\n" + _tr("Arctangent") + "\n" + _tr("Arctan2") + "\n" + _tr("Hyperbolic Sine") + "\n" + _tr("Hyperbolic Cosine") + "\n" + _tr("Hyperbolic Tangent") + "\n" + _tr("To Radians") + "\n" + _tr("To Degrees")),
min: 0.0, min: 0.0,
max: 1.0, max: 1.0,
precision: 100, precision: 100,
@@ -3794,7 +3794,7 @@ let nodes_material_converter: zui_node_t[] = [
type: "ENUM", type: "ENUM",
output: 0, output: 0,
default_value: f32_array_create_x(0), default_value: f32_array_create_x(0),
data: u8_array_create_from_string(_tr("Add") + "\0" + _tr("Subtract") + "\0" + _tr("Multiply") + "\0" + _tr("Divide") + "\0" + _tr("Average") + "\0" + _tr("Cross Product") + "\0" + _tr("Project") + "\0" + _tr("Reflect") + "\0" + _tr("Dot Product") + "\0" + _tr("Distance") + "\0" + _tr("Length") + "\0" + _tr("Scale") + "\0" + _tr("Normalize") + "\0" + _tr("Absolute") + "\0" + _tr("Minimum") + "\0" + _tr("Maximum") + "\0" + _tr("Floor") + "\0" + _tr("Ceil") + "\0" + _tr("Fraction") + "\0" + _tr("Modulo") + "\0" + _tr("Snap") + "\0" + _tr("Sine") + "\0" + _tr("Cosine") + "\0" + _tr("Tangent")), data: u8_array_create_from_string(_tr("Add") + "\n" + _tr("Subtract") + "\n" + _tr("Multiply") + "\n" + _tr("Divide") + "\n" + _tr("Average") + "\n" + _tr("Cross Product") + "\n" + _tr("Project") + "\n" + _tr("Reflect") + "\n" + _tr("Dot Product") + "\n" + _tr("Distance") + "\n" + _tr("Length") + "\n" + _tr("Scale") + "\n" + _tr("Normalize") + "\n" + _tr("Absolute") + "\n" + _tr("Minimum") + "\n" + _tr("Maximum") + "\n" + _tr("Floor") + "\n" + _tr("Ceil") + "\n" + _tr("Fraction") + "\n" + _tr("Modulo") + "\n" + _tr("Snap") + "\n" + _tr("Sine") + "\n" + _tr("Cosine") + "\n" + _tr("Tangent")),
min: 0.0, min: 0.0,
max: 1.0, max: 1.0,
precision: 100, precision: 100,
+1 -1
View File
@@ -2007,7 +2007,7 @@ function parser_material_safestr(s: string): string {
function u8_array_string_at(a: u8_array_t, i: i32): string { function u8_array_string_at(a: u8_array_t, i: i32): string {
let s: string = u8_array_to_string(a); let s: string = u8_array_to_string(a);
let ss: string[] = string_split(s, "\0"); let ss: string[] = string_split(s, "\n");
return ss[i]; return ss[i];
} }
+6 -7
View File
@@ -319,13 +319,12 @@ function tab_materials_draw_slots(mini: bool) {
function tab_materials_button_new(text: string) { function tab_materials_button_new(text: string) {
if (zui_button(text)) { if (zui_button(text)) {
let current: image_t = _g2_current; app_notify_on_init(function() {
g2_end(); context_raw.material = slot_material_create(project_materials[0].data);
context_raw.material = slot_material_create(project_materials[0].data); array_push(project_materials, context_raw.material);
array_push(project_materials, context_raw.material); tab_materials_update_material();
tab_materials_update_material(); history_new_material();
g2_begin(current); });
history_new_material();
} }
} }
+68 -56
View File
@@ -57,64 +57,74 @@ let _ui_nodes_on_link_drag_link_drag: zui_node_link_t;
let _ui_nodes_on_link_drag_node: zui_node_t; let _ui_nodes_on_link_drag_node: zui_node_t;
function ui_nodes_on_link_drag(link_drag_id: i32, is_new_link: bool) { function ui_nodes_on_link_drag(link_drag_id: i32, is_new_link: bool) {
if (is_new_link) { if (!is_new_link) {
let ui_nodes: zui_nodes_t = ui_nodes_get_nodes(); return;
let links: zui_node_link_t[] = ui_nodes_get_canvas(true).links; }
let link_drag: zui_node_link_t = zui_get_link(links, link_drag_id);
let nodes: zui_node_t[] = ui_nodes_get_canvas(true).nodes;
let node: zui_node_t = zui_get_node(nodes, link_drag.from_id > -1 ? link_drag.from_id : link_drag.to_id);
let link_x: i32 = ui_nodes_ui._window_x + zui_nodes_NODE_X(node);
let link_y: i32 = ui_nodes_ui._window_y + zui_nodes_NODE_Y(node);
if (link_drag.from_id > -1) {
link_x += zui_nodes_NODE_W(node);
link_y += zui_nodes_OUTPUT_Y(node.outputs.length, link_drag.from_socket);
}
else {
link_y += zui_nodes_INPUT_Y(ui_nodes_get_canvas(true), node.inputs, link_drag.to_socket) + zui_nodes_OUTPUTS_H(node.outputs.length) + zui_nodes_BUTTONS_H(node);
}
if (math_abs(mouse_x - link_x) > 5 || math_abs(mouse_y - link_y) > 5) { // Link length
_ui_nodes_on_link_drag_link_drag = link_drag; let ui_nodes: zui_nodes_t = ui_nodes_get_nodes();
_ui_nodes_on_link_drag_node = node; let links: zui_node_link_t[] = ui_nodes_get_canvas(true).links;
let link_drag: zui_node_link_t = zui_get_link(links, link_drag_id);
let nodes: zui_node_t[] = ui_nodes_get_canvas(true).nodes;
let node: zui_node_t = zui_get_node(nodes, link_drag.from_id > -1 ? link_drag.from_id : link_drag.to_id);
let link_x: i32 = ui_nodes_ui._window_x + zui_nodes_NODE_X(node);
let link_y: i32 = ui_nodes_ui._window_y + zui_nodes_NODE_Y(node);
if (link_drag.from_id > -1) {
link_x += zui_nodes_NODE_W(node);
link_y += zui_nodes_OUTPUT_Y(node.outputs.length, link_drag.from_socket);
}
else {
link_y += zui_nodes_INPUT_Y(ui_nodes_get_canvas(true), node.inputs, link_drag.to_socket) +
zui_nodes_OUTPUTS_H(node.outputs.length) + zui_nodes_BUTTONS_H(node);
}
ui_nodes_node_search(-1, -1, function () { if (math_abs(mouse_x - link_x) > 5 || math_abs(mouse_y - link_y) > 5) { // Link length
let ui_nodes: zui_nodes_t = ui_nodes_get_nodes();
let link_drag: zui_node_link_t = _ui_nodes_on_link_drag_link_drag; _ui_nodes_on_link_drag_link_drag = link_drag;
let nodes: zui_node_t[] = ui_nodes_get_canvas(true).nodes; _ui_nodes_on_link_drag_node = node;
let n: zui_node_t = zui_get_node(nodes, ui_nodes.nodes_selected_id[0]);
if (link_drag.to_id == -1 && n.inputs.length > 0) { ui_nodes_node_search(-1, -1, function () {
link_drag.to_id = n.id; let ui_nodes: zui_nodes_t = ui_nodes_get_nodes();
let from_type: string = _ui_nodes_on_link_drag_node.outputs[link_drag.from_socket].type;
// Connect to the first socket let node_selected_id: i32 = _ui_nodes_on_link_drag_node.id;
link_drag.to_socket = 0; if (ui_nodes.nodes_selected_id.length > 0) {
// Try to find the first type-matching socket and use it if present node_selected_id = ui_nodes.nodes_selected_id[0];
for (let i: i32 = 0; i < n.inputs.length; ++i) { }
let socket: zui_node_socket_t = n.inputs[i];
if (socket.type == from_type) { let link_drag: zui_node_link_t = _ui_nodes_on_link_drag_link_drag;
link_drag.to_socket = array_index_of(n.inputs, socket); let nodes: zui_node_t[] = ui_nodes_get_canvas(true).nodes;
break; let n: zui_node_t = zui_get_node(nodes, node_selected_id);
} if (link_drag.to_id == -1 && n.inputs.length > 0) {
link_drag.to_id = n.id;
let from_type: string = _ui_nodes_on_link_drag_node.outputs[link_drag.from_socket].type;
// Connect to the first socket
link_drag.to_socket = 0;
// Try to find the first type-matching socket and use it if present
for (let i: i32 = 0; i < n.inputs.length; ++i) {
let socket: zui_node_socket_t = n.inputs[i];
if (socket.type == from_type) {
link_drag.to_socket = array_index_of(n.inputs, socket);
break;
} }
array_push(ui_nodes_get_canvas(true).links, link_drag);
} }
else if (link_drag.from_id == -1 && n.outputs.length > 0) { array_push(ui_nodes_get_canvas(true).links, link_drag);
link_drag.from_id = n.id; }
link_drag.from_socket = 0; else if (link_drag.from_id == -1 && n.outputs.length > 0) {
array_push(ui_nodes_get_canvas(true).links, link_drag); link_drag.from_id = n.id;
} link_drag.from_socket = 0;
///if is_lab array_push(ui_nodes_get_canvas(true).links, link_drag);
parser_logic_parse(ui_nodes_get_canvas(true)); }
context_raw.rdirty = 5; ///if is_lab
///end parser_logic_parse(ui_nodes_get_canvas(true));
}); context_raw.rdirty = 5;
}
// Selecting which node socket to preview
else if (node.id == ui_nodes.nodes_selected_id[0]) {
context_raw.node_preview_socket = link_drag.from_id > -1 ? link_drag.from_socket : 0;
///if (is_paint || is_sculpt)
context_raw.node_preview_dirty = true;
///end ///end
} });
}
// Selecting which node socket to preview
else if (node.id == ui_nodes.nodes_selected_id[0]) {
context_raw.node_preview_socket = link_drag.from_id > -1 ? link_drag.from_socket : 0;
///if (is_paint || is_sculpt)
context_raw.node_preview_dirty = true;
///end
} }
} }
@@ -189,7 +199,8 @@ function ui_nodes_on_socket_released(socket_id: i32) {
zui_float_input(_ui_nodes_hval1, tr("G")); zui_float_input(_ui_nodes_hval1, tr("G"));
zui_float_input(_ui_nodes_hval2, tr("B")); zui_float_input(_ui_nodes_hval2, tr("B"));
zui_float_input(_ui_nodes_hval3, tr("A")); zui_float_input(_ui_nodes_hval3, tr("A"));
default_value = f32_array_create_xyzw(_ui_nodes_hval0.value, _ui_nodes_hval1.value, _ui_nodes_hval2.value, _ui_nodes_hval3.value); default_value = f32_array_create_xyzw(
_ui_nodes_hval0.value, _ui_nodes_hval1.value, _ui_nodes_hval2.value, _ui_nodes_hval3.value);
} }
else if (type == 1) { else if (type == 1) {
let row: f32[] = [1 / 3, 1 / 3, 1 / 3]; let row: f32[] = [1 / 3, 1 / 3, 1 / 3];
@@ -197,7 +208,8 @@ function ui_nodes_on_socket_released(socket_id: i32) {
_ui_nodes_hval0.value = zui_float_input(_ui_nodes_hval0, tr("X")); _ui_nodes_hval0.value = zui_float_input(_ui_nodes_hval0, tr("X"));
_ui_nodes_hval1.value = zui_float_input(_ui_nodes_hval1, tr("Y")); _ui_nodes_hval1.value = zui_float_input(_ui_nodes_hval1, tr("Y"));
_ui_nodes_hval2.value = zui_float_input(_ui_nodes_hval2, tr("Z")); _ui_nodes_hval2.value = zui_float_input(_ui_nodes_hval2, tr("Z"));
default_value = f32_array_create_xyz(_ui_nodes_hval0.value, _ui_nodes_hval1.value, _ui_nodes_hval2.value); default_value = f32_array_create_xyz(
_ui_nodes_hval0.value, _ui_nodes_hval1.value, _ui_nodes_hval2.value);
} }
else { else {
let f: f32 = zui_float_input(_ui_nodes_hval0, tr("default_value")); let f: f32 = zui_float_input(_ui_nodes_hval0, tr("default_value"));
@@ -243,7 +255,7 @@ function ui_nodes_on_socket_released(socket_id: i32) {
else ui_nodes_on_canvas_released(); else ui_nodes_on_canvas_released();
} }
// Selecting which node socket to preview // Selecting which node socket to preview
else if (node.id == nodes.nodes_selected_id[0]) { else if (nodes.nodes_selected_id.length > 0 && node.id == nodes.nodes_selected_id[0]) {
let i: i32 = array_index_of(node.outputs, socket); let i: i32 = array_index_of(node.outputs, socket);
if (i > -1) { if (i > -1) {
context_raw.node_preview_socket = i; context_raw.node_preview_socket = i;