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,
|
|
|
|
|
default_value: [0.8, 0.8, 0.8, 1.0]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
buttons: []
|
|
|
|
|
}
|
|
|
|
|
];
|
|
|
|
|
arm.NodesMaterial.list.push(nodes);
|
|
|
|
|
|
|
|
|
|
// Node shader
|
2020-01-23 18:02:01 +01:00
|
|
|
arm.Material.customNodes.set(nodeType, function(node) {
|
2019-10-22 14:27:27 +02:00
|
|
|
let frag = arm.Material.frag;
|
2020-01-23 18:02:01 +01:00
|
|
|
let scale = arm.Material.parse_value_input(node.inputs[0]);
|
|
|
|
|
|
2019-10-22 14:27:27 +02:00
|
|
|
frag.write(`
|
2020-01-23 18:02:01 +01:00
|
|
|
float my_out = cos(sin(texCoord.x * 200 * ${scale}) + cos(texCoord.y * 200 * ${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.Material.customNodes.delete(nodeType);
|
|
|
|
|
arm.NodesMaterial.list.splice(arm.NodesMaterial.list.indexOf(nodes), 1);
|
|
|
|
|
categories.splice(categories.indexOf(categoryName), 1);
|
|
|
|
|
};
|