Multiple project support.

This commit is contained in:
Tanasart 2023-07-06 19:49:16 +02:00
parent d0d39e52e9
commit 22e8d39950
192 changed files with 915 additions and 770 deletions

View file

@ -163,6 +163,7 @@
{"name":"gameframe","order":2,"path":"folders/sprites/gameframe.yy",},
{"name":"misc","order":3,"path":"folders/sprites/misc.yy",},
{"name":"widgets","order":5,"path":"folders/widgets.yy",},
{"name":"project","order":39,"path":"folders/functions/project.yy",},
],
"ResourceOrderSettings": [
{"name":"s_node_corner","order":16,"path":"sprites/s_node_corner/s_node_corner.yy",},
@ -726,6 +727,7 @@
{"name":"s_icon_64","order":2,"path":"sprites/s_icon_64/s_icon_64.yy",},
{"name":"panel_graph_export_image","order":4,"path":"scripts/panel_graph_export_image/panel_graph_export_image.yy",},
{"name":"__bone","order":2,"path":"scripts/__bone/__bone.yy",},
{"name":"save_function","order":1,"path":"scripts/save_function/save_function.yy",},
{"name":"s_node_gradient_replace","order":18,"path":"sprites/s_node_gradient_replace/s_node_gradient_replace.yy",},
{"name":"node_perlin_smear","order":9,"path":"scripts/node_perlin_smear/node_perlin_smear.yy",},
{"name":"node_alpha_cutoff","order":10,"path":"scripts/node_alpha_cutoff/node_alpha_cutoff.yy",},
@ -793,7 +795,7 @@
{"name":"safe_operation","order":6,"path":"scripts/safe_operation/safe_operation.yy",},
{"name":"s_node_rigid_override","order":9,"path":"sprites/s_node_rigid_override/s_node_rigid_override.yy",},
{"name":"s_node_array_get","order":3,"path":"sprites/s_node_array_get/s_node_array_get.yy",},
{"name":"o_dialog_load","order":12,"path":"objects/o_dialog_load/o_dialog_load.yy",},
{"name":"o_dialog_save","order":12,"path":"objects/o_dialog_save/o_dialog_save.yy",},
{"name":"s_node_BW","order":13,"path":"sprites/s_node_BW/s_node_BW.yy",},
{"name":"s_node_strandSim_collide","order":7,"path":"sprites/s_node_strandSim_collide/s_node_strandSim_collide.yy",},
{"name":"sh_fd_turbulence","order":22,"path":"shaders/sh_fd_turbulence/sh_fd_turbulence.yy",},
@ -1211,7 +1213,6 @@
{"name":"__node_value_processor","order":7,"path":"scripts/__node_value_processor/__node_value_processor.yy",},
{"name":"s_node_group_input","order":16,"path":"sprites/s_node_group_input/s_node_group_input.yy",},
{"name":"sample_projects","order":6,"path":"scripts/sample_projects/sample_projects.yy",},
{"name":"load_function","order":2,"path":"scripts/load_function/load_function.yy",},
{"name":"draw_fit","order":12,"path":"scripts/draw_fit/draw_fit.yy",},
{"name":"s_node_morph_surface","order":56,"path":"sprites/s_node_morph_surface/s_node_morph_surface.yy",},
{"name":"fd_rectangle_get_velocity_dissipation_type","order":20,"path":"scripts/fd_rectangle_get_velocity_dissipation_type/fd_rectangle_get_velocity_dissipation_type.yy",},
@ -1255,6 +1256,7 @@
{"name":"draw_surface_functions","order":4,"path":"scripts/draw_surface_functions/draw_surface_functions.yy",},
{"name":"s_noti_icon_error","order":5,"path":"sprites/s_noti_icon_error/s_noti_icon_error.yy",},
{"name":"node_rigid_variable","order":8,"path":"scripts/node_rigid_variable/node_rigid_variable.yy",},
{"name":"project_function","order":2,"path":"scripts/project_function/project_function.yy",},
{"name":"s_node_zoom","order":54,"path":"sprites/s_node_zoom/s_node_zoom.yy",},
{"name":"node_noise_fbm","order":3,"path":"scripts/node_noise_fbm/node_noise_fbm.yy",},
{"name":"sh_channel_V","order":6,"path":"shaders/sh_channel_V/sh_channel_V.yy",},

View file

@ -199,6 +199,7 @@
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"Steamworks","folderPath":"folders/Steamworks.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"UGC","folderPath":"folders/Steamworks/UGC.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"widgets","folderPath":"folders/widgets.yy",},
{"resourceType":"GMFolder","resourceVersion":"1.0","name":"project","folderPath":"folders/functions/project.yy",},
],
"IncludedFiles": [
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"ApolloHelp.html","ConfigValues":{"Itch":{"CopyToMask":"0",},},"CopyToMask":-1,"filePath":"datafiles",},
@ -298,6 +299,7 @@
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_icon_preview_export.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_icon_reset_when_preview_strip2.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_icon_revert.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_icon_save_all.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_icon_save_auto.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_icon_save.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_icon_spalsh_show_on_start_strip2.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",},
@ -356,6 +358,7 @@
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_steam_creator.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_steam.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_strandSim.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_tab_exit.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_text_bullet_strip2.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_timeline_clock.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",},
{"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_timeline_graph.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",},
@ -1345,7 +1348,7 @@
{"id":{"name":"safe_operation","path":"scripts/safe_operation/safe_operation.yy",},},
{"id":{"name":"s_node_rigid_override","path":"sprites/s_node_rigid_override/s_node_rigid_override.yy",},},
{"id":{"name":"s_node_array_get","path":"sprites/s_node_array_get/s_node_array_get.yy",},},
{"id":{"name":"o_dialog_load","path":"objects/o_dialog_load/o_dialog_load.yy",},},
{"id":{"name":"o_dialog_save","path":"objects/o_dialog_save/o_dialog_save.yy",},},
{"id":{"name":"s_node_BW","path":"sprites/s_node_BW/s_node_BW.yy",},},
{"id":{"name":"s_node_strandSim_collide","path":"sprites/s_node_strandSim_collide/s_node_strandSim_collide.yy",},},
{"id":{"name":"sh_fd_turbulence","path":"shaders/sh_fd_turbulence/sh_fd_turbulence.yy",},},
@ -1881,6 +1884,7 @@
{"id":{"name":"sh_mask","path":"shaders/sh_mask/sh_mask.yy",},},
{"id":{"name":"s_noti_icon_error","path":"sprites/s_noti_icon_error/s_noti_icon_error.yy",},},
{"id":{"name":"node_rigid_variable","path":"scripts/node_rigid_variable/node_rigid_variable.yy",},},
{"id":{"name":"project_function","path":"scripts/project_function/project_function.yy",},},
{"id":{"name":"s_node_zoom","path":"sprites/s_node_zoom/s_node_zoom.yy",},},
{"id":{"name":"migration_function","path":"scripts/migration_function/migration_function.yy",},},
{"id":{"name":"node_noise_fbm","path":"scripts/node_noise_fbm/node_noise_fbm.yy",},},

View file

@ -310,7 +310,7 @@
"dialog_group_order_add": "Add separator",
"dialog_exit_title": "Project modified",
"dialog_exit_content": "Save progress before exit?",
"dialog_exit_content": "Save progress before close?",
"contest_open_discord": "Open in Discord",

Binary file not shown.

View file

@ -1,7 +1,7 @@
/// @description
#region deserialize
if(!struct_has(LOAD_ADDON, name)) exit;
var _mp = json_parse(LOAD_ADDON[$ name]);
if(!struct_has(PROJECT.addons, name)) exit;
var _mp = json_parse(PROJECT.addons[$ name]);
lua_call(thread, "deserialize", _mp);
#endregion

View file

@ -8,18 +8,18 @@ event_inherited();
#endregion
#region scaler
scale_to = ANIMATOR.frames_total;
scale_to = PROJECT.animator.frames_total;
tb_scale_frame = new textBox(TEXTBOX_INPUT.number, function(to) {
to = toNumber(to);
scale_to = to;
});
b_apply = button(function() {
var fac = scale_to / ANIMATOR.frames_total;
var key = ds_map_find_first(NODE_MAP);
repeat(ds_map_size(NODE_MAP)) {
var n = NODE_MAP[? key];
key = ds_map_find_next(NODE_MAP, key);
var fac = scale_to / PROJECT.animator.frames_total;
var key = ds_map_find_first(PROJECT.nodeMap);
repeat(ds_map_size(PROJECT.nodeMap)) {
var n = PROJECT.nodeMap[? key];
key = ds_map_find_next(PROJECT.nodeMap, key);
if(!n || !n.active) continue;
for(var i = 0; i < ds_list_size(n.inputs); i++) {
@ -31,7 +31,7 @@ event_inherited();
}
}
}
ANIMATOR.frames_total = scale_to;
PROJECT.animator.frames_total = scale_to;
instance_destroy();
}).setIcon(THEME.accept, 0, COLORS._main_icon_dark);
#endregion

View file

@ -22,7 +22,7 @@ if !ready exit;
var sx1 = tb_x + ui(96);
draw_set_text(f_p1, fa_right, fa_top, COLORS._main_text_sub);
draw_text(sx1, yy + ui(38), __txtx("anim_scale_scale_factor", "Scaling factor: ") + string(scale_to / ANIMATOR.frames_total));
draw_text(sx1, yy + ui(38), __txtx("anim_scale_scale_factor", "Scaling factor: ") + string(scale_to / PROJECT.animator.frames_total));
var bx = sx1 + ui(16);
var by = yy;

View file

@ -12,14 +12,14 @@ event_inherited();
#region data
tb_length = new textBox(TEXTBOX_INPUT.number, function(str) {
ANIMATOR.frames_total = real(str);
PROJECT.animator.frames_total = real(str);
})
tb_framerate = new textBox(TEXTBOX_INPUT.number, function(str) {
ANIMATOR.framerate = real(str);
PROJECT.animator.framerate = real(str);
})
eb_playback = buttonGroup([__txt("Loop"), __txt("Stop")], function(b) {
ANIMATOR.playback = b;
PROJECT.animator.playback = b;
});
#endregion

View file

@ -17,19 +17,19 @@ if !ready exit;
tb_length.register();
draw_set_text(f_p1, fa_left, fa_center, COLORS._main_text);
draw_text(dialog_x + ui(32), yy + ui(17), __txtx("anim_length", "Animation length"));
tb_length.draw(dialog_x + dialog_w - ui(120), yy, ui(96), TEXTBOX_HEIGHT, ANIMATOR.frames_total, mouse_ui);
tb_length.draw(dialog_x + dialog_w - ui(120), yy, ui(96), TEXTBOX_HEIGHT, PROJECT.animator.frames_total, mouse_ui);
yy += ui(44);
tb_framerate.setFocusHover(sFOCUS, sHOVER);
tb_framerate.register();
draw_set_text(f_p1, fa_left, fa_center, COLORS._main_text);
draw_text(dialog_x + ui(32), yy + ui(17), __txtx("anim_frame_rate", "Preview frame rate"));
tb_framerate.draw(dialog_x + dialog_w - ui(120), yy, ui(96), TEXTBOX_HEIGHT, ANIMATOR.framerate, mouse_ui);
tb_framerate.draw(dialog_x + dialog_w - ui(120), yy, ui(96), TEXTBOX_HEIGHT, PROJECT.animator.framerate, mouse_ui);
yy += ui(44);
eb_playback.setFocusHover(sFOCUS, sHOVER);
eb_playback.register();
draw_set_text(f_p1, fa_left, fa_center, COLORS._main_text);
draw_text(dialog_x + ui(32), yy + ui(17), __txtx("anim_on_end", "On end"));
eb_playback.draw(dialog_x + dialog_w - ui(152), yy, ui(128), TEXTBOX_HEIGHT, ANIMATOR.playback, mouse_ui);
eb_playback.draw(dialog_x + dialog_w - ui(152), yy, ui(128), TEXTBOX_HEIGHT, PROJECT.animator.playback, mouse_ui);
#endregion

View file

@ -2,6 +2,7 @@
event_inherited();
#region data
dialog_w = ui(400);
project = PROJECT;
dialog_w = ui(440);
dialog_h = ui(140);
#endregion

View file

@ -1,10 +1,20 @@
/// @description init
if !ready exit;
draw_set_color(c_black);
draw_set_alpha(0.5);
draw_rectangle(0, 0, WIN_W, WIN_H, false);
draw_set_alpha(1);
#region dim BG
var lowest = true;
with(o_dialog_exit) {
if(id == other.id) continue;
if(depth > other.depth) lowest = false;
}
if(lowest) {
draw_set_color(c_black);
draw_set_alpha(0.5);
draw_rectangle(0, 0, WIN_W, WIN_H, false);
draw_set_alpha(1);
}
#endregion
#region base UI
draw_sprite_stretched(THEME.dialog_bg, 0, dialog_x, dialog_y, dialog_w, dialog_h);
@ -13,13 +23,15 @@ draw_set_alpha(1);
#endregion
#region text
var py = dialog_y + ui(16);
var py = dialog_y + ui(16);
var txt = $"Project modified";
draw_set_text(f_h5, fa_left, fa_top, COLORS._main_text);
draw_text(dialog_x + ui(24), py, __txtx("dialog_exit_title", "Project modified"));
draw_text(dialog_x + ui(24), py, txt);
py += line_get_height(, 4);
draw_set_text(f_p0, fa_left, fa_top, COLORS._main_text);
draw_text(dialog_x + ui(24), py, __txtx("dialog_exit_content", "Save progress before exit?"));
var txt = $"Save project '{filename_name(project.path)}' before exit?";
draw_text(dialog_x + ui(24), py, txt);
var bw = ui(96), bh = TEXTBOX_HEIGHT;
var bx1 = dialog_x + dialog_w - ui(16);
@ -38,14 +50,19 @@ draw_set_alpha(1);
draw_text(bx0 + bw / 2, by0 + bh / 2, __txtx("dont_save", "Don't save"));
if(b == 2) {
PREF_SAVE();
game_end();
if(instance_number(o_dialog_exit) == 1)
game_end();
instance_destroy();
}
bx0 -= bw + ui(12);
var b = buttonInstant(THEME.button, bx0, by0, bw, bh, mouse_ui, sFOCUS, sHOVER);
draw_text(bx0 + bw / 2, by0 + bh / 2, __txt("Save"));
if(b == 2 && SAVE()) {
if(b == 2 && SAVE(project)) {
PREF_SAVE();
game_end();
if(instance_number(o_dialog_exit) == 1)
game_end();
instance_destroy();
}
#endregion

View file

@ -2,10 +2,7 @@
event_inherited();
#region data
newFile = false;
path = "";
readonly = false;
safe_mode = false;
project = noone;
dialog_w = ui(400);
dialog_h = ui(140);

View file

@ -19,7 +19,7 @@ draw_set_alpha(1);
py += line_get_height(, 4);
draw_set_text(f_p0, fa_left, fa_top, COLORS._main_text);
draw_text(dialog_x + ui(24), py, __txtx("dialog_exit_content", "Save progress before exit?"));
draw_text(dialog_x + ui(24), py, __txtx("dialog_exit_content", "Save progress before close?"));
var bw = ui(96), bh = TEXTBOX_HEIGHT;
var bx1 = dialog_x + dialog_w - ui(16);
@ -37,8 +37,7 @@ draw_set_alpha(1);
var b = buttonInstant(THEME.button, bx0, by0, bw, bh, mouse_ui, sFOCUS, sHOVER);
draw_text(bx0 + bw / 2, by0 + bh / 2, __txtx("dont_save", "Don't save"));
if(b == 2) {
if(newFile) __NEW();
else __LOAD_PATH(path, readonly, safe_mode);
closeProject(project);
instance_destroy();
}
@ -46,10 +45,8 @@ draw_set_alpha(1);
var b = buttonInstant(THEME.button, bx0, by0, bw, bh, mouse_ui, sFOCUS, sHOVER);
draw_text(bx0 + bw / 2, by0 + bh / 2, __txt("Save"));
if(b == 2) {
SAVE();
if(newFile) __NEW();
else __LOAD_PATH(path, readonly, safe_mode);
SAVE(project);
closeProject(project);
instance_destroy();
}
#endregion

View file

@ -1,7 +1,7 @@
{
"resourceType": "GMObject",
"resourceVersion": "1.0",
"name": "o_dialog_load",
"name": "o_dialog_save",
"eventList": [
{"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":64,"eventType":8,"isDnD":false,},
{"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,},

View file

@ -14,12 +14,12 @@ event_inherited();
tunnel_select = noone;
tunnel_hover = noone;
var amo = ds_map_size(NODE_MAP);
var k = ds_map_find_first(NODE_MAP);
var amo = ds_map_size(PROJECT.nodeMap);
var k = ds_map_find_first(PROJECT.nodeMap);
repeat(amo) {
var node = NODE_MAP[? k];
k = ds_map_find_next(NODE_MAP, k);
var node = PROJECT.nodeMap[? k];
k = ds_map_find_next(PROJECT.nodeMap, k);
if(instanceof(node) == "Node_Tunnel_In")
array_push(tunnel_ins, node);
@ -112,10 +112,10 @@ event_inherited();
k = ds_map_find_next(TUNNELS_OUT, k);
var out = TUNNELS_OUT[? _k];
if(out != key || !ds_map_exists(NODE_MAP, _k))
if(out != key || !ds_map_exists(PROJECT.nodeMap, _k))
continue;
var _node = NODE_MAP[? _k];
var _node = PROJECT.nodeMap[? _k];
draw_sprite_ui(THEME.tunnel, 0, ui(32), _y + ui(10), 0.75, 0.75, 0, COLORS._main_icon);
draw_set_text(f_p1, fa_left, fa_center, COLORS._main_text_sub);

View file

@ -60,6 +60,7 @@
if(!DEMO) {
addHotkey("", "Save", "S", MOD_KEY.ctrl, SAVE );
addHotkey("", "Save as", "S", MOD_KEY.ctrl | MOD_KEY.shift, SAVE_AS );
addHotkey("", "Save all", "S", MOD_KEY.ctrl | MOD_KEY.alt, SAVE_ALL );
addHotkey("", "Open", "O", MOD_KEY.ctrl, function() { LOAD(); });
}
@ -80,6 +81,9 @@
UPDATE |= RENDER_TYPE.full;
});
addHotkey("", "Close file", "Q", MOD_KEY.ctrl, function() { PANEL_GRAPH.close(); });
addHotkey("", "Close program", vk_f4, MOD_KEY.alt, window_close);
globalvar HOTKEY_MOD, HOTKEY_BLOCK;
HOTKEY_MOD = 0;
HOTKEY_BLOCK = false;

View file

@ -1,5 +1,5 @@
/// @description init
MODIFIED = false;
PROJECT.modified = false;
PREF_LOAD();
#region reset data

View file

@ -3,30 +3,30 @@ if(OS == os_windows && gameframe_is_minimized()) exit;
//print("===== Step start =====");
#region animation
if(ANIMATOR.is_playing && ANIMATOR.play_freeze == 0) {
ANIMATOR.time_since_last_frame += ANIMATOR.framerate * (delta_time / 1000000);
if(PROJECT.animator.is_playing && PROJECT.animator.play_freeze == 0) {
PROJECT.animator.time_since_last_frame += PROJECT.animator.framerate * (delta_time / 1000000);
if(ANIMATOR.time_since_last_frame >= 1)
ANIMATOR.setFrame(ANIMATOR.real_frame + 1);
if(PROJECT.animator.time_since_last_frame >= 1)
PROJECT.animator.setFrame(PROJECT.animator.real_frame + 1);
} else {
ANIMATOR.frame_progress = false;
ANIMATOR.setFrame(ANIMATOR.real_frame);
ANIMATOR.time_since_last_frame = 0;
PROJECT.animator.frame_progress = false;
PROJECT.animator.setFrame(PROJECT.animator.real_frame);
PROJECT.animator.time_since_last_frame = 0;
}
ANIMATOR.play_freeze = max(0, ANIMATOR.play_freeze - 1);
PROJECT.animator.play_freeze = max(0, PROJECT.animator.play_freeze - 1);
#endregion
#region step
GLOBAL_NODE.step();
PROJECT.globalNode.step();
try {
if(PANEL_MAIN != 0)
PANEL_MAIN.step();
for(var i = 0; i < ds_list_size(NODES); i++) {
NODES[| i].triggerCheck();
NODES[| i].step();
for(var i = 0; i < ds_list_size(PROJECT.nodes); i++) {
PROJECT.nodes[| i].triggerCheck();
PROJECT.nodes[| i].step();
}
} catch(e) {
noti_warning("Step error: " + exception_print(e));
@ -110,13 +110,13 @@ if(OS == os_windows && gameframe_is_minimized()) exit;
#endregion
#region window
if(_modified != MODIFIED) {
_modified = MODIFIED;
if(_modified != PROJECT.modified) {
_modified = PROJECT.modified;
var cap = "";
if(SAFE_MODE) cap += "[SAFE MODE] ";
if(READONLY) cap += "[READ ONLY] ";
cap += CURRENT_PATH + (MODIFIED? "*" : "") + " - Pixel Composer";
if(PROJECT.readonly) cap += "[READ ONLY] ";
cap += PROJECT.path + (PROJECT.modified? "*" : "") + " - Pixel Composer";
window_set_caption(cap);
}

View file

@ -51,13 +51,13 @@ _HOVERING_ELEMENT = noone;
#region auto save
AUTO_SAVE_TIMER += delta_time / 1_000_000;
if(MODIFIED && PREF_MAP[? "auto_save_time"] > 0 && AUTO_SAVE_TIMER > PREF_MAP[? "auto_save_time"]) {
if(PROJECT.modified && PREF_MAP[? "auto_save_time"] > 0 && AUTO_SAVE_TIMER > PREF_MAP[? "auto_save_time"]) {
AUTO_SAVE_TIMER = 0;
var loc = DIRECTORY + "Autosave/";
if(!directory_exists(loc))
directory_create(loc);
var fname = string_replace(filename_name(CURRENT_PATH), filename_ext(CURRENT_PATH), "") +
var fname = string_replace(filename_name(PROJECT.path), filename_ext(PROJECT.path), "") +
"_autosave" + string(current_year) + "-" +
string_lead_zero(current_month, 2) + "-" +
string_lead_zero(current_day, 2) + "T" +
@ -65,7 +65,7 @@ _HOVERING_ELEMENT = noone;
string_lead_zero(current_minute, 2) +
string_lead_zero(current_second, 2) + ".pxc";
try { SAVE_AT(loc + fname, "Autosaved "); }
try { SAVE_AT(PROJECT, loc + fname, "Autosaved "); }
catch(e) { print(exception_print(e)); }
}
#endregion
@ -74,20 +74,20 @@ _HOVERING_ELEMENT = noone;
//physics_pause_enable(true);
DEF_SURFACE_RESET();
var _k = ds_map_find_first(NODE_MAP);
var _a = ds_map_size(NODE_MAP);
var _k = ds_map_find_first(PROJECT.nodeMap);
var _a = ds_map_size(PROJECT.nodeMap);
repeat(_a) {
NODE_MAP[? _k].stepBegin();
_k = ds_map_find_next(NODE_MAP, _k);
PROJECT.nodeMap[? _k].stepBegin();
_k = ds_map_find_next(PROJECT.nodeMap, _k);
}
if(ANIMATOR.is_playing || ANIMATOR.rendering) {
if(ANIMATOR.frame_progress) {
if(PROJECT.animator.is_playing || PROJECT.animator.rendering) {
if(PROJECT.animator.frame_progress) {
__addon_preAnim();
Render();
__addon_postAnim();
}
ANIMATOR.frame_progress = false;
PROJECT.animator.frame_progress = false;
} else {
if(UPDATE & RENDER_TYPE.full)
Render();

View file

@ -313,9 +313,9 @@ Project.fps = 0;
function lua_projectData(state) {
lua_add_code(state, @"
Project.frame = " + string(ANIMATOR.current_frame) + @";
Project.frameTotal = " + string(ANIMATOR.frames_total) + @";
Project.fps = " + string(ANIMATOR.framerate) + @";
Project.frame = " + string(PROJECT.animator.current_frame) + @";
Project.frameTotal = " + string(PROJECT.animator.frames_total) + @";
Project.fps = " + string(PROJECT.animator.framerate) + @";
");
}

View file

@ -11,7 +11,7 @@ function __Node_Base(x, y) constructor {
anim_priority = -999;
static step = function() {}
static update = function(frame = ANIMATOR.current_frame) {}
static update = function(frame = PROJECT.animator.current_frame) {}
static valueUpdate = function(index) {}
static triggerRender = function() {}

View file

@ -27,7 +27,7 @@ function Node_Iterator(_x, _y, _group = noone) : Node_Collection(_x, _y, _group)
static doInitLoop = function() {}
static update = function(frame = ANIMATOR.current_frame) { initLoop(); }
static update = function(frame = PROJECT.animator.current_frame) { initLoop(); }
static outputNextNode = function() {
LOG_BLOCK_START();

View file

@ -128,7 +128,7 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co
for(var i = 0; i < attributes.part_amount; i++)
parts[i] = new __part(self);
static spawn = function(_time = ANIMATOR.current_frame, _pos = -1) {
static spawn = function(_time = PROJECT.animator.current_frame, _pos = -1) {
var _inSurf = current_data[0];
if(_inSurf == 0) {
@ -295,7 +295,7 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co
var _loop = inputs[| 21].getValue();
if(!_loop) return;
for(var i = 0; i < ANIMATOR.frames_total; i++) {
for(var i = 0; i < PROJECT.animator.frames_total; i++) {
runVFX(i, false);
updateParticleForward();
}
@ -315,7 +315,7 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co
}
}
static runVFX = function(_time = ANIMATOR.current_frame, _render = true) {
static runVFX = function(_time = PROJECT.animator.current_frame, _render = true) {
var _spawn_delay = inputs[| 1].getValue(_time);
var _spawn_type = inputs[| 16].getValue(_time);
var _spawn_active = inputs[| 27].getValue(_time);
@ -357,7 +357,7 @@ function Node_VFX_Spawner_Base(_x, _y, _group = noone) : Node(_x, _y, _group) co
static onDrawOverlay = -1;
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _inSurf = inputs[| 0].getValue();
var _dist = inputs[| 4].getValue();
var _scatt = inputs[| 24].getValue();

View file

@ -2,7 +2,7 @@ function Node_Fluid(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
color = COLORS.node_blend_fluid;
icon = THEME.fluid_sim;
static updateForward = function(frame = ANIMATOR.current_frame, _update = true) {
static updateForward = function(frame = PROJECT.animator.current_frame, _update = true) {
if(_update) update(frame);
print("Update " + string(frame) + ": " + name);

View file

@ -147,7 +147,7 @@ function _Node_Strand_Affector(_x, _y, _group = noone) : Node(_x, _y, _group) co
active &= inputs[| 3].drawOverlay(active, px, py, _s, _mx, _my, _snx, _sny, 0, 1, THEME.anchor_scale_hori);
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _typ = inputs[| 1].getValue();
inputs[| 4].setVisible(_typ == 1);

View file

@ -785,12 +785,12 @@
[ "noti_warning", noti_warning ],
//animation
[ "animation_playing", function() { return ANIMATOR.is_playing? lua_true : lua_false; }],
[ "animation_play", function() { ANIMATOR.resume(); }],
[ "animation_pause", function() { ANIMATOR.pause(); }],
[ "animation_stop", function() { ANIMATOR.stop(); }],
[ "animation_set_frame", function(frame) { ANIMATOR.setFrame(frame); }],
[ "animation_render", function() { ANIMATOR.render(); }],
[ "animation_playing", function() { return PROJECT.animator.is_playing? lua_true : lua_false; }],
[ "animation_play", function() { PROJECT.animator.resume(); }],
[ "animation_pause", function() { PROJECT.animator.pause(); }],
[ "animation_stop", function() { PROJECT.animator.stop(); }],
[ "animation_set_frame", function(frame) { PROJECT.animator.setFrame(frame); }],
[ "animation_render", function() { PROJECT.animator.render(); }],
//panel
[ "set_tooltip", function(txt) { TOOLTIP = txt; }],
@ -817,29 +817,29 @@
//nodes
[ "node_get", function(nodeId) {
if(!ds_map_exists(NODE_NAME_MAP, nodeId)) return 0;
return NODE_NAME_MAP[? nodeId];
if(!ds_map_exists(PROJECT.nodeNameMap, nodeId)) return 0;
return PROJECT.nodeNameMap[? nodeId];
}],
[ "node_get_input_value", function(nodeId, input) {
if(!ds_map_exists(NODE_NAME_MAP, nodeId)) return 0;
var node = NODE_NAME_MAP[? nodeId];
if(!ds_map_exists(PROJECT.nodeNameMap, nodeId)) return 0;
var node = PROJECT.nodeNameMap[? nodeId];
if(!ds_map_exists(node.inputMap, input)) return 0;
return node.inputMap[? input].getValue();
}],
[ "node_set_input_value", function(nodeId, input, value) {
if(!ds_map_exists(NODE_NAME_MAP, nodeId)) return 0;
var node = NODE_NAME_MAP[? nodeId];
if(!ds_map_exists(PROJECT.nodeNameMap, nodeId)) return 0;
var node = PROJECT.nodeNameMap[? nodeId];
if(!ds_map_exists(node.inputMap, input)) return 0;
return node.inputMap[? input].setValue(value);
}],
[ "node_get_output_value", function(nodeId, input) {
if(!ds_map_exists(NODE_NAME_MAP, nodeId)) return 0;
var node = NODE_NAME_MAP[? nodeId];
if(!ds_map_exists(PROJECT.nodeNameMap, nodeId)) return 0;
var node = PROJECT.nodeNameMap[? nodeId];
if(!ds_map_exists(node.outputMap, input)) return 0;
return node.outputMap[? input].getValue();

View file

@ -155,8 +155,8 @@ function __addon_lua_panel_variable(lua, panel) {
);
lua_add_code(lua,
"Animator.frame_current = " + string(ANIMATOR.current_frame) + "\n" +
"Animator.frame_total = " + string(ANIMATOR.frames_total) + "\n" +
"Animator.frame_rate = " + string(ANIMATOR.framerate) + "\n"
"Animator.frame_current = " + string(PROJECT.animator.current_frame) + "\n" +
"Animator.frame_total = " + string(PROJECT.animator.frames_total) + "\n" +
"Animator.frame_rate = " + string(PROJECT.animator.framerate) + "\n"
);
}

View file

@ -1,5 +1,10 @@
#region global
global.FLAG.keyframe_override = true;
enum ANIMATOR_END {
loop,
stop
}
#endregion
#region animation class
@ -45,13 +50,13 @@
}
static resetAnimation = function() {
var _key = ds_map_find_first(NODE_MAP);
var amo = ds_map_size(NODE_MAP);
var _key = ds_map_find_first(PROJECT.nodeMap);
var amo = ds_map_size(PROJECT.nodeMap);
repeat(amo) {
var _node = NODE_MAP[? _key];
var _node = PROJECT.nodeMap[? _key];
_node.resetAnimation();
_key = ds_map_find_next(NODE_MAP, _key);
_key = ds_map_find_next(PROJECT.nodeMap, _key);
}
}
@ -63,23 +68,23 @@
}
static toggle = function() {
ANIMATOR.is_playing = !ANIMATOR.is_playing;
ANIMATOR.frame_progress = true;
is_playing = !is_playing;
frame_progress = true;
}
static pause = function() {
ANIMATOR.is_playing = false;
ANIMATOR.frame_progress = true;
is_playing = false;
frame_progress = true;
}
static play = function() {
ANIMATOR.is_playing = true;
ANIMATOR.frame_progress = true;
is_playing = true;
frame_progress = true;
}
static resume = function() {
ANIMATOR.is_playing = true;
ANIMATOR.frame_progress = true;
is_playing = true;
frame_progress = true;
}
static stop = function() {
@ -87,14 +92,4 @@
setFrame(0);
}
}
#endregion
#region object
enum ANIMATOR_END {
loop,
stop
}
globalvar ANIMATOR;
ANIMATOR = new AnimationManager();
#endregion

View file

@ -21,9 +21,9 @@ function __APPEND_MAP(_map, context = PANEL_GRAPH.getCurrentContext()) {
if(struct_has(_map, "version")) {
var _v = _map.version;
LOADING_VERSION = _v;
if(_v != SAVEFILE_VERSION) {
var warn = "File version mismatch : loading file verion " + string(_v) + " to Pixel Composer " + string(SAVEFILE_VERSION);
PROJECT.version = _v;
if(_v != SAVE_VERSION) {
var warn = "File version mismatch : loading file verion " + string(_v) + " to Pixel Composer " + string(SAVE_VERSION);
log_warning("FILE", warn)
}
}

View file

@ -69,7 +69,7 @@ function ase_layer(name) constructor {
cels[index] = cel;
}
static getCel = function(index = ANIMATOR.current_frame) {
static getCel = function(index = PROJECT.animator.current_frame) {
var ind;
if(tag != noone) {

View file

@ -74,7 +74,7 @@ function exception_print(e) {
function setException() {
exception_unhandled_handler(function(ex) {
var path = string(DIRECTORY) + "prev_crash.pxc";
if(!SAVING && !TESTING) SAVE_AT(path);
if(!SAVING && !TESTING) SAVE_AT(PROJECT, path);
var tt = "\n-------------------------- OH NO --------------------------\n\n";
tt += "\n" + ex.longMessage;

View file

@ -1,25 +1,47 @@
#region save
globalvar LOADING, LOADING_VERSION, APPENDING, CLONING, SAFE_MODE;
globalvar LOAD_ADDON;
globalvar MODIFIED, CURRENT_PATH, READONLY, CONNECTION_CONFLICT, GLOBAL_SEED, ALWAYS_FULL;
globalvar LOADING, APPENDING, CLONING, SAFE_MODE;
globalvar CONNECTION_CONFLICT, ALWAYS_FULL;
LOADING = false;
LOAD_ADDON = {};
CLONING = false;
LOADING_VERSION = 0;
APPENDING = false;
READONLY = false;
SAFE_MODE = false;
LOADING = false;
CLONING = false;
APPENDING = false;
SAFE_MODE = false;
CURRENT_PATH = "";
MODIFIED = false;
CONNECTION_CONFLICT = ds_queue_create();
randomize();
GLOBAL_SEED = irandom(9999999999);
ALWAYS_FULL = false;
#endregion
#region project
function Project() constructor {
path = "";
version = 1440;
seed = irandom_range(100000, 999999);
modified = false;
readonly = false;
nodes = ds_list_create();
nodeMap = ds_map_create();
nodeNameMap = ds_map_create();
animator = new AnimationManager();
globalNode = new Node_Global();
addons = {};
}
globalvar PROJECTS, PROJECT;
gml_pragma("global", "__init()");
function __init() {
PROJECTS = [];
PROJECT = new Project();
}
#endregion
#region main
globalvar OS, DEBUG, THEME, COLOR_KEYS;
OS = os_type;
@ -29,22 +51,17 @@
THEME = new Theme();
COLOR_KEYS = [];
globalvar VERSION, SAVEFILE_VERSION, VERSION_STRING, BUILD_NUMBER;
globalvar VERSION, SAVE_VERSION, VERSION_STRING, BUILD_NUMBER;
VERSION = 1146;
SAVEFILE_VERSION = 1440;
VERSION_STRING = "1.14.6";
BUILD_NUMBER = 114600;
VERSION = 1146;
SAVE_VERSION = 1440;
VERSION_STRING = "1.14.6n1";
BUILD_NUMBER = 114600;
globalvar NODES, NODE_MAP, APPEND_MAP, NODE_NAME_MAP;
globalvar HOTKEYS, HOTKEY_CONTEXT, NODE_INSTANCES;
NODES = ds_list_create();
NODE_INSTANCES = ds_list_create();
NODE_MAP = ds_map_create();
NODE_NAME_MAP = ds_map_create();
globalvar APPEND_MAP;
APPEND_MAP = ds_map_create();
globalvar HOTKEYS, HOTKEY_CONTEXT;
HOTKEYS = ds_map_create();
HOTKEY_CONTEXT = ds_list_create();
HOTKEY_CONTEXT[| 0] = "";
@ -56,9 +73,8 @@
#region inputs
globalvar FOCUS, FOCUS_STR, HOVER, HOVERING_ELEMENT, _HOVERING_ELEMENT;
globalvar DOUBLE_CLICK;
globalvar CURRENT_PATH, DIALOG_CLICK;
globalvar DIALOG_CLICK;
CURRENT_PATH = "";
DOUBLE_CLICK = false;
FOCUS = noone;
FOCUS_STR = "";
@ -131,7 +147,7 @@
#macro printlog if(log) show_debug_message
#macro RETURN_ON_REST if(!ANIMATOR.is_playing || !ANIMATOR.frame_progress) return;
#macro RETURN_ON_REST if(!PROJECT.animator.is_playing || !PROJECT.animator.frame_progress) return;
#macro PANEL_PAD THEME_VALUE.panel_padding

View file

@ -9,7 +9,7 @@ function globalvar_viewer_draw(xx, yy, ww, _m, focus, hover, _scrollPane, rx, ry
if(var_editing) {
var del = noone;
if(ds_list_size(GLOBAL_NODE.inputs)) {
if(ds_list_size(PROJECT.globalNode.inputs)) {
yy += ui(8);
hh += ui(8);
}
@ -17,8 +17,8 @@ function globalvar_viewer_draw(xx, yy, ww, _m, focus, hover, _scrollPane, rx, ry
var wd_x = xx;
var wd_w = ww;
for( var j = 0; j < ds_list_size(GLOBAL_NODE.inputs); j++ ) {
var _inpu = GLOBAL_NODE.inputs[| j];
for( var j = 0; j < ds_list_size(PROJECT.globalNode.inputs); j++ ) {
var _inpu = PROJECT.globalNode.inputs[| j];
var _edit = _inpu.editor;
var wd_h = ui(32);
@ -53,15 +53,15 @@ function globalvar_viewer_draw(xx, yy, ww, _m, focus, hover, _scrollPane, rx, ry
}
if(del != noone)
ds_list_delete(GLOBAL_NODE.inputs, del);
ds_list_delete(PROJECT.globalNode.inputs, del);
} else {
for( var j = 0; j < ds_list_size(GLOBAL_NODE.inputs); j++ ) {
var widg = drawWidget(xx, yy, ww, _m, GLOBAL_NODE.inputs[| j], true, focus, hover, _scrollPane, rx, ry);
for( var j = 0; j < ds_list_size(PROJECT.globalNode.inputs); j++ ) {
var widg = drawWidget(xx, yy, ww, _m, PROJECT.globalNode.inputs[| j], true, focus, hover, _scrollPane, rx, ry);
var widH = widg[0];
var mbRight = widg[1];
if(hover && point_in_rectangle(_m[0], _m[1], xx, yy, xx + ww, yy + widH))
_HOVERING_ELEMENT = GLOBAL_NODE.inputs[| j];
_HOVERING_ELEMENT = PROJECT.globalNode.inputs[| j];
yy += lb_h + widH + padd;
hh += lb_h + widH + padd;

View file

@ -1,17 +1,13 @@
function LOAD() {
function LOAD() {
if(DEMO) return false;
var path = get_open_filename("Pixel Composer project (.pxc)|*.pxc", "");
var path = get_open_filename("Pixel Composer PROJECT (.pxc)|*.pxc", "");
key_release();
if(path == "") return;
if(filename_ext(path) != ".json" && filename_ext(path) != ".pxc") return;
gc_collect();
LOAD_PATH(path);
ds_list_clear(STATUSES);
ds_list_clear(WARNING);
ds_list_clear(ERRORS);
}
function TEST_PATH(path) {
@ -21,16 +17,25 @@ function TEST_PATH(path) {
}
function LOAD_PATH(path, readonly = false, safe_mode = false) {
if(MODIFIED && !READONLY) {
var dia = dialogCall(o_dialog_load);
dia.path = path;
dia.readonly = readonly;
dia.safe_mode = safe_mode;
} else
__LOAD_PATH(path, readonly, safe_mode);
var _PROJECT = PROJECT;
PROJECT = new Project();
if(PANEL_GRAPH.project.path == "" && !PANEL_GRAPH.project.modified) {
PANEL_GRAPH.setProject(PROJECT);
} else {
var graph = new Panel_Graph(PROJECT);
PANEL_GRAPH.panel.setContent(graph, true);
PANEL_GRAPH = graph;
}
var res = __LOAD_PATH(path, readonly, safe_mode);
if(!res) return;
array_push(PROJECTS, PROJECT);
PANEL_ANIMATION.updatePropertyList();
setFocus(PANEL_GRAPH.panel);
}
function __LOAD_PATH(path, readonly = false, safe_mode = false) {
function __LOAD_PATH(path, readonly = false, safe_mode = false, override = false) {
SAFE_MODE = safe_mode;
if(DEMO) return false;
@ -41,43 +46,47 @@ function __LOAD_PATH(path, readonly = false, safe_mode = false) {
}
if(filename_ext(path) != ".json" && filename_ext(path) != ".pxc") {
log_warning("LOAD", "File not a valid project");
log_warning("LOAD", "File not a valid PROJECT");
return false;
}
LOADING = true;
nodeCleanUp();
clearPanel();
setPanel();
if(!TESTING)
instance_destroy(_p_dialog);
ds_list_clear(ERRORS);
var temp_path = DIRECTORY + "_temp";
if(file_exists(temp_path)) file_delete(temp_path);
file_copy(path, temp_path);
if(override) {
nodeCleanUp();
clearPanel();
setPanel();
if(!TESTING)
instance_destroy(_p_dialog);
ds_list_clear(ERRORS);
}
ALWAYS_FULL = false;
READONLY = readonly;
SET_PATH(path);
var temp_path = DIRECTORY + "temp";
if(!directory_exists(temp_path))
directory_create(temp_path);
var _load_content = json_load_struct(temp_path);
var temp_file_path = temp_path + "/" + string(UUID_generate(6));
if(file_exists(temp_file_path)) file_delete(temp_file_path);
file_copy(path, temp_file_path);
//ALWAYS_FULL = false;
PROJECT.readonly = readonly;
SET_PATH(PROJECT, path);
var _load_content = json_load_struct(temp_file_path);
if(struct_has(_load_content, "version")) {
var _v = _load_content.version;
LOADING_VERSION = _v;
if(_v != SAVEFILE_VERSION) {
var warn = "File version mismatch : loading file verion " + string(_v) + " to Pixel Composer " + string(SAVEFILE_VERSION);
PROJECT.version = _v;
if(_v != SAVE_VERSION) {
var warn = $"File version mismatch : loading file verion {_v} to Pixel Composer {SAVE_VERSION}";
log_warning("LOAD", warn);
}
} else {
var warn = "File version mismatch : loading old format to Pixel Composer " + string(SAVEFILE_VERSION);
var warn = $"File version mismatch : loading old format to Pixel Composer {string(SAVE_VERSION)}";
log_warning("LOAD", warn);
}
nodeCleanUp();
var create_list = ds_list_create();
if(struct_has(_load_content, "nodes")) {
try {
@ -93,9 +102,9 @@ function __LOAD_PATH(path, readonly = false, safe_mode = false) {
try {
if(struct_has(_load_content, "animator")) {
var _anim_map = _load_content.animator;
ANIMATOR.frames_total = _anim_map.frames_total;
ANIMATOR.framerate = _anim_map.framerate;
var _anim_map = _load_content.animator;
PROJECT.animator.frames_total = _anim_map.frames_total;
PROJECT.animator.framerate = _anim_map.framerate;
}
} catch(e) {
log_warning("LOAD, animator", exception_print(e));
@ -108,12 +117,12 @@ function __LOAD_PATH(path, readonly = false, safe_mode = false) {
log_warning("LOAD, metadata", exception_print(e));
}
GLOBAL_NODE = new Node_Global();
PROJECT.globalNode = new Node_Global();
try {
if(struct_has(_load_content, "global"))
GLOBAL_NODE.deserialize(_load_content.global);
PROJECT.globalNode.deserialize(_load_content.global);
else if(struct_has(_load_content, "global_node"))
GLOBAL_NODE.deserialize(_load_content.global_node);
PROJECT.globalNode.deserialize(_load_content.global_node);
} catch(e) {
log_warning("LOAD, global", exception_print(e));
}
@ -121,10 +130,10 @@ function __LOAD_PATH(path, readonly = false, safe_mode = false) {
try {
if(struct_has(_load_content, "addon")) {
var _addon = _load_content.addon;
LOAD_ADDON = _addon;
PROJECT.addons = _addon;
struct_foreach(_addon, function(_name, _value) { addonLoad(_name, false); });
} else
LOAD_ADDON = {};
PROJECT.addons = {};
} catch(e) {
log_warning("LOAD, addon", exception_print(e));
}
@ -199,9 +208,7 @@ function __LOAD_PATH(path, readonly = false, safe_mode = false) {
Render();
LOADING = false;
MODIFIED = false;
PANEL_ANIMATION.updatePropertyList();
PROJECT.modified = false;
log_message("FILE", "load " + path, THEME.noti_icon_file_load);
PANEL_MENU.setNotiIcon(THEME.noti_icon_file_load);

View file

@ -5,7 +5,7 @@
"isCompatibility": false,
"isDnD": false,
"parent": {
"name": "files",
"path": "folders/functions/files.yy",
"name": "project",
"path": "folders/functions/project.yy",
},
}

View file

@ -87,7 +87,7 @@ function MetaDataManager() constructor {
}
var _aut = __txt("By") + " " + author;
var _ver = version < SAVEFILE_VERSION? __txtx("meta_old_version", "Created on an older version") : __txtx("meta_new_version", "Created on a newer version");
var _ver = version < SAVE_VERSION? __txtx("meta_old_version", "Created on an older version") : __txtx("meta_new_version", "Created on a newer version");
draw_set_font(f_h5);
_h += string_height_ext(name, -1, ww) - ui(4);
@ -116,7 +116,7 @@ function MetaDataManager() constructor {
_w = max(_w, string_width_ext(alias, -1, ww));
}
if(version != SAVEFILE_VERSION) {
if(version != SAVE_VERSION) {
draw_set_font(f_p2);
_h += ui(8);
_h += string_height_ext(_ver, -1, ww);
@ -177,7 +177,7 @@ function MetaDataManager() constructor {
ty += string_height_ext(alias, -1, _w);
}
if(version != SAVEFILE_VERSION) {
if(version != SAVE_VERSION) {
ty += ui(8);
draw_set_text(f_p2, fa_left, fa_top, COLORS._main_accent);
draw_text_line(mx + ui(8), ty, _ver, -1, _w);

View file

@ -99,8 +99,8 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc
if(buttonInstant(THEME.button_hide, bx - ui(12), by - ui(12), ui(24), ui(24), _m, _focus, _hover, "", THEME.prop_keyframe, 2) == 2) {
for(var j = 0; j < ds_list_size(jun.animator.values); j++) {
var _key = jun.animator.values[| j];
if(_key.time > ANIMATOR.current_frame) {
ANIMATOR.setFrame(_key.time);
if(_key.time > PROJECT.animator.current_frame) {
PROJECT.animator.setFrame(_key.time);
break;
}
}
@ -110,7 +110,7 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc
var cc = COLORS.panel_animation_keyframe_unselected;
var kfFocus = false;
for(var j = 0; j < ds_list_size(jun.animator.values); j++) {
if(jun.animator.values[| j].time == ANIMATOR.current_frame) {
if(jun.animator.values[| j].time == PROJECT.animator.current_frame) {
cc = COLORS.panel_animation_keyframe_selected;
kfFocus = true;
break;
@ -122,18 +122,18 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc
var _add = false;
for(var j = 0; j < ds_list_size(jun.animator.values); j++) {
var _key = jun.animator.values[| j];
if(_key.time == ANIMATOR.current_frame) {
if(_key.time == PROJECT.animator.current_frame) {
if(ds_list_size(jun.animator.values) > 1)
ds_list_delete(jun.animator.values, j);
_add = true;
break;
} else if(_key.time > ANIMATOR.current_frame) {
ds_list_insert(jun.animator.values, j, new valueKey(ANIMATOR.current_frame, jun.showValue(), jun.animator));
} else if(_key.time > PROJECT.animator.current_frame) {
ds_list_insert(jun.animator.values, j, new valueKey(PROJECT.animator.current_frame, jun.showValue(), jun.animator));
_add = true;
break;
}
}
if(!_add) ds_list_add(jun.animator.values, new valueKey(ANIMATOR.current_frame, jun.showValue(), jun.animator));
if(!_add) ds_list_add(jun.animator.values, new valueKey(PROJECT.animator.current_frame, jun.showValue(), jun.animator));
}
bx -= ui(26);
@ -141,10 +141,10 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc
var _t = -1;
for(var j = 0; j < ds_list_size(jun.animator.values); j++) {
var _key = jun.animator.values[| j];
if(_key.time < ANIMATOR.current_frame)
if(_key.time < PROJECT.animator.current_frame)
_t = _key.time;
}
if(_t > -1) ANIMATOR.setFrame(_t);
if(_t > -1) PROJECT.animator.setFrame(_t);
}
var lhf = lb_h / 2 - 4;

View file

@ -147,7 +147,7 @@ function Node_3D_Combine(_x, _y, _group = noone) : Node(_x, _y, _group) construc
_3d_clear_local_transform();
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _dim = inputs[| 0].getValue();
var _lpos = inputs[| 1].getValue();
var _lrot = inputs[| 2].getValue();

View file

@ -310,7 +310,7 @@ function Node_3D_Extrude(_x, _y, _group = noone) : Node_Processor(_x, _y, _group
case 2 : pass = "norm" break;
}
if(_upda && ANIMATOR.frame_progress)
if(_upda && PROJECT.animator.frame_progress)
generateMesh();
var _transform = new __3d_transform(_pos,, _sca, _lpos, _lrot, _lsca, false, _dimS );

View file

@ -215,7 +215,7 @@ function Node_3D_Obj(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
_3d_clear_local_transform();
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
if(!surface_exists(tex_surface)) reset_tex();
if(do_reset_material) {

View file

@ -170,7 +170,7 @@
// _3d_clear_local_transform();
// }
// static update = function(frame = ANIMATOR.current_frame) {
// static update = function(frame = PROJECT.animator.current_frame) {
// if(!surface_exists(tex_surface)) reset_tex();
// if(do_reset_material) {

View file

@ -162,7 +162,7 @@ function Node_3D_Repeat(_x, _y, _group = noone) : Node(_x, _y, _group) construct
inputs[| 21].setVisible(_proj);
}
function update(frame = ANIMATOR.current_frame) {
function update(frame = PROJECT.animator.current_frame) {
var _dim = inputs[| 0].getValue();
var _lpos = inputs[| 1].getValue();
var _lrot = inputs[| 2].getValue();

View file

@ -141,7 +141,7 @@ function Node_VFX_effector(_x, _y, _group = noone) : Node(_x, _y, _group) constr
onAffect(part, str);
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var val = inputs[| 0].getValue();
outputs[| 0].setValue(val);
if(val == -1) return;

View file

@ -29,7 +29,7 @@ function Node_VFX_Override(_x, _y, _group = noone) : Node(_x, _y, _group) constr
outputs[| 0] = nodeValue("Particles", self, JUNCTION_CONNECT.output, VALUE_TYPE.particle, -1 );
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var parts = inputs[| 0].getValue();
if(!is_array(parts)) return;

View file

@ -68,8 +68,8 @@ function Node_VFX_Renderer(_x, _y, _group = noone) : Node(_x, _y, _group) constr
outputs[| 0].setValue(_outSurf);
}
function update(_time = ANIMATOR.current_frame) {
if(!ANIMATOR.is_playing) {
function update(_time = PROJECT.animator.current_frame) {
if(!PROJECT.animator.is_playing) {
recoverCache();
return;
}

View file

@ -22,9 +22,9 @@ function Node_VFX_Spawner(_x, _y, _group = noone) : Node_VFX_Spawner_Base(_x, _y
static onUpdate = function() {
RETURN_ON_REST
if(ANIMATOR.current_frame == 0)
if(PROJECT.animator.current_frame == 0)
reset();
runVFX(ANIMATOR.current_frame);
runVFX(PROJECT.animator.current_frame);
if(attributes.Output_pool) {
outputs[| 0].setValue(parts);

View file

@ -44,7 +44,7 @@ function Node_VFX_Variable(_x, _y, _group = noone) : Node(_x, _y, _group) constr
.setDisplay(VALUE_DISPLAY.vector)
.setVisible(false);
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var parts = inputs[| 0].getValue();
if(!is_array(parts)) return;

View file

@ -5,12 +5,12 @@ function rearrange_priority(node, newpri) {
var down = prev > newpri;
node.anim_priority = newpri;
var amo = ds_map_size(NODE_MAP);
var k = ds_map_find_first(NODE_MAP);
var amo = ds_map_size(PROJECT.nodeMap);
var k = ds_map_find_first(PROJECT.nodeMap);
repeat(amo) {
var _node = NODE_MAP[? k];
k = ds_map_find_next(NODE_MAP, k);
var _node = PROJECT.nodeMap[? k];
k = ds_map_find_next(PROJECT.nodeMap, k);
if(!_node.active) continue;
if(_node == node) continue;

View file

@ -21,25 +21,25 @@ function Node_Animation_Control(_x, _y, _group = noone) : Node(_x, _y, _group) c
static step = function() {
if(inputs[| 0].getValue())
ANIMATOR.toggle();
PROJECT.animator.toggle();
if(inputs[| 1].getValue())
ANIMATOR.pause();
PROJECT.animator.pause();
if(inputs[| 2].getValue())
ANIMATOR.resume();
PROJECT.animator.resume();
if(inputs[| 3].getValue()) {
ANIMATOR.stop();
ANIMATOR.play();
PROJECT.animator.stop();
PROJECT.animator.play();
}
if(inputs[| 4].getValue())
ANIMATOR.render();
PROJECT.animator.render();
if(inputs[| 5].getValue()) {
var fr = inputs[| 6].getValue();
ANIMATOR.setFrame(ANIMATOR.current_frame + fr);
PROJECT.animator.setFrame(PROJECT.animator.current_frame + fr);
}
}
@ -47,7 +47,7 @@ function Node_Animation_Control(_x, _y, _group = noone) : Node(_x, _y, _group) c
var bbox = drawGetBbox(xx, yy, _s);
var ind = 0;
if(ANIMATOR.is_playing) ind = 1;
if(PROJECT.animator.is_playing) ind = 1;
draw_sprite_fit(THEME.sequence_control, ind, bbox.xc, bbox.yc, bbox.w, bbox.h);
}

View file

@ -370,7 +370,7 @@ function Node_Armature(_x, _y, _group = noone) : Node(_x, _y, _group) constructo
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
outputs[| 0].setValue(attributes.bones);
}

View file

@ -237,7 +237,7 @@ function Node_Armature_Pose(_x, _y, _group = noone) : Node(_x, _y, _group) const
if(_boneCount != _b.childCount()) setBone();
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _b = inputs[| 0].getValue();
if(_b == noone) return;

View file

@ -159,7 +159,7 @@ function Node_Array(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
refreshDynamicInput();
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _typ = getType();
outputs[| 0].type = _typ;

View file

@ -52,7 +52,7 @@ function Node_Array_Add(_x, _y, _group = noone) : Node(_x, _y, _group) construct
refreshDynamicInput();
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _arr = inputs[| 0].getValue();
if(inputs[| 0].value_from == noone) {

View file

@ -25,7 +25,7 @@ function Node_Array_Copy(_x, _y, _group = noone) : Node(_x, _y, _group) construc
outputs[| 0].type = _typ;
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _arr = inputs[| 0].getValue();
var _ind = inputs[| 1].getValue();
var _siz = inputs[| 2].getValue();

View file

@ -14,7 +14,7 @@ function Node_Array_CSV_Parse(_x, _y, _group = noone) : Node(_x, _y, _group) con
outputs[| 0] = nodeValue("Array", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, 0)
.setArrayDepth(1);
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _str = inputs[| 0].getValue();
var _skp = inputs[| 1].getValue();

View file

@ -15,7 +15,7 @@ function Node_Array_Find(_x, _y, _group = noone) : Node(_x, _y, _group) construc
outputs[| 0] = nodeValue("Index", self, JUNCTION_CONNECT.output, VALUE_TYPE.integer, 0);
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _arr = inputs[| 0].getValue();
inputs[| 0].type = VALUE_TYPE.any;

View file

@ -54,7 +54,7 @@ function Node_Array_Get(_x, _y, _group = noone) : Node(_x, _y, _group) construct
return array_safe_get(_arr, index);
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _arr = inputs[| 0].getValue();
if(!is_array(_arr)) return;

View file

@ -19,7 +19,7 @@ function Node_Array_Insert(_x, _y, _group = noone) : Node(_x, _y, _group) constr
outputs[| 0] = nodeValue("Array", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, 0);
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _arr = inputs[| 0].getValue();
inputs[| 0].type = VALUE_TYPE.any;

View file

@ -11,7 +11,7 @@ function Node_Array_Length(_x, _y, _group = noone) : Node(_x, _y, _group) constr
outputs[| 0] = nodeValue("Size", self, JUNCTION_CONNECT.output, VALUE_TYPE.integer, 0);
function update(frame = ANIMATOR.current_frame) {
function update(frame = PROJECT.animator.current_frame) {
var _arr = inputs[| 0].getValue();
inputs[| 0].type = inputs[| 0].value_from == noone? VALUE_TYPE.any : inputs[| 0].value_from.type;

View file

@ -15,7 +15,7 @@ function Node_Array_Range(_x, _y, _group = noone) : Node(_x, _y, _group) constru
outputs[| 0] = nodeValue("Array", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, []);
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var st = inputs[| 0].getValue();
var ed = inputs[| 1].getValue();
var step = inputs[| 2].getValue();

View file

@ -42,7 +42,7 @@ function Node_Array_Remove(_x, _y, _group = noone) : Node(_x, _y, _group) constr
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _arr = inputs[| 0].getValue();
if(!is_array(_arr)) return;

View file

@ -11,7 +11,7 @@ function Node_Array_Reverse(_x, _y, _group = noone) : Node(_x, _y, _group) const
outputs[| 0] = nodeValue("Array", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, 0);
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _arr = inputs[| 0].getValue();
inputs[| 0].type = VALUE_TYPE.any;

View file

@ -16,7 +16,7 @@ function Node_Array_Set(_x, _y, _group = noone) : Node(_x, _y, _group) construct
outputs[| 0] = nodeValue("Array", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, 0);
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _arr = inputs[| 0].getValue();
inputs[| 0].type = VALUE_TYPE.any;

View file

@ -13,7 +13,7 @@ function Node_Array_Shift(_x, _y, _group = noone) : Node(_x, _y, _group) constru
outputs[| 0] = nodeValue("Array", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, 0);
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _arr = inputs[| 0].getValue();
var _shf = inputs[| 1].getValue();

View file

@ -12,7 +12,7 @@ function Node_Array_Shuffle(_x, _y, _group = noone) : Node(_x, _y, _group) const
outputs[| 0] = nodeValue("Shuffled array", self, JUNCTION_CONNECT.output, VALUE_TYPE.any, []);
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var arr = inputs[| 0].getValue();
var sed = inputs[| 1].getValue();

View file

@ -18,7 +18,7 @@ function Node_Array_Sort(_x, _y, _group = noone) : Node(_x, _y, _group) construc
static sortAcs = function(v1, v2) { return v1[1] < v2[1]; }
static sortDes = function(v1, v2) { return v1[1] > v2[1]; }
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var arr = inputs[| 0].getValue();
var asc = inputs[| 1].getValue();

View file

@ -49,7 +49,7 @@ function Node_Array_Zip(_x, _y, _group = noone) : Node(_x, _y, _group) construct
refreshDynamicInput();
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _arr = inputs[| 0].getValue();
if(inputs[| 0].value_from == noone) {

View file

@ -120,7 +120,7 @@ function Node_ASE_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) const
var st = tag[? "Frame start"];
var ed = tag[? "Frame end"];
var rn = ed - st + 1;
var progFr = safe_mod(ANIMATOR.current_frame - _tag_delay, rn) + 1;
var progFr = safe_mod(PROJECT.animator.current_frame - _tag_delay, rn) + 1;
var prog = progFr / rn;
var txt = "";
@ -294,7 +294,7 @@ function Node_ASE_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) const
}
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var path = inputs[| 0].getValue();
var current_tag = inputs[| 2].getValue();
if(path_current != path) updatePaths(path);
@ -311,7 +311,7 @@ function Node_ASE_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) const
_tag_delay = 0;
for( var i = 0; i < ds_list_size(inputs[| 2].animator.values); i++ ) {
var kf = inputs[| 2].animator.values[| i];
if(kf.time > ANIMATOR.current_frame) break;
if(kf.time > PROJECT.animator.current_frame) break;
_tag_delay = kf.time;
}
@ -328,7 +328,7 @@ function Node_ASE_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) const
for( var i = 0; i < array_length(layers); i++ ) {
layers[i].tag = tag;
var cel = layers[i].getCel(ANIMATOR.current_frame - _tag_delay);
var cel = layers[i].getCel(PROJECT.animator.current_frame - _tag_delay);
if(!cel) continue;
if(!array_safe_get(vis, i, true)) continue;

View file

@ -34,7 +34,7 @@ function Node_ASE_layer(_x, _y, _group = noone) : Node(_x, _y, _group) construct
}
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var data = inputs[| 0].getValue();
if(data == noone) return;
@ -44,7 +44,7 @@ function Node_ASE_layer(_x, _y, _group = noone) : Node(_x, _y, _group) construct
}
if(layer_object == noone) return;
var cel = layer_object.getCel(ANIMATOR.current_frame - data._tag_delay);
var cel = layer_object.getCel(PROJECT.animator.current_frame - data._tag_delay);
var celDim = inputs[| 1].getValue();
var ww = data.content[? "Width"];

View file

@ -12,7 +12,7 @@ function Node_Atlas_Draw(_x, _y, _group = noone) : Node(_x, _y, _group) construc
attribute_interpolation(true);
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var dim = inputs[| 0].getValue();
var atl = inputs[| 1].getValue();

View file

@ -25,7 +25,7 @@ function Node_Atlas_Get(_x, _y, _group = noone) : Node(_x, _y, _group) construct
outputs[| 5] = nodeValue("Alpha", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, [])
.setArrayDepth(1);
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var atl = inputs[| 0].getValue();
if(atl == noone) return;

View file

@ -27,7 +27,7 @@ function Node_Atlas_Set(_x, _y, _group = noone) : Node(_x, _y, _group) construct
outputs[| 0] = nodeValue("Atlas", self, JUNCTION_CONNECT.output, VALUE_TYPE.atlas, noone);
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var atl = inputs[| 0].getValue();
if(atl == noone) return;

View file

@ -17,7 +17,7 @@ function Node_Audio_Window(_x, _y, _group = noone) : Node(_x, _y, _group) constr
outputs[| 0] = nodeValue("Windowed Array", self, JUNCTION_CONNECT.output, VALUE_TYPE.float, [])
.setArrayDepth(1);
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _arr = inputs[| 0].getValue();
if(!is_array(_arr) || array_length(_arr) < 1) return;
@ -26,7 +26,7 @@ function Node_Audio_Window(_x, _y, _group = noone) : Node(_x, _y, _group) constr
var sam = inputs[| 1].getValue();
var siz = inputs[| 2].getValue();
var res = [];
var off = frame / ANIMATOR.framerate * sam;
var off = frame / PROJECT.animator.framerate * sam;
for( var i = 0; i < array_length(_arr); i++ ) {
var _dat = _arr[i];

View file

@ -25,7 +25,7 @@ function Node_Cache(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
cache_result[cache_loading_progress] = true;
cache_loading_progress++;
if(cache_loading_progress == ANIMATOR.frames_total) {
if(cache_loading_progress == PROJECT.animator.frames_total) {
cache_loading = false;
update();
}

View file

@ -32,7 +32,7 @@ function Node_Cache_Array(_x, _y, _group = noone) : Node(_x, _y, _group) constru
cache_result[cache_loading_progress] = true;
cache_loading_progress++;
if(cache_loading_progress == ANIMATOR.frames_total) {
if(cache_loading_progress == PROJECT.animator.frames_total) {
cache_loading = false;
update();
}
@ -46,7 +46,7 @@ function Node_Cache_Array(_x, _y, _group = noone) : Node(_x, _y, _group) constru
var stp = inputs[| 3].getValue();
if(str == -1) str = 0;
if(lst == -1) lst = ANIMATOR.frames_total;
if(lst == -1) lst = PROJECT.animator.frames_total;
if(lst > str && stp > 0)
for( var i = str; i <= lst; i += stp ) {
@ -55,7 +55,7 @@ function Node_Cache_Array(_x, _y, _group = noone) : Node(_x, _y, _group) constru
}
outputs[| 0].setValue(ss);
if(!ANIMATOR.is_playing) return;
if(!PROJECT.animator.is_playing) return;
if(!inputs[| 0].value_from) return;
var _surf = inputs[| 0].getValue();

View file

@ -618,7 +618,7 @@ function Node_Canvas(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
}
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
apply_surface();
}

View file

@ -258,7 +258,7 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
static stepBegin = function() {
use_cache = false;
array_safe_set(cache_result, ANIMATOR.current_frame, true);
array_safe_set(cache_result, PROJECT.animator.current_frame, true);
var node_list = getNodeList();
for(var i = 0; i < ds_list_size(node_list); i++) {
@ -267,8 +267,8 @@ function Node_Collection(_x, _y, _group = noone) : Node(_x, _y, _group) construc
if(!n.use_cache) continue;
use_cache = true;
if(!array_safe_get(n.cache_result, ANIMATOR.current_frame))
array_safe_set(cache_result, ANIMATOR.current_frame, false);
if(!array_safe_get(n.cache_result, PROJECT.animator.current_frame))
array_safe_set(cache_result, PROJECT.animator.current_frame, false);
}
var out_surf = false;

View file

@ -54,7 +54,7 @@ function Node_Compare(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
return 0;
}
function update(frame = ANIMATOR.current_frame) {
function update(frame = PROJECT.animator.current_frame) {
var mode = inputs[| 0].getValue();
var a = inputs[| 1].getValue();
var b = inputs[| 2].getValue();

View file

@ -51,7 +51,7 @@ function Node_Condition(_x, _y, _group = noone) : Node(_x, _y, _group) construct
inputs[| 8].setVisible(_mode == 2, _mode == 2);
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _true = inputs[| 3].getValue();
var _fals = inputs[| 4].getValue();

View file

@ -27,13 +27,13 @@ function Node_Counter(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) c
}
function process_data(_output, _data, _output_index, _array_index = 0) {
var time = ANIMATOR.current_frame;
var time = PROJECT.animator.current_frame;
var mode = _data[2];
var val = 0;
switch(mode) {
case 0 : val = _data[0] + time * _data[1]; break;
case 1 : val = time / (ANIMATOR.frames_total - 1) * _data[1]; break;
case 1 : val = time / (PROJECT.animator.frames_total - 1) * _data[1]; break;
}
return val;

View file

@ -100,7 +100,7 @@ function Node_CSV_File_Read(_x, _y, _group = noone) : Node(_x, _y, _group) const
update();
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var path = inputs[| 0].getValue();
if(path == "") return;
if(path_current != path) updatePaths(path);

View file

@ -48,7 +48,7 @@ function Node_CSV_File_Write(_x, _y, _group = noone) : Node(_x, _y, _group) cons
file_text_close(f);
}
static update = function(frame = ANIMATOR.current_frame) { writeFile(); }
static update = function(frame = PROJECT.animator.current_frame) { writeFile(); }
static onInspector1Update = function() { writeFile(); }
static onDrawNode = function(xx, yy, _mx, _my, _s, _hover, _focus) {

View file

@ -13,7 +13,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
icon = noone;
bg_spr = THEME.node_bg;
bg_sel_spr = THEME.node_active;
anim_priority = ds_map_size(NODE_MAP);
anim_priority = ds_map_size(PROJECT.nodeMap);
static resetInternalName = function() {
var str = string_replace_all(name, " ", "_");
@ -21,13 +21,13 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
str = string_replace_all(str, "-", "");
internalName = str + string(irandom_range(10000, 99999));
NODE_NAME_MAP[? internalName] = self;
PROJECT.nodeNameMap[? internalName] = self;
}
if(!LOADING && !APPENDING) {
recordAction(ACTION_TYPE.node_added, self);
NODE_MAP[? node_id] = self;
MODIFIED = true;
PROJECT.nodeMap[? node_id] = self;
PROJECT.modified = true;
run_in(1, function() {
if(display_name != "") return;
@ -251,7 +251,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
x = _x;
y = _y;
if(!LOADING) MODIFIED = true;
if(!LOADING) PROJECT.modified = true;
}
insp1UpdateTooltip = __txtx("panel_inspector_execute", "Execute node");
@ -278,7 +278,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
if(use_cache) cacheArrayCheck();
var willUpdate = false;
if(ANIMATOR.frame_progress) {
if(PROJECT.animator.frame_progress) {
if(update_on_frame) willUpdate = true;
if(isAnimated()) willUpdate = true;
@ -403,7 +403,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
}
static resetRender = function() { setRenderStatus(false); }
static isRenderActive = function() { return renderActive || (PREF_MAP[? "render_all_export"] && ANIMATOR.rendering); }
static isRenderActive = function() { return renderActive || (PREF_MAP[? "render_all_export"] && PROJECT.animator.rendering); }
static isRenderable = function(log = false) { //Check if every input is ready (updated)
if(!active) return false;
@ -1094,7 +1094,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
static restore = function() {
if(active) return;
enable();
ds_list_add(group == noone? NODES : group.getNodeList(), self);
ds_list_add(group == noone? PROJECT.nodes : group.getNodeList(), self);
}
static onValidate = function() {
@ -1117,26 +1117,26 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
}
static cacheArrayCheck = function() {
if(array_length(cached_output) != ANIMATOR.frames_total)
array_resize(cached_output, ANIMATOR.frames_total);
if(array_length(cache_result) != ANIMATOR.frames_total)
array_resize(cache_result, ANIMATOR.frames_total);
if(array_length(cached_output) != PROJECT.animator.frames_total)
array_resize(cached_output, PROJECT.animator.frames_total);
if(array_length(cache_result) != PROJECT.animator.frames_total)
array_resize(cache_result, PROJECT.animator.frames_total);
}
static cacheCurrentFrame = function(_frame) {
cacheArrayCheck();
if(ANIMATOR.current_frame < 0) return;
if(ANIMATOR.current_frame >= array_length(cached_output)) return;
if(PROJECT.animator.current_frame < 0) return;
if(PROJECT.animator.current_frame >= array_length(cached_output)) return;
surface_array_free(cached_output[ANIMATOR.current_frame]);
cached_output[ANIMATOR.current_frame] = surface_array_clone(_frame);
surface_array_free(cached_output[PROJECT.animator.current_frame]);
cached_output[PROJECT.animator.current_frame] = surface_array_clone(_frame);
array_safe_set(cache_result, ANIMATOR.current_frame, true);
array_safe_set(cache_result, PROJECT.animator.current_frame, true);
return cached_output[ANIMATOR.current_frame];
return cached_output[PROJECT.animator.current_frame];
}
static cacheExist = function(frame = ANIMATOR.current_frame) {
static cacheExist = function(frame = PROJECT.animator.current_frame) {
if(frame < 0) return false;
if(frame >= array_length(cached_output)) return false;
@ -1147,7 +1147,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
return is_array(s) || surface_exists(s);
}
static getCacheFrame = function(frame = ANIMATOR.current_frame) {
static getCacheFrame = function(frame = PROJECT.animator.current_frame) {
if(frame < 0) return false;
if(!cacheExist(frame)) return noone;
@ -1155,10 +1155,10 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
return surf;
}
static recoverCache = function(frame = ANIMATOR.current_frame) {
static recoverCache = function(frame = PROJECT.animator.current_frame) {
if(!cacheExist(frame)) return false;
var _s = cached_output[ANIMATOR.current_frame];
var _s = cached_output[PROJECT.animator.current_frame];
outputs[| 0].setValue(_s);
return true;
@ -1167,8 +1167,8 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
if(!use_cache) return;
if(!isRenderActive()) return;
if(array_length(cached_output) != ANIMATOR.frames_total)
array_resize(cached_output, ANIMATOR.frames_total);
if(array_length(cached_output) != PROJECT.animator.frames_total)
array_resize(cached_output, PROJECT.animator.frames_total);
for(var i = 0; i < array_length(cached_output); i++) {
var _s = cached_output[i];
if(is_surface(_s))
@ -1259,7 +1259,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
var _node = nodeBuild(_type, x, y, target);
CLONING = false;
LOADING_VERSION = SAVEFILE_VERSION;
PROJECT.version = SAVE_VERSION;
if(!_node) return;
@ -1270,8 +1270,8 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
_node.applyDeserialize();
_node.node_id = _nid;
NODE_MAP[? node_id] = self;
NODE_MAP[? _nid] = _node;
PROJECT.nodeMap[? node_id] = self;
PROJECT.nodeMap[? _nid] = _node;
PANEL_ANIMATION.updatePropertyList();
CLONING = false;
@ -1353,7 +1353,7 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
if(APPENDING) APPEND_MAP[? load_map.id] = node_id;
else node_id = load_map.id;
NODE_MAP[? node_id] = self;
PROJECT.nodeMap[? node_id] = self;
if(struct_has(load_map, "name"))
setDisplayName(load_map.name);
@ -1431,8 +1431,8 @@ function Node(_x, _y, _group = PANEL_GRAPH.getCurrentContext()) : __Node_Base(_x
} else {
if(APPENDING) _group = GetAppendID(_group);
if(ds_map_exists(NODE_MAP, _group)) {
NODE_MAP[? _group].add(self);
if(ds_map_exists(PROJECT.nodeMap, _group)) {
PROJECT.nodeMap[? _group].add(self);
} else {
var txt = "Group load failed. Can't find node ID " + string(_group);
log_warning("LOAD", txt);

View file

@ -71,7 +71,7 @@ function Node_Display_Image(_x, _y, _group = noone) : Node(_x, _y, _group) const
return false;
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var path = inputs[| 0].getValue();
if(path == "") return;
if(path_current != path) updatePaths(path);

View file

@ -19,14 +19,14 @@ Animated WebP (.webp)|*.webp",
}
function exportAll() {
ANIMATOR.rendering = true;
PROJECT.animator.rendering = true;
Render();
ANIMATOR.rendering = false;
PROJECT.animator.rendering = false;
var key = ds_map_find_first(NODE_MAP);
repeat(ds_map_size(NODE_MAP)) {
var node = NODE_MAP[? key];
key = ds_map_find_next(NODE_MAP, key);
var key = ds_map_find_first(PROJECT.nodeMap);
repeat(ds_map_size(PROJECT.nodeMap)) {
var node = PROJECT.nodeMap[? key];
key = ds_map_find_next(PROJECT.nodeMap, key);
if(!node.active) continue;
if(instanceof(node) != "Node_Export") continue;
@ -273,12 +273,12 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
var float_str = string_digits(str);
if(float_str != "") {
var float_val = string_digits(float_str);
var str_val = max(float_val - string_length(string(ANIMATOR.current_frame + strt)), 0);
var str_val = max(float_val - string_length(string(PROJECT.animator.current_frame + strt)), 0);
repeat(str_val)
s += "0";
}
s += string(ANIMATOR.current_frame + strt);
s += string(PROJECT.animator.current_frame + strt);
res = true;
break;
case "i" :
@ -383,7 +383,7 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
if(!is_surface(_surf)) continue;
if(form == NODE_EXPORT_FORMAT.gif) {
p = directory + "/" + string(i) + "/" + string_lead_zero(ANIMATOR.current_frame, 5) + ".png";
p = directory + "/" + string(i) + "/" + string_lead_zero(PROJECT.animator.current_frame, 5) + ".png";
} else {
if(is_array(path) && array_length(path) == array_length(surf))
p = pathString(path[ safe_mod(i, array_length(path)) ], suff, i);
@ -406,7 +406,7 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
if(is_array(path)) p = path[0];
if(form == NODE_EXPORT_FORMAT.gif)
p = directory + "/" + string_lead_zero(ANIMATOR.current_frame, 5) + ".png";
p = directory + "/" + string_lead_zero(PROJECT.animator.current_frame, 5) + ".png";
else
p = pathString(p, suff);
@ -444,9 +444,9 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
var form = inputs[| 3].getValue();
if(form == NODE_EXPORT_FORMAT.single) {
ANIMATOR.rendering = true;
PROJECT.animator.rendering = true;
Render();
ANIMATOR.rendering = false;
PROJECT.animator.rendering = false;
export();
return;
@ -454,10 +454,10 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
playing = true;
played = 0;
ANIMATOR.real_frame = -1;
ANIMATOR.current_frame = -1;
ANIMATOR.is_playing = true;
ANIMATOR.rendering = true;
PROJECT.animator.real_frame = -1;
PROJECT.animator.current_frame = -1;
PROJECT.animator.is_playing = true;
PROJECT.animator.rendering = true;
if(directory_exists(directory))
directory_destroy(directory);
@ -498,24 +498,24 @@ function Node_Export(_x, _y, _group = noone) : Node(_x, _y, _group) constructor
outputs[| 0].visible = isInLoop();
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var anim = inputs[| 3].getValue();
if(anim == NODE_EXPORT_FORMAT.single) {
if(isInLoop()) export();
return;
}
if(!ANIMATOR.is_playing) {
if(!PROJECT.animator.is_playing) {
playing = false;
return;
}
if(!ANIMATOR.frame_progress || !playing || ANIMATOR.current_frame <= -1)
if(!PROJECT.animator.frame_progress || !playing || PROJECT.animator.current_frame <= -1)
return;
export();
if(ANIMATOR.current_frame < ANIMATOR.frames_total - 1)
if(PROJECT.animator.current_frame < PROJECT.animator.frames_total - 1)
return;
if(anim != NODE_EXPORT_FORMAT.gif)

View file

@ -15,7 +15,7 @@ function Node_Feedback(_x, _y, _group = noone) : Node_Collection(_x, _y, _group)
}
static doStepBegin = function() {
if(!ANIMATOR.frame_progress) return;
if(!PROJECT.animator.frame_progress) return;
setRenderStatus(false);
UPDATE |= RENDER_TYPE.full; //force full render
}

View file

@ -15,7 +15,7 @@ function Node_Feedback_Input(_x, _y, _group = noone) : Node_Group_Input(_x, _y,
_node_output = vt;
}
if(ANIMATOR.current_frame > 0 && _node_output != noone && _node_output.node.cache_value != noone) //use cache from output
if(PROJECT.animator.current_frame > 0 && _node_output != noone && _node_output.node.cache_value != noone) //use cache from output
return [ _node_output.node.cache_value, inParent ];
return outputs[| 0].getValueDefault();

View file

@ -11,9 +11,9 @@ function Node_Feedback_Output(_x, _y, _group = noone) : Node_Group_Output(_x, _y
cache_value = -1;
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
if(inputs[| 0].value_from == noone) return;
if(ANIMATOR.current_frame == ANIMATOR.frames_total - 1) {
if(PROJECT.animator.current_frame == PROJECT.animator.frames_total - 1) {
cache_value = noone;
return;
}

View file

@ -46,7 +46,7 @@ function Node_Fluid_Add(_x, _y, _group = noone) : Node_Fluid(_x, _y, _group) con
_prevPos = noone;
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _dom = inputs[| 0].getValue(frame);
var _mat = inputs[| 1].getValue(frame);
var _pos = inputs[| 2].getValue(frame);

View file

@ -34,7 +34,7 @@ function Node_Fluid_Add_Collider(_x, _y, _group = noone) : Node_Fluid(_x, _y, _g
inputs[| 2].drawOverlay(active, _x, _y, _s, _mx, _my, _snx, _sny);
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _dom = inputs[| 0].getValue(frame);
var _mat = inputs[| 1].getValue(frame);
var _area = inputs[| 2].getValue(frame);

View file

@ -39,7 +39,7 @@ function Node_Fluid_Apply_Velocity(_x, _y, _group = noone) : Node_Fluid(_x, _y,
inputs[| 2].drawOverlay(active, _x, _y, _s, _mx, _my, _snx, _sny);
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _dom = inputs[| 0].getValue(frame);
var _mat = inputs[| 1].getValue(frame);
var _pos = inputs[| 2].getValue(frame);

View file

@ -54,7 +54,7 @@ function Node_Fluid_Domain(_x, _y, _group = noone) : Node_Fluid(_x, _y, _group)
domain = fd_rectangle_create(256, 256);
_dim_old = [0, 0];
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
RETURN_ON_REST
var _dim = inputs[| 0].getValue(frame);
@ -71,7 +71,7 @@ function Node_Fluid_Domain(_x, _y, _group = noone) : Node_Fluid(_x, _y, _group)
var wrap = inputs[| 11].getValue(frame);
//var loop = inputs[| 12].getValue(frame);
if(ANIMATOR.current_frame == 0 || !is_surface(domain.sf_world)) {
if(PROJECT.animator.current_frame == 0 || !is_surface(domain.sf_world)) {
fd_rectangle_clear(domain);
fd_rectangle_destroy(domain);
domain = fd_rectangle_create(_dim[0], _dim[1]);
@ -116,9 +116,9 @@ function Node_Fluid_Domain(_x, _y, _group = noone) : Node_Fluid(_x, _y, _group)
outputs[| 0].setValue(domain);
//if(!loop) return;
//if(ANIMATOR.current_frame != 0) return;
//if(PROJECT.animator.current_frame != 0) return;
//for( var i = 0; i < ANIMATOR.frames_total; i++ )
//for( var i = 0; i < PROJECT.animator.frames_total; i++ )
// updateForward(i, false);
}

View file

@ -30,8 +30,8 @@ function Node_Fluid_Render(_x, _y, _group = noone) : Node_Fluid(_x, _y, _group)
static onInspector2Update = function() { clearCache(); }
static update = function(frame = ANIMATOR.current_frame) {
if(recoverCache() || !ANIMATOR.is_playing)
static update = function(frame = PROJECT.animator.current_frame) {
if(recoverCache() || !PROJECT.animator.is_playing)
return;
var _dim = inputs[| 1].getValue(frame);

View file

@ -37,7 +37,7 @@ function Node_Fluid_Repulse(_x, _y, _group = noone) : Node_Fluid(_x, _y, _group)
inputs[| 2].drawOverlay(active, px, py, _s, _mx, _my, _snx, _sny, 0, 1, THEME.anchor_scale_hori);
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _dom = inputs[| 0].getValue(frame);
var _pos = inputs[| 1].getValue(frame);
var _rad = inputs[| 2].getValue(frame);

View file

@ -31,7 +31,7 @@ function Node_Fluid_Turbulence(_x, _y, _group = noone) : Node_Fluid(_x, _y, _gro
inputs[| 1].drawOverlay(active, _x, _y, _s, _mx, _my, _snx, _sny);
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _dom = inputs[| 0].getValue(frame);
var _are = inputs[| 1].getValue(frame);
var _str = inputs[| 2].getValue(frame);

View file

@ -17,8 +17,8 @@ function Node_Fluid_Update(_x, _y, _group = noone) : Node_Fluid(_x, _y, _group)
outputs[| 0] = nodeValue("Fluid Domain", self, JUNCTION_CONNECT.output, VALUE_TYPE.fdomain, noone);
static update = function(frame = ANIMATOR.current_frame) {
if(!ANIMATOR.is_playing) return;
static update = function(frame = PROJECT.animator.current_frame) {
if(!PROJECT.animator.is_playing) return;
var _dom = inputs[| 0].getValue(frame);
var _act = inputs[| 1].getValue(frame);

View file

@ -41,7 +41,7 @@ function Node_Fluid_Vortex(_x, _y, _group = noone) : Node_Fluid(_x, _y, _group)
inputs[| 2].drawOverlay(active, px, py, _s, _mx, _my, _snx, _sny, 0, 1, THEME.anchor_scale_hori);
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var _dom = inputs[| 0].getValue(frame);
var _pos = inputs[| 1].getValue(frame);
var _rad = inputs[| 2].getValue(frame);

View file

@ -176,16 +176,8 @@ function variable_editor(nodeVal) constructor {
}
}
#region define
globalvar GLOBAL_NODE;
gml_pragma("global", @"
globalvar GLOBAL_NODE;
GLOBAL_NODE = new Node_Global();
");
#endregion
function Node_Global(_x = 0, _y = 0) : __Node_Base(_x, _y) constructor {
name = "GLOBAL_NODE";
name = "GLOBAL";
display_name = "";
group = noone;

View file

@ -288,7 +288,7 @@ function Node_Group_Input(_x, _y, _group = noone) : Node(_x, _y, _group) constru
PATCH_STATIC
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
if(is_undefined(inParent)) return;
var _dstype = inputs[| 0].getValue();

View file

@ -89,7 +89,7 @@ function Node_Image(_x, _y, _group = noone) : Node(_x, _y, _group) constructor {
update();
}
static update = function(frame = ANIMATOR.current_frame) {
static update = function(frame = PROJECT.animator.current_frame) {
var path = inputs[| 0].getValue();
var pad = inputs[| 1].getValue();
if(path == "") return;

Some files were not shown because too many files have changed in this diff Show more