mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2025-02-07 18:55:22 +01:00
91 lines
No EOL
2.8 KiB
Text
91 lines
No EOL
2.8 KiB
Text
globalvar SPRITE_PATH_MAP;
|
|
SPRITE_PATH_MAP = {};
|
|
|
|
function sprite_add_map(path) {
|
|
var _real_path = sprite_path_check_depth(path);
|
|
var _s = sprite_add(_real_path, 1, 0, 0, 0, 0);
|
|
SPRITE_PATH_MAP[$ path] = _s;
|
|
return _s;
|
|
}
|
|
|
|
function sprite_add_center(path) {
|
|
if(!file_exists_empty(path)) return noone;
|
|
|
|
var _s = sprite_add(path, 0, 0, 0, 0, 0);
|
|
|
|
var _sw = sprite_get_width(_s);
|
|
var _sh = sprite_get_height(_s);
|
|
sprite_set_offset(_s, _sw / 2, _sh / 2);
|
|
|
|
return _s;
|
|
}
|
|
|
|
function sprite_path_check_depth(path, noti = true) {
|
|
if(filename_ext(path) != ".png") return path;
|
|
|
|
var _data = read_png_header(path, noti);
|
|
if(_data == noone) return path;
|
|
if(_data.depth <= 8) return path;
|
|
|
|
if(noti) noti_warning($"{_data.depth} bits image is not supported. Proxy will be used.");
|
|
|
|
var path_magick = filepath_resolve(PREFERENCES.ImageMagick_path) + "magick.exe";
|
|
var proxy_path = $"{TEMPDIR}{filename_name_only(path)}_{seed_random(6)}.png";
|
|
var shell_cmd = $"convert \"{path}\" -depth 8 \"{proxy_path}\"";
|
|
shell_execute(path_magick, shell_cmd, self);
|
|
|
|
return proxy_path;
|
|
}
|
|
|
|
#region ================================= SERIALIZE ==================================
|
|
|
|
function sprite_array_serialize(arr) { return json_stringify(__sprite_array_serialize(arr)); }
|
|
function __sprite_array_serialize(arr) {
|
|
if(!is_array(arr)) {
|
|
if(!sprite_exists(arr)) return arr;
|
|
|
|
var ww = sprite_get_width(arr);
|
|
var hh = sprite_get_height(arr);
|
|
var _srf = surface_create(ww, hh);
|
|
surface_set_target(_srf); DRAW_CLEAR draw_sprite(arr, 0, 0, 0); surface_reset_target();
|
|
|
|
var buff = buffer_create(ww * hh * 4, buffer_fixed, 1);
|
|
buffer_get_surface(buff, _srf, 0);
|
|
var comp = buffer_compress(buff, 0, buffer_get_size(buff));
|
|
var enc = buffer_base64_encode(comp, 0, buffer_get_size(comp));
|
|
|
|
surface_free(_srf);
|
|
buffer_delete(buff);
|
|
|
|
return { width: ww, height: hh, buffer: enc };
|
|
}
|
|
|
|
var _arr = array_create(array_length(arr));
|
|
for( var i = 0, n = array_length(arr); i < n; i++ )
|
|
_arr[i] = __sprite_array_serialize(arr[i]);
|
|
|
|
return _arr;
|
|
}
|
|
|
|
function sprite_array_deserialize(dat) { return __sprite_array_deserialize(json_try_parse(dat, 0)); }
|
|
function __sprite_array_deserialize(arr) {
|
|
if(!is_array(arr)) {
|
|
if(!is_struct(arr) || !struct_has(arr, "buffer")) return noone;
|
|
|
|
var buff = buffer_base64_decode(arr.buffer);
|
|
buff = buffer_decompress(buff);
|
|
var _surf = surface_create_from_buffer(arr.width, arr.height, buff);
|
|
var _spr = sprite_create_from_surface(_surf, 0, 0, arr.width, arr.height, false, false, 0, 0);
|
|
surface_free_safe(_surf);
|
|
|
|
return _spr;
|
|
}
|
|
|
|
var _arr = array_create(array_length(arr));
|
|
for( var i = 0, n = array_length(arr); i < n; i++ )
|
|
_arr[i] = __sprite_array_deserialize(arr[i]);
|
|
|
|
return _arr;
|
|
}
|
|
|
|
#endregion |