Files
Leenkx_Templates/top_down/Sources/lnx/SettingsTrait.hx
2026-05-06 19:12:34 -07:00

69 lines
2.0 KiB
Haxe

package lnx;
import iron.Scene;
import leenkx.system.Event;
import leenkx.data.Config;
import leenkx.trait.internal.CanvasScript;
import leenkx.renderpath.RenderPathCreator;
class SettingsTrait extends iron.Trait {
var canvas:CanvasScript;
var envStrength = 0.0;
public function new() {
super();
notifyOnInit(function() {
canvas = Scene.active.getTrait(CanvasScript);
// Init UI to values loaded from config.lnx file
canvas.notifyOnReady(function() {
canvas.getElement("MenuContainer").visible = false;
canvas.getHandle("SSAO").selected = Config.raw.rp_ssgi;
canvas.getHandle("SSR").selected = Config.raw.rp_ssr;
canvas.getHandle("Bloom").selected = Config.raw.rp_bloom;
canvas.getHandle("Voxels").selected = Config.raw.rp_gi;
canvas.getHandle("Shadows").position = getShadowQuality(Config.raw.rp_shadowmap_cascade);
});
// Button events
Event.add("toggle_menu", toggleMenu);
Event.add("apply_settings", applySettings);
});
}
function toggleMenu() {
var e = canvas.getElement("MenuContainer");
e.visible = !e.visible;
}
function applySettings() {
// Apply render path settings
Config.raw.rp_ssgi = canvas.getHandle("SSAO").selected;
Config.raw.rp_ssr = canvas.getHandle("SSR").selected;
Config.raw.rp_bloom = canvas.getHandle("Bloom").selected;
Config.raw.rp_gi = canvas.getHandle("Voxels").selected;
Config.raw.rp_shadowmap_cascade = getShadowMapSize(canvas.getHandle("Shadows").position);
RenderPathCreator.applyConfig();
// Lower envmap strength when voxel ao is disabled
var p = iron.Scene.active.world.probe.raw;
if (envStrength == 0) envStrength = p.strength;
p.strength = Config.raw.rp_gi ? envStrength : envStrength / 3;
// Save config.lnx file
Config.save();
}
inline function getShadowQuality(i:Int):Int {
// 0 - High, 1 - Medium, 2 - Low
return i == 4096 ? 0 : i == 2048 ? 1 : 2;
}
inline function getShadowMapSize(i:Int):Int {
return i == 0 ? 4096 : i == 1 ? 2048 : 1024;
}
}