Add more localizable texts.

This commit is contained in:
Tanasart 2023-09-28 18:15:29 +07:00
parent 734601b5d8
commit 6784c8e674
90 changed files with 14039 additions and 11357 deletions

View file

@ -110,7 +110,7 @@
{"name":"for filter","order":3,"path":"folders/nodes/data/iterate/for filter.yy",},
{"name":"for sort","order":5,"path":"folders/nodes/data/iterate/for sort.yy",},
{"name":"lua","order":16,"path":"folders/nodes/data/lua.yy",},
{"name":"node","order":11,"path":"folders/nodes/data/node.yy",},
{"name":"misc","order":11,"path":"folders/nodes/data/misc.yy",},
{"name":"PCX","order":22,"path":"folders/nodes/data/PCX.yy",},
{"name":"array","order":6,"path":"folders/nodes/data/PCX/array.yy",},
{"name":"flow control","order":7,"path":"folders/nodes/data/PCX/flow control.yy",},
@ -140,7 +140,7 @@
{"name":"fluidSim","order":147,"path":"folders/nodes/icons/fluidSim.yy",},
{"name":"generator","order":142,"path":"folders/nodes/icons/generator.yy",},
{"name":"IO","order":143,"path":"folders/nodes/icons/IO.yy",},
{"name":"node","order":139,"path":"folders/nodes/icons/node.yy",},
{"name":"misc","order":139,"path":"folders/nodes/icons/misc.yy",},
{"name":"pixel builder","order":149,"path":"folders/nodes/icons/pixel builder.yy",},
{"name":"render","order":140,"path":"folders/nodes/icons/render.yy",},
{"name":"rigidSim","order":146,"path":"folders/nodes/icons/rigidSim.yy",},
@ -852,6 +852,7 @@
{"name":"argumentRenderer","order":2,"path":"scripts/argumentRenderer/argumentRenderer.yy",},
{"name":"node_blur_zoom","order":3,"path":"scripts/node_blur_zoom/node_blur_zoom.yy",},
{"name":"node_bloom","order":3,"path":"scripts/node_bloom/node_bloom.yy",},
{"name":"node_shell","order":15,"path":"scripts/node_shell/node_shell.yy",},
{"name":"sh_bevel","order":2,"path":"shaders/sh_bevel/sh_bevel.yy",},
{"name":"sh_blend_overlay","order":15,"path":"shaders/sh_blend_overlay/sh_blend_overlay.yy",},
{"name":"node_sprite_stack","order":3,"path":"scripts/node_sprite_stack/node_sprite_stack.yy",},
@ -1386,6 +1387,7 @@
{"name":"s_node_shadow_cast","order":49,"path":"sprites/s_node_shadow_cast/s_node_shadow_cast.yy",},
{"name":"fft_functions","order":1,"path":"scripts/fft_functions/fft_functions.yy",},
{"name":"path_function","order":4,"path":"scripts/path_function/path_function.yy",},
{"name":"s_node_shell_excecute","order":33,"path":"sprites/s_node_shell_excecute/s_node_shell_excecute.yy",},
{"name":"fd_rectangle_set_velocity_dissipation_value","order":14,"path":"scripts/fd_rectangle_set_velocity_dissipation_value/fd_rectangle_set_velocity_dissipation_value.yy",},
{"name":"panel_history","order":7,"path":"scripts/panel_history/panel_history.yy",},
{"name":"sh_channel_H","order":3,"path":"shaders/sh_channel_H/sh_channel_H.yy",},
@ -1544,7 +1546,7 @@
{"name":"__shapes","order":3,"path":"scripts/__shapes/__shapes.yy",},
{"name":"VCT","order":1,"path":"scripts/VCT/VCT.yy",},
{"name":"node_alpha_to_grey","order":3,"path":"scripts/node_alpha_to_grey/node_alpha_to_grey.yy",},
{"name":"shell_helper","order":20,"path":"scripts/shell_helper/shell_helper.yy",},
{"name":"shell_functions","order":20,"path":"scripts/shell_functions/shell_functions.yy",},
{"name":"node_strand_collision","order":8,"path":"scripts/node_strand_collision/node_strand_collision.yy",},
{"name":"s_node_atlas_get","order":2,"path":"sprites/s_node_atlas_get/s_node_atlas_get.yy",},
{"name":"sh_flood_fill_it","order":1,"path":"shaders/sh_flood_fill_it/sh_flood_fill_it.yy",},

View file

@ -137,7 +137,7 @@
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"for sort","folderPath":"folders/nodes/data/iterate/for sort.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"for","folderPath":"folders/nodes/data/iterate/for.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"lua","folderPath":"folders/nodes/data/lua.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"node","folderPath":"folders/nodes/data/node.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"misc","folderPath":"folders/nodes/data/misc.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"PCX","folderPath":"folders/nodes/data/PCX.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"array","folderPath":"folders/nodes/data/PCX/array.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"flow control","folderPath":"folders/nodes/data/PCX/flow control.yy",},
@ -175,7 +175,7 @@
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"fluidSim","folderPath":"folders/nodes/icons/fluidSim.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"generator","folderPath":"folders/nodes/icons/generator.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"IO","folderPath":"folders/nodes/icons/IO.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"node","folderPath":"folders/nodes/icons/node.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"misc","folderPath":"folders/nodes/icons/misc.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"pixel builder","folderPath":"folders/nodes/icons/pixel builder.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"render","folderPath":"folders/nodes/icons/render.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"rigidSim","folderPath":"folders/nodes/icons/rigidSim.yy",},
@ -406,6 +406,7 @@
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_node_resize.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_node_use_experssion.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_node_use_global.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_noti_icon_console_failed.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_noti_icon_console.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_noti_icon_error_strip2.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_noti_icon_file_load.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",},
@ -1482,6 +1483,7 @@
{"id":{"name":"argumentRenderer","path":"scripts/argumentRenderer/argumentRenderer.yy",},},
{"id":{"name":"node_blur_zoom","path":"scripts/node_blur_zoom/node_blur_zoom.yy",},},
{"id":{"name":"node_bloom","path":"scripts/node_bloom/node_bloom.yy",},},
{"id":{"name":"node_shell","path":"scripts/node_shell/node_shell.yy",},},
{"id":{"name":"sh_bevel","path":"shaders/sh_bevel/sh_bevel.yy",},},
{"id":{"name":"node_dynamic_surface","path":"scripts/node_dynamic_surface/node_dynamic_surface.yy",},},
{"id":{"name":"sh_blend_overlay","path":"shaders/sh_blend_overlay/sh_blend_overlay.yy",},},
@ -2097,6 +2099,7 @@
{"id":{"name":"s_node_shadow_cast","path":"sprites/s_node_shadow_cast/s_node_shadow_cast.yy",},},
{"id":{"name":"fft_functions","path":"scripts/fft_functions/fft_functions.yy",},},
{"id":{"name":"path_function","path":"scripts/path_function/path_function.yy",},},
{"id":{"name":"s_node_shell_excecute","path":"sprites/s_node_shell_excecute/s_node_shell_excecute.yy",},},
{"id":{"name":"fd_rectangle_set_velocity_dissipation_value","path":"scripts/fd_rectangle_set_velocity_dissipation_value/fd_rectangle_set_velocity_dissipation_value.yy",},},
{"id":{"name":"panel_history","path":"scripts/panel_history/panel_history.yy",},},
{"id":{"name":"sh_channel_H","path":"shaders/sh_channel_H/sh_channel_H.yy",},},
@ -2279,7 +2282,7 @@
{"id":{"name":"__shapes","path":"scripts/__shapes/__shapes.yy",},},
{"id":{"name":"VCT","path":"scripts/VCT/VCT.yy",},},
{"id":{"name":"node_alpha_to_grey","path":"scripts/node_alpha_to_grey/node_alpha_to_grey.yy",},},
{"id":{"name":"shell_helper","path":"scripts/shell_helper/shell_helper.yy",},},
{"id":{"name":"shell_functions","path":"scripts/shell_functions/shell_functions.yy",},},
{"id":{"name":"node_strand_collision","path":"scripts/node_strand_collision/node_strand_collision.yy",},},
{"id":{"name":"s_node_atlas_get","path":"sprites/s_node_atlas_get/s_node_atlas_get.yy",},},
{"id":{"name":"sh_flood_fill_it","path":"shaders/sh_flood_fill_it/sh_flood_fill_it.yy",},},

Binary file not shown.

View file

@ -323,5 +323,36 @@
"workspace_replace_current": "Replace with current",
"close_all_projects": "Close all projects",
"close_current_file": "Close current file",
"graph_connection_settings": "Connection Settings",
"graph_export_nodes": "Nodes",
"graph_grid_settings": "Grid Settings",
"graph_view_settings": "View Settings",
"graph_visibility_avoid_label": "Avoid Label",
"graph_visibility_preview_scale": "Preview Scale",
"onion_skin_frame_step": "Frame step",
"onion_skin_post_color": "Post Color",
"onion_skin_pre_color": "Pre Color",
"onion_skin_top": "Draw on top",
"panel_animation_lock_y": "Lock/Unlock Y easing",
"panel_debug_overlay": "Debug overlay",
"panel_inspector_axis_separate": "Separate axis",
"panel_inspector_extract_multiple": "Extract to...",
"panel_inspector_extract_single": "Extract to node",
"panel_inspector_pop_text": "Pop up Editor",
"panel_menu_export_render_all": "Render disabled node when export",
"panel_menu_steam_workshop": "Steam Workshop",
"panel_menu_tester": "Tester",
"pref_connection_highlight_fade": "Fade connection",
"pref_connection_highlight": "Highlight connection",
"pref_connection_quality": "Render quality",
"preview_3d_settings": "3D Preview Settings",
"preview_grid_settings": "Grid Settings",
"preview_onion_skin_settings": "Onion skin Settings",
"project_graphGrid_color": "Grid color",
"project_graphGrid_opacity": "Grid opacity",
"project_settings": "Project Settings",
"" : ""
}

File diff suppressed because it is too large Load diff

View file

@ -188,5 +188,32 @@
"zoom_in": "Zoom in",
"zoom_out": "Zoom out",
"zoom_to_fit": "Zoom to fit",
"zoom": "Zoom"
"zoom": "Zoom",
"action": "Action",
"armature": "Armature",
"buffer": "Buffer",
"custom": "Custom",
"default_surface": "Default Surface",
"format_": "Format ",
"independent": "Independent",
"legacy": "Legacy",
"light": "Light",
"linked": "Linked",
"misc.": "Misc.",
"misc": "Misc",
"onion_skin": "Onion skin",
"opacity": "Opacity",
"output": "Output",
"palette": "Palette",
"region": "Region",
"render": "Render",
"save_all": "Save all",
"settings": "Settings",
"shader": "Shader",
"shape": "Shape",
"surface": "Surface",
"system": "System",
"" : ""
}

View file

@ -1,5 +1,5 @@
1. nodes.json, UI.json, words.json is for translation.
2. If your language use non-ascii characters, you need to supply your own font files in the fonts folder.
2. If your language use non-ascii characters (or character not included in the default font), you need to supply your own font files in the fonts folder.
2.1. Copy font files (.ttf, .otf) to fonts/
2.2. Edit fonts/fonts.json such that each "path" value point to the font file.
2.3. If your language does not use space to separate words, you need to edit config.json and set "per_character_line_break" to true.

View file

@ -323,5 +323,17 @@
"workspace_replace_current": "Replace with current",
"preview_3d_settings": "3D Preview Settings",
"graph_view_settings": "View Settings",
"graph_visibility_preview_scale": "Preview Scale",
"graph_visibility_avoid_label": "Avoid Label",
"graph_grid_settings": "Grid Settings",
"project.graphGrid.color": "Grid color",
"project.graphGrid.opacity": "Grid opacity",
"graph_connection_settings": "Connection Settings",
"pref_connection_highlight_fade": "Fade connection",
"pref_connection_highlight": "Highlight connection",
"pref_connection_quality": "Render quality",
"" : ""
}

View file

@ -188,5 +188,25 @@
"zoom_in": "Zoom in",
"zoom_out": "Zoom out",
"zoom_to_fit": "Zoom to fit",
"zoom": "Zoom"
"zoom": "Zoom",
"onion_skin": "Onion skin",
"default_surface": "Default Surface",
"palette": "Palette",
"misc": "Misc",
"action": "Action",
"custom": "Custom",
"light": "Light",
"legacy": "Legacy",
"region": "Region",
"armature": "Armature",
"surface": "Surface",
"buffer": "Buffer",
"shader": "Shader",
"system": "System",
"linked": "Linked",
"independent": "Independent",
"output": "Output",
"shape": "Shape",
"render": "Render"
}

Binary file not shown.

View file

@ -5,7 +5,7 @@
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "node",
"path": "folders/nodes/data/node.yy",
"name": "misc",
"path": "folders/nodes/data/misc.yy",
},
}

View file

@ -13,8 +13,7 @@ function draw_circle_border(xx, yy, r, w) {
var px = xx + lengthdir_x(r, i * angle_step);
var py = yy + lengthdir_y(r, i * angle_step);
if(i)
draw_line_round(_px, _py, px, py, w);
if(i) draw_line_round(_px, _py, px, py, w);
_px = px;
_py = py;

View file

@ -1,6 +1,7 @@
#region locale
globalvar LOCALE;
globalvar LOCALE, TEST_LOCALE;
LOCALE = {}
TEST_LOCALE = true;
function __initLocale() {
var lfile = $"data/locale/en.zip";
@ -35,12 +36,18 @@
function __txtx(key, def = "") {
gml_pragma("forceinline");
if(struct_has(LOCALE.word, key))
return LOCALE.word[$ key]
if(struct_has(LOCALE.ui, key))
return LOCALE.ui[$ key]
if(TEST_LOCALE) {
if(!struct_has(LOCALE.word, key) && !struct_has(LOCALE.ui, key))
show_debug_message($"LOCALE: \"{key}\": \"{def}\",");
return def;
}
if(struct_has(LOCALE.word, key))
return LOCALE.word[$ key];
if(struct_has(LOCALE.ui, key))
return LOCALE.ui[$ key];
//print($"LOCAL \"{key}\": \"{def}\",");
return def;
}

View file

@ -5,7 +5,7 @@
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "node",
"path": "folders/nodes/data/node.yy",
"name": "misc",
"path": "folders/nodes/data/misc.yy",
},
}

View file

@ -171,7 +171,7 @@ function Node_ASE_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) const
first_update = false;
on_dragdrop_file = function(path) {
on_drop_file = function(path) {
if(updatePaths(path)) {
doUpdate();
return true;

View file

@ -5,7 +5,7 @@
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "node",
"path": "folders/nodes/data/node.yy",
"name": "misc",
"path": "folders/nodes/data/misc.yy",
},
}

View file

@ -5,7 +5,7 @@
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "node",
"path": "folders/nodes/data/node.yy",
"name": "misc",
"path": "folders/nodes/data/misc.yy",
},
}

View file

@ -5,7 +5,7 @@
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "node",
"path": "folders/nodes/data/node.yy",
"name": "misc",
"path": "folders/nodes/data/misc.yy",
},
}

View file

@ -47,7 +47,7 @@ function Node_CSV_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) const
first_update = false;
on_dragdrop_file = function(path) {
on_drop_file = function(path) {
if(updatePaths(path)) {
doUpdate();
return true;

View file

@ -90,14 +90,15 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
inspectInput1 = nodeValue("Toggle execution", self, JUNCTION_CONNECT.input, VALUE_TYPE.action, false).setVisible(true, true);
inspectInput2 = nodeValue("Toggle execution", self, JUNCTION_CONNECT.input, VALUE_TYPE.action, false).setVisible(true, true);
autoUpdatedTrigger = true;
updatedTrigger = nodeValue("Updated", self, JUNCTION_CONNECT.output, VALUE_TYPE.trigger, false).setVisible(true, true);
insp1UpdateTooltip = __txtx("panel_inspector_execute", "Execute node");
insp1UpdateIcon = [ THEME.sequence_control, 1, COLORS._main_value_positive ];
insp2UpdateTooltip = __txtx("panel_inspector_execute", "Execute node");
insp2UpdateIcon = [ THEME.sequence_control, 1, COLORS._main_value_positive ];
updateAction = nodeValue("Update", self, JUNCTION_CONNECT.input, VALUE_TYPE.action, false).setVisible(true, true);
is_dynamic_input = false;
auto_input = false;
input_display_len = 0;
@ -106,8 +107,14 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
#endregion
#region --- attributes ----
attributes = {};
attributeEditors = [];
attributes = {
show_update_trigger: false
};
attributeEditors = [
"Node",
["Update trigger", function() { return attributes.show_update_trigger; }, new checkBox(function() { attributes.show_update_trigger = !attributes.show_update_trigger; }) ]
];
#endregion
#region ---- preview ----
@ -172,8 +179,6 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
is_3D = false;
#endregion
on_dragdrop_file = -1;
static createNewInput = noone;
static initTooltip = function() { #region
@ -354,6 +359,8 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
if(hasInspector1Update()) inspectInput1.name = insp1UpdateTooltip;
if(hasInspector2Update()) inspectInput2.name = insp2UpdateTooltip;
updatedTrigger.setValue(false);
} #endregion
static doStepBegin = function() {}
@ -394,7 +401,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
static inspectorStep = function() {}
static doUpdate = function() { #region
if(SAFE_MODE) return;
if(SAFE_MODE) return;
if(NODE_EXTRACT) return;
var sBase = surface_get_target();
@ -436,6 +443,8 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
var trigger = inspectInput2.getValue();
if(trigger) onInspector2Update();
}
if(autoUpdatedTrigger) updatedTrigger.setValue(true);
LOG_BLOCK_END();
} #endregion
@ -580,6 +589,9 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
ind++;
}
updatedTrigger.x = xx + w * _s;
updatedTrigger.y = yy + 10;
var inamo = input_display_list == -1? ds_list_size(inputs) : array_length(input_display_list);
var _in = yy + ui(junction_draw_pad_y) * _s;
@ -701,6 +713,9 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
if(hasInspector2Update() && inspectInput2.drawJunction(_s, _mx, _my))
hover = inspectInput2;
if(attributes.show_update_trigger && updatedTrigger.drawJunction(_s, _mx, _my))
hover = updatedTrigger;
return hover;
} #endregion
@ -918,10 +933,12 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
}
} #endregion
static drawNode = function(_x, _y, _mx, _my, _s, display_parameter) { #region
static drawNode = function(_x, _y, _mx, _my, _s, display_parameter = noone) { #region
if(draw_graph_culled) return;
if(!active) return;
self.display_parameter = display_parameter;
if(display_parameter != noone)
self.display_parameter = display_parameter;
var xx = x * _s + _x;
var yy = y * _s + _y;
@ -1265,7 +1282,13 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
return false;
} #endregion
on_drop_file = noone;
static onDrop = function(dragObj) { #region
if(dragObj.type == "Asset" && is_callable(on_drop_file)) {
on_drop_file(dragObj.data.path);
return;
}
for( var i = 0; i < ds_list_size(inputs); i++ ) {
if(dragObj.type == inputs[| i].drop_key) {
inputs[| i].setValue(dragObj.data);
@ -1350,6 +1373,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
var _trigger = [];
array_push(_trigger, inspectInput1.serialize(scale, preset));
array_push(_trigger, inspectInput2.serialize(scale, preset));
array_push(_trigger, updatedTrigger.serialize(scale, preset));
_map.inspectInputs = _trigger;
doSerialize(_map);
@ -1489,6 +1513,9 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
var insInp = load_map.inspectInputs;
inspectInput1.applyDeserialize(insInp[0], load_scale, preset);
inspectInput2.applyDeserialize(insInp[1], load_scale, preset);
if(array_length(insInp) > 2)
updatedTrigger.applyDeserialize(insInp[2], load_scale, preset);
}
doApplyDeserialize();

View file

@ -5,7 +5,7 @@
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "node",
"path": "folders/nodes/data/node.yy",
"name": "misc",
"path": "folders/nodes/data/misc.yy",
},
}

View file

@ -5,7 +5,7 @@
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "node",
"path": "folders/nodes/data/node.yy",
"name": "misc",
"path": "folders/nodes/data/misc.yy",
},
}

View file

@ -44,6 +44,7 @@ enum NODE_EXPORT_FORMAT {
function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
name = "Export";
preview_channel = 1;
autoUpdatedTrigger = false;
playing = false;
played = 0;
@ -121,7 +122,7 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
["%f", "Frame"],
["%i", "Array index"],
];
export_template = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) {
export_template = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) { #region
var _tx = _x + ui(10);
var _ty = _y;
var _tw = _w - ui(8);
@ -190,7 +191,7 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
}
return hh;
});
}); #endregion
input_display_list = [
["Export", false], 0, 1, 2, export_template,
@ -204,7 +205,7 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
webp = working_directory + "webp/webpmux.exe";
gifski = working_directory + "gifski\\win\\gifski.exe";
static onValueUpdate = function(_index) {
static onValueUpdate = function(_index) { #region
var form = inputs[| 3].getValue();
if(_index == 3) {
@ -236,9 +237,9 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
case ".webp" : inputs[| 9].setValue(1); break;
}
}
}
} #endregion
static extensionCheck = function() {
static extensionCheck = function() { #region
var _path = inputs[| 1].getValue();
var _ext = filename_ext(_path);
@ -261,9 +262,9 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
inputs[| 9].setValue(1);
break;
}
}
} #endregion
static renderWebp = function(temp_path, target_path) {
static renderWebp = function(temp_path, target_path) { #region
var _path = file_find_first(temp_path + "*.png", 0);
var frames = [];
@ -298,9 +299,9 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
noti.setOnClick(function() { shellOpenExplorer(self.path); }, "Open in explorer", THEME.explorer);
PANEL_MENU.setNotiIcon(THEME.noti_icon_tick);
}
} #endregion
static renderGif = function(temp_path, target_path) {
static renderGif = function(temp_path, target_path) { #region
var loop = inputs[| 5].getValue();
var opti = inputs[| 6].getValue();
var fuzz = inputs[| 7].getValue();
@ -333,9 +334,9 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
noti.setOnClick(function() { shellOpenExplorer(self.path); }, "Open in explorer", THEME.explorer);
PANEL_MENU.setNotiIcon(THEME.noti_icon_tick);
}
} #endregion
static pathString = function(path, index = 0, _array = false) {
static pathString = function(path, index = 0, _array = false) { #region
var suff = inputs[| 2].getValue();
var form = inputs[| 3].getValue();
var strt = inputs[| 11].getValue();
@ -435,9 +436,9 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
else s += _ext;
return s;
}
} #endregion
static save_surface = function(_surf, _path) {
static save_surface = function(_surf, _path) { #region
var form = inputs[| 3].getValue();
if(form == NODE_EXPORT_FORMAT.gif) {
@ -479,9 +480,9 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
}
return _pathOut;
}
} #endregion
static export = function() {
static export = function() { #region
var surf = inputs[| 0].getValue();
var path = inputs[| 1].getValue();
var suff = inputs[| 2].getValue();
@ -543,7 +544,7 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
PANEL_MENU.setNotiIcon(THEME.noti_icon_tick);
}
}
}
} #endregion
insp1UpdateTooltip = "Export";
insp1UpdateIcon = [ THEME.sequence_control, 1, COLORS._main_value_positive ];
@ -551,14 +552,14 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
insp2UpdateTooltip = "Export All";
insp2UpdateIcon = [ THEME.play_all, 0, COLORS._main_value_positive ];
static onInspector1Update = function() {
static onInspector1Update = function() { #region
if(isInLoop()) UPDATE |= RENDER_TYPE.full;
else doInspectorAction();
}
} #endregion
static onInspector2Update = function() { exportAll(); }
static doInspectorAction = function() {
static doInspectorAction = function() { #region
if(LOADING || APPENDING) return;
var path = inputs[| 1].getValue();
@ -571,6 +572,7 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
PROJECT.animator.rendering = false;
export();
updatedTrigger.setValue(true);
return;
}
@ -584,9 +586,9 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
if(directory_exists(directory))
directory_destroy(directory);
directory_create(directory);
}
} #endregion
static step = function() {
static step = function() { #region
var surf = inputs[| 0].getValue();
if(is_array(surf)) {
inputs[| 3].display_data = format_array;
@ -620,9 +622,9 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
}
outputs[| 0].visible = isInLoop();
}
} #endregion
static update = function(frame = PROJECT.animator.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) { #region
var anim = inputs[| 3].getValue();
if(anim == NODE_EXPORT_FORMAT.single) {
if(isInLoop()) export();
@ -680,10 +682,8 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
}
}
//directory_destroy(directory);
}
updatedTrigger.setValue(true);
} #endregion
static doApplyDeserialize = function() {
onValueUpdate(3);
}
static doApplyDeserialize = function() { onValueUpdate(3); }
}

View file

@ -5,7 +5,7 @@
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "node",
"path": "folders/nodes/data/node.yy",
"name": "misc",
"path": "folders/nodes/data/misc.yy",
},
}

View file

@ -5,7 +5,7 @@
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "node",
"path": "folders/nodes/data/node.yy",
"name": "misc",
"path": "folders/nodes/data/misc.yy",
},
}

View file

@ -43,7 +43,9 @@ function Node_Image(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
first_update = false;
on_dragdrop_file = function(path) {
on_drop_file = function(path) {
inputs[| 0].setValue(path);
if(updatePaths(path)) {
doUpdate();
return true;

View file

@ -73,7 +73,7 @@ function Node_Image_Animated(_x, _y, _group = noone) : Node(_x, _y, _group) cons
path_loaded = [];
on_dragdrop_file = function(path) {
on_drop_file = function(path) {
if(directory_exists(path)) {
with(dialogCall(o_dialog_drag_folder, WIN_W / 2, WIN_H / 2)) {
dir_paths = path;
@ -83,6 +83,8 @@ function Node_Image_Animated(_x, _y, _group = noone) : Node(_x, _y, _group) cons
}
var paths = paths_to_array(path);
inputs[| 0].setValue(paths);
if(updatePaths(paths)) {
doUpdate();
return true;

View file

@ -56,7 +56,9 @@ function Node_Image_gif(_x, _y, _group = noone) : Node(_x, _y, _group) construct
surfaces = [];
on_dragdrop_file = function(path) {
on_drop_file = function(path) {
inputs[| 0].setValue(path);
if(updatePaths(path)) {
doUpdate();
return true;

View file

@ -63,7 +63,7 @@ function Node_Image_Sequence(_x, _y, _group = noone) : Node(_x, _y, _group) cons
path_loaded = [];
on_dragdrop_file = function(path) {
on_drop_file = function(path) {
if(directory_exists(path)) {
with(dialogCall(o_dialog_drag_folder, WIN_W / 2, WIN_H / 2)) {
dir_paths = path;
@ -73,6 +73,8 @@ function Node_Image_Sequence(_x, _y, _group = noone) : Node(_x, _y, _group) cons
}
var paths = paths_to_array(path);
inputs[| 0].setValue(path);
if(updatePaths(paths)) {
doUpdate();
return true;

View file

@ -59,7 +59,7 @@ function Node_Json_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) cons
first_update = false;
on_dragdrop_file = function(path) {
on_drop_file = function(path) {
if(updatePaths(path)) {
doUpdate();
return true;

View file

@ -5,7 +5,7 @@
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "node",
"path": "folders/nodes/data/node.yy",
"name": "misc",
"path": "folders/nodes/data/misc.yy",
},
}

View file

@ -94,6 +94,15 @@ function Node_Path_L_System(_x, _y, _group = noone) : Node(_x, _y, _group) const
];
lines = [];
attributes.rule_length_limit = 10000;
array_push(attributeEditors, "L System");
array_push(attributeEditors, [ "Rule length limit", function() { return attributes.rule_length_limit; },
new textBox(TEXTBOX_INPUT.number, function(val) {
attributes.rule_length_limit = val;
cache_data.start = "";
triggerRender();
}) ]);
current_length = 0;
boundary = new BoundingBox();
@ -165,9 +174,9 @@ function Node_Path_L_System(_x, _y, _group = noone) : Node(_x, _y, _group) const
static getLength = function() { return current_length; }
static getAccuLength = function() { return [ 0, current_length ]; }
static getWeightDistance = function (_dist, _ind = 0) {
static getWeightDistance = function (_dist, _ind = 0) { #region
return getWeightRatio(_dist / current_length, _ind);
}
} #endregion
static getWeightRatio = function (_rat, _ind = 0) { #region
var _p0 = lines[_ind][0];
@ -233,7 +242,10 @@ function Node_Path_L_System(_x, _y, _group = noone) : Node(_x, _y, _group) const
})
cache_data.result = _temp_s;
if(string_length(cache_data.result) > 10000) break;
if(string_length(cache_data.result) > attributes.rule_length_limit) {
noti_warning($"L System: Rules length limit ({attributes.rule_length_limit}) reached.");
break;
}
}
var _es = string_splice(_end_rule, ",");
@ -305,7 +317,7 @@ function Node_Path_L_System(_x, _y, _group = noone) : Node(_x, _y, _group) const
break;
case "+": t.ang += ang; break;
case "-": t.ang -= ang; break;
case "|": t.ang += 180; break;
case "|": t.ang += 180; break;
case "[": ds_stack_push(st, t.clone()); break;
case "]": t = ds_stack_pop(st); break;

View file

@ -5,7 +5,7 @@
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "node",
"path": "folders/nodes/data/node.yy",
"name": "misc",
"path": "folders/nodes/data/misc.yy",
},
}

View file

@ -5,7 +5,7 @@
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "node",
"path": "folders/nodes/data/node.yy",
"name": "misc",
"path": "folders/nodes/data/misc.yy",
},
}

View file

@ -645,7 +645,7 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { #regio
#endregion
var node = ds_list_create(); #region
addNodeCatagory("Node", node);
addNodeCatagory("Misc", node);
ds_list_add(node, "Control");
addNodeObject(node, "Condition", s_node_condition, "Node_Condition", [1, Node_Condition],, "Given a condition, output one value if true, another value is false.");
addNodeObject(node, "Switch", s_node_switch, "Node_Switch", [1, Node_Switch],, "Given an index, output value base on index matching.").setVersion(1090);
@ -680,6 +680,9 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { #regio
ds_list_add(node, "Debug");
addNodeObject(node, "Print", s_node_print, "Node_Print", [1, Node_Print], ["debug log"], "Display text to notification.").setVersion(1145);
ds_list_add(node, "System");
addNodeObject(node, "Execute Shell", s_node_shell_excecute, "Node_Shell", [1, Node_Shell], ["terminal", "execute", "run"], "Execute shell script.").setVersion(11530);
#endregion
var actions = ds_list_create();

View file

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

View file

@ -0,0 +1,32 @@
function Node_Shell(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
name = "Execute Shell";
w = 96;
min_h = 32 + 24 * 1;
draw_padding = 8;
inputs[| 0] = nodeValue("Path", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "");
inputs[| 1] = nodeValue("Script", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "");
insp1UpdateTooltip = "Run";
insp1UpdateIcon = [ THEME.sequence_control, 1, COLORS._main_value_positive ];
static onInspector1Update = function() { update(); }
static update = function() {
var _pro = inputs[| 0].getValue();
var _scr = inputs[| 1].getValue();
if(_pro == "") return;
shell_execute(_pro, _scr);
}
static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) {
var bbox = drawGetBbox(xx, yy, _s);
var txt = inputs[| 0].getValue();
draw_set_text(f_p0, fa_center, fa_center, COLORS._main_text);
draw_text_bbox(bbox, txt);
}
}

View file

@ -0,0 +1,11 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "node_shell",
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "misc",
"path": "folders/nodes/data/misc.yy",
},
}

View file

@ -5,7 +5,7 @@
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "node",
"path": "folders/nodes/data/node.yy",
"name": "misc",
"path": "folders/nodes/data/misc.yy",
},
}

View file

@ -43,7 +43,7 @@ function Node_Text_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) cons
first_update = false;
on_dragdrop_file = function(path) {
on_drop_file = function(path) {
if(updatePaths(path)) {
doUpdate();
return true;

View file

@ -45,6 +45,15 @@ function Node_Trigger(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
var bbox = drawGetBbox(xx, yy, _s);
var trg = outputs[| 0].getValue();
draw_sprite_fit(THEME.node_trigger, trg, bbox.xc, bbox.yc, bbox.w, bbox.h, trg? COLORS._main_accent : COLORS._main_icon);
var cc = trg? COLORS._main_accent : COLORS._main_icon;
var rr = min(bbox.w, bbox.h) / 2 - 6;
draw_set_color(cc);
draw_set_circle_precision(32);
draw_circle_border(bbox.xc, bbox.yc, rr, 4);
draw_set_circle_precision(32);
if(trg) draw_circle(bbox.xc, bbox.yc, rr - 6, false);
}
}

View file

@ -5,7 +5,7 @@
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "node",
"path": "folders/nodes/data/node.yy",
"name": "misc",
"path": "folders/nodes/data/misc.yy",
},
}

View file

@ -5,7 +5,7 @@
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "node",
"path": "folders/nodes/data/node.yy",
"name": "misc",
"path": "folders/nodes/data/misc.yy",
},
}

View file

@ -129,6 +129,11 @@ enum VALUE_UNIT {
reference
}
enum VALUE_TAG {
updateTrigger = 1 << 0,
none = 0
}
function value_color(i) { #region
static JUNCTION_COLORS = [
$6691ff, //int
@ -471,6 +476,8 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
tooltip = _tooltip;
editWidget = noone;
tags = VALUE_TAG.none;
#endregion
#region ---- connection ----
@ -1062,9 +1069,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
break;
case VALUE_DISPLAY.text_array :
editWidget = new textArrayBox(function() {
return animator.values[| 0].value; }, display_data, function() { node.doUpdate();
});
editWidget = new textArrayBox(function() { return animator.values[| 0].value; }, display_data, function() { node.doUpdate(); });
break;
}
break; #endregion
@ -2194,8 +2199,19 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
_map.sep_axis = sep_axis;
_map.shift_x = draw_line_shift_x;
_map.shift_y = draw_line_shift_y;
_map.from_node = !preset && value_from? value_from.node.node_id : -1;
_map.from_index = !preset && value_from? value_from.index : -1;
if(!preset && value_from) {
_map.from_node = value_from.node.node_id;
if(value_from.tags & VALUE_TAG.updateTrigger > 0)
_map.from_index = -2;
else
_map.from_index = value_from.index;
} else {
_map.from_node = -1;
_map.from_index = -1;
}
_map.global_use = expUse;
_map.global_key = expression;
_map.anim = is_anim;
@ -2279,7 +2295,9 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
if(log) log_warning("LOAD", $"[Connect] Reconnecting {node.name} to {_nd.name}", node);
if(con_index < _ol) {
if(con_index == -2) {
setFrom(_nd.updatedTrigger);
} else if(con_index < _ol) {
var _set = setFrom(_nd.outputs[| con_index], false, true);
if(_set) return true;

View file

@ -92,7 +92,7 @@ function Node_WAV_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) const
})]);
#endregion
on_dragdrop_file = function(path) { #region
on_drop_file = function(path) { #region
if(updatePaths(path)) {
doUpdate();
return true;

View file

@ -1864,8 +1864,8 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
#endregion
function dropFile(path) { #region
if(node_hovering && node_hovering.on_dragdrop_file != -1)
return node_hovering.on_dragdrop_file(path);
if(node_hovering && is_callable(node_hovering.on_drop_file))
return node_hovering.on_drop_file(path);
return false;
} #endregion

View file

@ -26,7 +26,7 @@ function Panel_Graph_Grid_Setting() : Panel_Linear_Setting() constructor {
if(PANEL_GRAPH.project == noone || !PANEL_GRAPH.project.active) return;
PANEL_GRAPH.project.graphGrid.opacity = clamp(real(str), 0, 1);
}),
__txtx("project.graphGrid.opacity", "Grid opacity"),
__txtx("project_graphGrid_opacity", "Grid opacity"),
function() { return PANEL_GRAPH.project.graphGrid.opacity; }
],
[
@ -34,7 +34,7 @@ function Panel_Graph_Grid_Setting() : Panel_Linear_Setting() constructor {
if(PANEL_GRAPH.project == noone || !PANEL_GRAPH.project.active) return;
PANEL_GRAPH.project.graphGrid.color = color;
}, self),
__txtx("project.graphGrid.color", "Grid color"),
__txtx("project_graphGrid_color", "Grid color"),
function() { return PANEL_GRAPH.project.graphGrid.color; }
]
];

View file

@ -1,7 +1,8 @@
function Inspector_Custom_Renderer(drawFn, registerFn = noone) : widget() constructor {
h = 64;
self.draw = drawFn;
register = registerFn;
if(registerFn != noone) register = registerFn;
}
function Panel_Inspector() : PanelContent() constructor {
@ -401,7 +402,9 @@ function Panel_Inspector() : PanelContent() constructor {
draw_set_text(f_p0, fa_left, fa_center, COLORS._main_text);
draw_text_add(ui(8), yy + hg / 2, edt[0]);
edt[2].drawParam(new widgetParam(wx0, yy, ww, hg, val, {}, _m, x + contentPane.x, y + contentPane.y));
var _param = new widgetParam(wx0, yy, ww, hg, val, {}, _m, x + contentPane.x, y + contentPane.y);
_param.s = hg;
edt[2].drawParam(_param);
yy += hg + ui(8);
hh += hg + ui(8);
@ -461,11 +464,9 @@ function Panel_Inspector() : PanelContent() constructor {
continue;
} else if(is_struct(jun_disp) && instanceof(jun_disp) == "Inspector_Custom_Renderer") {
if(pFOCUS) jun_disp.register(contentPane);
if(pFOCUS && is_callable(jun_disp.register)) jun_disp.register(contentPane);
jun_disp.rx = ui(16) + x;
jun_disp.ry = top_bar_h + y;
if(is_callable(jun_disp.register))
jun_disp.register(contentPane);
hh += jun_disp.draw(ui(6), yy, con_w - ui(12), _m, _hover, pFOCUS) + ui(8);
continue;

View file

@ -2,7 +2,11 @@ var _filter = ["x", "y", "updated", "rendered", "show_output_name", "insp2Update
"preview_drop_y", "badgeInspect", "preview_mx", "temp_surface", "load_scale", "node_id", "show_input_name", "graph_h", "display_data", "drawLineIndex", "draw_line_shift_x",
"draw_line_shift_y", "cache_array", "drag_mx", "drag_my", "expTree", "value_to", "draw_line_thick", "expUse", "expression", "drag_sx", "drag_sy", "drag_type", "con_node",
"cache_value", "show_graph", "preview_x", "preview_y", "badgePreview", "data_list", "open_rx", "open_ry", "parent", "active", "cached_output", "current_data", "cache_result",
"draw_graph_culled", "dopesheet_y", "render_time", "renderActive", "preview_speed", "preview_drop_x", "preview_drop_y", "inspecting", "value_to_arr", "draw_name" ];
"draw_graph_culled", "dopesheet_y", "render_time", "renderActive", "preview_speed", "preview_drop_x", "preview_drop_y", "inspecting", "value_to_arr", "draw_name", "anim_priority",
"draw_line_vb", "error_notification", "animators", "junction_drawing", "draw_line_shift_hover", "value_from", "is_anim", "popup_dialog", "draw_line_blend", "is_changed",
"on_end", "editWidget", "key_inter", "dyna_depo", "def_length", "con_index", "bg_sel_spr", "load_map", "preview_alpha", "icon", "junction_draw_pad_y", "previewable", "active_range",
"inputMap", "tools", "preview_amount", "anim_show", "active_draw_index", "onSetDisplayName", "previewing", "on_drop_file", "autoUpdatedTrigger", "attributeEditors", "error_noti_update",
"bg_spr", "insp1UpdateIcon", "outputMap", "preview_surface", "manual_updated", "preview_my", "tool_settings", "isTool" ];
global.node_data_filter = ds_map_create();
for( var i = 0, n = array_length(_filter); i < n; i++ )
global.node_data_filter[? _filter[i]] = 1;
@ -38,7 +42,7 @@ function Panel_Node_Data_Gen() : PanelContent() constructor {
cur = 0;
key = ds_map_find_first(ALL_NODES);
CLONING = true;
LOADING = true;
NODE_EXTRACT = true;
dir = DIRECTORY + "Nodes/";
@ -134,7 +138,6 @@ function Panel_Node_Data_Gen() : PanelContent() constructor {
json_save_struct(dir + "node_locale.json", locale, true);
shellOpenExplorer(dir);
CLONING = false;
game_end();
}
}

View file

@ -23,21 +23,21 @@ function Panel_Preview_Onion_Setting() : Panel_Linear_Setting() constructor {
new textBox(TEXTBOX_INPUT.number, function(str) {
PROJECT.onion_skin.step = max(1, round(real(str)));
}),
__txt("Frame step"),
__txtx("onion_skin_frame_step", "Frame step"),
function() { return PROJECT.onion_skin.step; }
],
[
new buttonColor(function(color) {
PROJECT.onion_skin.color[0] = color;
}, self),
__txt("Pre Color"),
__txtx("onion_skin_pre_color", "Pre Color"),
function() { return PROJECT.onion_skin.color[0]; }
],
[
new buttonColor(function(color) {
PROJECT.onion_skin.color[1] = color;
}, self),
__txt("Post Color"),
__txtx("onion_skin_post_color", "Post Color"),
function() { return PROJECT.onion_skin.color[1]; }
],
[

View file

@ -0,0 +1,19 @@
function shellOpenExplorer(path) {
var _windir = environment_get_variable("WINDIR") + "/explorer.exe";
path = string_replace_all(path, "/", "\\");
shell_execute(_windir, path);
}
function shell_execute(path, command, ref = noone) {
gml_pragma("forceinline");
var txt = $"{path} {command}";
noti_status(txt, THEME.noti_icon_console,, ref);
try {
var res = execute_shell(path, command);
noti_status("Execute shell complete", THEME.noti_icon_console, COLORS._main_accent, ref);
} catch(e) {
noti_warning($"Execute shell failed: {e}", THEME.noti_icon_console_failed, COLORS._main_value_negative, ref);
}
}

View file

@ -1,7 +1,7 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "shell_helper",
"name": "shell_functions",
"isCompatibility": false,
"isDnD": false,
"parent": {

View file

@ -1,12 +0,0 @@
function shellOpenExplorer(path) {
var _windir = environment_get_variable("WINDIR") + "/explorer.exe";
path = string_replace_all(path, "/", "\\");
shell_execute(_windir, path);
}
function shell_execute(path, command, ref = noone) {
gml_pragma("forceinline");
noti_status($"{path} {command}", THEME.noti_icon_console, false, ref);
execute_shell(path, command);
}

View file

@ -9,7 +9,7 @@ function textArrayBox(arraySet, data, onModify = noone) : widget() constructor {
open = false;
static drawParam = function(params) {
return draw(params.x, params.y, params.w, params.h, params.data, params.m, params.rx, params.ry);
return draw(params.x, params.y, params.w, params.h, params.m, params.rx, params.ry);
}
static draw = function(_x, _y, _w, _h, _m, _rx = 0, _ry = 0) {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,008 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,008 B

View file

@ -0,0 +1,74 @@
{
"resourceType": "GMSprite",
"resourceVersion": "1.0",
"name": "s_node_shell_excecute",
"bbox_bottom": 57,
"bbox_left": 2,
"bbox_right": 61,
"bbox_top": 6,
"bboxMode": 0,
"collisionKind": 1,
"collisionTolerance": 0,
"DynamicTexturePage": false,
"edgeFiltering": false,
"For3D": false,
"frames": [
{"resourceType":"GMSpriteFrame","resourceVersion":"1.1","name":"d20c72ee-ef0d-411f-aac2-4c916f30c5e0",},
],
"gridX": 0,
"gridY": 0,
"height": 64,
"HTile": false,
"layers": [
{"resourceType":"GMImageLayer","resourceVersion":"1.0","name":"2b68cb99-7a89-4c0d-9358-3851ef8a80ec","blendMode":0,"displayName":"default","isLocked":false,"opacity":100.0,"visible":true,},
],
"nineSlice": null,
"origin": 4,
"parent": {
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {
"resourceType": "GMSequence",
"resourceVersion": "1.4",
"name": "s_node_shell_excecute",
"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":"d20c72ee-ef0d-411f-aac2-4c916f30c5e0","path":"sprites/s_node_shell_excecute/s_node_shell_excecute.yy",},},},"Disabled":false,"id":"72981076-046d-462f-ad7f-a61f9c790919","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,
}

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {

View file

@ -25,8 +25,8 @@
"nineSlice": null,
"origin": 4,
"parent": {
"name": "node",
"path": "folders/nodes/icons/node.yy",
"name": "misc",
"path": "folders/nodes/icons/misc.yy",
},
"preMultiplyAlpha": false,
"sequence": {