paint: cleanup

This commit is contained in:
luboslenco
2026-03-10 11:49:57 +01:00
parent 66ff3793d4
commit 2671a073f9
74 changed files with 1167 additions and 1713 deletions
@@ -8,114 +8,104 @@ void vector_math2_node_init() {
}
char *vector_math2_node_vector(ui_node_t *node, ui_node_socket_t *socket) {
char *vec1 = parser_material_parse_vector_input(node->inputs->buffer[0]);
char *vec2 = parser_material_parse_vector_input(node->inputs->buffer[1]);
char *vec1 = parser_material_parse_vector_input(node->inputs->buffer[0]);
char *vec2 = parser_material_parse_vector_input(node->inputs->buffer[1]);
ui_node_button_t *but = node->buttons->buffer[0]; // operation;
char *op = to_upper_case(u8_array_string_at(but->data, but->default_value->buffer[0]));
char *op = to_upper_case(u8_array_string_at(but->data, but->default_value->buffer[0]));
op = string_copy(string_replace_all(op, " ", "_"));
if (string_equals(op, "ADD")) {
return string_join(string_join(string_join(string_join("(", vec1), " + "), vec2), ")");
return string("(%s + %s)", vec1, vec2);
}
else if (string_equals(op, "SUBTRACT")) {
return string_join(string_join(string_join(string_join("(", vec1), " - "), vec2), ")");
return string("(%s - %s)", vec1, vec2);
}
else if (string_equals(op, "AVERAGE")) {
return string_join(string_join(string_join(string_join("((", vec1), " + "), vec2), ") / 2.0)");
return string("((%s + %s) / 2.0)", vec1, vec2);
}
else if (string_equals(op, "DOT_PRODUCT")) {
return parser_material_to_vec3(string_join(string_join(string_join(string_join("dot(", vec1), ", "), vec2), ")"));
return parser_material_to_vec3(string("dot(%s, %s)", vec1, vec2));
}
else if (string_equals(op, "LENGTH")) {
return parser_material_to_vec3(string_join(string_join("length(", vec1), ")"));
return parser_material_to_vec3(string("length(%s)", vec1));
}
else if (string_equals(op, "DISTANCE")) {
return parser_material_to_vec3(string_join(string_join(string_join(string_join("distance(", vec1), ", "), vec2), ")"));
return parser_material_to_vec3(string("distance(%s, %s)", vec1, vec2));
}
else if (string_equals(op, "CROSS_PRODUCT")) {
return string_join(string_join(string_join(string_join("cross(", vec1), ", "), vec2), ")");
return string("cross(%s, %s)", vec1, vec2);
}
else if (string_equals(op, "NORMALIZE")) {
return string_join(string_join("normalize(", vec1), ")");
return string("normalize(%s)", vec1);
}
else if (string_equals(op, "MULTIPLY")) {
return string_join(string_join(string_join(string_join("(", vec1), " * "), vec2), ")");
return string("(%s * %s)", vec1, vec2);
}
else if (string_equals(op, "DIVIDE")) {
char *store = string_join(parser_material_store_var_name(node), "_vec2");
parser_material_write(parser_material_kong, string_join(string_join(string_join(string_join("var ", store), ": float3 = "), vec2), ";"));
parser_material_write(parser_material_kong,
string_join(string_join(string_join(string_join("if (", store), ".x == 0.0) { "), store), ".x = 0.000001; }"));
parser_material_write(parser_material_kong,
string_join(string_join(string_join(string_join("if (", store), ".y == 0.0) { "), store), ".y = 0.000001; }"));
parser_material_write(parser_material_kong,
string_join(string_join(string_join(string_join("if (", store), ".z == 0.0) { "), store), ".z = 0.000001; }"));
return string_join(string_join(string_join(string_join("(", vec1), " / "), vec2), ")");
char *store = string("%s_vec2", parser_material_store_var_name(node));
parser_material_write(parser_material_kong, string("var %s: float3 = %s;", store, vec2));
parser_material_write(parser_material_kong, string("if (%s.x == 0.0) { %s.x = 0.000001; }", store, store));
parser_material_write(parser_material_kong, string("if (%s.y == 0.0) { %s.y = 0.000001; }", store, store));
parser_material_write(parser_material_kong, string("if (%s.z == 0.0) { %s.z = 0.000001; }", store, store));
return string("(%s / %s)", vec1, vec2);
}
else if (string_equals(op, "PROJECT")) {
return string_join(
string_join(
string_join(
string_join(string_join(string_join(string_join(string_join(string_join(string_join("(dot(", vec1), ", "), vec2), ") / dot("), vec2), ", "),
vec2),
") * "),
vec2),
")");
return string("(dot(%s, %s) / dot(%s, %s) * %s)", vec1, vec2, vec2, vec2, vec2);
}
else if (string_equals(op, "REFLECT")) {
return string_join(string_join(string_join(string_join("reflect(", vec1), ", normalize("), vec2), "))");
return string("reflect(%s, normalize(%s))", vec1, vec2);
}
else if (string_equals(op, "SCALE")) {
return string_join(string_join(string_join(string_join("(", vec2), ".x * "), vec1), ")");
return string("(%s.x * %s)", vec2, vec1);
}
else if (string_equals(op, "ABSOLUTE")) {
return string_join(string_join("abs3(", vec1), ")");
return string("abs3(%s)", vec1);
}
else if (string_equals(op, "MINIMUM")) {
return string_join(string_join(string_join(string_join("min3(", vec1), ", "), vec2), ")");
return string("min3(%s, %s)", vec1, vec2);
}
else if (string_equals(op, "MAXIMUM")) {
return string_join(string_join(string_join(string_join("max3(", vec1), ", "), vec2), ")");
return string("max3(%s, %s)", vec1, vec2);
}
else if (string_equals(op, "FLOOR")) {
return string_join(string_join("floor3(", vec1), ")");
return string("floor3(%s)", vec1);
}
else if (string_equals(op, "CEIL")) {
return string_join(string_join("ceil3(", vec1), ")");
return string("ceil3(%s)", vec1);
}
else if (string_equals(op, "FRACTION")) {
return string_join(string_join("frac3(", vec1), ")");
return string("frac3(%s)", vec1);
}
else if (string_equals(op, "MODULO")) {
return string_join(string_join(string_join(string_join("(", vec1), " % "), vec2), ")");
return string("(%s %% %s)", vec1, vec2);
}
else if (string_equals(op, "SNAP")) {
return string_join(string_join(string_join(string_join(string_join(string_join("(floor3(", vec1), " / "), vec2), ") * "), vec2), ")");
return string("(floor3(%s / %s) * %s)", vec1, vec2, vec2);
}
else if (string_equals(op, "SINE")) {
return string_join(string_join(string_join(string_join(string_join(string_join("float3(sin(", vec1), ".x), sin("), vec1), ".y), sin("), vec1), ".z))");
return string("float3(sin(%s.x), sin(%s.y), sin(%s.z))", vec1, vec1, vec1);
}
else if (string_equals(op, "COSINE")) {
return string_join(string_join(string_join(string_join(string_join(string_join("float3(cos(", vec1), ".x), cos("), vec1), ".y), cos("), vec1), ".z))");
return string("float3(cos(%s.x), cos(%s.y), cos(%s.z))", vec1, vec1, vec1);
}
else { // TANGENT
return string_join(string_join(string_join(string_join(string_join(string_join("float3(tan(", vec1), ".x), tan("), vec1), ".y), tan("), vec1), ".z))");
return string("float3(tan(%s.x), tan(%s.y), tan(%s.z))", vec1, vec1, vec1);
}
}
char *vector_math2_node_value(ui_node_t *node, ui_node_socket_t *socket) {
char *vec1 = parser_material_parse_vector_input(node->inputs->buffer[0]);
char *vec2 = parser_material_parse_vector_input(node->inputs->buffer[1]);
char *vec1 = parser_material_parse_vector_input(node->inputs->buffer[0]);
char *vec2 = parser_material_parse_vector_input(node->inputs->buffer[1]);
ui_node_button_t *but = node->buttons->buffer[0]; // operation;
char *op = to_upper_case(u8_array_string_at(but->data, but->default_value->buffer[0]));
char *op = to_upper_case(u8_array_string_at(but->data, but->default_value->buffer[0]));
op = string_copy(string_replace_all(op, " ", "_"));
if (string_equals(op, "DOT_PRODUCT")) {
return string_join(string_join(string_join(string_join("dot(", vec1), ", "), vec2), ")");
return string("dot(%s, %s)", vec1, vec2);
}
else if (string_equals(op, "LENGTH")) {
return string_join(string_join("length(", vec1), ")");
return string("length(%s)", vec1);
}
else if (string_equals(op, "DISTANCE")) {
return string_join(string_join(string_join(string_join("distance(", vec1), ", "), vec2), ")");
return string("distance(%s, %s)", vec1, vec2);
}
else {
return "0.0";