39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
|
import { Vec4 } from 'cc';
|
||
|
import { register } from '../../../graph';
|
||
|
import { ShaderNode } from '../../base';
|
||
|
import { ConcretePrecisionType } from '../../type';
|
||
|
import { slot } from '../../utils';
|
||
|
|
||
|
@register({
|
||
|
menu: 'Channel/Split',
|
||
|
title: 'Split',
|
||
|
})
|
||
|
export default class SplitNode extends ShaderNode {
|
||
|
concretePrecisionType = ConcretePrecisionType.Fixed;
|
||
|
|
||
|
data = {
|
||
|
inputs: [
|
||
|
slot('Vector', new Vec4, 'vec4', 'vector'),
|
||
|
],
|
||
|
outputs: [
|
||
|
slot('R', 0, 'float', 'vector'),
|
||
|
slot('G', 0, 'float', 'vector'),
|
||
|
slot('B', 0, 'float', 'vector'),
|
||
|
slot('A', 0, 'float', 'vector'),
|
||
|
],
|
||
|
};
|
||
|
|
||
|
generateCode() {
|
||
|
const Value = this.getInputValue(0);
|
||
|
const codes: string[] = [];
|
||
|
this.data.outputs.forEach(o => {
|
||
|
const slot = this.getOutputSlotWithSlotName(o.display);
|
||
|
if (slot && slot.connectSlot) {
|
||
|
codes.push(`float ${slot?.varName} = ${Value}.${o.display.toLowerCase()};`);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
return codes.join('\n');
|
||
|
}
|
||
|
}
|