2023-02-28 09:43:01 +01:00
|
|
|
function Node_VFX_Turbulence(_x, _y, _group = noone) : Node_VFX_effector(_x, _y, _group) constructor {
|
2022-12-13 09:20:36 +01:00
|
|
|
name = "Turbulence";
|
2022-12-16 09:18:09 +01:00
|
|
|
node_draw_icon = s_node_vfx_turb;
|
2022-12-13 09:20:36 +01:00
|
|
|
|
2024-08-08 06:57:51 +02:00
|
|
|
inputs[4].setVisible(false, false);
|
2023-01-17 08:11:55 +01:00
|
|
|
|
2024-08-18 06:16:20 +02:00
|
|
|
newInput(effector_input_length + 0, nodeValue_Float("Turbulence scale", self, 1 ));
|
2023-10-10 07:12:42 +02:00
|
|
|
|
2024-08-18 06:16:20 +02:00
|
|
|
newInput(effector_input_length + 1, nodeValue_Bool("Constant seed", self, false ));
|
2023-01-17 08:11:55 +01:00
|
|
|
|
2023-10-10 07:12:42 +02:00
|
|
|
array_push(input_display_list, effector_input_length + 0, effector_input_length + 1);
|
2023-01-17 08:11:55 +01:00
|
|
|
|
2022-12-13 09:20:36 +01:00
|
|
|
function onAffect(part, str) {
|
2023-10-10 07:12:42 +02:00
|
|
|
var _sten = getInputData(5);
|
|
|
|
var _rot_range = getInputData(6);
|
|
|
|
var _sca_range = getInputData(7);
|
|
|
|
var _rot = random_range(_rot_range[0], _rot_range[1]);
|
|
|
|
var _sca = [ random_range(_sca_range[0], _sca_range[1]), random_range(_sca_range[2], _sca_range[3]) ];
|
2022-12-13 09:20:36 +01:00
|
|
|
|
|
|
|
var pv = part.getPivot();
|
|
|
|
|
2023-10-10 07:12:42 +02:00
|
|
|
var t_scale = getInputData(effector_input_length + 0);
|
|
|
|
var con_sed = getInputData(effector_input_length + 1);
|
|
|
|
|
|
|
|
var _seed = con_sed? seed : part.seed;
|
|
|
|
|
|
|
|
var perx = (perlin_noise(pv[0] / t_scale, pv[1] / t_scale, 1, _seed) - 0.5) * 2;
|
|
|
|
var pery = (perlin_noise(pv[0] / t_scale, pv[1] / t_scale, 1, _seed + 100) - 0.5) * 2;
|
2023-01-17 08:11:55 +01:00
|
|
|
|
|
|
|
part.x += perx * str * _sten;
|
|
|
|
part.y += pery * str * _sten;
|
|
|
|
|
|
|
|
part.rot += _rot * perx;
|
2022-12-13 09:20:36 +01:00
|
|
|
|
|
|
|
var scx_s = _sca[0] * str;
|
|
|
|
var scy_s = _sca[1] * str;
|
2023-01-17 08:11:55 +01:00
|
|
|
|
|
|
|
if(scx_s < 0) part.scx = lerp_linear(part.scx, 0, abs(scx_s));
|
|
|
|
else if(scx_s > 0) part.scx += sign(part.scx) * scx_s;
|
|
|
|
|
|
|
|
if(scy_s < 0) part.scy = lerp_linear(part.scy, 0, abs(scy_s));
|
|
|
|
else if(scy_s > 0) part.scy += sign(part.scy) * scy_s;
|
2022-12-13 09:20:36 +01:00
|
|
|
}
|
|
|
|
}
|