2023-12-11 09:59:58 +01:00
|
|
|
globalvar THEME_DEF;
|
|
|
|
THEME_DEF = true;
|
|
|
|
|
2023-11-18 03:47:11 +01:00
|
|
|
function __initTheme() { #region
|
2022-11-22 14:25:39 +01:00
|
|
|
var root = DIRECTORY + "Themes";
|
2022-12-19 13:35:30 +01:00
|
|
|
|
2023-11-18 03:47:11 +01:00
|
|
|
directory_verify(root);
|
|
|
|
if(check_version($"{root}/version")) {
|
|
|
|
log_message("THEME", $"unzipping default theme to {root}.");
|
2023-12-12 08:20:05 +01:00
|
|
|
zip_unzip("data/Theme.zip", root);
|
2023-11-18 03:47:11 +01:00
|
|
|
}
|
2023-10-24 02:09:04 +02:00
|
|
|
|
2023-12-11 09:59:58 +01:00
|
|
|
var t = get_timer();
|
|
|
|
|
|
|
|
loadGraphic(PREFERENCES.theme); print($" > Load graphic | complete in {get_timer() - t}"); t = get_timer();
|
|
|
|
loadColor(PREFERENCES.theme); print($" > Load color | complete in {get_timer() - t}"); t = get_timer();
|
2023-11-18 03:47:11 +01:00
|
|
|
} #endregion
|
2022-11-22 14:25:39 +01:00
|
|
|
|
2023-11-18 03:47:11 +01:00
|
|
|
function _sprite_path(rel, theme) { #region
|
2023-11-08 08:38:04 +01:00
|
|
|
INLINE
|
2023-12-08 03:50:09 +01:00
|
|
|
return $"{DIRECTORY}Themes/{theme}/graphics/{string_replace_all(rel, "./", "")}";
|
2023-11-18 03:47:11 +01:00
|
|
|
} #endregion
|
2022-11-18 03:20:31 +01:00
|
|
|
|
2023-11-18 03:47:11 +01:00
|
|
|
function _sprite_load_from_struct(str, theme, key) { #region
|
2023-11-08 08:38:04 +01:00
|
|
|
INLINE
|
2023-10-23 11:39:41 +02:00
|
|
|
|
2022-11-18 03:20:31 +01:00
|
|
|
var path = _sprite_path(str.path, theme);
|
2023-10-23 11:39:41 +02:00
|
|
|
var s = sprite_add(path, str.subimages, false, true, str.xorigin, str.yorigin);
|
|
|
|
|
2022-11-18 03:20:31 +01:00
|
|
|
if(str.slice) {
|
|
|
|
var slice = sprite_nineslice_create();
|
|
|
|
slice.enabled = str.slice.enabled;
|
|
|
|
slice.left = str.slice.left;
|
|
|
|
slice.right = str.slice.right;
|
|
|
|
slice.top = str.slice.top;
|
|
|
|
slice.bottom = str.slice.bottom;
|
2022-12-10 05:06:01 +01:00
|
|
|
|
2023-06-10 13:59:45 +02:00
|
|
|
if(struct_has(str.slice, "tilemode"))
|
|
|
|
slice.tilemode = str.slice.tilemode;
|
|
|
|
|
2023-09-07 20:59:14 +02:00
|
|
|
if(s >= 0) sprite_set_nineslice(s, slice);
|
|
|
|
else log_message("THEME", $"Load sprite {path} failed.");
|
2022-11-18 03:20:31 +01:00
|
|
|
}
|
|
|
|
return s;
|
2023-11-18 03:47:11 +01:00
|
|
|
} #endregion
|
2022-11-18 03:20:31 +01:00
|
|
|
|
2023-11-18 03:47:11 +01:00
|
|
|
function loadGraphic(theme = "default") { #region
|
2023-12-11 09:59:58 +01:00
|
|
|
var path = _sprite_path("./graphics.json", theme);
|
|
|
|
|
|
|
|
if(THEME_DEF) {
|
|
|
|
var sprStr = json_load_struct(path);
|
|
|
|
var graphics = variable_struct_get_names(sprStr);
|
|
|
|
var str;
|
|
|
|
|
|
|
|
for( var i = 0, n = array_length(graphics); i < n; i++ ) {
|
|
|
|
var key = graphics[i];
|
|
|
|
|
|
|
|
if(struct_has(sprStr, key)) {
|
|
|
|
str = sprStr[$ key];
|
|
|
|
THEME[$ key] = _sprite_load_from_struct(str, theme, key);
|
|
|
|
} else {
|
|
|
|
noti_status($"Graphic resource for {key} not found. Rollback to default directory.");
|
|
|
|
|
|
|
|
str = sprDef[$ key];
|
|
|
|
THEME[$ key] = _sprite_load_from_struct(str, "default", key);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
var sprDef = json_load_struct(_sprite_path("./graphics.json", "default"));
|
2023-10-27 13:55:31 +02:00
|
|
|
var _metaP = $"{DIRECTORY}Themes/{theme}/meta.json";
|
2023-12-08 03:50:09 +01:00
|
|
|
|
|
|
|
if(!file_exists_empty(_metaP))
|
2023-10-27 13:55:31 +02:00
|
|
|
noti_warning("Loading theme made for older version.");
|
|
|
|
else {
|
|
|
|
var _meta = json_load_struct(_metaP);
|
|
|
|
if(_meta[$ "version"] < VERSION)
|
|
|
|
noti_warning("Loading theme made for older version.");
|
|
|
|
}
|
2022-11-18 03:20:31 +01:00
|
|
|
|
2023-10-23 11:39:41 +02:00
|
|
|
print($"Loading theme {theme}");
|
2023-12-08 03:50:09 +01:00
|
|
|
if(!file_exists_empty(path)) {
|
2023-10-27 13:55:31 +02:00
|
|
|
print("Theme not defined at " + path + ", rollback to default theme.");
|
2022-11-18 03:20:31 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
var graphics = variable_struct_get_names(sprDef);
|
2023-12-11 09:59:58 +01:00
|
|
|
var sprStr = json_load_struct(path);
|
2023-10-23 11:39:41 +02:00
|
|
|
var str;
|
2022-11-18 03:20:31 +01:00
|
|
|
|
2023-07-25 20:12:40 +02:00
|
|
|
for( var i = 0, n = array_length(graphics); i < n; i++ ) {
|
2022-11-18 03:20:31 +01:00
|
|
|
var key = graphics[i];
|
2023-10-23 11:39:41 +02:00
|
|
|
|
|
|
|
if(struct_has(sprStr, key)) {
|
|
|
|
str = sprStr[$ key];
|
|
|
|
THEME[$ key] = _sprite_load_from_struct(str, theme, key);
|
2022-11-18 03:20:31 +01:00
|
|
|
} else {
|
2023-10-23 11:39:41 +02:00
|
|
|
noti_status($"Graphic resource for {key} not found. Rollback to default directory.");
|
2022-11-18 03:20:31 +01:00
|
|
|
|
2023-10-23 11:39:41 +02:00
|
|
|
str = sprDef[$ key];
|
|
|
|
THEME[$ key] = _sprite_load_from_struct(str, "default", key);
|
2022-11-18 03:20:31 +01:00
|
|
|
}
|
|
|
|
}
|
2023-11-18 03:47:11 +01:00
|
|
|
} #endregion
|