Files
armorpaint/base/Sources/nodes/vector_node.ts
T

121 lines
2.8 KiB
TypeScript
Raw Normal View History

2024-03-14 23:58:24 +01:00
type vector_node_t = {
base?: logic_node_t;
value?: vec4_t;
image?: image_t;
};
2024-03-21 21:06:41 +01:00
function vector_node_create(args: any): vector_node_t {
2024-03-14 23:58:24 +01:00
let n: vector_node_t = {};
n.base = logic_node_create();
n.base.get = vector_node_get;
n.base.get_as_image = vector_node_get_as_image;
n.base.set = vector_node_set;
n.value = vec4_create();
2024-03-21 21:06:41 +01:00
if (args != null) {
logic_node_add_input(n.base, float_node_create(args[0]).base, 0);
logic_node_add_input(n.base, float_node_create(args[1]).base, 0);
logic_node_add_input(n.base, float_node_create(args[2]).base, 0);
2024-03-14 23:58:24 +01:00
}
return n;
}
2024-04-08 17:40:32 +02:00
function vector_node_get(self: vector_node_t, from: i32): logic_node_value_t {
let x: f32 = logic_node_input_get(self.base.inputs[0])._f32;
let y: f32 = logic_node_input_get(self.base.inputs[1])._f32;
let z: f32 = logic_node_input_get(self.base.inputs[2])._f32;
2024-04-02 15:45:49 +02:00
self.value.x = x;
self.value.y = y;
self.value.z = z;
2024-04-08 17:40:32 +02:00
let v: logic_node_value_t = { _any: self.value };
return v;
2024-03-14 23:58:24 +01:00
}
2024-04-02 15:45:49 +02:00
function vector_node_get_as_image(self: vector_node_t, from: i32): image_t {
// let x: f32 = logic_node_input_get(self.base.inputs[0]);
// let y: f32 = logic_node_input_get(self.base.inputs[1]);
// let z: f32 = logic_node_input_get(self.base.inputs[2]);
if (self.image != null) {
image_unload(self.image);
}
let b: buffer_t = buffer_create(16);
let v: buffer_view_t = buffer_view_create(b);
2024-04-08 17:40:32 +02:00
buffer_view_set_f32(v, 0, self.base.inputs[0].node.value);
buffer_view_set_f32(v, 4, self.base.inputs[1].node.value);
buffer_view_set_f32(v, 8, self.base.inputs[2].node.value);
2024-04-02 15:45:49 +02:00
buffer_view_set_f32(v, 12, 1.0);
self.image = image_from_bytes(b, 1, 1, tex_format_t.RGBA128);
return self.image;
2024-03-14 23:58:24 +01:00
}
function vector_node_set(self: vector_node_t, value: any) {
logic_node_input_set(self.base.inputs[0], value.x);
logic_node_input_set(self.base.inputs[1], value.y);
logic_node_input_set(self.base.inputs[2], value.z);
}
let vector_node_def: zui_node_t = {
id: 0,
name: _tr("Vector"),
type: "vector_node",
x: 0,
y: 0,
color: 0xff4982a0,
inputs: [
{
id: 0,
node_id: 0,
name: _tr("X"),
type: "VALUE",
color: 0xffa1a1a1,
2024-04-24 12:14:47 +02:00
default_value: f32_array_create_x(0.0),
2024-04-10 19:39:17 +02:00
min: 0.0,
max: 1.0,
precision: 100,
display: 0
2024-03-14 23:58:24 +01:00
},
{
id: 0,
node_id: 0,
name: _tr("Y"),
type: "VALUE",
color: 0xffa1a1a1,
2024-04-24 12:14:47 +02:00
default_value: f32_array_create_x(0.0),
2024-04-10 19:39:17 +02:00
min: 0.0,
max: 1.0,
precision: 100,
display: 0
2024-03-14 23:58:24 +01:00
},
{
id: 0,
node_id: 0,
name: _tr("Z"),
type: "VALUE",
color: 0xffa1a1a1,
2024-04-24 12:14:47 +02:00
default_value: f32_array_create_x(0.0),
2024-04-10 19:39:17 +02:00
min: 0.0,
max: 1.0,
precision: 100,
display: 0
2024-03-14 23:58:24 +01:00
}
],
outputs: [
{
id: 0,
node_id: 0,
name: _tr("Vector"),
type: "VECTOR",
color: 0xff6363c7,
2024-04-10 19:39:17 +02:00
default_value: f32_array_create_xyz(0.0, 0.0, 0.0),
min: 0.0,
max: 1.0,
precision: 100,
display: 0
2024-03-14 23:58:24 +01:00
}
],
2024-04-10 19:39:17 +02:00
buttons: [],
width: 0
2024-03-14 23:58:24 +01:00
};