- New transform scene node

- New UV remap node
This commit is contained in:
Tanasart 2023-11-09 19:27:16 +07:00
parent f1a4f09fdd
commit 19133ca97f
26 changed files with 581 additions and 71 deletions

View file

@ -307,6 +307,7 @@
{"name":"s_node_loop_input","order":14,"path":"sprites/s_node_loop_input/s_node_loop_input.yy",},
{"name":"node_strand_length_adjust","order":11,"path":"scripts/node_strand_length_adjust/node_strand_length_adjust.yy",},
{"name":"node_blinker","order":17,"path":"scripts/node_blinker/node_blinker.yy",},
{"name":"s_node_3d_transform_scene","order":22,"path":"sprites/s_node_3d_transform_scene/s_node_3d_transform_scene.yy",},
{"name":"fd_rectangle_add_material_surface","order":25,"path":"scripts/fd_rectangle_add_material_surface/fd_rectangle_add_material_surface.yy",},
{"name":"perlin_noise","order":5,"path":"scripts/perlin_noise/perlin_noise.yy",},
{"name":"fd_rectangle_replace_material","order":14,"path":"scripts/fd_rectangle_replace_material/fd_rectangle_replace_material.yy",},
@ -512,6 +513,7 @@
{"name":"text_file","order":5,"path":"scripts/text_file/text_file.yy",},
{"name":"node_armature_pose","order":3,"path":"scripts/node_armature_pose/node_armature_pose.yy",},
{"name":"s_node_pb_draw_diamond","order":29,"path":"sprites/s_node_pb_draw_diamond/s_node_pb_draw_diamond.yy",},
{"name":"node_3d_transform","order":4,"path":"scripts/node_3d_transform/node_3d_transform.yy",},
{"name":"sh_trail_filler_pass1","order":49,"path":"shaders/sh_trail_filler_pass1/sh_trail_filler_pass1.yy",},
{"name":"s_node_vfx_wind","order":3,"path":"sprites/s_node_vfx_wind/s_node_vfx_wind.yy",},
{"name":"s_node_pb_fx_strip","order":26,"path":"sprites/s_node_pb_fx_strip/s_node_pb_fx_strip.yy",},
@ -968,6 +970,7 @@
{"name":"fd_rectangle_get_velocity_surface","order":24,"path":"scripts/fd_rectangle_get_velocity_surface/fd_rectangle_get_velocity_surface.yy",},
{"name":"s_node_text_char_get","order":2,"path":"sprites/s_node_text_char_get/s_node_text_char_get.yy",},
{"name":"o_dialog_group_output_order","order":4,"path":"objects/o_dialog_group_output_order/o_dialog_group_output_order.yy",},
{"name":"node_3d_uv_remap","order":5,"path":"scripts/node_3d_uv_remap/node_3d_uv_remap.yy",},
{"name":"fd_rectangle_get_initial_value_pressure","order":7,"path":"scripts/fd_rectangle_get_initial_value_pressure/fd_rectangle_get_initial_value_pressure.yy",},
{"name":"node_timeline_preview","order":2,"path":"scripts/node_timeline_preview/node_timeline_preview.yy",},
{"name":"__polygon","order":2,"path":"scripts/__polygon/__polygon.yy",},
@ -1194,6 +1197,7 @@
{"name":"node_pb_box_mirror","order":10,"path":"scripts/node_pb_box_mirror/node_pb_box_mirror.yy",},
{"name":"s_node_text_length","order":9,"path":"sprites/s_node_text_length/s_node_text_length.yy",},
{"name":"s_node_grid_hex","order":4,"path":"sprites/s_node_grid_hex/s_node_grid_hex.yy",},
{"name":"s_node_uv_remap","order":23,"path":"sprites/s_node_uv_remap/s_node_uv_remap.yy",},
{"name":"sh_fd_visualize_colorize_glsl","order":13,"path":"shaders/sh_fd_visualize_colorize_glsl/sh_fd_visualize_colorize_glsl.yy",},
{"name":"node_3d_light_point","order":2,"path":"scripts/node_3d_light_point/node_3d_light_point.yy",},
{"name":"s_node_pb_draw_fill","order":14,"path":"sprites/s_node_pb_draw_fill/s_node_pb_draw_fill.yy",},

View file

@ -879,6 +879,7 @@
{"id":{"name":"s_node_loop_input","path":"sprites/s_node_loop_input/s_node_loop_input.yy",},},
{"id":{"name":"node_strand_length_adjust","path":"scripts/node_strand_length_adjust/node_strand_length_adjust.yy",},},
{"id":{"name":"node_blinker","path":"scripts/node_blinker/node_blinker.yy",},},
{"id":{"name":"s_node_3d_transform_scene","path":"sprites/s_node_3d_transform_scene/s_node_3d_transform_scene.yy",},},
{"id":{"name":"fd_rectangle_add_material_surface","path":"scripts/fd_rectangle_add_material_surface/fd_rectangle_add_material_surface.yy",},},
{"id":{"name":"perlin_noise","path":"scripts/perlin_noise/perlin_noise.yy",},},
{"id":{"name":"fd_rectangle_replace_material","path":"scripts/fd_rectangle_replace_material/fd_rectangle_replace_material.yy",},},
@ -1114,6 +1115,7 @@
{"id":{"name":"text_file","path":"scripts/text_file/text_file.yy",},},
{"id":{"name":"node_armature_pose","path":"scripts/node_armature_pose/node_armature_pose.yy",},},
{"id":{"name":"s_node_pb_draw_diamond","path":"sprites/s_node_pb_draw_diamond/s_node_pb_draw_diamond.yy",},},
{"id":{"name":"node_3d_transform","path":"scripts/node_3d_transform/node_3d_transform.yy",},},
{"id":{"name":"sh_trail_filler_pass1","path":"shaders/sh_trail_filler_pass1/sh_trail_filler_pass1.yy",},},
{"id":{"name":"s_node_vfx_wind","path":"sprites/s_node_vfx_wind/s_node_vfx_wind.yy",},},
{"id":{"name":"s_node_pb_fx_strip","path":"sprites/s_node_pb_fx_strip/s_node_pb_fx_strip.yy",},},
@ -1639,6 +1641,7 @@
{"id":{"name":"fd_rectangle_get_velocity_surface","path":"scripts/fd_rectangle_get_velocity_surface/fd_rectangle_get_velocity_surface.yy",},},
{"id":{"name":"s_node_text_char_get","path":"sprites/s_node_text_char_get/s_node_text_char_get.yy",},},
{"id":{"name":"o_dialog_group_output_order","path":"objects/o_dialog_group_output_order/o_dialog_group_output_order.yy",},},
{"id":{"name":"node_3d_uv_remap","path":"scripts/node_3d_uv_remap/node_3d_uv_remap.yy",},},
{"id":{"name":"fd_rectangle_get_initial_value_pressure","path":"scripts/fd_rectangle_get_initial_value_pressure/fd_rectangle_get_initial_value_pressure.yy",},},
{"id":{"name":"node_timeline_preview","path":"scripts/node_timeline_preview/node_timeline_preview.yy",},},
{"id":{"name":"__polygon","path":"scripts/__polygon/__polygon.yy",},},
@ -1892,6 +1895,7 @@
{"id":{"name":"node_pb_box_mirror","path":"scripts/node_pb_box_mirror/node_pb_box_mirror.yy",},},
{"id":{"name":"s_node_text_length","path":"sprites/s_node_text_length/s_node_text_length.yy",},},
{"id":{"name":"s_node_grid_hex","path":"sprites/s_node_grid_hex/s_node_grid_hex.yy",},},
{"id":{"name":"s_node_uv_remap","path":"sprites/s_node_uv_remap/s_node_uv_remap.yy",},},
{"id":{"name":"sh_fd_visualize_colorize_glsl","path":"shaders/sh_fd_visualize_colorize_glsl/sh_fd_visualize_colorize_glsl.yy",},},
{"id":{"name":"node_3d_light_point","path":"scripts/node_3d_light_point/node_3d_light_point.yy",},},
{"id":{"name":"s_node_pb_draw_fill","path":"sprites/s_node_pb_draw_fill/s_node_pb_draw_fill.yy",},},

View file

@ -17,7 +17,7 @@ event_inherited();
destroy_on_escape = false;
destroy_on_click_out = false;
function activate(textbox) {
function activate(textbox) { return;
INLINE
self.textbox = textbox;
self.selecting = 0;

View file

@ -11,7 +11,7 @@
prompt = "";
index = 0;
function activate(textbox) {
function activate(textbox) { return;
INLINE
self.textbox = textbox;
}

View file

@ -8,4 +8,32 @@ function Node_3D_Modifier(_x, _y, _group = noone) : Node_3D(_x, _y, _group) cons
outputs[| 0] = nodeValue("Mesh", self, JUNCTION_CONNECT.output, VALUE_TYPE.d3Mesh, noone);
static modify_object = function(_object, _data, _matrix) { #region
return _object;
} #endregion
static modify_group = function(_group, _data, _matrix) { #region
var _gr = new __3dGroup();
_gr.transform = _group.transform.clone();
_gr.transform.submitMatrix();
_gr.transform.clearMatrix();
_matrix = _matrix.Mul(_gr.transform.matrix);
for( var i = 0, n = array_length(_group.objects); i < n; i++ )
_gr.objects[i] = modify(_group.objects[i], _data, _matrix);
return _gr;
} #endregion
static modify = function(_object, _data, _matrix = new BBMOD_Matrix()) { #region
if(is_instanceof(_object, __3dObject)) return modify_object(_object, _data, _matrix);
if(is_instanceof(_object, __3dGroup)) return modify_group(_object, _data, _matrix);
return noone;
} #endregion
static processData = function(_output, _data, _output_index, _array_index = 0) { #region
return modify(_data[0], _data);
} #endregion
}

View file

@ -1,10 +1,19 @@
function __3dGizmoPlane(radius = 0.5, color = c_white, alpha = 1) : __3dGizmo() constructor {
object_counts = 2;
vertex = [
[
new __vertex( -radius, -radius, 0, color, alpha ),
new __vertex( -radius, radius, 0, color, alpha ),
new __vertex( -radius, radius, 0, color, alpha ),
new __vertex( radius, radius, 0, color, alpha ),
new __vertex( radius, radius, 0, color, alpha ),
new __vertex( radius, -radius, 0, color, alpha ),
new __vertex( radius, -radius, 0, color, alpha ),
new __vertex( -radius, -radius, 0, color, alpha ),
],
[
new __vertex( 0, 0, 0, color, alpha ),

View file

@ -90,4 +90,16 @@ function __3dGroup() constructor {
for( var i = 0, n = array_length(objects); i < n; i++ )
callback(objects[i], scene);
} #endregion
static clone = function(vertex = true, cloneBuffer = false) { #region
var _new = new __3dGroup();
_new.transform = transform.clone();
_new.objects = array_create(array_length(objects));
for( var i = 0, n = array_length(objects); i < n; i++ )
_new.objects[i] = objects[i].clone(vertex, cloneBuffer);
return _new;
} #endregion
}

View file

@ -10,6 +10,7 @@
vertex_format_add_texcoord();
vertex_format_add_color();
global.VF_POS_NORM_TEX_COL = vertex_format_end();
global.VF_POS_NORM_TEX_COL_size = 36;
#endregion
function __3dObject() constructor {
@ -82,7 +83,7 @@ function __3dObject() constructor {
}
}
vertex_end(_buffer);
vertex_freeze(_buffer);
//vertex_freeze(_buffer);
return _buffer;
} #endregion
@ -193,7 +194,7 @@ function __3dObject() constructor {
} #endregion
static clone = function(_vertex = true) { #region
static clone = function(_vertex = true, cloneBuffer = false) { #region
var _obj = new __3dObject();
if(_vertex) {
@ -206,6 +207,21 @@ function __3dObject() constructor {
}
}
if(cloneBuffer) {
_obj.VB = array_create(array_length(VB));
for( var i = 0, n = array_length(VB); i < n; i++ ) {
var _vnum = vertex_get_number(VB[i]);
var _buff = buffer_create(1, buffer_grow, 1);
buffer_copy_from_vertex_buffer(VB[i], 0, _vnum - 1, _buff, 0);
_obj.VB[i] = vertex_create_buffer_from_buffer(_buff, VF);
}
} else {
_obj.VB = VB;
}
_obj.NVB = NVB;
_obj.VF = VF;
_obj.render_type = render_type;
_obj.custom_shader = custom_shader;

View file

@ -29,4 +29,29 @@ function __plane(origin, normal) constructor {
var _distance = _dot / point_distance_3d(0, 0, 0, plane_normal[0], plane_normal[1], plane_normal[2]);
return _distance;
}
function d3d_point_project_plane_uv(plane_origin, plane_normal, point, plane_x_axis, plane_y_axis) {
var distance = d3d_point_to_plane(plane_origin, plane_normal, point);
var projected_point = [
point[0] - plane_normal[0] * distance,
point[1] - plane_normal[1] * distance,
point[2] - plane_normal[2] * distance
];
var local_x = dot_product_3d(
projected_point[0] - plane_origin[0],
projected_point[1] - plane_origin[1],
projected_point[2] - plane_origin[2],
plane_x_axis[0], plane_x_axis[1], plane_x_axis[2]
);
var local_y = dot_product_3d(
projected_point[0] - plane_origin[0],
projected_point[1] - plane_origin[1],
projected_point[2] - plane_origin[2],
plane_y_axis[0], plane_y_axis[1], plane_y_axis[2]
);
return [ local_x, local_y ];
}
#endregion

View file

@ -15,34 +15,34 @@ function __3dPlane() : __3dObject() constructor {
switch(normal) {
case 0 :
vertex[0] = [
new __vertex(0, -side, -side).setNormal(1, 0, 0).setUV(0, 0),
new __vertex(0, side, side).setNormal(1, 0, 0).setUV(1, 1),
new __vertex(0, side, -side).setNormal(1, 0, 0).setUV(1, 0),
new __vertex(0, -side, -side).setNormal(1, 0, 0).setUV(0, 1),
new __vertex(0, side, side).setNormal(1, 0, 0).setUV(1, 0),
new __vertex(0, side, -side).setNormal(1, 0, 0).setUV(1, 1),
new __vertex(0, -side, -side).setNormal(1, 0, 0).setUV(0, 0),
new __vertex(0, -side, side).setNormal(1, 0, 0).setUV(0, 1),
new __vertex(0, side, side).setNormal(1, 0, 0).setUV(1, 1),
new __vertex(0, -side, -side).setNormal(1, 0, 0).setUV(0, 1),
new __vertex(0, -side, side).setNormal(1, 0, 0).setUV(0, 0),
new __vertex(0, side, side).setNormal(1, 0, 0).setUV(1, 0),
];
break;
case 1 :
vertex[0] = [
new __vertex(-side, 0, -side).setNormal(0, 1, 0).setUV(0, 0),
new __vertex( side, 0, -side).setNormal(0, 1, 0).setUV(1, 0),
new __vertex( side, 0, side).setNormal(0, 1, 0).setUV(1, 1),
new __vertex(-side, 0, -side).setNormal(0, 1, 0).setUV(1, 1),
new __vertex( side, 0, -side).setNormal(0, 1, 0).setUV(0, 1),
new __vertex( side, 0, side).setNormal(0, 1, 0).setUV(0, 0),
new __vertex(-side, 0, -side).setNormal(0, 1, 0).setUV(0, 0),
new __vertex( side, 0, side).setNormal(0, 1, 0).setUV(1, 1),
new __vertex(-side, 0, side).setNormal(0, 1, 0).setUV(0, 1),
new __vertex(-side, 0, -side).setNormal(0, 1, 0).setUV(1, 1),
new __vertex( side, 0, side).setNormal(0, 1, 0).setUV(0, 0),
new __vertex(-side, 0, side).setNormal(0, 1, 0).setUV(1, 0),
];
break;
case 2 :
vertex[0] = [
new __vertex(-side, -side, 0).setNormal(0, 0, 1).setUV(0, 0),
new __vertex( side, side, 0).setNormal(0, 0, 1).setUV(1, 1),
new __vertex( side, -side, 0).setNormal(0, 0, 1).setUV(1, 0),
new __vertex( side, -side, 0).setNormal(0, 0, 1).setUV(0, 1),
new __vertex(-side, -side, 0).setNormal(0, 0, 1).setUV(0, 0),
new __vertex(-side, side, 0).setNormal(0, 0, 1).setUV(0, 1),
new __vertex(-side, side, 0).setNormal(0, 0, 1).setUV(1, 0),
new __vertex( side, side, 0).setNormal(0, 0, 1).setUV(1, 1),
];
break;

View file

@ -6,6 +6,8 @@ function __transform() constructor {
rotation = new BBMOD_Quaternion();
scale = new __vec3(1);
matrix = new BBMOD_Matrix();
static submitMatrix = function() {
if(parent) parent.submitMatrix();
@ -24,6 +26,11 @@ function __transform() constructor {
matrix_stack_push(rot);
matrix_stack_push(sca);
matrix_stack_push(anc);
matrix = new BBMOD_Matrix().Mul(new BBMOD_Matrix().FromArray(pos))
.Mul(new BBMOD_Matrix().FromArray(rot))
.Mul(new BBMOD_Matrix().FromArray(sca))
.Mul(new BBMOD_Matrix().FromArray(anc))
}
static clearMatrix = function() {

View file

@ -38,6 +38,8 @@ function Node_3D_Repeat(_x, _y, _group = noone) : Node_3D(_x, _y, _group) constr
inputs[| 11] = nodeValue("Scales", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [] )
.setArrayDepth(2);
inputs[| 12] = nodeValue("Use Instance", self, JUNCTION_CONNECT.input, VALUE_TYPE.boolean, true )
outputs[| 0] = nodeValue("Scene", self, JUNCTION_CONNECT.output, VALUE_TYPE.d3Scene, noone);
input_display_list = [
@ -57,17 +59,18 @@ function Node_3D_Repeat(_x, _y, _group = noone) : Node_3D(_x, _y, _group) constr
static processData = function(_output, _data, _output_index, _array_index = 0) { #region
var _object = _data[0];
var _mode = _data[1];
var _Spos = _data[3];
var _Srot = _data[4];
var _Ssca = _data[5];
var _Rpos = _data[6];
var _Rrot = _data[7];
var _Rsca = _data[8];
var _mode = _data[1];
var _Spos = _data[3];
var _Srot = _data[4];
var _Ssca = _data[5];
var _Rpos = _data[6];
var _Rrot = _data[7];
var _Rsca = _data[8];
var _Apos = _data[ 9];
var _Arot = _data[10];
var _Asca = _data[11];
var _Apos = _data[ 9];
var _Arot = _data[10];
var _Asca = _data[11];
var _inst = _data[12];
if(_mode == 1 && !is_array(_object)) return noone;
var _amo = _mode == 1? array_length(_object) : _data[2];
@ -78,6 +81,8 @@ function Node_3D_Repeat(_x, _y, _group = noone) : Node_3D(_x, _y, _group) constr
var _obj = _mode == 1? _object[i] : _object;
if(_obj == noone) continue;
//if(!_inst) _obj = _obj.clone(false, true);
var _apos = array_safe_get(_Apos, i);
var _arot = array_safe_get(_Arot, i);
var _asca = array_safe_get(_Asca, i);

View file

@ -0,0 +1,92 @@
function Node_3D_Transform_Scene(_x, _y, _group = noone) : Node_3D(_x, _y, _group) constructor {
name = "Transform Scene";
inputs[| 0] = nodeValue("Scene", self, JUNCTION_CONNECT.input, VALUE_TYPE.d3Scene, noone)
.setVisible(true, true);
inputs[| 1] = nodeValue("Position", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [])
.setArrayDepth(2);
inputs[| 2] = nodeValue("Rotation", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [])
.setArrayDepth(2);
inputs[| 3] = nodeValue("Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [])
.setArrayDepth(2);
inputs[| 4] = nodeValue("Positioning type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Additive", "Override" ]);
inputs[| 5] = nodeValue("Rotating type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Additive", "Override" ]);
inputs[| 6] = nodeValue("Scaling type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0)
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Additive", "Multiplicative", "Override" ]);
outputs[| 0] = nodeValue("Scene", self, JUNCTION_CONNECT.output, VALUE_TYPE.d3Scene, noone);
input_display_list = [ 0,
["Transform", false], 1, 2, 3,
["Settings", true], 4, 5, 6,
];
static processData = function(_output, _data, _output_index, _array_index = 0) { #region
var _scn = _data[0];
if(!is_instanceof(_scn, __3dGroup)) return noone;
var _nscn = _scn.clone(false);
_temp_data = _data;
array_foreach(_nscn.objects, function(_object, _index) {
var _pos = array_safe_get(_temp_data[1], _index, 0);
if(is_array(_pos)) {
if(_temp_data[4] == 0) {
_object.transform.position.x += _pos[0];
_object.transform.position.y += _pos[1];
_object.transform.position.z += _pos[2];
} else if(_temp_data[4] == 1) {
_object.transform.position.x = _pos[0];
_object.transform.position.y = _pos[1];
_object.transform.position.z = _pos[2];
}
}
var _rot = array_safe_get(_temp_data[2], _index, 0);
if(is_array(_rot)) {
var _rotQ = new BBMOD_Quaternion().FromEuler(_rot[0], _rot[1], _rot[2]);
if(_temp_data[5] == 0)
_object.transform.rotation = _object.transform.rotation.Mul(_rotQ);
else if(_temp_data[5] == 1)
_object.transform.rotation = _rotQ;
}
var _sca = array_safe_get(_temp_data[3], _index, 0);
if(is_array(_sca)) {
if(_temp_data[6] == 0) {
_object.transform.scale.x += _sca[0];
_object.transform.scale.y += _sca[1];
_object.transform.scale.z += _sca[2];
} else if(_temp_data[6] == 1) {
_object.transform.scale.x *= _sca[0];
_object.transform.scale.y *= _sca[1];
_object.transform.scale.z *= _sca[2];
} else if(_temp_data[6] == 2) {
_object.transform.scale.x = _sca[0];
_object.transform.scale.y = _sca[1];
_object.transform.scale.z = _sca[2];
}
}
});
return _nscn;
} #endregion
static getPreviewObject = function() { #region
var _obj = outputs[| 0].getValue();
if(is_array(_obj)) _obj = array_safe_get(_obj, preview_index, noone);
return _obj;
} #endregion
}

View file

@ -0,0 +1,11 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "node_3d_transform",
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "d3d modifier",
"path": "folders/nodes/data/3D/d3d modifier.yy",
},
}

View file

@ -0,0 +1,12 @@
{
"isDnD": false,
"isCompatibility": false,
"parent": {
"name": "variable",
"path": "folders/nodes/data/variable.yy",
},
"resourceVersion": "1.0",
"name": "node_counter",
"tags": [],
"resourceType": "GMScript",
}

View file

@ -0,0 +1,113 @@
function Node_3D_UV_Remap(_x, _y, _group = noone) : Node_3D_Object(_x, _y, _group) constructor {
name = "UV Remap";
gizmo = new __3dGizmoPlane();
inputs[| in_d3d + 0] = nodeValue("Mesh", self, JUNCTION_CONNECT.input, VALUE_TYPE.d3Mesh, noone)
.setVisible(true, true);
outputs[| 0] = nodeValue("Mesh", self, JUNCTION_CONNECT.output, VALUE_TYPE.d3Mesh, noone);
input_display_list = [
["Transform", false], 0, 1, 2,
in_d3d + 0,
];
remap_position = [ 0, 0, 0 ];
remap_normal = [ 0, 0, 0 ];
remap_normal_x = [ 0, 0, 0 ];
remap_normal_y = [ 0, 0, 0 ];
remap_scale = [ 1, 1, 1 ];
static modify_object = function(_object, _data, _matrix) { #region
if(_object.VF != global.VF_POS_NORM_TEX_COL) return _object;
var _obj = _object.clone(false, false);
_obj.VB = [];
_obj.transform.submitMatrix();
_obj.transform.clearMatrix();
var _mat = _matrix.Mul(_obj.transform.matrix);
for( var i = 0, n = array_length(_object.VB); i < n; i++ ) {
var vb = _object.VB[i];
var len = vertex_get_number(vb);
var buff = buffer_create_from_vertex_buffer(vb, buffer_grow, 1);
buffer_seek(buff, buffer_seek_start, 0);
for( var j = 0; j < len; j++ ) {
var _x = buffer_read(buff, buffer_f32); // 4
var _y = buffer_read(buff, buffer_f32); // 4
var _z = buffer_read(buff, buffer_f32); // 4
var _nx = buffer_read(buff, buffer_f32); // 4
var _ny = buffer_read(buff, buffer_f32); // 4
var _nz = buffer_read(buff, buffer_f32); // 4
var _u = buffer_read(buff, buffer_f32); // 4
var _v = buffer_read(buff, buffer_f32); // 4
var _r = buffer_read(buff, buffer_u8); // 1
var _g = buffer_read(buff, buffer_u8); // 1
var _b = buffer_read(buff, buffer_u8); // 1
var _a = buffer_read(buff, buffer_u8); // 1
var _v4 = new BBMOD_Vec4(_x, _y, _z, 1);
var _vt = _mat.Transform(_v4);
var _posOnMap = d3d_point_project_plane_uv(remap_position, remap_normal, [_vt.X, _vt.Y, _vt.Z], remap_normal_x, remap_normal_y);
_posOnMap[0] = _posOnMap[0] / remap_scale[0] + 0.5;
_posOnMap[1] = _posOnMap[1] / remap_scale[1] + 0.5;
buffer_seek(buff, buffer_seek_relative, -12);
buffer_write(buff, buffer_f32, _posOnMap[0]);
buffer_write(buff, buffer_f32, _posOnMap[1]);
buffer_seek(buff, buffer_seek_relative, 4);
}
_obj.VB[i] = vertex_create_buffer_from_buffer(buff, global.VF_POS_NORM_TEX_COL);
}
return _obj;
} #endregion
static modify_group = function(_group, _data, _matrix) { #region
var _gr = new __3dGroup();
_gr.transform = _group.transform.clone();
_gr.transform.submitMatrix();
_gr.transform.clearMatrix();
_matrix = _matrix.Mul(_gr.transform.matrix);
for( var i = 0, n = array_length(_group.objects); i < n; i++ )
_gr.objects[i] = modify(_group.objects[i], _data, _matrix);
return _gr;
} #endregion
static modify = function(_object, _data, _matrix = new BBMOD_Matrix()) { #region
if(is_instanceof(_object, __3dObject)) return modify_object(_object, _data, _matrix);
if(is_instanceof(_object, __3dGroup)) return modify_group(_object, _data, _matrix);
return noone;
} #endregion
static processData = function(_output, _data, _output_index, _array_index = 0) { #region
setTransform(gizmo, _data);
var _rot = _data[1];
var _prot = new BBMOD_Quaternion(_rot[0], _rot[1], _rot[2], _rot[3]);
remap_normal = _prot.Rotate(new BBMOD_Vec3(0, 0, 1)).ToArray();
remap_normal_x = _prot.Rotate(new BBMOD_Vec3(1, 0, 0)).ToArray();
remap_normal_y = _prot.Rotate(new BBMOD_Vec3(0, -1, 0)).ToArray();
remap_position = _data[0];
remap_scale = _data[2];
return modify(_data[in_d3d + 0], _data);
} #endregion
static getPreviewObjects = function() { return [ getPreviewObject(), gizmo ]; }
static getPreviewObjectOutline = function() { return [ gizmo ]; }
}

View file

@ -0,0 +1,11 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "node_3d_uv_remap",
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "d3d modifier",
"path": "folders/nodes/data/3D/d3d modifier.yy",
},
}

View file

@ -0,0 +1,12 @@
{
"isDnD": false,
"isCompatibility": false,
"parent": {
"name": "variable",
"path": "folders/nodes/data/variable.yy",
},
"resourceVersion": "1.0",
"name": "node_counter",
"tags": [],
"resourceType": "GMScript",
}

View file

@ -421,8 +421,10 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { #regio
addNodeObject(d3d, "Point Light", s_node_3d_light_point, "Node_3D_Light_Point", [1, Node_3D_Light_Point]).setVersion(11510);
ds_list_add(d3d, "Modify");
addNodeObject(d3d, "Discretize vertex", s_node_3d_discretize, "Node_3D_Round_Vertex", [1, Node_3D_Round_Vertex]).setVersion(11560);
addNodeObject(d3d, "Set Material", s_node_3d_set_material, "Node_3D_Set_Material", [1, Node_3D_Set_Material]).setVersion(11560);
addNodeObject(d3d, "Discretize vertex", s_node_3d_discretize, "Node_3D_Round_Vertex", [1, Node_3D_Round_Vertex]).setVersion(11560);
addNodeObject(d3d, "Set Material", s_node_3d_set_material, "Node_3D_Set_Material", [1, Node_3D_Set_Material]).setVersion(11560);
addNodeObject(d3d, "Transform Scene", s_node_3d_transform_scene, "Node_3D_Transform_Scene", [1, Node_3D_Transform_Scene]).setVersion(11570);
addNodeObject(d3d, "UV Remap", s_node_uv_remap, "Node_3D_UV_Remap", [1, Node_3D_UV_Remap]).setVersion(11570);
///**/ addNodeObject(d3d, "3D Instancer", s_node_3d_set_material, "Node_3D_Instancer", [1, Node_3D_Instancer]).setVersion(11560);
///**/ addNodeObject(d3d, "3D Particle", s_node_3d_set_material, "Node_3D_Particle", [1, Node_3D_Particle]).setVersion(11560);

View file

@ -34,6 +34,7 @@ function textArea(_input, _onModify) : textInput(_input, _onModify) constructor
cursor_pos_y = 0;
cursor_pos_y_to = 0;
cursor_line = 0;
cursor_selecting = false;
char_run = 0
@ -70,7 +71,7 @@ function textArea(_input, _onModify) : textInput(_input, _onModify) constructor
cursor_pos_x = 0;
cursor_pos_y = 0;
click_block = 1;
click_block = 1;
KEYBOARD_STRING = "";
keyboard_lastkey = -1;
@ -529,16 +530,13 @@ function textArea(_input, _onModify) : textInput(_input, _onModify) constructor
}
} #endregion
static display_text = function(_x, _y, _text, _mx = -1, _my = -1) { #region
static display_text = function(_x, _y, _text, _mx = -1, _my = -1, _hover = false) { #region
_text = string_real(_text);
if(line_width != _prev_width) {
_prev_width = line_width;
cut_line();
}
var _xx = _x, _ch, _chw;
var target = -999;
draw_set_text(font, fa_left, fa_top, color);
draw_set_alpha(0.5 + 0.5 * interactable);
@ -546,14 +544,6 @@ function textArea(_input, _onModify) : textInput(_input, _onModify) constructor
var ch_y = _y;
var _str;
//print("==========");
//print(_text);
//print(">>>>");
//print(_input_text);
//print("----");
//print(_input_text_line);
//print($"cursor: {cursor}");
if(_input_text != _text) {
_input_text = _text;
cut_line();
@ -587,56 +577,72 @@ function textArea(_input, _onModify) : textInput(_input, _onModify) constructor
draw_set_alpha(1);
if(_mx != -1 && _my != -1) {
var target = undefined;
if(_hover) {
target = 0;
var char_run = 0, _l, _ch_w, _ch_h, _str, _chr;
var sx = _x;
var ch_x = sx;
var sx = _x;
var ch_x = sx;
var ch_cxo = sx;
var ch_cxn = sx;
var ch_y = _y;
var ch_y = _y;
var _found_char = false;
for( var i = 0, n = array_length(_input_text_line); i < n; i++ ) {
_str = string_trim_end(_input_text_line[i]);
_l = string_length(_str);
_ch_h = line_get_height();
_l = string_length(_str);
_ch_h = line_get_height();
ch_cxo = sx;
ch_x = sx;
ch_x = sx;
if(ch_y <= _my && ch_y + _ch_h >= _my) {
target = char_run + _l;
for( var j = 0; j < string_length(_str); j++ ) {
//draw_set_color(c_white);
//draw_rectangle(ch_x, ch_y, ch_x + 100, ch_y + _ch_h, false);
if((i == 0 || ch_y <= _my) && (i == n - 1 || _my < ch_y + _ch_h)) {
for( var j = 0; j < _l; j++ ) {
_chr = string_char_at(_str, j + 1);
_ch_w = string_width(_chr);
ch_cxn = ch_x + _ch_w / 2;
if(ch_cxo <= _mx && _mx <= ch_cxn) {
if(_mx <= ch_cxn) {
target = char_run + j;
_found_char = true;
break;
}
ch_x += _ch_w;
ch_cxo = ch_cxn;
}
if(!_found_char) target = char_run + _l;
_found_char = true;
break;
}
char_run += string_length(_input_text_line[i]);
ch_y += _ch_h;
}
if(ch_y <= _my && !_found_char) target = char_run - 1;
}
if(target != -999 && HOVER != o_dialog_textbox_autocomplete.id) {
if(mouse_press(mb_left, active) && !click_block) {
if(target != undefined) {
if(mouse_press(mb_left, active) && !click_block && (HOVER != o_dialog_textbox_autocomplete.id || cursor_selecting)) {
cursor_selecting = true;
cursor_select = target;
cursor = target;
} else if(mouse_click(mb_left, active) && cursor != target) {
cursor = target;
}
o_dialog_textbox_autocomplete.deactivate(self);
}
if(mouse_press(mb_left, active))
click_block = false;
if(mouse_click(mb_left, active))
cursor = target;
click_block = false;
}
if(mouse_release(mb_left))
cursor_selecting = false;
} #endregion
static drawParam = function(params) { #region
@ -772,14 +778,7 @@ function textArea(_input, _onModify) : textInput(_input, _onModify) constructor
cursor_pos_y = cursor_pos_y == 0? cursor_pos_y_to : lerp_float(cursor_pos_y, cursor_pos_y_to, 2);
#endregion
var _mx = -1;
var _my = -1;
if(hover && hoverRect) {
_mx = _m[0];
_my = _m[1];
}
display_text(tx, _y + ui(7), _input_text, _mx, _my);
display_text(tx, _y + ui(7), _input_text, _m[0], _m[1], (hover && hoverRect) || cursor_selecting);
if(cursor_pos_y != 0 && cursor_pos_x != 0) {
draw_set_color(COLORS._main_text_accent);

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View file

@ -0,0 +1,74 @@
{
"resourceType": "GMSprite",
"resourceVersion": "1.0",
"name": "s_node_3d_transform_scene",
"bbox_bottom": 57,
"bbox_left": 0,
"bbox_right": 63,
"bbox_top": 5,
"bboxMode": 0,
"collisionKind": 1,
"collisionTolerance": 0,
"DynamicTexturePage": false,
"edgeFiltering": false,
"For3D": false,
"frames": [
{"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"031cf87d-4ed8-41be-a3bc-de418b818944",},
],
"gridX": 0,
"gridY": 0,
"height": 64,
"HTile": false,
"layers": [
{"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"9069c1ea-e01a-426d-83f7-ec3a5af24830","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
],
"nineSlice": null,
"origin": 4,
"parent": {
"name": "3D",
"path": "folders/nodes/icons/3D.yy",
},
"preMultiplyAlpha": false,
"sequence": {
"resourceType": "GMSequence",
"resourceVersion": "1.4",
"name": "s_node_3d_transform_scene",
"autoRecord": true,
"backdropHeight": 768,
"backdropImageOpacity": 0.5,
"backdropImagePath": "",
"backdropWidth": 1366,
"backdropXOffset": 0.0,
"backdropYOffset": 0.0,
"events": {"resourceType":"KeyframeStore<MessageEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
"eventStubScript": null,
"eventToFunction": {},
"length": 1.0,
"lockOrigin": false,
"moments": {"resourceType":"KeyframeStore<MomentsEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
"playback": 1,
"playbackSpeed": 30.0,
"playbackSpeedType": 0,
"showBackdrop": true,
"showBackdropImage": false,
"timeUnits": 1,
"tracks": [
{"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore<SpriteFrameKeyframe>","resourceVersion":"1.0","Keyframes":[
{"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"031cf87d-4ed8-41be-a3bc-de418b818944","path":"sprites/s_node_3d_transform_scene/s_node_3d_transform_scene.yy",},},},"Disabled":false,"id":"48459f52-10f0-45e8-a728-0984d9fbe750","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
],
"visibleRange": null,
"volume": 1.0,
"xorigin": 32,
"yorigin": 32,
},
"swatchColours": null,
"swfPrecision": 2.525,
"textureGroupId": {
"name": "Default",
"path": "texturegroups/Default",
},
"type": 0,
"VTile": false,
"width": 64,
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -0,0 +1,74 @@
{
"resourceType": "GMSprite",
"resourceVersion": "1.0",
"name": "s_node_uv_remap",
"bbox_bottom": 57,
"bbox_left": 3,
"bbox_right": 60,
"bbox_top": 6,
"bboxMode": 0,
"collisionKind": 1,
"collisionTolerance": 0,
"DynamicTexturePage": false,
"edgeFiltering": false,
"For3D": false,
"frames": [
{"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"e3bedd7f-13ed-4e53-8d17-b78d1d4d9d6a",},
],
"gridX": 0,
"gridY": 0,
"height": 64,
"HTile": false,
"layers": [
{"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"17ddd817-fea4-4904-9284-497fe30aa436","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
],
"nineSlice": null,
"origin": 4,
"parent": {
"name": "3D",
"path": "folders/nodes/icons/3D.yy",
},
"preMultiplyAlpha": false,
"sequence": {
"resourceType": "GMSequence",
"resourceVersion": "1.4",
"name": "s_node_uv_remap",
"autoRecord": true,
"backdropHeight": 768,
"backdropImageOpacity": 0.5,
"backdropImagePath": "",
"backdropWidth": 1366,
"backdropXOffset": 0.0,
"backdropYOffset": 0.0,
"events": {"resourceType":"KeyframeStore<MessageEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
"eventStubScript": null,
"eventToFunction": {},
"length": 1.0,
"lockOrigin": false,
"moments": {"resourceType":"KeyframeStore<MomentsEventKeyframe>","resourceVersion":"1.0","Keyframes":[],},
"playback": 1,
"playbackSpeed": 30.0,
"playbackSpeedType": 0,
"showBackdrop": true,
"showBackdropImage": false,
"timeUnits": 1,
"tracks": [
{"resourceType":"GMSpriteFramesTrack","resourceVersion":"1.0","name":"frames","builtinName":0,"events":[],"inheritsTrackColour":true,"interpolation":1,"isCreationTrack":false,"keyframes":{"resourceType":"KeyframeStore<SpriteFrameKeyframe>","resourceVersion":"1.0","Keyframes":[
{"resourceType":"Keyframe<SpriteFrameKeyframe>","resourceVersion":"1.0","Channels":{"0":{"resourceType":"SpriteFrameKeyframe","resourceVersion":"1.0","Id":{"name":"e3bedd7f-13ed-4e53-8d17-b78d1d4d9d6a","path":"sprites/s_node_uv_remap/s_node_uv_remap.yy",},},},"Disabled":false,"id":"17e2963e-5d4c-4b4f-98cd-1931a1665e93","IsCreationKey":false,"Key":0.0,"Length":1.0,"Stretch":false,},
],},"modifiers":[],"spriteId":null,"trackColour":0,"tracks":[],"traits":0,},
],
"visibleRange": null,
"volume": 1.0,
"xorigin": 32,
"yorigin": 32,
},
"swatchColours": null,
"swfPrecision": 2.525,
"textureGroupId": {
"name": "Default",
"path": "texturegroups/Default",
},
"type": 0,
"VTile": false,
"width": 64,
}