2023-10-31 05:30:42 +01:00
|
|
|
#region preference
|
2023-10-31 15:24:54 +01:00
|
|
|
globalvar PREFERENCES, PREFERENCES_DEF;
|
2023-10-31 05:30:42 +01:00
|
|
|
PREFERENCES = {};
|
|
|
|
|
|
|
|
PREFERENCES.ui_framerate = 60;
|
|
|
|
PREFERENCES.path_resolution = 32;
|
|
|
|
|
|
|
|
PREFERENCES.double_click_delay = 0.25;
|
|
|
|
PREFERENCES.mouse_wheel_speed = 1.00;
|
|
|
|
|
|
|
|
PREFERENCES.keyboard_repeat_start = 0.50;
|
|
|
|
PREFERENCES.keyboard_repeat_speed = 0.10;
|
|
|
|
|
|
|
|
PREFERENCES.show_splash = true;
|
|
|
|
PREFERENCES.splash_expand_recent = false;
|
|
|
|
PREFERENCES.notification_time = 180;
|
|
|
|
|
|
|
|
PREFERENCES.display_scaling = 1;
|
|
|
|
PREFERENCES.window_width = 1600;
|
|
|
|
PREFERENCES.window_height = 800;
|
|
|
|
PREFERENCES.window_maximize = false;
|
|
|
|
|
|
|
|
PREFERENCES.connection_line_width = 2;
|
|
|
|
PREFERENCES.connection_line_sample = 1;
|
|
|
|
PREFERENCES.connection_line_corner = 8;
|
|
|
|
PREFERENCES.connection_line_aa = 2;
|
|
|
|
PREFERENCES.connection_line_transition = true;
|
|
|
|
PREFERENCES.connection_line_highlight = 0;
|
|
|
|
PREFERENCES.connection_line_highlight_fade = 0.75;
|
|
|
|
PREFERENCES.connection_line_highlight_all = false;
|
|
|
|
PREFERENCES.curve_connection_line = 1;
|
|
|
|
|
|
|
|
PREFERENCES.default_surface_side = 32;
|
|
|
|
|
|
|
|
PREFERENCES.panel_layout_file = "Vertical";
|
|
|
|
PREFERENCES.panel_graph_dragging = MOD_KEY.alt;
|
|
|
|
PREFERENCES.panel_preview_dragging = MOD_KEY.alt;
|
|
|
|
|
|
|
|
PREFERENCES.inspector_line_break_width = 500;
|
2023-10-31 13:33:36 +01:00
|
|
|
PREFERENCES.inspector_focus_on_double_click = true;
|
2023-10-31 05:30:42 +01:00
|
|
|
|
|
|
|
PREFERENCES.node_show_render_status = false;
|
|
|
|
PREFERENCES.node_show_time = true;
|
|
|
|
|
|
|
|
PREFERENCES.collection_preview_speed = 60;
|
|
|
|
PREFERENCES.expand_hover = false;
|
|
|
|
|
|
|
|
PREFERENCES.graph_zoom_smoooth = 4;
|
|
|
|
|
|
|
|
PREFERENCES.theme = "default";
|
|
|
|
PREFERENCES.local = "en";
|
|
|
|
|
|
|
|
PREFERENCES.dialog_add_node_grouping = true;
|
|
|
|
PREFERENCES.dialog_add_node_view = 0;
|
|
|
|
|
|
|
|
PREFERENCES.physics_gravity = [ 0, 10 ];
|
|
|
|
|
|
|
|
PREFERENCES.test_mode = false;
|
|
|
|
PREFERENCES.auto_save_time = 300;
|
|
|
|
PREFERENCES.use_legacy_exception = false;
|
|
|
|
|
|
|
|
PREFERENCES.dialog_add_node_w = 532;
|
|
|
|
PREFERENCES.dialog_add_node_h = 400;
|
|
|
|
|
|
|
|
PREFERENCES.panel_menu_resource_monitor = false;
|
|
|
|
PREFERENCES.panel_menu_right_control = os_type == os_windows;
|
|
|
|
|
|
|
|
PREFERENCES.show_crash_dialog = false;
|
|
|
|
PREFERENCES.save_file_minify = true;
|
|
|
|
PREFERENCES.render_all_export = true;
|
|
|
|
|
|
|
|
PREFERENCES.alt_picker = true;
|
|
|
|
PREFERENCES.clear_temp_on_close = true;
|
|
|
|
PREFERENCES.pan_mouse_key = mb_middle;
|
2023-10-31 15:24:54 +01:00
|
|
|
|
2023-11-01 08:10:25 +01:00
|
|
|
PREFERENCES.temp_path = "%DIR%/temp/";
|
|
|
|
PREFERENCES.ImageMagick_path = "%APP%/ImageMagick/";
|
|
|
|
PREFERENCES.webp_path = "%APP%/webp/";
|
|
|
|
PREFERENCES.gifski_path = "%APP%/gifski/";
|
|
|
|
PREFERENCES.ffmpeg_path = "%APP%/ffmpeg/";
|
|
|
|
|
2023-10-31 15:24:54 +01:00
|
|
|
PREFERENCES_DEF = variable_clone(PREFERENCES);
|
2022-01-13 05:24:03 +01:00
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region recent files
|
2023-03-05 07:16:44 +01:00
|
|
|
globalvar RECENT_FILES, RECENT_FILE_DATA;
|
|
|
|
RECENT_FILES = ds_list_create();
|
|
|
|
RECENT_FILE_DATA = ds_list_create();
|
2022-01-13 05:24:03 +01:00
|
|
|
|
|
|
|
function RECENT_SAVE() {
|
|
|
|
var map = ds_map_create();
|
|
|
|
var l = ds_list_create();
|
|
|
|
ds_list_copy(l, RECENT_FILES);
|
|
|
|
ds_map_add_list(map, "Recents", l);
|
|
|
|
|
|
|
|
var path = DIRECTORY + "recent.json";
|
|
|
|
var file = file_text_open_write(path);
|
2023-02-14 02:51:14 +01:00
|
|
|
file_text_write_string(file, json_encode_minify(map));
|
2022-01-13 05:24:03 +01:00
|
|
|
file_text_close(file);
|
|
|
|
ds_map_destroy(map);
|
|
|
|
}
|
|
|
|
|
|
|
|
function RECENT_LOAD() {
|
|
|
|
var path = DIRECTORY + "recent.json";
|
|
|
|
if(!file_exists(path)) return;
|
|
|
|
|
|
|
|
var file = file_text_open_read(path);
|
|
|
|
var load_str = "";
|
|
|
|
while(!file_text_eof(file)) {
|
|
|
|
load_str += file_text_readln(file);
|
|
|
|
}
|
|
|
|
file_text_close(file);
|
|
|
|
var map = json_decode(load_str);
|
|
|
|
|
|
|
|
if(ds_map_exists(map, "Recents")) {
|
2023-01-17 08:11:55 +01:00
|
|
|
var l = map[? "Recents"];
|
|
|
|
ds_list_clear(RECENT_FILES);
|
2022-01-13 05:24:03 +01:00
|
|
|
|
2023-01-17 08:11:55 +01:00
|
|
|
for(var i = 0; i < ds_list_size(l); i++) {
|
|
|
|
if(!file_exists(l[| i])) continue;
|
|
|
|
ds_list_add(RECENT_FILES, l[| i]);
|
2022-01-13 05:24:03 +01:00
|
|
|
}
|
|
|
|
}
|
2023-03-05 07:16:44 +01:00
|
|
|
|
|
|
|
RECENT_REFRESH();
|
|
|
|
}
|
|
|
|
|
|
|
|
function RECENT_REFRESH() {
|
|
|
|
for( var i = 0; i < ds_list_size(RECENT_FILE_DATA); i++ ) {
|
|
|
|
var d = RECENT_FILE_DATA[| i];
|
|
|
|
if(sprite_exists(d.spr)) sprite_delete(d.spr);
|
|
|
|
if(surface_exists(d.thumbnail)) surface_free(d.thumbnail);
|
|
|
|
}
|
|
|
|
|
|
|
|
ds_list_clear(RECENT_FILE_DATA);
|
|
|
|
|
|
|
|
for( var i = 0; i < ds_list_size(RECENT_FILES); i++ ) {
|
|
|
|
var p = RECENT_FILES[| i];
|
|
|
|
RECENT_FILE_DATA[| i] = new FileObject(filename_name_only(p), p);
|
|
|
|
}
|
2022-01-13 05:24:03 +01:00
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region save load
|
|
|
|
function PREF_SAVE() {
|
2023-10-31 05:30:42 +01:00
|
|
|
var map = {};
|
2022-01-13 05:24:03 +01:00
|
|
|
|
2023-10-31 05:30:42 +01:00
|
|
|
var save_l = [];
|
2022-01-13 05:24:03 +01:00
|
|
|
for(var j = 0; j < ds_list_size(HOTKEY_CONTEXT); j++) {
|
|
|
|
var ll = HOTKEYS[? HOTKEY_CONTEXT[| j]];
|
|
|
|
|
2023-10-31 05:30:42 +01:00
|
|
|
for(var i = 0; i < ds_list_size(ll); i++)
|
|
|
|
array_push(save_l, ll[| i].serialize());
|
2022-01-13 05:24:03 +01:00
|
|
|
}
|
|
|
|
|
2023-10-31 05:30:42 +01:00
|
|
|
map.key = save_l;
|
2023-02-14 02:51:14 +01:00
|
|
|
|
2023-10-31 05:30:42 +01:00
|
|
|
PREFERENCES.window_maximize = gameframe_is_maximized();
|
|
|
|
PREFERENCES.window_width = WIN_W;
|
|
|
|
PREFERENCES.window_height = WIN_H;
|
2022-01-13 05:24:03 +01:00
|
|
|
|
2023-10-31 05:30:42 +01:00
|
|
|
map.preferences = PREFERENCES;
|
2023-03-21 03:01:53 +01:00
|
|
|
|
2023-10-31 05:30:42 +01:00
|
|
|
json_save_struct(DIRECTORY + "keys.json", map);
|
2023-03-28 06:58:28 +02:00
|
|
|
json_save_struct(DIRECTORY + "Nodes/fav.json", global.FAV_NODES);
|
|
|
|
json_save_struct(DIRECTORY + "Nodes/recent.json", global.RECENT_NODES);
|
2023-10-31 05:30:42 +01:00
|
|
|
json_save_struct(DIRECTORY + "key_nodes.json", HOTKEYS_CUSTOM);
|
2022-01-13 05:24:03 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
function PREF_LOAD() {
|
|
|
|
var path = DIRECTORY + "keys.json";
|
|
|
|
if(!file_exists(path)) return;
|
|
|
|
|
2023-10-31 05:30:42 +01:00
|
|
|
var map = json_load_struct(path);
|
2022-01-13 05:24:03 +01:00
|
|
|
|
2023-10-31 05:30:42 +01:00
|
|
|
var key = map.key;
|
|
|
|
for(var i = 0; i < array_length(key); i++) {
|
|
|
|
var key_list = key[i];
|
|
|
|
var _context = is_struct(key_list)? key_list.context : key_list[0];
|
|
|
|
var name = is_struct(key_list)? key_list.name : key_list[1];
|
|
|
|
|
|
|
|
var _key = find_hotkey(_context, name);
|
|
|
|
if(_key) _key.deserialize(key_list);
|
2022-01-13 05:24:03 +01:00
|
|
|
}
|
|
|
|
|
2023-10-31 05:30:42 +01:00
|
|
|
struct_override(PREFERENCES, map.preferences);
|
2022-01-13 05:24:03 +01:00
|
|
|
|
2023-10-31 05:30:42 +01:00
|
|
|
if(!directory_exists($"{DIRECTORY}Themes/{PREFERENCES.theme}"))
|
|
|
|
PREFERENCES.theme = "default";
|
2023-10-04 07:21:45 +02:00
|
|
|
|
|
|
|
var f = json_load_struct(DIRECTORY + "key_nodes.json");
|
|
|
|
struct_override(HOTKEYS_CUSTOM, f);
|
2023-10-08 15:12:20 +02:00
|
|
|
|
2023-10-31 05:30:42 +01:00
|
|
|
LOCALE_USE_DEFAULT = PREFERENCES.local == "en";
|
2023-11-01 08:10:25 +01:00
|
|
|
|
|
|
|
directory_verify(filepath_resolve(PREFERENCES.temp_path));
|
2023-01-25 06:49:00 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
function PREF_APPLY() {
|
2023-10-31 05:30:42 +01:00
|
|
|
if(PREFERENCES.double_click_delay > 1)
|
|
|
|
PREFERENCES.double_click_delay /= 60;
|
2023-02-14 02:51:14 +01:00
|
|
|
|
2023-10-31 05:30:42 +01:00
|
|
|
TESTING = struct_try_get(PREFERENCES, "test_mode", false);
|
2022-09-27 06:37:28 +02:00
|
|
|
|
2023-10-31 05:30:42 +01:00
|
|
|
if(PREFERENCES.use_legacy_exception) resetException();
|
|
|
|
else setException();
|
2023-02-19 02:13:19 +01:00
|
|
|
|
2023-03-21 12:50:08 +01:00
|
|
|
if(OS != os_macosx && !LOADING) {
|
2023-10-31 05:30:42 +01:00
|
|
|
if(PREFERENCES.window_maximize) {
|
2023-02-23 07:02:19 +01:00
|
|
|
gameframe_maximize();
|
|
|
|
} else {
|
2023-10-31 05:30:42 +01:00
|
|
|
var ww = PREFERENCES.window_width;
|
|
|
|
var hh = PREFERENCES.window_height;
|
2023-02-14 02:51:14 +01:00
|
|
|
|
2023-02-23 07:02:19 +01:00
|
|
|
window_set_position(display_get_width() / 2 - ww / 2, display_get_height() / 2 - hh / 2);
|
|
|
|
window_set_size(ww, hh);
|
|
|
|
}
|
2022-01-13 05:24:03 +01:00
|
|
|
}
|
2023-10-31 05:30:42 +01:00
|
|
|
game_set_speed(PREFERENCES.ui_framerate, gamespeed_fps);
|
2023-01-25 06:49:00 +01:00
|
|
|
|
2023-10-31 05:30:42 +01:00
|
|
|
var grav = struct_try_get(PREFERENCES, "physics_gravity", [ 0, 10 ]);
|
|
|
|
physics_world_gravity(array_safe_get(grav, 0, 0), array_safe_get(grav, 1, 10));
|
2022-01-13 05:24:03 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
function find_hotkey(_context, _name) {
|
2023-01-17 08:11:55 +01:00
|
|
|
if(!ds_map_exists(HOTKEYS, _context)) return noone;
|
|
|
|
|
|
|
|
for(var j = 0; j < ds_list_size(HOTKEYS[? _context]); j++) {
|
|
|
|
if(HOTKEYS[? _context][| j].name == _name)
|
|
|
|
return HOTKEYS[? _context][| j];
|
2022-01-13 05:24:03 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
#endregion
|