Console
|
@ -883,6 +883,7 @@
|
||||||
{"name":"node_iterator_length","order":4,"path":"scripts/node_iterator_length/node_iterator_length.yy",},
|
{"name":"node_iterator_length","order":4,"path":"scripts/node_iterator_length/node_iterator_length.yy",},
|
||||||
{"name":"node_VFX_effect_attract","order":2,"path":"scripts/node_VFX_effect_attract/node_VFX_effect_attract.yy",},
|
{"name":"node_VFX_effect_attract","order":2,"path":"scripts/node_VFX_effect_attract/node_VFX_effect_attract.yy",},
|
||||||
{"name":"sh_d3d_ssao_blur","order":1,"path":"shaders/sh_d3d_ssao_blur/sh_d3d_ssao_blur.yy",},
|
{"name":"sh_d3d_ssao_blur","order":1,"path":"shaders/sh_d3d_ssao_blur/sh_d3d_ssao_blur.yy",},
|
||||||
|
{"name":"function_register","order":2,"path":"scripts/function_register/function_register.yy",},
|
||||||
{"name":"panel_addon","order":5,"path":"scripts/panel_addon/panel_addon.yy",},
|
{"name":"panel_addon","order":5,"path":"scripts/panel_addon/panel_addon.yy",},
|
||||||
{"name":"s_node_text_splice","order":6,"path":"sprites/s_node_text_splice/s_node_text_splice.yy",},
|
{"name":"s_node_text_splice","order":6,"path":"sprites/s_node_text_splice/s_node_text_splice.yy",},
|
||||||
{"name":"__node_3d_transform","order":7,"path":"scripts/__node_3d_transform/__node_3d_transform.yy",},
|
{"name":"__node_3d_transform","order":7,"path":"scripts/__node_3d_transform/__node_3d_transform.yy",},
|
||||||
|
|
|
@ -1160,6 +1160,7 @@
|
||||||
{"id":{"name":"node_VFX_effect_attract","path":"scripts/node_VFX_effect_attract/node_VFX_effect_attract.yy",},},
|
{"id":{"name":"node_VFX_effect_attract","path":"scripts/node_VFX_effect_attract/node_VFX_effect_attract.yy",},},
|
||||||
{"id":{"name":"node_fluid_repulse","path":"scripts/node_fluid_repulse/node_fluid_repulse.yy",},},
|
{"id":{"name":"node_fluid_repulse","path":"scripts/node_fluid_repulse/node_fluid_repulse.yy",},},
|
||||||
{"id":{"name":"sh_d3d_ssao_blur","path":"shaders/sh_d3d_ssao_blur/sh_d3d_ssao_blur.yy",},},
|
{"id":{"name":"sh_d3d_ssao_blur","path":"shaders/sh_d3d_ssao_blur/sh_d3d_ssao_blur.yy",},},
|
||||||
|
{"id":{"name":"function_register","path":"scripts/function_register/function_register.yy",},},
|
||||||
{"id":{"name":"panel_addon","path":"scripts/panel_addon/panel_addon.yy",},},
|
{"id":{"name":"panel_addon","path":"scripts/panel_addon/panel_addon.yy",},},
|
||||||
{"id":{"name":"s_node_text_splice","path":"sprites/s_node_text_splice/s_node_text_splice.yy",},},
|
{"id":{"name":"s_node_text_splice","path":"sprites/s_node_text_splice/s_node_text_splice.yy",},},
|
||||||
{"id":{"name":"__node_3d_transform","path":"scripts/__node_3d_transform/__node_3d_transform.yy",},},
|
{"id":{"name":"__node_3d_transform","path":"scripts/__node_3d_transform/__node_3d_transform.yy",},},
|
||||||
|
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
|
@ -1,4 +1,6 @@
|
||||||
function APPEND(_path, context = PANEL_GRAPH.getCurrentContext()) { #region
|
function APPEND(_path, context = PANEL_GRAPH.getCurrentContext()) { #region
|
||||||
|
CALL("APPEND");
|
||||||
|
|
||||||
if(_path == "") return noone;
|
if(_path == "") return noone;
|
||||||
var _map = json_load_struct(_path);
|
var _map = json_load_struct(_path);
|
||||||
|
|
||||||
|
@ -21,7 +23,7 @@ function __APPEND_MAP(_map, context = PANEL_GRAPH.getCurrentContext()) { #region
|
||||||
if(struct_has(_map, "version")) {
|
if(struct_has(_map, "version")) {
|
||||||
var _v = _map.version;
|
var _v = _map.version;
|
||||||
PROJECT.version = _v;
|
PROJECT.version = _v;
|
||||||
if(floor(_v) != floor(SAVE_VERSION)) {
|
if(PREFERENCES.notify_load_version && floor(_v) != floor(SAVE_VERSION)) {
|
||||||
var warn = $"File version mismatch : loading file version {_v} to Pixel Composer {SAVE_VERSION}";
|
var warn = $"File version mismatch : loading file version {_v} to Pixel Composer {SAVE_VERSION}";
|
||||||
log_warning("FILE", warn)
|
log_warning("FILE", warn)
|
||||||
}
|
}
|
||||||
|
|
|
@ -281,6 +281,8 @@ function mergeAction(act) { #region
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
function UNDO() { #region
|
function UNDO() { #region
|
||||||
|
CALL("UNDO");
|
||||||
|
|
||||||
if(ds_stack_empty(UNDO_STACK)) return;
|
if(ds_stack_empty(UNDO_STACK)) return;
|
||||||
if(instance_exists(_p_dialog_undo_block)) return;
|
if(instance_exists(_p_dialog_undo_block)) return;
|
||||||
|
|
||||||
|
@ -296,6 +298,8 @@ function UNDO() { #region
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
function REDO() { #region
|
function REDO() { #region
|
||||||
|
CALL("REDO");
|
||||||
|
|
||||||
if(ds_stack_empty(REDO_STACK)) return;
|
if(ds_stack_empty(REDO_STACK)) return;
|
||||||
if(instance_exists(_p_dialog_undo_block)) return;
|
if(instance_exists(_p_dialog_undo_block)) return;
|
||||||
|
|
||||||
|
|
68
scripts/function_register/function_register.gml
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
#region macros
|
||||||
|
gml_pragma("global", "__fnInit()");
|
||||||
|
|
||||||
|
#macro ARG new __fnArgument
|
||||||
|
#macro CALL _args = []; for(i = 0; i < argument_count; i++) _args[i] = argument[i]; callStatusFunction
|
||||||
|
|
||||||
|
function __fnArgument(name, def, fn = false) constructor {
|
||||||
|
self.name = name;
|
||||||
|
self.def = def;
|
||||||
|
self.fn = fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
function __fnInit() {
|
||||||
|
globalvar FUNCTIONS;
|
||||||
|
FUNCTIONS = {};
|
||||||
|
|
||||||
|
__registerFunction("NEW", NEW, []);
|
||||||
|
__registerFunction("SAVE_AT", SAVE_AT, [ ARG("project", function() { return PROJECT; }, true), ARG("path", ""), ARG("log", "save at ") ]);
|
||||||
|
__registerFunction("LOAD_AT", LOAD_AT, [ ARG("path", ""), ARG("readonly", false), ARG("override", false) ]);
|
||||||
|
__registerFunction("CLOSE", closeProject, [ ARG("project", function() { return PROJECT; }, true) ]);
|
||||||
|
__registerFunction("APPEND", APPEND, [ ARG("path", ""), ARG("context", function() { return PANEL_GRAPH.getCurrentContext(); }, true) ]);
|
||||||
|
|
||||||
|
__registerFunction("UNDO", UNDO, []);
|
||||||
|
__registerFunction("REDO", REDO, []);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
function __registerFunction(name, fn, args = []) { #region
|
||||||
|
INLINE
|
||||||
|
FUNCTIONS[$ name] = { fn, args };
|
||||||
|
} #endregion
|
||||||
|
|
||||||
|
function callStatusFunction(name) { #region
|
||||||
|
INLINE
|
||||||
|
var command = $"{name} {string_join_ext(",", _args)}";
|
||||||
|
|
||||||
|
array_push(CMD, cmdLine(command, COLORS._main_text_sub));
|
||||||
|
array_push(CMDIN, command);
|
||||||
|
} #endregion
|
||||||
|
|
||||||
|
function callFunction(name, args) { #region
|
||||||
|
INLINE
|
||||||
|
|
||||||
|
var _f = FUNCTIONS[$ name];
|
||||||
|
|
||||||
|
switch(array_length(_f.args)) {
|
||||||
|
case 0 : _f.fn(); break;
|
||||||
|
case 1 : _f.fn(args[0]); break;
|
||||||
|
case 2 : _f.fn(args[0], args[1]); break;
|
||||||
|
case 3 : _f.fn(args[0], args[1], args[2]); break;
|
||||||
|
case 4 : _f.fn(args[0], args[1], args[2], args[3]); break;
|
||||||
|
case 5 : _f.fn(args[0], args[1], args[2], args[3], args[4]); break;
|
||||||
|
case 6 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5]); break;
|
||||||
|
case 7 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); break;
|
||||||
|
case 8 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]); break;
|
||||||
|
case 9 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]); break;
|
||||||
|
case 10 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]); break;
|
||||||
|
case 11 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10]); break;
|
||||||
|
case 12 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11]); break;
|
||||||
|
case 13 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12]); break;
|
||||||
|
case 14 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12], args[13]); break;
|
||||||
|
case 15 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12], args[13], args[14]); break;
|
||||||
|
case 16 : _f.fn(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12], args[13], args[14], args[15]); break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} #endregion
|
||||||
|
|
11
scripts/function_register/function_register.yy
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"resourceType": "GMScript",
|
||||||
|
"resourceVersion": "1.0",
|
||||||
|
"name": "function_register",
|
||||||
|
"isCompatibility": false,
|
||||||
|
"isDnD": false,
|
||||||
|
"parent": {
|
||||||
|
"name": "action",
|
||||||
|
"path": "folders/functions/action.yy",
|
||||||
|
},
|
||||||
|
}
|
|
@ -15,8 +15,11 @@
|
||||||
|
|
||||||
#region main
|
#region main
|
||||||
globalvar OS, DEBUG, THEME, COLOR_KEYS;
|
globalvar OS, DEBUG, THEME, COLOR_KEYS;
|
||||||
OS = os_type;
|
globalvar CMD, CMDIN;
|
||||||
//OS = os_macosx;
|
|
||||||
|
OS = os_type;
|
||||||
|
CMD = [];
|
||||||
|
CMDIN = [];
|
||||||
|
|
||||||
DEBUG = false;
|
DEBUG = false;
|
||||||
THEME = new Theme();
|
THEME = new Theme();
|
||||||
|
@ -25,10 +28,10 @@
|
||||||
globalvar VERSION, SAVE_VERSION, VERSION_STRING, BUILD_NUMBER, LATEST_VERSION;
|
globalvar VERSION, SAVE_VERSION, VERSION_STRING, BUILD_NUMBER, LATEST_VERSION;
|
||||||
|
|
||||||
LATEST_VERSION = 11600;
|
LATEST_VERSION = 11600;
|
||||||
VERSION = 11642;
|
VERSION = 11650;
|
||||||
SAVE_VERSION = 11642;
|
SAVE_VERSION = 11650;
|
||||||
VERSION_STRING = "1.16.4.2";
|
VERSION_STRING = "1.16.5.0";
|
||||||
BUILD_NUMBER = 11640;
|
BUILD_NUMBER = 11650;
|
||||||
|
|
||||||
globalvar APPEND_MAP;
|
globalvar APPEND_MAP;
|
||||||
APPEND_MAP = ds_map_create();
|
APPEND_MAP = ds_map_create();
|
||||||
|
@ -129,13 +132,13 @@
|
||||||
#macro PANEL_PAD THEME_VALUE.panel_padding
|
#macro PANEL_PAD THEME_VALUE.panel_padding
|
||||||
|
|
||||||
function print(str) {
|
function print(str) {
|
||||||
//show_debug_message(string(str));
|
INLINE
|
||||||
noti_status(string(str));
|
noti_status(string(str));
|
||||||
}
|
}
|
||||||
|
|
||||||
function printIf(cond, log) {
|
function printIf(cond, log) {
|
||||||
if(!cond) return;
|
INLINE
|
||||||
show_debug_message(log);
|
if(cond) print(log);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ function TEST_PATH(path) { #region
|
||||||
PROJECT = new Project();
|
PROJECT = new Project();
|
||||||
PANEL_GRAPH.setProject(PROJECT);
|
PANEL_GRAPH.setProject(PROJECT);
|
||||||
|
|
||||||
__LOAD_PATH(path);
|
LOAD_AT(path);
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
function LOAD_PATH(path, readonly = false, safe_mode = false) { #region
|
function LOAD_PATH(path, readonly = false, safe_mode = false) { #region
|
||||||
|
@ -40,7 +40,7 @@ function LOAD_PATH(path, readonly = false, safe_mode = false) { #region
|
||||||
array_push(PROJECTS, PROJECT);
|
array_push(PROJECTS, PROJECT);
|
||||||
}
|
}
|
||||||
|
|
||||||
var res = __LOAD_PATH(path, readonly);
|
var res = LOAD_AT(path, readonly);
|
||||||
if(!res) return false;
|
if(!res) return false;
|
||||||
|
|
||||||
PROJECT.safeMode = safe_mode;
|
PROJECT.safeMode = safe_mode;
|
||||||
|
@ -49,7 +49,9 @@ function LOAD_PATH(path, readonly = false, safe_mode = false) { #region
|
||||||
return PROJECT;
|
return PROJECT;
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
function __LOAD_PATH(path, readonly = false, override = false) { #region
|
function LOAD_AT(path, readonly = false, override = false) { #region
|
||||||
|
CALL("LOAD_AT");
|
||||||
|
|
||||||
//print($"========== Loading {path} =========="); var t = get_timer();
|
//print($"========== Loading {path} =========="); var t = get_timer();
|
||||||
|
|
||||||
if(DEMO) return false;
|
if(DEMO) return false;
|
||||||
|
@ -90,7 +92,7 @@ function __LOAD_PATH(path, readonly = false, override = false) { #region
|
||||||
if(struct_has(_load_content, "version")) {
|
if(struct_has(_load_content, "version")) {
|
||||||
var _v = _load_content.version;
|
var _v = _load_content.version;
|
||||||
PROJECT.version = _v;
|
PROJECT.version = _v;
|
||||||
if(floor(_v) != floor(SAVE_VERSION)) {
|
if(PREFERENCES.notify_load_version && floor(_v) != floor(SAVE_VERSION)) {
|
||||||
var warn = $"File version mismatch : loading file version {_v} to Pixel Composer {SAVE_VERSION}";
|
var warn = $"File version mismatch : loading file version {_v} to Pixel Composer {SAVE_VERSION}";
|
||||||
log_warning("LOAD", warn);
|
log_warning("LOAD", warn);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ function Node_Noise_Bubble(_x, _y, _group = noone) : Node_Shader_Generator(_x, _
|
||||||
inputs[| 2] = nodeValue("Seed", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, seed_random(4));
|
inputs[| 2] = nodeValue("Seed", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, seed_random(4));
|
||||||
addShaderProp(SHADER_UNIFORM.float, "seed");
|
addShaderProp(SHADER_UNIFORM.float, "seed");
|
||||||
|
|
||||||
inputs[| 3] = nodeValue("Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0.9, 0.95 ] )
|
inputs[| 3] = nodeValue("Scale", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, [ 0.5, 0.8 ] )
|
||||||
.setDisplay(VALUE_DISPLAY.slider_range);
|
.setDisplay(VALUE_DISPLAY.slider_range);
|
||||||
addShaderProp(SHADER_UNIFORM.float, "scale");
|
addShaderProp(SHADER_UNIFORM.float, "scale");
|
||||||
|
|
||||||
|
@ -25,9 +25,13 @@ function Node_Noise_Bubble(_x, _y, _group = noone) : Node_Shader_Generator(_x, _
|
||||||
.setDisplay(VALUE_DISPLAY.slider_range);
|
.setDisplay(VALUE_DISPLAY.slider_range);
|
||||||
addShaderProp(SHADER_UNIFORM.float, "alpha");
|
addShaderProp(SHADER_UNIFORM.float, "alpha");
|
||||||
|
|
||||||
|
inputs[| 7] = nodeValue("Blending", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0 )
|
||||||
|
.setDisplay(VALUE_DISPLAY.enum_scroll, [ "Max", "Add" ] );
|
||||||
|
addShaderProp(SHADER_UNIFORM.integer, "render");
|
||||||
|
|
||||||
input_display_list = [ 2,
|
input_display_list = [ 2,
|
||||||
["Output", true], 0,
|
["Output", true], 0,
|
||||||
["Noise", false], 1, 3,
|
["Noise", false], 1, 3,
|
||||||
["Render", false], 5, 4, 6,
|
["Render", false], 5, 4, 6, 7,
|
||||||
];
|
];
|
||||||
}
|
}
|
|
@ -472,7 +472,7 @@ function __initNodes() {
|
||||||
ds_list_add(transform, "Warps");
|
ds_list_add(transform, "Warps");
|
||||||
addNodeObject(transform, "Crop", s_node_crop, "Node_Crop", [1, Node_Crop],, "Crop out image to create smaller ones.");
|
addNodeObject(transform, "Crop", s_node_crop, "Node_Crop", [1, Node_Crop],, "Crop out image to create smaller ones.");
|
||||||
addNodeObject(transform, "Crop Content", s_node_crop_content, "Node_Crop_Content", [1, Node_Crop_Content],, "Crop out empty pixel pixel from the image.");
|
addNodeObject(transform, "Crop Content", s_node_crop_content, "Node_Crop_Content", [1, Node_Crop_Content],, "Crop out empty pixel pixel from the image.");
|
||||||
addNodeObject(transform, "Bend", s_node_bend, "Node_Bend", [1, Node_Bend], ["wrap"], "Warp image by freely moving the corners.");
|
addNodeObject(transform, "Bend", s_node_bend, "Node_Bend", [1, Node_Bend], ["wrap"]).setVersion(11650);
|
||||||
addNodeObject(transform, "Warp", s_node_warp, "Node_Warp", [1, Node_Warp], ["warp corner"], "Warp image by freely moving the corners.");
|
addNodeObject(transform, "Warp", s_node_warp, "Node_Warp", [1, Node_Warp], ["warp corner"], "Warp image by freely moving the corners.");
|
||||||
addNodeObject(transform, "Skew", s_node_skew, "Node_Skew", [1, Node_Skew], ["shear"], "Skew image horizontally, or vertically.");
|
addNodeObject(transform, "Skew", s_node_skew, "Node_Skew", [1, Node_Skew], ["shear"], "Skew image horizontally, or vertically.");
|
||||||
addNodeObject(transform, "Mesh Warp", s_node_warp_mesh, "Node_Mesh_Warp", [1, Node_Mesh_Warp], ["mesh wrap"], "Wrap image by converting it to mesh, and using control points.");
|
addNodeObject(transform, "Mesh Warp", s_node_warp_mesh, "Node_Mesh_Warp", [1, Node_Mesh_Warp], ["mesh wrap"], "Wrap image by converting it to mesh, and using control points.");
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
globalvar STATUSES, WARNING, ERRORS;
|
globalvar STATUSES, WARNING, ERRORS;
|
||||||
|
|
||||||
STATUSES = ds_list_create();
|
STATUSES = ds_list_create();
|
||||||
WARNING = ds_list_create();
|
WARNING = ds_list_create();
|
||||||
ERRORS = ds_list_create();
|
ERRORS = ds_list_create();
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region classes
|
#region classes
|
||||||
|
@ -14,29 +14,32 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function notification(type, str, icon = noone, color = c_ui_blue_dkgrey, life = -1) constructor {
|
function notification(type, str, icon = noone, color = c_ui_blue_dkgrey, life = -1) constructor {
|
||||||
self.type = type;
|
self.type = type;
|
||||||
self.txt = str;
|
self.txt = str;
|
||||||
self.icon = icon;
|
self.txtclr = COLORS._main_text_sub;
|
||||||
self.color = color;
|
self.icon = icon;
|
||||||
|
self.color = color;
|
||||||
|
|
||||||
self.life_max = life;
|
self.life_max = life;
|
||||||
self.life = life;
|
self.life = life;
|
||||||
|
|
||||||
self.onClick = noone;
|
self.onClick = noone;
|
||||||
self.tooltip = "";
|
self.tooltip = "";
|
||||||
self.icon_end = noone;
|
self.icon_end = noone;
|
||||||
|
|
||||||
self.amount = 1;
|
self.amount = 1;
|
||||||
|
|
||||||
self.time = string_lead_zero(current_hour, 2) + ":" + string_lead_zero(current_minute, 2) + "." + string_lead_zero(current_second, 2);
|
self.time = $"{string_lead_zero(current_hour, 2)}:{string_lead_zero(current_minute, 2)}.{string_lead_zero(current_second, 2)}";
|
||||||
|
|
||||||
static setOnClick = function(onClick, tooltip = "", icon_end = noone) {
|
static setOnClick = function(onClick, tooltip = "", icon_end = noone) {
|
||||||
self.onClick = method(self, onClick);
|
self.onClick = method(self, onClick);
|
||||||
self.tooltip = tooltip;
|
self.tooltip = tooltip;
|
||||||
self.icon_end = icon_end;
|
self.icon_end = icon_end;
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
array_push(CMD, self);
|
||||||
}
|
}
|
||||||
|
|
||||||
function noti_status(str, icon = noone, flash = false, ref = noone) {
|
function noti_status(str, icon = noone, flash = false, ref = noone) {
|
||||||
|
@ -87,6 +90,8 @@
|
||||||
|
|
||||||
show_debug_message("WARNING: " + str);
|
show_debug_message("WARNING: " + str);
|
||||||
var noti = new notification(NOTI_TYPE.warning, str, icon, c_ui_orange, PREFERENCES.notification_time);
|
var noti = new notification(NOTI_TYPE.warning, str, icon, c_ui_orange, PREFERENCES.notification_time);
|
||||||
|
noti.txtclr = c_ui_orange;
|
||||||
|
|
||||||
ds_list_add(STATUSES, noti);
|
ds_list_add(STATUSES, noti);
|
||||||
ds_list_add(WARNING, noti);
|
ds_list_add(WARNING, noti);
|
||||||
|
|
||||||
|
@ -107,6 +112,8 @@
|
||||||
if(PANEL_MAIN == 0) print(str);
|
if(PANEL_MAIN == 0) print(str);
|
||||||
|
|
||||||
var noti = new notification(NOTI_TYPE.error, str, icon, c_ui_red);
|
var noti = new notification(NOTI_TYPE.error, str, icon, c_ui_red);
|
||||||
|
noti.txtclr = c_ui_red;
|
||||||
|
|
||||||
ds_list_add(STATUSES, noti);
|
ds_list_add(STATUSES, noti);
|
||||||
ds_list_add(ERRORS, noti);
|
ds_list_add(ERRORS, noti);
|
||||||
|
|
||||||
|
|
|
@ -1,73 +1,169 @@
|
||||||
|
#region
|
||||||
|
#macro cmdLine new __cmdLine
|
||||||
|
#macro cmdLineIn new __cmdLineIn
|
||||||
|
|
||||||
|
function __cmdLine(txt, color) constructor {
|
||||||
|
self.txt = txt;
|
||||||
|
self.color = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
function __cmdLineIn(txt, color = COLORS._main_text) : __cmdLine(txt, color) constructor {}
|
||||||
|
#endregion
|
||||||
|
|
||||||
function Panel_Console() : PanelContent() constructor {
|
function Panel_Console() : PanelContent() constructor {
|
||||||
title = __txtx("panel_debug_console", "Debug Console");
|
title = __txtx("panel_debug_console", "Console");
|
||||||
w = ui(640);
|
w = ui(640);
|
||||||
h = ui(320);
|
h = ui(320);
|
||||||
|
|
||||||
command = "";
|
|
||||||
history = [];
|
|
||||||
cmd_history = [];
|
|
||||||
|
|
||||||
|
auto_pin = true;
|
||||||
|
command = "";
|
||||||
cmd_index = 0;
|
cmd_index = 0;
|
||||||
|
|
||||||
keyboard_string = "";
|
scroll_y = 0;
|
||||||
|
prevFocus = false;
|
||||||
|
|
||||||
static submit_command = function() {
|
static submit_command = function() { #region
|
||||||
if(command == "") return;
|
if(command == "") return;
|
||||||
array_push(history, { txt: command, color: COLORS._main_text_sub });
|
array_push(CMD, cmdLineIn(command));
|
||||||
array_push(cmd_history, command);
|
array_push(CMDIN, command);
|
||||||
|
|
||||||
var cmd = string_splice(command, " ");
|
var cmd = string_splice(command, " ", false, false);
|
||||||
|
|
||||||
switch(cmd[0]) {
|
switch(cmd[0]) {
|
||||||
case "flag":
|
case "flag":
|
||||||
if(array_length(cmd) < 2) break;
|
if(array_length(cmd) < 2) {
|
||||||
var flg = array_safe_get(cmd, 1, "");
|
array_push(CMD, cmdLine($"Error: \"{cmd[0]}\" not enough argument.", COLORS._main_value_negative) );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
var flg = cmd[1];
|
||||||
global.FLAG[$ flg] = !global.FLAG[$ flg];
|
global.FLAG[$ flg] = !global.FLAG[$ flg];
|
||||||
|
|
||||||
array_push(history, { txt: $"Toggled debug flag: {flg} = {global.FLAG[$ flg]? "True" : "False"}", color: COLORS._main_value_positive });
|
array_push(CMD, cmdLine($"Toggled debug flag: {flg} = {global.FLAG[$ flg]? "True" : "False"}", COLORS._main_value_positive) );
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if(struct_has(FUNCTIONS, cmd[0])) {
|
||||||
|
var _f = FUNCTIONS[$ cmd[0]];
|
||||||
|
var _vars = string_splice(array_safe_get(cmd, 1, ""), ",");
|
||||||
|
var _args = [];
|
||||||
|
|
||||||
|
for( var i = 0, n = array_length(_f.args); i < n; i++ ) {
|
||||||
|
var _arg = _f.args[i];
|
||||||
|
var _def = _arg.fn? _arg.def() : _arg.def;
|
||||||
|
|
||||||
|
if(i < array_length(_vars) && _vars[i] != "") {
|
||||||
|
if(is_real(_def)) _args[i] = toNumber(_vars[i]);
|
||||||
|
else _args[i] = _vars[i];
|
||||||
|
} else
|
||||||
|
_args[i] = _def;
|
||||||
|
}
|
||||||
|
|
||||||
|
callFunction(cmd[0], _args);
|
||||||
|
} else
|
||||||
|
array_push(CMD, cmdLine($"Error: \"{cmd[0]}\" command not found.", COLORS._main_value_negative) );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
keyboard_string = "";
|
|
||||||
command = "";
|
command = "";
|
||||||
}
|
keyboard_string = "";
|
||||||
|
} #endregion
|
||||||
|
|
||||||
function drawContent(panel) {
|
function drawHistory(_y) { #region
|
||||||
HOTKEY_BLOCK = true;
|
var _x = ui(32 + 8);
|
||||||
command = keyboard_string;
|
var _w = w - ui(16 + 32);
|
||||||
|
|
||||||
draw_clear_alpha(CDEF.main_dkblack, 1);
|
draw_set_text(f_code, fa_left, fa_bottom, COLORS._main_text_sub);
|
||||||
|
|
||||||
draw_set_color(c_black);
|
for( var i = array_length(CMD) - 1 - scroll_y; i >= 0; i-- ) {
|
||||||
draw_set_alpha(0.75);
|
var his = CMD[i];
|
||||||
|
|
||||||
|
if(is_instanceof(his, __cmdLine)) {
|
||||||
|
var txt = his.txt;
|
||||||
|
draw_set_color(his.color);
|
||||||
|
|
||||||
|
if(is_instanceof(his, __cmdLineIn)) {
|
||||||
|
draw_sprite_ext(THEME.icon_cmd_enter, 0, _x + ui(8), _y - line_get_height() / 2, 1, 1, 0, his.color, 1);
|
||||||
|
draw_text_line(_x + ui(20), _y, txt, -1, _w);
|
||||||
|
} else
|
||||||
|
draw_text_line(_x, _y, txt, -1, _w);
|
||||||
|
|
||||||
|
_y -= string_height_ext(txt, -1, _w);
|
||||||
|
|
||||||
|
} else if(is_instanceof(his, notification)) {
|
||||||
|
var txt = his.txt;
|
||||||
|
|
||||||
|
draw_set_color(his.txtclr);
|
||||||
|
draw_text_line(_x, _y, txt, -1, _w);
|
||||||
|
_y -= string_height_ext(txt, -1, _w);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
draw_set_color(COLORS._main_text_sub);
|
||||||
|
draw_text_line(_x, _y, his, -1, _w);
|
||||||
|
_y -= string_height_ext(his, -1, _w);
|
||||||
|
}
|
||||||
|
|
||||||
|
draw_set_color(CDEF.main_dkgrey);
|
||||||
|
draw_set_halign(fa_right);
|
||||||
|
draw_text(_x - ui(12), _y + line_get_height(), i);
|
||||||
|
draw_set_halign(fa_left);
|
||||||
|
|
||||||
|
_y -= ui(2);
|
||||||
|
if(_y <= 0) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pHOVER) {
|
||||||
|
if(mouse_wheel_up()) scroll_y = clamp(scroll_y + 1, 0, array_length(CMD) - 1);
|
||||||
|
if(mouse_wheel_down()) scroll_y = clamp(scroll_y - 1, 0, array_length(CMD) - 1);
|
||||||
|
}
|
||||||
|
} #endregion
|
||||||
|
|
||||||
|
function drawContent(panel) { #region
|
||||||
|
if(pFOCUS) {
|
||||||
|
if(prevFocus == false)
|
||||||
|
keyboard_string = command;
|
||||||
|
|
||||||
|
HOTKEY_BLOCK = true;
|
||||||
|
command = keyboard_string;
|
||||||
|
}
|
||||||
|
|
||||||
|
prevFocus = pFOCUS;
|
||||||
|
|
||||||
|
draw_clear(merge_color(c_black, CDEF.main_dkblack, 0.75));
|
||||||
|
|
||||||
|
draw_set_color(merge_color(c_black, CDEF.main_dkblack, 0.60));
|
||||||
|
draw_rectangle(0, 0, ui(32), h, false);
|
||||||
|
|
||||||
|
draw_set_color(merge_color(c_black, CDEF.main_dkblack, 0.25));
|
||||||
draw_rectangle(0, h - ui(28), w, h, false);
|
draw_rectangle(0, h - ui(28), w, h, false);
|
||||||
draw_set_alpha(1);
|
|
||||||
|
|
||||||
draw_set_text(f_code, fa_left, fa_bottom, COLORS._main_text);
|
|
||||||
draw_text(ui(8), h - ui(4), command);
|
|
||||||
draw_set_color(COLORS._main_text_sub);
|
|
||||||
draw_text(ui(8) + string_width(command), h - ui(4), "_");
|
|
||||||
|
|
||||||
var hy = h - ui(32);
|
var hy = h - ui(32);
|
||||||
for( var i = 0, n = array_length(history); i < n; i++ ) {
|
drawHistory(hy);
|
||||||
var his = history[array_length(history) - i - 1];
|
|
||||||
var txt = his.txt;
|
|
||||||
|
|
||||||
draw_set_color(his.color);
|
draw_set_text(f_code, fa_right, fa_bottom, CDEF.main_dkgrey);
|
||||||
draw_text_line(ui(8), hy, txt, -1, w - ui(16));
|
draw_text(ui(32 - 4), h - ui(4), ">");
|
||||||
hy -= string_height_ext(txt, -1, w - ui(16));
|
|
||||||
|
|
||||||
if(hy <= 0) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(keyboard_check_pressed(vk_enter))
|
|
||||||
submit_command();
|
|
||||||
|
|
||||||
if(keyboard_check_pressed(vk_up)) {
|
draw_set_text(f_code, fa_left, fa_bottom, COLORS._main_text);
|
||||||
cmd_index = max(0, cmd_index - 1);
|
draw_text(ui(32 + 8), h - ui(4), command);
|
||||||
keyboard_string = array_safe_get(cmd_history, cmd_index, "");
|
|
||||||
command = keyboard_string;
|
draw_set_color(COLORS._main_text_sub);
|
||||||
} else if(keyboard_check_pressed(vk_anykey))
|
draw_text(ui(32 + 8) + string_width(command), h - ui(4), "_");
|
||||||
cmd_index = array_length(cmd_history);
|
|
||||||
}
|
if(pFOCUS) {
|
||||||
|
if(keyboard_check_pressed(vk_enter)) {
|
||||||
|
submit_command();
|
||||||
|
} else if(keyboard_check_pressed(vk_up)) {
|
||||||
|
cmd_index = max(0, cmd_index - 1);
|
||||||
|
|
||||||
|
var his = array_safe_get(CMDIN, cmd_index, "");
|
||||||
|
command = is_instanceof(his, __cmdLine)? his.txt : his;
|
||||||
|
keyboard_string = command;
|
||||||
|
|
||||||
|
} else if(keyboard_check_pressed(vk_escape)) {
|
||||||
|
command = "";
|
||||||
|
keyboard_string = "";
|
||||||
|
|
||||||
|
} else if(keyboard_check_pressed(vk_anykey)) {
|
||||||
|
cmd_index = array_length(CMDIN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} #endregion
|
||||||
}
|
}
|
|
@ -224,7 +224,7 @@ function Panel_Menu() : PanelContent() constructor {
|
||||||
|
|
||||||
if(TESTING) { #region
|
if(TESTING) { #region
|
||||||
array_push(menus, [ __txt("Dev"), [
|
array_push(menus, [ __txt("Dev"), [
|
||||||
menuItem(__txtx("panel_debug_console", "Debug console"), function() {
|
menuItem(__txtx("panel_debug_console", "Console"), function() {
|
||||||
panelAdd("Panel_Console", true)
|
panelAdd("Panel_Console", true)
|
||||||
}),
|
}),
|
||||||
menuItem(__txtx("panel_debug_overlay", "Debug overlay"), function() {
|
menuItem(__txtx("panel_debug_overlay", "Debug overlay"), function() {
|
||||||
|
|
|
@ -17,7 +17,9 @@
|
||||||
|
|
||||||
PREFERENCES.show_splash = true;
|
PREFERENCES.show_splash = true;
|
||||||
PREFERENCES.splash_expand_recent = false;
|
PREFERENCES.splash_expand_recent = false;
|
||||||
|
|
||||||
PREFERENCES.notification_time = 180;
|
PREFERENCES.notification_time = 180;
|
||||||
|
PREFERENCES.notify_load_version = true;
|
||||||
|
|
||||||
PREFERENCES.display_scaling = 1;
|
PREFERENCES.display_scaling = 1;
|
||||||
PREFERENCES.window_width = 1600;
|
PREFERENCES.window_width = 1600;
|
||||||
|
|
|
@ -97,6 +97,8 @@
|
||||||
|
|
||||||
gc_collect();
|
gc_collect();
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
|
static toString = function() { return $"ProjectObject [{path}]"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
function __initProject() {
|
function __initProject() {
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
function closeProject(project) {
|
function closeProject(project) {
|
||||||
|
CALL("CLOSE");
|
||||||
|
|
||||||
project.active = false;
|
project.active = false;
|
||||||
array_remove(PROJECTS, project);
|
array_remove(PROJECTS, project);
|
||||||
if(array_length(PROJECTS) == 0) {
|
if(array_length(PROJECTS) == 0) {
|
||||||
|
@ -10,7 +12,7 @@ function closeProject(project) {
|
||||||
|
|
||||||
for( var i = array_length(panels) - 1; i >= 0; i-- ) {
|
for( var i = array_length(panels) - 1; i >= 0; i-- ) {
|
||||||
var panel = panels[i];
|
var panel = panels[i];
|
||||||
//print($" Check {panel.project.path}");
|
|
||||||
if(panel.project != project)
|
if(panel.project != project)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,8 @@ globalvar SAVING;
|
||||||
SAVING = false;
|
SAVING = false;
|
||||||
|
|
||||||
function NEW() { #region
|
function NEW() { #region
|
||||||
|
CALL("NEW");
|
||||||
|
|
||||||
PROJECT = new Project();
|
PROJECT = new Project();
|
||||||
array_push(PROJECTS, PROJECT);
|
array_push(PROJECTS, PROJECT);
|
||||||
|
|
||||||
|
@ -11,7 +13,7 @@ function NEW() { #region
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
function save_serialize(project = PROJECT, _outMap = false) { #region
|
function save_serialize(project = PROJECT, _outMap = false) { #region
|
||||||
var _map = {};
|
var _map = {};
|
||||||
_map.version = SAVE_VERSION;
|
_map.version = SAVE_VERSION;
|
||||||
|
|
||||||
var _node_list = [];
|
var _node_list = [];
|
||||||
|
@ -84,6 +86,7 @@ function SAVE_ALL() { #region
|
||||||
function SAVE(project = PROJECT) { #region
|
function SAVE(project = PROJECT) { #region
|
||||||
if(DEMO) return false;
|
if(DEMO) return false;
|
||||||
|
|
||||||
|
print("SAVE");
|
||||||
if(project.path == "" || project.readonly)
|
if(project.path == "" || project.readonly)
|
||||||
return SAVE_AS(project);
|
return SAVE_AS(project);
|
||||||
return SAVE_AT(project, project.path);
|
return SAVE_AT(project, project.path);
|
||||||
|
@ -108,6 +111,8 @@ function SAVE_AS(project = PROJECT) { #region
|
||||||
} #endregion
|
} #endregion
|
||||||
|
|
||||||
function SAVE_AT(project = PROJECT, path = "", log = "save at ") { #region
|
function SAVE_AT(project = PROJECT, path = "", log = "save at ") { #region
|
||||||
|
CALL("SAVE_AT");
|
||||||
|
|
||||||
if(DEMO) return false;
|
if(DEMO) return false;
|
||||||
|
|
||||||
SAVING = true;
|
SAVING = true;
|
||||||
|
|
|
@ -9,6 +9,7 @@ uniform float seed;
|
||||||
uniform vec2 scale;
|
uniform vec2 scale;
|
||||||
uniform vec2 alpha;
|
uniform vec2 alpha;
|
||||||
uniform int mode;
|
uniform int mode;
|
||||||
|
uniform int render;
|
||||||
|
|
||||||
uniform float thickness;
|
uniform float thickness;
|
||||||
|
|
||||||
|
@ -34,15 +35,13 @@ void main() {
|
||||||
float _a = mix(alpha.x, alpha.y, random(vec2(float(i), 2.)));
|
float _a = mix(alpha.x, alpha.y, random(vec2(float(i), 2.)));
|
||||||
|
|
||||||
float dst = 1. - distance(pos, vec2(_x, _y));
|
float dst = 1. - distance(pos, vec2(_x, _y));
|
||||||
|
float st;
|
||||||
|
|
||||||
if(mode == 0) {
|
if(mode == 0) st = smoothstep(1. - max(_t, thickness), 1., 1. - abs(dst - (1. - _s))) * _a;
|
||||||
float st = smoothstep(1. - max(_t, thickness), 1., 1. - abs(dst - (1. - _s))) * _a;
|
else if(mode == 1) st = smoothstep(1. - _s - thickness, 1. - _s + thickness, max(0., dst)) * _a;
|
||||||
w = max(w, st);
|
|
||||||
|
if(render == 0) w = max(w, st);
|
||||||
} else if(mode == 1) {
|
else if(render == 1) w += st;
|
||||||
float st = smoothstep(1. - max(_t, thickness), 1., 1. - max(0., dst - (1. - _s))) * _a;
|
|
||||||
w = max(w, st);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gl_FragColor = vec4(vec3(w), 1.);
|
gl_FragColor = vec4(vec3(w), 1.);
|
||||||
|
|