2022-01-13 05:24:03 +01:00
|
|
|
#region data
|
|
|
|
globalvar PREF_MAP;
|
|
|
|
PREF_MAP = ds_map_create();
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region pref map
|
2022-11-21 06:38:44 +01:00
|
|
|
PREF_MAP[? "ui_framerate"] = 60;
|
2022-01-13 05:24:03 +01:00
|
|
|
PREF_MAP[? "path_resolution"] = 32;
|
|
|
|
|
2022-12-12 09:08:03 +01:00
|
|
|
PREF_MAP[? "double_click_delay"] = 0.25;
|
|
|
|
PREF_MAP[? "keyboard_repeat_start"] = 0.50;
|
|
|
|
PREF_MAP[? "keyboard_repeat_speed"] = 0.10;
|
2022-01-13 05:24:03 +01:00
|
|
|
|
|
|
|
PREF_MAP[? "show_splash"] = true;
|
2022-12-22 03:09:55 +01:00
|
|
|
PREF_MAP[? "notification_time"] = 180;
|
2022-01-13 05:24:03 +01:00
|
|
|
|
|
|
|
PREF_MAP[? "display_scaling"] = 1;
|
|
|
|
|
|
|
|
PREF_MAP[? "window_width"] = 1600;
|
|
|
|
PREF_MAP[? "window_height"] = 800;
|
|
|
|
PREF_MAP[? "window_maximize"] = false;
|
|
|
|
|
2023-01-04 02:30:04 +01:00
|
|
|
PREF_MAP[? "connection_line_width"] = 2;
|
|
|
|
PREF_MAP[? "connection_line_sample"] = 1;
|
|
|
|
PREF_MAP[? "curve_connection_line"] = true;
|
2022-01-13 05:24:03 +01:00
|
|
|
|
|
|
|
PREF_MAP[? "default_surface_side"] = 32;
|
|
|
|
|
|
|
|
PREF_MAP[? "panel_layout"] = 1;
|
|
|
|
PREF_MAP[? "panel_collection"] = true;
|
|
|
|
|
2022-09-21 06:09:40 +02:00
|
|
|
PREF_MAP[? "inspector_line_break_width"] = 500;
|
|
|
|
|
2022-12-10 05:06:01 +01:00
|
|
|
PREF_MAP[? "node_show_render_status"] = false;
|
2022-01-16 14:28:57 +01:00
|
|
|
PREF_MAP[? "node_show_time"] = true;
|
2022-01-14 13:47:15 +01:00
|
|
|
|
2022-12-12 09:08:03 +01:00
|
|
|
PREF_MAP[? "part_max_amount"] = 1024;
|
|
|
|
PREF_MAP[? "shape_separation_max"] = 256;
|
2022-09-23 13:28:42 +02:00
|
|
|
PREF_MAP[? "level_resolution"] = 64;
|
|
|
|
PREF_MAP[? "level_max_sampling"] = 32;
|
|
|
|
PREF_MAP[? "verlet_iteration"] = 4;
|
2022-01-25 10:58:11 +01:00
|
|
|
|
|
|
|
PREF_MAP[? "collection_preview_speed"] = 60;
|
2022-11-14 03:16:15 +01:00
|
|
|
PREF_MAP[? "expand_hover"] = false;
|
2022-11-18 03:20:31 +01:00
|
|
|
|
2022-12-10 05:06:01 +01:00
|
|
|
PREF_MAP[? "graph_zoom_smoooth"] = 4;
|
|
|
|
|
2022-11-18 03:20:31 +01:00
|
|
|
PREF_MAP[? "theme"] = "default";
|
2022-01-13 05:24:03 +01:00
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region hotkeys
|
|
|
|
function hotkeyObject(_context, _name, _key, _mod, _action) constructor {
|
|
|
|
context = _context;
|
|
|
|
name = _name;
|
|
|
|
key = _key;
|
|
|
|
modi = _mod;
|
|
|
|
action = _action;
|
|
|
|
|
|
|
|
static serialize = function() {
|
|
|
|
var ll = ds_list_create();
|
|
|
|
ll[| 0] = context;
|
|
|
|
ll[| 1] = name;
|
|
|
|
ll[| 2] = key;
|
|
|
|
ll[| 3] = modi;
|
|
|
|
return ll;
|
|
|
|
}
|
|
|
|
|
|
|
|
static deserialize = function(ll) {
|
|
|
|
var _k = is_string(ll[| 2])? ord(ll[| 2]) : ll[| 2];
|
|
|
|
key = _k;
|
|
|
|
modi = ll[| 3];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function addHotkey(_context, _name, _key, _mod, _action) {
|
|
|
|
if(_key == "") _key = -1;
|
|
|
|
if(is_string(_key)) _key = ord(_key);
|
|
|
|
|
|
|
|
var key = new hotkeyObject(_context, _name, _key, _mod, _action);
|
|
|
|
|
|
|
|
if(!ds_map_exists(HOTKEYS, _context)) {
|
|
|
|
HOTKEYS[? _context] = ds_list_create();
|
|
|
|
if(ds_list_find_index(HOTKEY_CONTEXT, _context) == -1)
|
|
|
|
ds_list_add(HOTKEY_CONTEXT, _context);
|
|
|
|
}
|
|
|
|
|
|
|
|
for(var i = 0; i < ds_list_size(HOTKEYS[? _context]); i++) {
|
|
|
|
var hotkey = HOTKEYS[? _context][| i];
|
|
|
|
if(hotkey.name == key.name) {
|
|
|
|
delete HOTKEYS[? _context][| i];
|
|
|
|
HOTKEYS[? _context][| i] = key;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if(_context == "")
|
|
|
|
ds_list_insert(HOTKEYS[? _context], 0, key);
|
|
|
|
else
|
|
|
|
ds_list_add(HOTKEYS[? _context], key);
|
|
|
|
}
|
|
|
|
|
|
|
|
function key_get_name(_key, _mod) {
|
|
|
|
var dk = "";
|
2022-11-01 03:06:03 +01:00
|
|
|
if(_mod & MOD_KEY.ctrl) dk += "Ctrl+";
|
|
|
|
if(_mod & MOD_KEY.shift) dk += "Shift+";
|
|
|
|
if(_mod & MOD_KEY.alt) dk += "Alt+";
|
2022-01-13 05:24:03 +01:00
|
|
|
|
|
|
|
switch(_key) {
|
|
|
|
case vk_space : dk += "Space"; break;
|
|
|
|
case vk_left : dk += "Left"; break;
|
|
|
|
case vk_right : dk += "Right"; break;
|
|
|
|
case vk_up : dk += "Up"; break;
|
|
|
|
case vk_down : dk += "Down"; break;
|
|
|
|
case vk_backspace : dk += "Backspace"; break;
|
|
|
|
case vk_tab : dk += "Tab"; break;
|
|
|
|
case vk_home : dk += "Home"; break;
|
|
|
|
case vk_end : dk += "End"; break;
|
|
|
|
case vk_delete : dk += "Delete"; break;
|
|
|
|
case vk_insert : dk += "Insert"; break;
|
|
|
|
case vk_pageup : dk += "Page Up"; break;
|
|
|
|
case vk_pagedown : dk += "Page Down"; break;
|
|
|
|
case vk_pause : dk += "Pause"; break;
|
|
|
|
case vk_printscreen : dk += "Printscreen"; break;
|
|
|
|
case vk_f1 : dk += "F1"; break;
|
|
|
|
case vk_f2 : dk += "F2"; break;
|
|
|
|
case vk_f3 : dk += "F3"; break;
|
|
|
|
case vk_f4 : dk += "F4"; break;
|
|
|
|
case vk_f5 : dk += "F5"; break;
|
|
|
|
case vk_f6 : dk += "F6"; break;
|
|
|
|
case vk_f7 : dk += "F7"; break;
|
|
|
|
case vk_f8 : dk += "F8"; break;
|
|
|
|
case vk_f9 : dk += "F9"; break;
|
|
|
|
case vk_f10 : dk += "F10"; break;
|
|
|
|
case vk_f11 : dk += "F11"; break;
|
|
|
|
case vk_f12 : dk += "F12"; break;
|
|
|
|
default : dk += ansi_char(_key); break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return dk;
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region recent files
|
|
|
|
globalvar RECENT_FILES;
|
|
|
|
RECENT_FILES = ds_list_create();
|
|
|
|
|
|
|
|
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);
|
|
|
|
file_text_write_string(file, json_encode(map));
|
|
|
|
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")) {
|
|
|
|
ds_list_copy(RECENT_FILES, map[? "Recents"]);
|
|
|
|
|
|
|
|
var del = ds_stack_create();
|
|
|
|
for(var i = 0; i < ds_list_size(RECENT_FILES); i++) {
|
|
|
|
if(!file_exists(RECENT_FILES[| i])) ds_stack_push(del, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
while(!ds_stack_empty(del)) {
|
|
|
|
ds_list_delete(RECENT_FILES, ds_stack_pop(del));
|
|
|
|
}
|
|
|
|
|
|
|
|
ds_stack_destroy(del);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region save load
|
|
|
|
function PREF_SAVE() {
|
|
|
|
var map = ds_map_create();
|
|
|
|
|
|
|
|
var save_l = ds_list_create();
|
|
|
|
for(var j = 0; j < ds_list_size(HOTKEY_CONTEXT); j++) {
|
|
|
|
var ll = HOTKEYS[? HOTKEY_CONTEXT[| j]];
|
|
|
|
|
|
|
|
for(var i = 0; i < ds_list_size(ll); i++) {
|
|
|
|
ds_list_add(save_l, ll[| i].serialize());
|
|
|
|
ds_list_mark_as_list(save_l, ds_list_size(save_l) - 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ds_map_add_list(map, "key", save_l);
|
|
|
|
|
|
|
|
var _pref = ds_map_create();
|
|
|
|
ds_map_override(_pref, PREF_MAP);
|
|
|
|
ds_map_add_map(map, "preferences", _pref);
|
|
|
|
|
|
|
|
var path = DIRECTORY + "keys.json";
|
|
|
|
var file = file_text_open_write(path);
|
|
|
|
file_text_write_string(file, json_encode(map));
|
|
|
|
file_text_close(file);
|
|
|
|
ds_map_destroy(map);
|
|
|
|
}
|
|
|
|
|
|
|
|
function PREF_LOAD() {
|
|
|
|
var path = DIRECTORY + "keys.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, "key")) {
|
|
|
|
var key = map[? "key"];
|
|
|
|
for(var i = 0; i < ds_list_size(key); i++) {
|
|
|
|
var key_list = key[| i];
|
|
|
|
var _context = key_list[| 0];
|
|
|
|
var name = key_list[| 1];
|
|
|
|
|
|
|
|
var _key = find_hotkey(_context, name);
|
|
|
|
if(_key)
|
|
|
|
_key.deserialize(key_list);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if(ds_map_exists(map, "preferences")) {
|
|
|
|
ds_map_override(PREF_MAP, map[? "preferences"]);
|
|
|
|
}
|
|
|
|
|
|
|
|
ds_map_destroy(map);
|
|
|
|
|
|
|
|
var ww, hh;
|
2022-09-27 06:37:28 +02:00
|
|
|
|
2022-01-13 05:24:03 +01:00
|
|
|
if(PREF_MAP[? "window_maximize"]) {
|
2022-09-27 06:37:28 +02:00
|
|
|
ww = window_get_width();
|
|
|
|
hh = window_get_height();
|
2022-01-13 05:24:03 +01:00
|
|
|
} else {
|
|
|
|
ww = PREF_MAP[? "window_width"];
|
|
|
|
hh = PREF_MAP[? "window_height"];
|
|
|
|
}
|
2022-09-27 06:37:28 +02:00
|
|
|
|
2022-12-12 09:08:03 +01:00
|
|
|
if(PREF_MAP[? "double_click_delay"] > 1)
|
|
|
|
PREF_MAP[? "double_click_delay"] /= 60;
|
|
|
|
|
2022-09-27 06:37:28 +02:00
|
|
|
window_set_size(ww, hh);
|
|
|
|
window_set_position(display_get_width() / 2 - ww / 2, display_get_height() / 2 - hh / 2);
|
2022-11-21 06:38:44 +01:00
|
|
|
game_set_speed(PREF_MAP[? "ui_framerate"], gamespeed_fps);
|
2022-01-13 05:24:03 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
function find_hotkey(_context, _name) {
|
|
|
|
if(ds_map_exists(HOTKEYS, _context)) {
|
|
|
|
for(var j = 0; j < ds_list_size(HOTKEYS[? _context]); j++) {
|
|
|
|
if(HOTKEYS[? _context][| j].name == _name) {
|
2022-09-21 06:09:40 +02:00
|
|
|
return HOTKEYS[? _context][| j];
|
2022-01-13 05:24:03 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return noone;
|
|
|
|
}
|
|
|
|
#endregion
|