From ac4be0477ab551c28085277469aec5f1eea2bb42 Mon Sep 17 00:00:00 2001 From: JaXt0r <120568393+JaXt0r@users.noreply.github.com> Date: Sun, 6 Aug 2023 23:26:50 +0200 Subject: [PATCH] Vfs overwrite behaviour is now configurable. --- PxCs.Tests/PxPhoenixTest.cs | 2 +- PxCs.Tests/PxVfsTest.cs | 4 ++-- PxCs/Interface/PxVfs.cs | 14 +++++++++++--- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/PxCs.Tests/PxPhoenixTest.cs b/PxCs.Tests/PxPhoenixTest.cs index 3bd253f..4236c0d 100644 --- a/PxCs.Tests/PxPhoenixTest.cs +++ b/PxCs.Tests/PxPhoenixTest.cs @@ -52,7 +52,7 @@ protected IntPtr LoadVfs(string relativeFilePath) Assert.True(File.Exists(fullPath), "Path >" + fullPath + "< does not exist."); var vfsPtr = PxVfs.pxVfsNew(); - PxVfs.pxVfsMountDisk(vfsPtr, fullPath); + PxVfs.pxVfsMountDisk(vfsPtr, fullPath, PxVfs.PxVfsOverwriteBehavior.PxVfsOverwrite_Older); return vfsPtr; } diff --git a/PxCs.Tests/PxVfsTest.cs b/PxCs.Tests/PxVfsTest.cs index 6dcdaa8..4b04102 100644 --- a/PxCs.Tests/PxVfsTest.cs +++ b/PxCs.Tests/PxVfsTest.cs @@ -11,8 +11,8 @@ public class PxVfsTest : PxPhoenixTest public void Test_load_Vfs() { var vfsPtr = PxVfs.pxVfsNew(); - PxVfs.pxVfsMountDisk(vfsPtr, GetAssetPath("Data/worlds.VDF")); - PxVfs.pxVfsMountDisk(vfsPtr, GetAssetPath("Data/textures.VDF")); + PxVfs.pxVfsMountDisk(vfsPtr, GetAssetPath("Data/worlds.VDF"), PxVfs.PxVfsOverwriteBehavior.PxVfsOverwrite_Older); + PxVfs.pxVfsMountDisk(vfsPtr, GetAssetPath("Data/textures.VDF"), PxVfs.PxVfsOverwriteBehavior.PxVfsOverwrite_Older); // If we reach this far, mounting was successful. Test complete. Starting cleanup. diff --git a/PxCs/Interface/PxVfs.cs b/PxCs/Interface/PxVfs.cs index 2a12173..903353d 100644 --- a/PxCs/Interface/PxVfs.cs +++ b/PxCs/Interface/PxVfs.cs @@ -9,8 +9,16 @@ public static class PxVfs { private const string DLLNAME = PxPhoenix.DLLNAME; + public enum PxVfsOverwriteBehavior + { + PxVfsOverwrite_None = 0, // Overwrite no conflicting nodes. + PxVfsOverwrite_All = 1, // Overwrite all conflicting nodes. + PxVfsOverwrite_Newer = 2, // Overwrite newer conflicting nodes. (i.e. use older versions) + PxVfsOverwrite_Older = 3 // Overwrite older conflicting nodes. (i.e. use newer versions) + } + [DllImport(DLLNAME)] public static extern IntPtr pxVfsNew(); - [DllImport(DLLNAME)] public static extern void pxVfsMountDisk(IntPtr vfs, string path); + [DllImport(DLLNAME)] public static extern void pxVfsMountDisk(IntPtr vfs, string path, PxVfsOverwriteBehavior overwriteFlag); [DllImport(DLLNAME)] public static extern void pxVfsDestroy(IntPtr vfs); [DllImport(DLLNAME)] public static extern IntPtr pxVfsGetNodeByName(IntPtr vfs, string name); @@ -19,13 +27,13 @@ public static class PxVfs /// /// Hint: This file isn't taking care of special flags like LoadAdditive or UseNewer (for patches and mods) /// - public static IntPtr LoadVfs(string[] files) + public static IntPtr LoadVfs(string[] files, PxVfsOverwriteBehavior overwriteFlag) { var vfsPtr = pxVfsNew(); foreach (var file in files) { - pxVfsMountDisk(vfsPtr, file); + pxVfsMountDisk(vfsPtr, file, overwriteFlag); } return vfsPtr;