Files
armorpaint/Assets/plugins/hello_node.js
T

66 lines
1.3 KiB
JavaScript
Raw Normal View History

2019-10-18 16:31:30 +02:00
let plugin = new arm.Plugin();
2019-10-18 21:12:21 +02:00
let categoryName = "My Nodes";
2019-10-18 16:31:30 +02:00
let nodeName = "Hello World";
let nodeType = "HELLO_WORLD";
// Create new node category
let categories = arm.NodesMaterial.categories;
2019-10-18 21:12:21 +02:00
categories.push(categoryName);
2019-10-18 16:31:30 +02:00
// Create new node
let nodes = [
{
id: 0,
name: nodeName,
type: nodeType,
x: 0,
y: 0,
color: 0xffb34f5a,
2020-01-23 18:02:01 +01:00
inputs: [
{
id: 0,
node_id: 0,
name: "Scale",
type: "VALUE",
color: 0xffa1a1a1,
default_value: 1,
min: 0.0,
max: 5.0
}
],
2019-10-18 16:31:30 +02:00
outputs: [
{
id: 0,
node_id: 0,
name: "Color",
type: "RGBA",
color: 0xffc7c729,
2020-08-10 14:59:15 +02:00
default_value: new Float32Array([0.8, 0.8, 0.8, 1.0])
2019-10-18 16:31:30 +02:00
}
],
buttons: []
}
];
arm.NodesMaterial.list.push(nodes);
// Node shader
arm.MaterialParser.customNodes.set(nodeType, function(node) {
let frag = arm.MaterialParser.frag;
let scale = arm.MaterialParser.parse_value_input(node.inputs[0]);
let my_out = arm.MaterialParser.node_name(node) + "_out";
2020-01-23 18:02:01 +01:00
2019-10-22 14:27:27 +02:00
frag.write(`
float ${my_out} = cos(sin(texCoord.x * 200.0 * ${scale}) + cos(texCoord.y * 200.0 * ${scale}));
2019-10-22 14:27:27 +02:00
`);
return `vec3(${my_out}, ${my_out}, ${my_out})`;
2019-10-18 16:31:30 +02:00
});
// Cleanup
plugin.delete = function() {
arm.MaterialParser.customNodes.delete(nodeType);
2019-10-18 16:31:30 +02:00
arm.NodesMaterial.list.splice(arm.NodesMaterial.list.indexOf(nodes), 1);
categories.splice(categories.indexOf(categoryName), 1);
};