From 8416ad018fa590c964ea55286c98fc64ed15ee60 Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Fri, 2 Aug 2024 01:37:08 +0530 Subject: [PATCH] various camera fixes and filesystem fixes --- src/CameraController.hx | 12 ++--- src/ResourceLoader.hx | 8 ++-- src/fs/TorqueFileSystem.hx | 98 ++++++++++++++++++++++++++++++++++++++ src/gui/OptionsDlg.hx | 7 ++- 4 files changed, 111 insertions(+), 14 deletions(-) create mode 100644 src/fs/TorqueFileSystem.hx diff --git a/src/CameraController.hx b/src/CameraController.hx index a1eec746..6cf66c6f 100644 --- a/src/CameraController.hx +++ b/src/CameraController.hx @@ -141,7 +141,7 @@ class CameraController extends Object { } var factor = isTouch ? Util.lerp(1 / 25, 1 / 15, - Settings.controlsSettings.cameraSensitivity) : Util.lerp(1 / 2500, 1 / 100, Settings.controlsSettings.cameraSensitivity); + Settings.controlsSettings.cameraSensitivity) : Util.lerp(1 / 1000, 1 / 200, Settings.controlsSettings.cameraSensitivity); // CameraPitch += deltaposY * factor; // CameraYaw += deltaposX * factor; @@ -172,7 +172,8 @@ class CameraController extends Object { // camera.position.add(cameraVerticalTranslation); var camera = level.scene.camera; - var lerpt = Math.pow(0.5, dt / 0.032); // Math.min(1, 1 - Math.pow(0.6, dt / 0.032)); // hxd.Math.min(1, 1 - Math.pow(0.6, dt * 600)); + var lerpt = hxd.Math.min(1, + 1 - Math.pow(0.6, dt * 600)); // Math.min(1, 1 - Math.pow(0.6, dt / 0.032)); // hxd.Math.min(1, 1 - Math.pow(0.6, dt * 600)); var cameraPitchDelta = (Key.isDown(Settings.controlsSettings.camBackward) ? 1 : 0) - (Key.isDown(Settings.controlsSettings.camForward) ? 1 : 0) @@ -188,11 +189,10 @@ class CameraController extends Object { nextCameraPitch = Math.max(-Math.PI / 2 + Math.PI / 4, Math.min(Math.PI / 2 - 0.0001, nextCameraPitch)); - CameraYaw = Util.lerp(CameraYaw, nextCameraYaw, lerpt); - CameraPitch = Util.lerp(CameraPitch, nextCameraPitch, lerpt); + CameraYaw = nextCameraYaw; + CameraPitch = nextCameraPitch; - CameraPitch = Math.max(-Math.PI / 2 + Math.PI / 4, - Math.min(Math.PI / 2 - 0.0001, CameraPitch)); // Util.clamp(CameraPitch, -Math.PI / 12, Math.PI / 2); + CameraPitch = Math.max(-Math.PI / 2 + Math.PI / 4, Math.min(Math.PI / 2 - 0.0001, CameraPitch)); // Util.clamp(CameraPitch, -Math.PI / 12, Math.PI / 2); function getRotQuat(v1:Vector, v2:Vector) { function orthogonal(v:Vector) { diff --git a/src/ResourceLoader.hx b/src/ResourceLoader.hx index a25417a4..da0c2327 100644 --- a/src/ResourceLoader.hx +++ b/src/ResourceLoader.hx @@ -12,7 +12,7 @@ import h3d.scene.Object; import haxe.io.Path; import dts.DtsFile; import dif.Dif; -import hxd.fs.LocalFileSystem; +import fs.TorqueFileSystem; import hxd.fs.FileSystem; import hxd.res.Loader; import src.Resource; @@ -21,9 +21,9 @@ import src.ResourceLoaderWorker; class ResourceLoader { #if (hl && !android) #if MACOS_BUNDLE - public static var fileSystem:FileSystem = new LocalFileSystem(Path.normalize(Path.join([Path.directory(Sys.programPath()), "..", "Resources"])), null); + public static var fileSystem:FileSystem = new TorqueFileSystem(Path.normalize(Path.join([Path.directory(Sys.programPath()), "..", "Resources"])), null); #else - public static var fileSystem:FileSystem = new LocalFileSystem(".", null); + public static var fileSystem:FileSystem = new TorqueFileSystem(".", null); #end #end #if (js || android) @@ -45,7 +45,7 @@ class ResourceLoader { public static function init(scene2d:h2d.Scene, onLoadedFunc:Void->Void) { #if hl - @:privateAccess @:privateAccess cast(fileSystem, LocalFileSystem).convert.tmpDir = "data/tmp/"; + @:privateAccess @:privateAccess cast(fileSystem, TorqueFileSystem).convert.tmpDir = "data/tmp/"; #end hxd.res.Resource.LIVE_UPDATE = false; // Disable live update to save frames @:privateAccess hxd.res.Image.ENABLE_AUTO_WATCH = false; diff --git a/src/fs/TorqueFileSystem.hx b/src/fs/TorqueFileSystem.hx new file mode 100644 index 00000000..ed774242 --- /dev/null +++ b/src/fs/TorqueFileSystem.hx @@ -0,0 +1,98 @@ +package fs; + +import hxd.fs.LocalFileSystem; + +#if hl +class TorqueFileEntry extends LocalEntry { + override function load(?onReady:Void->Void):Void { + #if macro + onReady(); + #else + // if (Settings.optionsSettings.fastLoad) + onReady(); + // else { + // if (onReady != null) + // haxe.Timer.delay(onReady, 1); + // } + #end + } +} +#end + +class TorqueFileSystem extends LocalFileSystem { + #if hl + public function new(dir:String, configuration:String) { + super(dir, configuration); + baseDir = dir; + if (configuration == null) + configuration = "default"; + + #if (macro && haxe_ver >= 4.0) + var exePath = null; + #elseif (haxe_ver >= 3.3) + var pr = Sys.programPath(); + var exePath = pr == null ? null : pr.split("\\").join("/").split("/"); + #else + var exePath = Sys.executablePath().split("\\").join("/").split("/"); + #end + + if (exePath != null) + exePath.pop(); + var froot = exePath == null ? baseDir : sys.FileSystem.fullPath(exePath.join("/") + "/" + baseDir); + if (froot == null || !sys.FileSystem.exists(froot) || !sys.FileSystem.isDirectory(froot)) { + froot = sys.FileSystem.fullPath(baseDir); + if (froot == null || !sys.FileSystem.exists(froot) || !sys.FileSystem.isDirectory(froot)) + throw "Could not find dir " + dir; + } + baseDir = froot.split("\\").join("/"); + if (!StringTools.endsWith(baseDir, "/")) + baseDir += "/"; + root = new TorqueFileEntry(this, "root", null, baseDir); + } + + override function checkPath(path:String) { + // make sure the file is loaded with correct case ! + var baseDir = new haxe.io.Path(path).dir; + var c = directoryCache.get(baseDir.toLowerCase()); + var isNew = false; + if (c == null) { + isNew = true; + c = new Map(); + for (f in try + sys.FileSystem.readDirectory(baseDir) + catch (e:Dynamic) + []) + c.set(f.toLowerCase(), true); + directoryCache.set(baseDir.toLowerCase(), c); + } + if (!c.exists(path.substr(baseDir.length + 1).toLowerCase())) { + // added since then? + if (!isNew) { + directoryCache.remove(baseDir.toLowerCase()); + return checkPath(path); + } + return false; + } + return true; + } + + override function open(path:String, check = true) { + var r = fileCache.get(path.toLowerCase()); + if (r != null) + return r.r; + var e = null; + var f = sys.FileSystem.fullPath(baseDir + path); + if (f == null) + return null; + f = f.split("\\").join("/"); + if (!check || (sys.FileSystem.exists(f) && checkPath(f))) { + e = new TorqueFileEntry(this, path.split("/").pop(), path, f); + convert.run(e); + if (e.file == null) + e = null; + } + fileCache.set(path.toLowerCase(), {r: e}); + return e; + } + #end +} diff --git a/src/gui/OptionsDlg.hx b/src/gui/OptionsDlg.hx index 7f4a6a45..ba49600a 100644 --- a/src/gui/OptionsDlg.hx +++ b/src/gui/OptionsDlg.hx @@ -300,8 +300,7 @@ class OptionsDlg extends GuiImage { audSndKnob.position = new Vector(137, 95); audSndKnob.extent = new Vector(254, 37); audSndKnob.sliderValue = Settings.optionsSettings.soundVolume; - var testingSnd = AudioManager.playSound(ResourceLoader.getResource("data/sound/testing.wav", ResourceLoader.getAudio, this.soundResources), null, - true); + var testingSnd = AudioManager.playSound(ResourceLoader.getResource("data/sound/testing.wav", ResourceLoader.getAudio, this.soundResources), null, true); testingSnd.pause = true; audSndKnob.slidingSound = testingSnd; audSndKnob.pressedAction = (sender) -> { @@ -694,9 +693,9 @@ Extensions: EAX 2.0, EAX 3.0, EAX Unified, and EAX-AC3"; .toTile()); mouseSensitivity.position = new Vector(147, 148); mouseSensitivity.extent = new Vector(254, 34); - mouseSensitivity.sliderValue = (Settings.controlsSettings.cameraSensitivity - 0.2) / (3 - 0.2); + mouseSensitivity.sliderValue = (Settings.controlsSettings.cameraSensitivity - 0.12) / (1.2 - 0.12); mouseSensitivity.pressedAction = (sender) -> { - Settings.controlsSettings.cameraSensitivity = 0.2 + (3 - 0.2) * mouseSensitivity.sliderValue; + Settings.controlsSettings.cameraSensitivity = 0.12 + (1.2 - 0.12) * mouseSensitivity.sliderValue; } mouseControlsPane.addChild(mouseSensitivity);