Format
This commit is contained in:
@@ -1,187 +1,189 @@
|
||||
|
||||
function vector_math2_node_init() {
|
||||
array_push(nodes_material_converter, vector_math2_node_def);
|
||||
map_set(parser_material_node_vectors, "VECT_MATH", vector_math2_node_vector);
|
||||
array_push(nodes_material_converter, vector_math2_node_def);
|
||||
map_set(parser_material_node_vectors, "VECT_MATH", vector_math2_node_vector);
|
||||
map_set(parser_material_node_values, "VECT_MATH", vector_math2_node_value);
|
||||
}
|
||||
|
||||
function vector_math2_node_vector(node: ui_node_t, socket: ui_node_socket_t): string {
|
||||
let vec1: string = parser_material_parse_vector_input(node.inputs[0]);
|
||||
let vec2: string = parser_material_parse_vector_input(node.inputs[1]);
|
||||
let but: ui_node_button_t = node.buttons[0]; //operation;
|
||||
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 + ")";
|
||||
}
|
||||
else if (op == "SUBTRACT") {
|
||||
return "(" + vec1 + " - " + vec2 + ")";
|
||||
}
|
||||
else if (op == "AVERAGE") {
|
||||
return "((" + vec1 + " + " + vec2 + ") / 2.0)";
|
||||
}
|
||||
else if (op == "DOT_PRODUCT") {
|
||||
return parser_material_to_vec3("dot(" + vec1 + ", " + vec2 + ")");
|
||||
}
|
||||
else if (op == "LENGTH") {
|
||||
return parser_material_to_vec3("length(" + vec1 + ")");
|
||||
}
|
||||
else if (op == "DISTANCE") {
|
||||
return parser_material_to_vec3("distance(" + vec1 + ", " + vec2 + ")");
|
||||
}
|
||||
else if (op == "CROSS_PRODUCT") {
|
||||
return "cross(" + vec1 + ", " + vec2 + ")";
|
||||
}
|
||||
else if (op == "NORMALIZE") {
|
||||
return "normalize(" + vec1 + ")";
|
||||
}
|
||||
else if (op == "MULTIPLY") {
|
||||
return "(" + vec1 + " * " + vec2 + ")";
|
||||
}
|
||||
else if (op == "DIVIDE") {
|
||||
let store: string = parser_material_store_var_name(node) + "_vec2";
|
||||
parser_material_write(parser_material_kong, "var " + store + ": float3 = " + vec2 + ";");
|
||||
parser_material_write(parser_material_kong, "if (" + store + ".x == 0.0) { " + store + ".x = 0.000001; }");
|
||||
parser_material_write(parser_material_kong, "if (" + store + ".y == 0.0) { " + store + ".y = 0.000001; }");
|
||||
parser_material_write(parser_material_kong, "if (" + store + ".z == 0.0) { " + store + ".z = 0.000001; }");
|
||||
return "(" + vec1 + " / " + vec2 + ")";
|
||||
}
|
||||
else if (op == "PROJECT") {
|
||||
return "(dot(" + vec1 + ", " + vec2 + ") / dot(" + vec2 + ", " + vec2 + ") * " + vec2 + ")";
|
||||
}
|
||||
else if (op == "REFLECT") {
|
||||
return "reflect(" + vec1 + ", normalize(" + vec2 + "))";
|
||||
}
|
||||
else if (op == "SCALE") {
|
||||
return "(" + vec2 + ".x * " + vec1 + ")";
|
||||
}
|
||||
else if (op == "ABSOLUTE") {
|
||||
return "abs3(" + vec1 + ")";
|
||||
}
|
||||
else if (op == "MINIMUM") {
|
||||
return "min3(" + vec1 + ", " + vec2 + ")";
|
||||
}
|
||||
else if (op == "MAXIMUM") {
|
||||
return "max3(" + vec1 + ", " + vec2 + ")";
|
||||
}
|
||||
else if (op == "FLOOR") {
|
||||
return "floor3(" + vec1 + ")";
|
||||
}
|
||||
else if (op == "CEIL") {
|
||||
return "ceil3(" + vec1 + ")";
|
||||
}
|
||||
else if (op == "FRACTION") {
|
||||
return "frac3(" + vec1 + ")";
|
||||
}
|
||||
else if (op == "MODULO") {
|
||||
return "(" + vec1 + " % " + vec2 + ")";
|
||||
}
|
||||
else if(op == "SNAP") {
|
||||
return "(floor3(" + vec1 + " / " + vec2 + ") * " + vec2 + ")";
|
||||
}
|
||||
else if (op == "SINE") {
|
||||
return "float3(sin(" + vec1 + ".x), sin(" + vec1 + ".y), sin(" + vec1 + ".z))";
|
||||
}
|
||||
else if (op == "COSINE") {
|
||||
return "float3(cos(" + vec1 + ".x), cos(" + vec1 + ".y), cos(" + vec1 + ".z))";
|
||||
}
|
||||
else { // TANGENT
|
||||
return "float3(tan(" + vec1 + ".x), tan(" + vec1 + ".y), tan(" + vec1 + ".z))";
|
||||
}
|
||||
let vec1: string = parser_material_parse_vector_input(node.inputs[0]);
|
||||
let vec2: string = parser_material_parse_vector_input(node.inputs[1]);
|
||||
let but: ui_node_button_t = node.buttons[0]; // operation;
|
||||
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 + ")";
|
||||
}
|
||||
else if (op == "SUBTRACT") {
|
||||
return "(" + vec1 + " - " + vec2 + ")";
|
||||
}
|
||||
else if (op == "AVERAGE") {
|
||||
return "((" + vec1 + " + " + vec2 + ") / 2.0)";
|
||||
}
|
||||
else if (op == "DOT_PRODUCT") {
|
||||
return parser_material_to_vec3("dot(" + vec1 + ", " + vec2 + ")");
|
||||
}
|
||||
else if (op == "LENGTH") {
|
||||
return parser_material_to_vec3("length(" + vec1 + ")");
|
||||
}
|
||||
else if (op == "DISTANCE") {
|
||||
return parser_material_to_vec3("distance(" + vec1 + ", " + vec2 + ")");
|
||||
}
|
||||
else if (op == "CROSS_PRODUCT") {
|
||||
return "cross(" + vec1 + ", " + vec2 + ")";
|
||||
}
|
||||
else if (op == "NORMALIZE") {
|
||||
return "normalize(" + vec1 + ")";
|
||||
}
|
||||
else if (op == "MULTIPLY") {
|
||||
return "(" + vec1 + " * " + vec2 + ")";
|
||||
}
|
||||
else if (op == "DIVIDE") {
|
||||
let store: string = parser_material_store_var_name(node) + "_vec2";
|
||||
parser_material_write(parser_material_kong, "var " + store + ": float3 = " + vec2 + ";");
|
||||
parser_material_write(parser_material_kong, "if (" + store + ".x == 0.0) { " + store + ".x = 0.000001; }");
|
||||
parser_material_write(parser_material_kong, "if (" + store + ".y == 0.0) { " + store + ".y = 0.000001; }");
|
||||
parser_material_write(parser_material_kong, "if (" + store + ".z == 0.0) { " + store + ".z = 0.000001; }");
|
||||
return "(" + vec1 + " / " + vec2 + ")";
|
||||
}
|
||||
else if (op == "PROJECT") {
|
||||
return "(dot(" + vec1 + ", " + vec2 + ") / dot(" + vec2 + ", " + vec2 + ") * " + vec2 + ")";
|
||||
}
|
||||
else if (op == "REFLECT") {
|
||||
return "reflect(" + vec1 + ", normalize(" + vec2 + "))";
|
||||
}
|
||||
else if (op == "SCALE") {
|
||||
return "(" + vec2 + ".x * " + vec1 + ")";
|
||||
}
|
||||
else if (op == "ABSOLUTE") {
|
||||
return "abs3(" + vec1 + ")";
|
||||
}
|
||||
else if (op == "MINIMUM") {
|
||||
return "min3(" + vec1 + ", " + vec2 + ")";
|
||||
}
|
||||
else if (op == "MAXIMUM") {
|
||||
return "max3(" + vec1 + ", " + vec2 + ")";
|
||||
}
|
||||
else if (op == "FLOOR") {
|
||||
return "floor3(" + vec1 + ")";
|
||||
}
|
||||
else if (op == "CEIL") {
|
||||
return "ceil3(" + vec1 + ")";
|
||||
}
|
||||
else if (op == "FRACTION") {
|
||||
return "frac3(" + vec1 + ")";
|
||||
}
|
||||
else if (op == "MODULO") {
|
||||
return "(" + vec1 + " % " + vec2 + ")";
|
||||
}
|
||||
else if (op == "SNAP") {
|
||||
return "(floor3(" + vec1 + " / " + vec2 + ") * " + vec2 + ")";
|
||||
}
|
||||
else if (op == "SINE") {
|
||||
return "float3(sin(" + vec1 + ".x), sin(" + vec1 + ".y), sin(" + vec1 + ".z))";
|
||||
}
|
||||
else if (op == "COSINE") {
|
||||
return "float3(cos(" + vec1 + ".x), cos(" + vec1 + ".y), cos(" + vec1 + ".z))";
|
||||
}
|
||||
else { // TANGENT
|
||||
return "float3(tan(" + vec1 + ".x), tan(" + vec1 + ".y), tan(" + vec1 + ".z))";
|
||||
}
|
||||
}
|
||||
|
||||
function vector_math2_node_value(node: ui_node_t, socket: ui_node_socket_t): string {
|
||||
let vec1: string = parser_material_parse_vector_input(node.inputs[0]);
|
||||
let vec2: string = parser_material_parse_vector_input(node.inputs[1]);
|
||||
let but: ui_node_button_t = node.buttons[0]; //operation;
|
||||
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 + ")";
|
||||
}
|
||||
else if (op == "LENGTH") {
|
||||
return "length(" + vec1 + ")";
|
||||
}
|
||||
else if (op == "DISTANCE") {
|
||||
return "distance(" + vec1 + ", " + vec2 + ")";
|
||||
}
|
||||
else {
|
||||
return "0.0";
|
||||
}
|
||||
let vec1: string = parser_material_parse_vector_input(node.inputs[0]);
|
||||
let vec2: string = parser_material_parse_vector_input(node.inputs[1]);
|
||||
let but: ui_node_button_t = node.buttons[0]; // operation;
|
||||
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 + ")";
|
||||
}
|
||||
else if (op == "LENGTH") {
|
||||
return "length(" + vec1 + ")";
|
||||
}
|
||||
else if (op == "DISTANCE") {
|
||||
return "distance(" + vec1 + ", " + vec2 + ")";
|
||||
}
|
||||
else {
|
||||
return "0.0";
|
||||
}
|
||||
}
|
||||
|
||||
let vector_math2_node_def: ui_node_t = {
|
||||
id: 0,
|
||||
name: _tr("Vector Math"),
|
||||
type: "VECT_MATH",
|
||||
x: 0,
|
||||
y: 0,
|
||||
color: 0xff62676d,
|
||||
inputs: [
|
||||
{
|
||||
id: 0,
|
||||
node_id: 0,
|
||||
name: _tr("Vector"),
|
||||
type: "VECTOR",
|
||||
color: 0xff6363c7,
|
||||
default_value: f32_array_create_xyz(0.0, 0.0, 0.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
display: 1
|
||||
},
|
||||
{
|
||||
id: 0,
|
||||
node_id: 0,
|
||||
name: _tr("Vector"),
|
||||
type: "VECTOR",
|
||||
color: 0xff6363c7,
|
||||
default_value: f32_array_create_xyz(0.0, 0.0, 0.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
display: 1
|
||||
}
|
||||
],
|
||||
outputs: [
|
||||
{
|
||||
id: 0,
|
||||
node_id: 0,
|
||||
name: _tr("Vector"),
|
||||
type: "VECTOR",
|
||||
color: 0xff6363c7,
|
||||
default_value: f32_array_create_xyz(0.0, 0.0, 0.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
display: 0
|
||||
},
|
||||
{
|
||||
id: 0,
|
||||
node_id: 0,
|
||||
name: _tr("Value"),
|
||||
type: "VALUE",
|
||||
color: 0xffa1a1a1,
|
||||
default_value: f32_array_create_x(0.0),
|
||||
min: 0.0,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
display: 0
|
||||
}
|
||||
],
|
||||
buttons: [
|
||||
{
|
||||
name: _tr("operation"),
|
||||
type: "ENUM",
|
||||
output: 0,
|
||||
default_value: f32_array_create_x(0),
|
||||
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,
|
||||
max: 1.0,
|
||||
precision: 100,
|
||||
height: 0
|
||||
}
|
||||
],
|
||||
width: 0,
|
||||
flags: 0
|
||||
id : 0,
|
||||
name : _tr("Vector Math"),
|
||||
type : "VECT_MATH",
|
||||
x : 0,
|
||||
y : 0,
|
||||
color : 0xff62676d,
|
||||
inputs : [
|
||||
{
|
||||
id : 0,
|
||||
node_id : 0,
|
||||
name : _tr("Vector"),
|
||||
type : "VECTOR",
|
||||
color : 0xff6363c7,
|
||||
default_value : f32_array_create_xyz(0.0, 0.0, 0.0),
|
||||
min : 0.0,
|
||||
max : 1.0,
|
||||
precision : 100,
|
||||
display : 1
|
||||
},
|
||||
{
|
||||
id : 0,
|
||||
node_id : 0,
|
||||
name : _tr("Vector"),
|
||||
type : "VECTOR",
|
||||
color : 0xff6363c7,
|
||||
default_value : f32_array_create_xyz(0.0, 0.0, 0.0),
|
||||
min : 0.0,
|
||||
max : 1.0,
|
||||
precision : 100,
|
||||
display : 1
|
||||
}
|
||||
],
|
||||
outputs : [
|
||||
{
|
||||
id : 0,
|
||||
node_id : 0,
|
||||
name : _tr("Vector"),
|
||||
type : "VECTOR",
|
||||
color : 0xff6363c7,
|
||||
default_value : f32_array_create_xyz(0.0, 0.0, 0.0),
|
||||
min : 0.0,
|
||||
max : 1.0,
|
||||
precision : 100,
|
||||
display : 0
|
||||
},
|
||||
{
|
||||
id : 0,
|
||||
node_id : 0,
|
||||
name : _tr("Value"),
|
||||
type : "VALUE",
|
||||
color : 0xffa1a1a1,
|
||||
default_value : f32_array_create_x(0.0),
|
||||
min : 0.0,
|
||||
max : 1.0,
|
||||
precision : 100,
|
||||
display : 0
|
||||
}
|
||||
],
|
||||
buttons : [ {
|
||||
name : _tr("operation"),
|
||||
type : "ENUM",
|
||||
output : 0,
|
||||
default_value : f32_array_create_x(0),
|
||||
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,
|
||||
max : 1.0,
|
||||
precision : 100,
|
||||
height : 0
|
||||
} ],
|
||||
width : 0,
|
||||
flags : 0
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user