2024-05-28 04:57:00 +02:00
|
|
|
function Node_RM_Primitive(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor {
|
2024-05-28 09:51:54 +02:00
|
|
|
name = "RM Primitive";
|
2024-05-28 04:57:00 +02:00
|
|
|
|
|
|
|
inputs[| 0] = nodeValue("Dimension", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, DEF_SURF)
|
|
|
|
.setDisplay(VALUE_DISPLAY.vector);
|
|
|
|
|
2024-05-28 09:51:54 +02:00
|
|
|
shape_types = [
|
|
|
|
"Plane", "Box", "Box Frame",
|
|
|
|
-1,
|
|
|
|
"Sphere", "Ellipse", "Cut Sphere", "Cut Hollow Sphere", "Torus", "Capped Torus",
|
|
|
|
-1,
|
|
|
|
"Cylinder", "Capsule", "Cone", "Capped Cone", "Round Cone", "3D Arc",
|
|
|
|
-1,
|
|
|
|
"Octahedron", "Pyramid",
|
2024-05-29 08:34:44 +02:00
|
|
|
-1,
|
2024-05-30 05:39:27 +02:00
|
|
|
"Extrude", "Terrain"
|
2024-05-28 09:51:54 +02:00
|
|
|
];
|
|
|
|
shape_types_str = [];
|
|
|
|
|
|
|
|
var _ind = 0;
|
|
|
|
for( var i = 0, n = array_length(shape_types); i < n; i++ ) {
|
|
|
|
if(shape_types[i] == -1)
|
|
|
|
shape_types_str[i] = -1;
|
|
|
|
else
|
|
|
|
shape_types_str[i] = new scrollItem(shape_types[i], s_node_shape_3d, _ind++, COLORS._main_icon_light);
|
|
|
|
}
|
|
|
|
|
|
|
|
inputs[| 1] = nodeValue("Shape", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
|
|
|
.setDisplay(VALUE_DISPLAY.enum_scroll, shape_types_str);
|
|
|
|
|
|
|
|
inputs[| 2] = nodeValue("Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ])
|
|
|
|
.setDisplay(VALUE_DISPLAY.vector);
|
|
|
|
|
|
|
|
inputs[| 3] = nodeValue("Rotation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ])
|
|
|
|
.setDisplay(VALUE_DISPLAY.vector);
|
|
|
|
|
|
|
|
inputs[| 4] = nodeValue("Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
|
|
|
|
.setDisplay(VALUE_DISPLAY.slider, { range: [ 0, 4, 0.01 ] });
|
|
|
|
|
|
|
|
inputs[| 5] = nodeValue("FOV", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 30)
|
|
|
|
.setDisplay(VALUE_DISPLAY.slider, { range: [ 0, 90, 1 ] });
|
|
|
|
|
|
|
|
inputs[| 6] = nodeValue("View Range", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 3, 6 ])
|
|
|
|
.setDisplay(VALUE_DISPLAY.vector);
|
|
|
|
|
|
|
|
inputs[| 7] = nodeValue("Depth", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
|
|
|
|
.setDisplay(VALUE_DISPLAY.slider);
|
|
|
|
|
|
|
|
inputs[| 8] = nodeValue("Light Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ -.5, -.5, 1 ])
|
|
|
|
.setDisplay(VALUE_DISPLAY.vector);
|
|
|
|
|
|
|
|
inputs[| 9] = nodeValue("Ambient", self, JUNCTION_CONNECT.input, VALUE_TYPE.color, c_white);
|
|
|
|
|
|
|
|
inputs[| 10] = nodeValue("Ambient Intensity", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.2)
|
|
|
|
.setDisplay(VALUE_DISPLAY.slider);
|
|
|
|
|
|
|
|
inputs[| 11] = nodeValue("Elongate", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ])
|
|
|
|
.setDisplay(VALUE_DISPLAY.vector);
|
|
|
|
|
|
|
|
inputs[| 12] = nodeValue("Rounded", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.)
|
|
|
|
.setDisplay(VALUE_DISPLAY.slider);
|
|
|
|
|
|
|
|
inputs[| 13] = nodeValue("Projection", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
|
|
|
.setDisplay(VALUE_DISPLAY.enum_button, [ "Perspective", "Orthographic" ])
|
|
|
|
.setVisible(false, false);
|
|
|
|
|
|
|
|
inputs[| 14] = nodeValue("Ortho Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 5.)
|
|
|
|
|
|
|
|
inputs[| 15] = nodeValue("Wave Amplitude", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 4, 4, 4 ])
|
|
|
|
.setDisplay(VALUE_DISPLAY.vector);
|
|
|
|
|
|
|
|
inputs[| 16] = nodeValue("Wave Intensity", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ])
|
|
|
|
.setDisplay(VALUE_DISPLAY.vector);
|
|
|
|
|
|
|
|
inputs[| 17] = nodeValue("Wave Phase", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ])
|
|
|
|
.setDisplay(VALUE_DISPLAY.vector);
|
|
|
|
|
|
|
|
inputs[| 18] = nodeValue("Twist Axis", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
|
|
|
|
.setDisplay(VALUE_DISPLAY.enum_button, [ "X", "Y", "Z" ]);
|
|
|
|
|
|
|
|
inputs[| 19] = nodeValue("Twist Amount", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0)
|
|
|
|
.setDisplay(VALUE_DISPLAY.slider, { range: [ 0, 8, 0.1 ] });
|
|
|
|
|
|
|
|
inputs[| 20] = nodeValue("Tile", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ])
|
|
|
|
.setDisplay(VALUE_DISPLAY.vector);
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
inputs[| 21] = nodeValue("Size", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 1, 1, 1 ])
|
|
|
|
.setDisplay(VALUE_DISPLAY.vector);
|
|
|
|
|
|
|
|
inputs[| 22] = nodeValue("Radius", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, .7)
|
|
|
|
.setDisplay(VALUE_DISPLAY.slider);
|
|
|
|
|
|
|
|
inputs[| 23] = nodeValue("Thickness", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, .2)
|
|
|
|
.setDisplay(VALUE_DISPLAY.slider);
|
|
|
|
|
|
|
|
inputs[| 24] = nodeValue("Crop", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0.)
|
|
|
|
.setDisplay(VALUE_DISPLAY.slider, { range: [ -1, 1, 0.01 ] });
|
|
|
|
|
|
|
|
inputs[| 25] = nodeValue("Angle", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 30.)
|
|
|
|
.setDisplay(VALUE_DISPLAY.rotation);
|
|
|
|
|
|
|
|
inputs[| 26] = nodeValue("Height", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, .5)
|
|
|
|
.setDisplay(VALUE_DISPLAY.slider);
|
|
|
|
|
|
|
|
inputs[| 27] = nodeValue("Radius Range", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, .7)
|
|
|
|
.setDisplay(VALUE_DISPLAY.slider);
|
|
|
|
|
|
|
|
inputs[| 28] = nodeValue("Uniform Size", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 1)
|
|
|
|
.setDisplay(VALUE_DISPLAY.slider);
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
2024-05-28 11:03:33 +02:00
|
|
|
inputs[| 29] = nodeValue("Tile Amount", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0, 0, 0 ])
|
|
|
|
.setDisplay(VALUE_DISPLAY.vector);
|
|
|
|
|
2024-05-30 05:39:27 +02:00
|
|
|
inputs[| 30] = nodeValue("Texture", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone);
|
2024-05-29 08:34:44 +02:00
|
|
|
|
2024-05-28 04:57:00 +02:00
|
|
|
outputs[| 0] = nodeValue("Surface Out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone);
|
|
|
|
|
2024-05-28 09:51:54 +02:00
|
|
|
input_display_list = [ 0,
|
2024-05-29 08:34:44 +02:00
|
|
|
["Primitive", false], 1, 21, 22, 23, 24, 25, 26, 27, 28, 30,
|
2024-05-28 09:51:54 +02:00
|
|
|
["Modify", false], 12, 11,
|
|
|
|
["Deform", true], 15, 16, 17, 18, 19,
|
2024-05-30 05:39:27 +02:00
|
|
|
["Transform", false], 2, 3, 4,
|
2024-05-28 09:51:54 +02:00
|
|
|
["Camera", false], 13, 14, 5, 6,
|
2024-05-29 08:34:44 +02:00
|
|
|
["Render", false], 7, 9, 10, 8,
|
2024-05-28 11:03:33 +02:00
|
|
|
["Tile", false], 20, 29,
|
2024-05-28 09:51:54 +02:00
|
|
|
];
|
2024-05-28 04:57:00 +02:00
|
|
|
|
2024-05-30 05:39:27 +02:00
|
|
|
temp_surface = [ 0, 0, 0, 0 ];
|
|
|
|
|
2024-05-28 04:57:00 +02:00
|
|
|
static drawOverlay = function(hover, active, _x, _y, _s, _mx, _my, _snx, _sny) {}
|
|
|
|
|
2024-05-28 09:51:54 +02:00
|
|
|
static step = function() {
|
|
|
|
var _shp = getSingleValue( 1);
|
|
|
|
var _ort = getSingleValue(13);
|
|
|
|
|
|
|
|
inputs[| 21].setVisible(false);
|
|
|
|
inputs[| 22].setVisible(false);
|
|
|
|
inputs[| 23].setVisible(false);
|
|
|
|
inputs[| 24].setVisible(false);
|
|
|
|
inputs[| 25].setVisible(false);
|
|
|
|
inputs[| 26].setVisible(false);
|
|
|
|
inputs[| 27].setVisible(false);
|
|
|
|
inputs[| 28].setVisible(false);
|
2024-05-29 08:34:44 +02:00
|
|
|
inputs[| 30].setVisible(false);
|
2024-05-28 09:51:54 +02:00
|
|
|
|
|
|
|
var _shape = shape_types[_shp];
|
|
|
|
switch(_shape) { // Size
|
|
|
|
case "Box" :
|
|
|
|
case "Box Frame" :
|
|
|
|
case "Ellipse" :
|
|
|
|
inputs[| 21].setVisible(true);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch(_shape) { // Radius
|
|
|
|
case "Sphere" :
|
|
|
|
case "Torus" :
|
|
|
|
case "Cut Sphere" :
|
|
|
|
case "Cut Hollow Sphere" :
|
|
|
|
case "Capped Torus" :
|
|
|
|
case "Cylinder" :
|
|
|
|
case "Capsule" :
|
|
|
|
case "3D Arc" :
|
|
|
|
inputs[| 22].setVisible(true);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch(_shape) { // Thickness
|
|
|
|
case "Box Frame" :
|
|
|
|
case "Torus" :
|
|
|
|
case "Cut Hollow Sphere" :
|
|
|
|
case "Capped Torus" :
|
2024-05-30 05:39:27 +02:00
|
|
|
case "Terrain" :
|
2024-05-29 08:34:44 +02:00
|
|
|
case "Extrude" :
|
2024-05-28 09:51:54 +02:00
|
|
|
inputs[| 23].setVisible(true);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch(_shape) { // Crop
|
|
|
|
case "Cut Sphere" :
|
|
|
|
case "Cut Hollow Sphere" :
|
|
|
|
inputs[| 24].setVisible(true);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch(_shape) { // Angle
|
|
|
|
case "Capped Torus" :
|
|
|
|
case "Cone" :
|
|
|
|
case "3D Arc" :
|
|
|
|
inputs[| 25].setVisible(true);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch(_shape) { // Height
|
|
|
|
case "Cylinder" :
|
|
|
|
case "Capsule" :
|
|
|
|
case "Cone" :
|
|
|
|
case "Capped Cone" :
|
|
|
|
case "Round Cone" :
|
|
|
|
inputs[| 26].setVisible(true);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch(_shape) { // Radius Range
|
|
|
|
case "Capped Cone" :
|
|
|
|
case "Round Cone" :
|
|
|
|
inputs[| 27].setVisible(true);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch(_shape) { // Uniform Size
|
|
|
|
case "Octahedron" :
|
|
|
|
case "Pyramid" :
|
2024-05-30 05:39:27 +02:00
|
|
|
case "Terrain" :
|
2024-05-29 08:34:44 +02:00
|
|
|
case "Extrude" :
|
2024-05-28 09:51:54 +02:00
|
|
|
inputs[| 28].setVisible(true);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2024-05-30 05:39:27 +02:00
|
|
|
switch(_shape) { // Extrude surface
|
|
|
|
case "Terrain" :
|
2024-05-29 08:34:44 +02:00
|
|
|
case "Extrude" :
|
|
|
|
inputs[| 30].setVisible(true);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2024-05-28 09:51:54 +02:00
|
|
|
inputs[| 5].setVisible(_ort == 0);
|
|
|
|
inputs[| 14].setVisible(_ort == 1);
|
|
|
|
}
|
2024-05-28 04:57:00 +02:00
|
|
|
|
|
|
|
static processData = function(_outSurf, _data, _output_index, _array_index = 0) {
|
2024-05-28 09:51:54 +02:00
|
|
|
var _dim = _data[0];
|
|
|
|
var _shp = _data[1];
|
|
|
|
|
|
|
|
var _pos = _data[2];
|
|
|
|
var _rot = _data[3];
|
|
|
|
var _sca = _data[4];
|
|
|
|
|
|
|
|
var _fov = _data[5];
|
|
|
|
var _rng = _data[6];
|
|
|
|
|
|
|
|
var _dpi = _data[7];
|
|
|
|
var _lPos = _data[8];
|
|
|
|
var _amb = _data[9];
|
|
|
|
var _ambI = _data[10];
|
|
|
|
var _elon = _data[11];
|
|
|
|
var _rond = _data[12];
|
|
|
|
|
|
|
|
var _ort = _data[13];
|
|
|
|
var _ortS = _data[14];
|
|
|
|
|
|
|
|
var _wavA = _data[15];
|
|
|
|
var _wavI = _data[16];
|
|
|
|
var _wavS = _data[17];
|
|
|
|
var _twsX = _data[18];
|
|
|
|
var _twsA = _data[19];
|
|
|
|
var _tile = _data[20];
|
|
|
|
|
|
|
|
var _size = _data[21];
|
|
|
|
var _rad = _data[22];
|
|
|
|
var _thk = _data[23];
|
|
|
|
var _crop = _data[24];
|
|
|
|
var _angl = _data[25];
|
|
|
|
var _heig = _data[26];
|
|
|
|
var _radR = _data[27];
|
|
|
|
var _sizz = _data[28];
|
2024-05-28 11:03:33 +02:00
|
|
|
var _tilA = _data[29];
|
2024-05-29 08:34:44 +02:00
|
|
|
var _extr = _data[30];
|
2024-05-28 09:51:54 +02:00
|
|
|
|
2024-05-28 04:57:00 +02:00
|
|
|
_outSurf = surface_verify(_outSurf, _dim[0], _dim[1]);
|
|
|
|
|
2024-05-30 05:39:27 +02:00
|
|
|
for (var i = 0, n = array_length(temp_surface); i < n; i++)
|
|
|
|
temp_surface[i] = surface_verify(temp_surface[i], 8192, 8192);
|
|
|
|
|
|
|
|
var tx = 1024;
|
|
|
|
surface_set_shader(temp_surface[0]);
|
|
|
|
draw_surface_stretched_safe(_extr, tx * 0, tx * 0, tx, tx);
|
|
|
|
surface_reset_shader();
|
|
|
|
|
|
|
|
gpu_set_texfilter(true);
|
2024-05-29 08:34:44 +02:00
|
|
|
|
2024-05-28 04:57:00 +02:00
|
|
|
surface_set_shader(_outSurf, sh_rm_primitive);
|
2024-05-30 05:39:27 +02:00
|
|
|
|
|
|
|
var _shape = shape_types[_shp];
|
|
|
|
var _shpI = 0;
|
|
|
|
|
|
|
|
switch(_shape) {
|
|
|
|
case "Plane" : _shpI = 100; break;
|
|
|
|
case "Box" : _shpI = 101; break;
|
|
|
|
case "Box Frame" : _shpI = 102; break;
|
|
|
|
|
|
|
|
case "Sphere" : _shpI = 200; break;
|
|
|
|
case "Ellipse" : _shpI = 201; break;
|
|
|
|
case "Cut Sphere" : _shpI = 202; break;
|
|
|
|
case "Cut Hollow Sphere" : _shpI = 203; break;
|
|
|
|
case "Torus" : _shpI = 204; break;
|
|
|
|
case "Capped Torus" : _shpI = 205; break;
|
|
|
|
|
|
|
|
case "Cylinder" : _shpI = 300; break;
|
|
|
|
case "Capsule" : _shpI = 301; break;
|
|
|
|
case "Cone" : _shpI = 302; break;
|
|
|
|
case "Capped Cone" : _shpI = 303; break;
|
|
|
|
case "Round Cone" : _shpI = 304; break;
|
|
|
|
case "3D Arc" : _shpI = 305; break;
|
|
|
|
|
|
|
|
case "Octahedron" : _shpI = 400; break;
|
|
|
|
case "Pyramid" : _shpI = 401; break;
|
|
|
|
|
|
|
|
case "Extrude" : _shpI = 500; break;
|
|
|
|
case "Terrain" : _shpI = 501; break;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (var i = 0, n = array_length(temp_surface); i < n; i++)
|
|
|
|
shader_set_surface($"texture{i}", temp_surface[i]);
|
|
|
|
|
2024-05-30 08:44:11 +02:00
|
|
|
shader_set_f("time", CURRENT_FRAME / TOTAL_FRAMES);
|
|
|
|
|
2024-05-30 05:39:27 +02:00
|
|
|
shader_set_i("shape", _shpI);
|
2024-05-28 09:51:54 +02:00
|
|
|
shader_set_f("size", _size);
|
|
|
|
shader_set_f("radius", _rad);
|
|
|
|
shader_set_f("thickness", _thk);
|
|
|
|
shader_set_f("crop", _crop);
|
|
|
|
shader_set_f("angle", degtorad(_angl));
|
|
|
|
shader_set_f("height", _heig);
|
|
|
|
shader_set_f("radRange", _radR);
|
|
|
|
shader_set_f("sizeUni", _sizz);
|
|
|
|
shader_set_f("elongate", _elon);
|
|
|
|
shader_set_f("rounded", _rond);
|
2024-05-30 05:39:27 +02:00
|
|
|
shader_set_i("extrudeSurface", 0);
|
2024-05-28 09:51:54 +02:00
|
|
|
|
|
|
|
shader_set_f("waveAmp", _wavA);
|
|
|
|
shader_set_f("waveInt", _wavI);
|
|
|
|
shader_set_f("waveShift", _wavS);
|
|
|
|
|
|
|
|
shader_set_i("twistAxis", _twsX);
|
|
|
|
shader_set_f("twistAmount", _twsA);
|
|
|
|
|
|
|
|
shader_set_f("position", _pos);
|
|
|
|
shader_set_f("rotation", _rot);
|
|
|
|
shader_set_f("objectScale", _sca);
|
|
|
|
|
2024-05-28 11:03:33 +02:00
|
|
|
shader_set_i("ortho", _ort);
|
|
|
|
shader_set_f("fov", _fov);
|
|
|
|
shader_set_f("orthoScale", _ortS);
|
|
|
|
shader_set_f("viewRange", _rng);
|
|
|
|
shader_set_f("depthInt", _dpi);
|
|
|
|
shader_set_f("tileSize", _tile);
|
|
|
|
shader_set_f("tileAmount", _tilA);
|
2024-05-28 09:51:54 +02:00
|
|
|
|
|
|
|
shader_set_color("ambient", _amb);
|
|
|
|
shader_set_f("ambientIntns", _ambI);
|
|
|
|
shader_set_f("lightPosition", _lPos);
|
2024-05-28 04:57:00 +02:00
|
|
|
|
|
|
|
draw_sprite_stretched(s_fx_pixel, 0, 0, 0, _dim[0], _dim[1]);
|
|
|
|
surface_reset_shader();
|
|
|
|
|
2024-05-29 08:34:44 +02:00
|
|
|
gpu_set_texfilter(false);
|
|
|
|
|
2024-05-28 04:57:00 +02:00
|
|
|
return _outSurf;
|
|
|
|
}
|
2024-05-28 11:03:33 +02:00
|
|
|
}
|