From 14d2cdd000450e7082577f874148607df14dd540 Mon Sep 17 00:00:00 2001 From: Vittorio Parrella Date: Fri, 18 Jul 2025 23:58:14 +0200 Subject: [PATCH] feat: added levelJsonCacheActive global ui option to help with loading big projects --- app/assets/tpl/editAppSettings.html | 8 ++++++++ src/electron.common/Settings.hx | 2 ++ src/electron.renderer/data/Level.hx | 5 +++++ src/electron.renderer/ui/ProjectLoader.hx | 4 ++++ src/electron.renderer/ui/modal/dialog/EditAppSettings.hx | 7 +++++++ 5 files changed, 26 insertions(+) diff --git a/app/assets/tpl/editAppSettings.html b/app/assets/tpl/editAppSettings.html index 32b333489..65bbe6222 100644 --- a/app/assets/tpl/editAppSettings.html +++ b/app/assets/tpl/editAppSettings.html @@ -82,6 +82,14 @@

Visuals

+
+ + Disable this if you have issues loading big projects. +
+
+ +
+
Enable this option to use color-blind friendly colors by default for newly created entities, enums or intGrid values. diff --git a/src/electron.common/Settings.hx b/src/electron.common/Settings.hx index 15838d08f..5f4db7697 100644 --- a/src/electron.common/Settings.hx +++ b/src/electron.common/Settings.hx @@ -14,6 +14,7 @@ typedef AppSettings = { var showDetails : Bool; var useBestGPU : Bool; var startFullScreen: Bool; + var levelJsonCacheActive: Bool; var autoInstallUpdates : Bool; var colorBlind : Bool; var blurMask : Bool; @@ -96,6 +97,7 @@ class Settings { showDetails: true, useBestGPU: true, startFullScreen: false, + levelJsonCacheActive: true, autoInstallUpdates: true, colorBlind: false, blurMask: true, diff --git a/src/electron.renderer/data/Level.hx b/src/electron.renderer/data/Level.hx index 4dc7260b4..ceb15c104 100644 --- a/src/electron.renderer/data/Level.hx +++ b/src/electron.renderer/data/Level.hx @@ -4,6 +4,7 @@ class Level { var _project : Project; public var _world : World; + var settings(get,never) : Settings; inline function get_settings() return App.ME.settings; var _cachedJson : Null<{ str:String, json:ldtk.Json.LevelJson }>; @:allow(data.Project, data.World) @@ -379,9 +380,13 @@ class Level { } function setJsonCache(json:ldtk.Json.LevelJson, skipHeader:Bool) { + if( settings.v.levelJsonCacheActive ) { _cachedJson = { str: ui.ProjectSaver.jsonStringify(_project, json, skipHeader ), json: json, + } + } else { + _cachedJson = null; } } diff --git a/src/electron.renderer/ui/ProjectLoader.hx b/src/electron.renderer/ui/ProjectLoader.hx index c16e02126..9f6cd19f9 100644 --- a/src/electron.renderer/ui/ProjectLoader.hx +++ b/src/electron.renderer/ui/ProjectLoader.hx @@ -158,6 +158,10 @@ class ProjectLoader { var raw = NT.readFileString(path); var lJson = haxe.Json.parse(raw); var l = data.Level.fromJson(p, w, lJson, true); + // signal recycling of used values + raw = null; + lJson = null; + // save loaded level data w.levels[curIdx] = l; } catch(e:Dynamic) { diff --git a/src/electron.renderer/ui/modal/dialog/EditAppSettings.hx b/src/electron.renderer/ui/modal/dialog/EditAppSettings.hx index 0d6a14d63..26f8d68d2 100644 --- a/src/electron.renderer/ui/modal/dialog/EditAppSettings.hx +++ b/src/electron.renderer/ui/modal/dialog/EditAppSettings.hx @@ -86,6 +86,13 @@ class EditAppSettings extends ui.modal.Dialog { App.ME.updateBodyClasses(); } + // Levels JSON cache + var j = Input.linkToHtmlInput(settings.v.levelJsonCacheActive, jForm.find("#levelJsonCacheActive")); + j.onValueChange = (v)->{ + onSettingChanged(); + App.ME.updateBodyClasses(); + } + // Single layer mode intensity var allValues = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]; if( !allValues.contains(settings.v.singleLayerModeIntensity) ) {