Files
Leenkx_Examples/graphics_settings/Sources/lnx/MyTrait.hx
2026-05-06 17:52:45 -07:00

72 lines
2.4 KiB
Haxe

package lnx;
import iron.Scene;
import leenkx.system.Event;
import leenkx.data.Config;
import leenkx.trait.internal.CanvasScript;
import leenkx.renderpath.RenderPathCreator;
// WIP
// To generate config.lnx file, enable 'Leenkx Project - Write Config'
// Fullscreen option will take effect on next game start up (will be resolved)
class MyTrait extends iron.Trait {
var canvas:CanvasScript;
public function new() {
super();
notifyOnInit(function() {
canvas = Scene.active.getTrait(CanvasScript);
// Init UI to values loaded from config.lnx file
canvas.notifyOnReady(function() {
canvas.getHandle("Fullscreen").selected = Config.raw.window_mode == 1;
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("MotionBlur").selected = Config.raw.rp_motionblur;
canvas.getHandle("Shadows").position = getShadowQuality(Config.raw.rp_shadowmap_cascade);
var cam = Scene.active.camera;
canvas.getHandle("ViewDistance").text = Std.string(Math.round(cam.data.raw.far_plane));
canvas.getHandle("FoV").value = cam.data.raw.fov;
});
// Apply button clicked
Event.add("apply_settings", applySettings);
});
}
function applySettings() {
// Apply render path settings
Config.raw.window_mode = canvas.getHandle("Fullscreen").selected ? 1 : 0;
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_motionblur = canvas.getHandle("MotionBlur").selected;
Config.raw.rp_shadowmap_cascade = getShadowMapSize(canvas.getHandle("Shadows").position);
Config.raw.rp_shadowmap_cube = getShadowMapSize(canvas.getHandle("Shadows").position);
RenderPathCreator.applyConfig();
// Apply camera settings
var cam = Scene.active.camera;
cam.data.raw.far_plane = Std.parseFloat(canvas.getHandle("ViewDistance").text);
cam.data.raw.fov = canvas.getHandle("FoV").value;
cam.buildProjection();
// Save config.lnx file
Config.save();
}
function getShadowQuality(i:Int):Int {
// 0 - High, 1 - Medium, 2 - Low
return i == 2048 ? 0 : i == 1024 ? 1 : 2;
}
function getShadowMapSize(i:Int):Int {
// High - 2048, Medium - 1024, Low - 512
return i == 0 ? 2048 : i == 1 ? 1024 : 512;
}
}