mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2024-12-24 14:06:23 +01:00
project ser/de
This commit is contained in:
parent
c566ca84ba
commit
770aa23d81
10 changed files with 212 additions and 204 deletions
|
@ -48,10 +48,12 @@ function FileObject(_name, _path) constructor { #region
|
|||
} #endregion
|
||||
|
||||
static getSpr = function() { #region
|
||||
if(spr != -1) return spr;
|
||||
if(spr != -1 && sprite_exists(spr))
|
||||
return spr;
|
||||
|
||||
if(sprFetchID != noone) return -1;
|
||||
|
||||
if(array_length(spr_path) == 0) {
|
||||
if(array_empty(spr_path)) {
|
||||
if(loadThumbnailAsync) {
|
||||
sprFetchID = sprite_add_ext(self.path, 0, 0, 0, true);
|
||||
IMAGE_FETCH_MAP[? sprFetchID] = function(load_result) {
|
||||
|
@ -62,6 +64,7 @@ function FileObject(_name, _path) constructor { #region
|
|||
spr = sprite_add(self.path, 0, 0, 0, 0, 0);
|
||||
if(spr) sprite_set_offset(spr, sprite_get_width(spr) / 2, sprite_get_height(spr) / 2);
|
||||
}
|
||||
|
||||
return spr;
|
||||
}
|
||||
|
||||
|
|
|
@ -141,7 +141,6 @@ function LOAD_AT(path, readonly = false, override = false) { #region
|
|||
try {
|
||||
var _node_list = _load_content.nodes;
|
||||
for(var i = 0, n = array_length(_node_list); i < n; i++) {
|
||||
// printIf(log, $" >> Loading nodes : {_node_list[i].type}");
|
||||
var _node = nodeLoad(_node_list[i]);
|
||||
if(_node) array_push(create_list, _node);
|
||||
}
|
||||
|
@ -150,68 +149,7 @@ function LOAD_AT(path, readonly = false, override = false) { #region
|
|||
}
|
||||
}
|
||||
|
||||
printIf(log, $" > Load nodes : {(get_timer() - t1) / 1000} ms"); t1 = get_timer();
|
||||
|
||||
try {
|
||||
if(struct_has(_load_content, "animator")) {
|
||||
var _anim_map = _load_content.animator;
|
||||
PROJECT.animator.frames_total = struct_try_get(_anim_map, "frames_total", 30);
|
||||
PROJECT.animator.framerate = struct_try_get(_anim_map, "framerate", 30);
|
||||
PROJECT.animator.frame_range = struct_try_get(_anim_map, "frame_range", noone);
|
||||
}
|
||||
} catch(e) {
|
||||
log_warning("LOAD, animator", exception_print(e));
|
||||
}
|
||||
|
||||
if(struct_has(_load_content, "onion_skin"))
|
||||
struct_override(PROJECT.onion_skin, _load_content.onion_skin);
|
||||
|
||||
if(struct_has(_load_content, "previewGrid"))
|
||||
struct_override(PROJECT.previewGrid, _load_content.previewGrid);
|
||||
|
||||
if(struct_has(_load_content, "graphGrid"))
|
||||
struct_override(PROJECT.graphGrid, _load_content.graphGrid);
|
||||
|
||||
if(struct_has(_load_content, "attributes")) {
|
||||
struct_override(PROJECT.attributes, _load_content.attributes);
|
||||
}
|
||||
PROJECT.setPalette();
|
||||
|
||||
if(struct_has(_load_content, "notes")) {
|
||||
PROJECT.notes = array_create(array_length(_load_content.notes));
|
||||
for( var i = 0, n = array_length(_load_content.notes); i < n; i++ )
|
||||
PROJECT.notes[i] = new Note.deserialize(_load_content.notes[i]);
|
||||
}
|
||||
|
||||
try {
|
||||
if(struct_has(_load_content, "metadata"))
|
||||
PROJECT.meta.deserialize(_load_content.metadata);
|
||||
} catch(e) {
|
||||
log_warning("LOAD, metadata", exception_print(e));
|
||||
}
|
||||
|
||||
PROJECT.globalNode = new Node_Global();
|
||||
try {
|
||||
if(struct_has(_load_content, "global"))
|
||||
PROJECT.globalNode.deserialize(_load_content.global);
|
||||
else if(struct_has(_load_content, "global_node"))
|
||||
PROJECT.globalNode.deserialize(_load_content.global_node);
|
||||
} catch(e) {
|
||||
log_warning("LOAD, global", exception_print(e));
|
||||
}
|
||||
|
||||
try {
|
||||
if(struct_has(_load_content, "addon")) {
|
||||
var _addon = _load_content.addon;
|
||||
PROJECT.addons = _addon;
|
||||
struct_foreach(_addon, function(_name, _value) { addonLoad(_name, false); });
|
||||
} else
|
||||
PROJECT.addons = {};
|
||||
} catch(e) {
|
||||
log_warning("LOAD, addon", exception_print(e));
|
||||
}
|
||||
|
||||
printIf(log, $" > Load data : {(get_timer() - t1) / 1000} ms"); t1 = get_timer();
|
||||
PROJECT.deserialize(_load_content);
|
||||
|
||||
ds_queue_clear(CONNECTION_CONFLICT);
|
||||
|
||||
|
|
|
@ -368,8 +368,13 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
|||
mapButton = button(function() {
|
||||
attributes.mapped = !attributes.mapped;
|
||||
var val = getValue();
|
||||
if( attributes.mapped && is_numeric(val)) setValue([0, val]);
|
||||
if(!attributes.mapped && is_array(val)) setValue(array_safe_get_fast(val, 0));
|
||||
|
||||
if( attributes.mapped)
|
||||
setValue([0, 0]);
|
||||
|
||||
if(!attributes.mapped && is_array(def_val))
|
||||
setValue(def_val);
|
||||
|
||||
setArrayDepth(attributes.mapped);
|
||||
|
||||
node.triggerRender();
|
||||
|
@ -410,6 +415,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru
|
|||
inp.visible = vis;
|
||||
node.refreshNodeDisplay();
|
||||
}
|
||||
|
||||
} #endregion
|
||||
|
||||
/////========== ANIMATION ==========
|
||||
|
|
|
@ -141,6 +141,9 @@ function Panel_Collection() : PanelContent() constructor {
|
|||
});
|
||||
tb_search.auto_update = true;
|
||||
|
||||
grid_size = ui(64);
|
||||
grid_size_to = grid_size;
|
||||
|
||||
contentView = 0;
|
||||
contentPane = new scrollPane(content_w - ui(6), content_h, function(_y, _m) { #region
|
||||
draw_clear_alpha(c_white, 0);
|
||||
|
@ -180,9 +183,10 @@ function Panel_Collection() : PanelContent() constructor {
|
|||
updated_prog = lerp_linear(updated_prog, 0, 0.01);
|
||||
|
||||
if(contentView == 0) {
|
||||
var grid_size = ui(64);
|
||||
var grid_width = ui(80);
|
||||
var grid_space = ui(12);
|
||||
var grid_width = round(grid_size * 1.25);
|
||||
if(grid_width > ui(80)) grid_width = grid_size;
|
||||
|
||||
var grid_space = round(grid_size * 0.1875);
|
||||
|
||||
var col = max(1, floor(_cw / (grid_width + grid_space)));
|
||||
var row = ceil(node_count / col);
|
||||
|
@ -277,7 +281,7 @@ function Panel_Collection() : PanelContent() constructor {
|
|||
}
|
||||
|
||||
draw_set_text(f_p3, fa_center, fa_top, COLORS._main_text_inner);
|
||||
var _txtH = draw_text_ext_add(_boxx + grid_size / 2, yy + grid_size + ui(4), _node.name, -1, grid_width,, true);
|
||||
var _txtH = draw_text_ext_add(_boxx + grid_size / 2, yy + grid_size + ui(4), _node.name, -1, grid_width, 1, true);
|
||||
name_height = max(name_height, _txtH + 8);
|
||||
}
|
||||
|
||||
|
@ -286,6 +290,12 @@ function Panel_Collection() : PanelContent() constructor {
|
|||
yy += hght;
|
||||
}
|
||||
|
||||
if(pHOVER && key_mod_press(CTRL) && point_in_rectangle(_m[0], _m[1], 0, 0, contentPane.surface_w, contentPane.surface_h)) {
|
||||
if(mouse_wheel_down()) grid_size_to = clamp(grid_size_to - ui(4), ui(32), ui(160));
|
||||
if(mouse_wheel_up()) grid_size_to = clamp(grid_size_to + ui(4), ui(32), ui(160));
|
||||
}
|
||||
grid_size = lerp_float(grid_size, grid_size_to, 5);
|
||||
|
||||
} else {
|
||||
var list_width = _cw;
|
||||
var list_height = ui(28);
|
||||
|
|
|
@ -115,12 +115,13 @@
|
|||
|
||||
function checkPanelValid() { #region
|
||||
var val = true;
|
||||
if(!is_instanceof(PANEL_GRAPH.panel, Panel)) val = false;
|
||||
if(!is_instanceof(PANEL_PREVIEW.panel, Panel)) val = false;
|
||||
if(!is_instanceof(PANEL_INSPECTOR.panel, Panel)) val = false;
|
||||
var _mst = "";
|
||||
if(!is_instanceof(PANEL_GRAPH.panel, Panel)) { val = false; _mst += "Graph, " };
|
||||
if(!is_instanceof(PANEL_PREVIEW.panel, Panel)) { val = false; _mst += "Preview, " };
|
||||
if(!is_instanceof(PANEL_INSPECTOR.panel, Panel)) { val = false; _mst += "Inspector, " };
|
||||
|
||||
if(!val) {
|
||||
noti_warning("Invalid Panel Layout, layout and UI scale will be reset to the default value.\n\nRestart recommended.");
|
||||
noti_warning($"Invalid Panel Layout, missing {_mst} panel(s). Reset to the default layout and restart recommened.");
|
||||
|
||||
PREFERENCES.panel_layout_file = "Vertical";
|
||||
PREFERENCES._display_scaling = 1;
|
||||
|
|
|
@ -160,6 +160,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
self.project = project;
|
||||
nodes_list = project.nodes;
|
||||
|
||||
// layer_index = noone;
|
||||
setTitle();
|
||||
}
|
||||
setProject(project);
|
||||
|
@ -1509,7 +1510,7 @@ function Panel_Graph(project = PROJECT) : PanelContent() constructor {
|
|||
function connectDraggingValueTo(target) { #region
|
||||
var _connect = [ 0, noone, noone ];
|
||||
|
||||
if(PANEL_INSPECTOR && PANEL_INSPECTOR.attribute_hovering != noone) {
|
||||
if(is_instanceof(PANEL_INSPECTOR, Panel_Inspector) && PANEL_INSPECTOR.attribute_hovering != noone) {
|
||||
PANEL_INSPECTOR.attribute_hovering(value_dragging);
|
||||
|
||||
} else if(target != noone) {
|
||||
|
|
|
@ -35,8 +35,8 @@ function Inspector_Spacer(height, line = false) constructor { self.h = height; s
|
|||
|
||||
function Panel_Inspector() : PanelContent() constructor {
|
||||
#region ---- main ----
|
||||
title = __txt("Inspector");
|
||||
context_str = "Inspector";
|
||||
title = __txt("Inspector");
|
||||
icon = THEME.panel_inspector_icon;
|
||||
|
||||
w = ui(400);
|
||||
|
@ -73,6 +73,8 @@ function Panel_Inspector() : PanelContent() constructor {
|
|||
|
||||
picker_index = 0;
|
||||
picker_change = false;
|
||||
|
||||
attribute_hovering = noone;
|
||||
#endregion
|
||||
|
||||
globalvar_viewer_init();
|
||||
|
|
|
@ -3,6 +3,13 @@
|
|||
PROJECT = noone;
|
||||
#endregion
|
||||
|
||||
#region layer
|
||||
function Layer() constructor {
|
||||
name = "New Layer";
|
||||
nodes = [];
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region project
|
||||
function Project() constructor {
|
||||
active = true; /// @is {bool}
|
||||
|
@ -23,6 +30,8 @@
|
|||
nodeMap = ds_map_create();
|
||||
nodeNameMap = ds_map_create();
|
||||
|
||||
composer = noone;
|
||||
|
||||
animator = new AnimationManager();
|
||||
globalNode = new Node_Global();
|
||||
nodeController = new __Node_Controller(self);
|
||||
|
@ -144,6 +153,85 @@
|
|||
} #endregion
|
||||
|
||||
static toString = function() { return $"ProjectObject [{path}]"; }
|
||||
|
||||
static serialize = function() {
|
||||
var _map = {};
|
||||
_map.version = SAVE_VERSION;
|
||||
|
||||
var _anim_map = {};
|
||||
_anim_map.frames_total = animator.frames_total;
|
||||
_anim_map.framerate = animator.framerate;
|
||||
_anim_map.frame_range = animator.frame_range;
|
||||
_map.animator = _anim_map;
|
||||
|
||||
_map.metadata = meta.serialize();
|
||||
_map.global_node = globalNode.serialize();
|
||||
_map.onion_skin = onion_skin;
|
||||
|
||||
_map.previewGrid = previewGrid;
|
||||
_map.graphGrid = graphGrid;
|
||||
_map.attributes = attributes;
|
||||
|
||||
_map.timelines = timelines.serialize();
|
||||
_map.notes = array_map(notes, function(note) { return note.serialize(); } );
|
||||
|
||||
_map.composer = composer == noone? -4 : composer.serialize();
|
||||
|
||||
__node_list = [];
|
||||
array_foreach(allNodes, function(node) { if(node.active) array_push(__node_list, node.serialize()); })
|
||||
_map.nodes = __node_list;
|
||||
|
||||
|
||||
var prev = PANEL_PREVIEW.getNodePreviewSurface();
|
||||
if(!is_surface(prev)) _map.preview = "";
|
||||
else _map.preview = surface_encode(surface_size_lim(prev, 128, 128));
|
||||
|
||||
var _addon = {};
|
||||
with(_addon_custom) {
|
||||
var _ser = lua_call(thread, "serialize");
|
||||
_addon[$ name] = PREFERENCES.save_file_minify? json_stringify_minify(_ser) : json_stringify(_ser);
|
||||
}
|
||||
_map.addon = _addon;
|
||||
|
||||
return _map;
|
||||
}
|
||||
|
||||
static deserialize = function(_map) {
|
||||
if(struct_has(_map, "animator")) {
|
||||
var _anim_map = _map.animator;
|
||||
animator.frames_total = struct_try_get(_anim_map, "frames_total", 30);
|
||||
animator.framerate = struct_try_get(_anim_map, "framerate", 30);
|
||||
animator.frame_range = struct_try_get(_anim_map, "frame_range", noone);
|
||||
}
|
||||
|
||||
if(struct_has(_map, "onion_skin")) struct_override(onion_skin, _map.onion_skin);
|
||||
if(struct_has(_map, "previewGrid")) struct_override(previewGrid, _map.previewGrid);
|
||||
if(struct_has(_map, "graphGrid")) struct_override(graphGrid, _map.graphGrid);
|
||||
if(struct_has(_map, "attributes")) struct_override(attributes, _map.attributes);
|
||||
if(struct_has(_map, "metadata")) meta.deserialize(_map.metadata);
|
||||
|
||||
setPalette();
|
||||
|
||||
if(struct_has(_map, "notes")) {
|
||||
notes = array_create(array_length(_map.notes));
|
||||
for( var i = 0, n = array_length(_map.notes); i < n; i++ )
|
||||
notes[i] = new Note.deserialize(_map.notes[i]);
|
||||
}
|
||||
|
||||
globalNode = new Node_Global();
|
||||
if(struct_has(_map, "global")) globalNode.deserialize(_map.global);
|
||||
else if(struct_has(_map, "global_node")) globalNode.deserialize(_map.global_node);
|
||||
|
||||
if(struct_has(_map, "composer") && _map.composer != -4)
|
||||
composer.deserialize(_map.composer);
|
||||
|
||||
addons = {};
|
||||
if(struct_has(_map, "addon")) {
|
||||
var _addon = _map.addon;
|
||||
addons = _addon;
|
||||
struct_foreach(_addon, function(_name, _value) { addonLoad(_name, false); });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function __initProject() {
|
||||
|
|
|
@ -14,50 +14,9 @@ function NEW() { #region
|
|||
} #endregion
|
||||
|
||||
function save_serialize(project = PROJECT, _outMap = false) { #region
|
||||
var _map = {};
|
||||
_map.version = SAVE_VERSION;
|
||||
|
||||
var _node_list = [];
|
||||
var amo = array_length(project.allNodes);
|
||||
var i = 0;
|
||||
|
||||
repeat(amo) {
|
||||
var _node = project.allNodes[i++];
|
||||
if(_node.active) array_push(_node_list, _node.serialize());
|
||||
}
|
||||
|
||||
_map.nodes = _node_list;
|
||||
|
||||
var _anim_map = {};
|
||||
_anim_map.frames_total = project.animator.frames_total;
|
||||
_anim_map.framerate = project.animator.framerate;
|
||||
_anim_map.frame_range = project.animator.frame_range;
|
||||
_map.animator = _anim_map;
|
||||
|
||||
_map.metadata = PROJECT.meta.serialize();
|
||||
_map.global_node = project.globalNode.serialize();
|
||||
_map.onion_skin = project.onion_skin;
|
||||
|
||||
_map.previewGrid = project.previewGrid;
|
||||
_map.graphGrid = project.graphGrid;
|
||||
_map.attributes = project.attributes;
|
||||
|
||||
_map.timelines = project.timelines.serialize();
|
||||
_map.notes = array_map(project.notes, function(note) { return note.serialize(); } );
|
||||
|
||||
var prev = PANEL_PREVIEW.getNodePreviewSurface();
|
||||
if(!is_surface(prev)) _map.preview = "";
|
||||
else _map.preview = surface_encode(surface_size_lim(prev, 128, 128));
|
||||
|
||||
var _addon = {};
|
||||
with(_addon_custom) {
|
||||
var _ser = lua_call(thread, "serialize");
|
||||
_addon[$ name] = PREFERENCES.save_file_minify? json_stringify_minify(_ser) : json_stringify(_ser);
|
||||
}
|
||||
_map.addon = _addon;
|
||||
var _map = project.serialize();
|
||||
|
||||
if(_outMap) return _map;
|
||||
|
||||
return PREFERENCES.save_file_minify? json_stringify_minify(_map) : json_stringify(_map, true);
|
||||
} #endregion
|
||||
|
||||
|
|
Loading…
Reference in a new issue