diff --git a/.github/workflows/dotnet-desktop.yml b/.github/workflows/dotnet-desktop.yml index fa2bc3d59..9226e20ab 100644 --- a/.github/workflows/dotnet-desktop.yml +++ b/.github/workflows/dotnet-desktop.yml @@ -6,9 +6,9 @@ on: - main pull_request: jobs: - build: + build-windows: runs-on: windows-latest - name: "Build" + name: "Build Windows" env: NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages steps: @@ -28,17 +28,143 @@ jobs: restore-keys: | nuget-${{ runner.os }}- + - name: Remove extraneous platforms + run: | + dotnet sln remove '${{ runner.workspace }}/Smithbox/src/Smithbox/Smithbox.Mac.csproj' + dotnet sln remove '${{ runner.workspace }}/Smithbox/src/Smithbox/Smithbox.Linux.csproj' + - name: Restore - run: dotnet restore /p:Configuration=Release-win + run: dotnet restore /p:Configuration=Release - name: Build - run: dotnet build --configuration Release-win --no-restore + run: dotnet build --configuration Release --no-restore - name: Publish - run: dotnet publish '${{ runner.workspace }}/Smithbox/src/Smithbox/Smithbox.csproj' --configuration Release-win -o deploy + run: dotnet publish '${{ runner.workspace }}/Smithbox/src/Smithbox/Smithbox.csproj' --configuration Release -o deploy/windows - name: Upload artifacts uses: actions/upload-artifact@v6 with: name: "Smithbox-SHA${{ github.sha }}" - path: "${{ runner.workspace }}/Smithbox/deploy" + path: "${{ runner.workspace }}/Smithbox/deploy/windows" + build-linux: + runs-on: windows-latest + name: "Build Linux" + env: + NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages + steps: + - uses: actions/checkout@v6 + with: + submodules: false + - uses: actions/setup-dotnet@v5 + with: + dotnet-version: "9.0.x" + cache: false + + - name: Cache NuGet packages + uses: actions/cache@v5.0.1 + with: + path: ${{ env.NUGET_PACKAGES }} + key: nuget-${{ runner.os }}-${{ hashFiles('**/*.csproj') }} + restore-keys: | + nuget-${{ runner.os }}- + + - name: Remove extraneous platforms + run: | + dotnet sln remove '${{ runner.workspace }}/Smithbox/src/Smithbox/Smithbox.csproj' + dotnet sln remove '${{ runner.workspace }}/Smithbox/src/Smithbox/Smithbox.Mac.csproj' + + - name: Restore + run: dotnet restore /p:Configuration=Release + + - name: Build + run: dotnet build --configuration Release --no-restore + + - name: Publish + run: dotnet publish '${{ runner.workspace }}/Smithbox/src/Smithbox/Smithbox.Linux.csproj' --configuration Release -o deploy/linux + + - name: Upload artifacts + uses: actions/upload-artifact@v6 + with: + name: "Smithbox.Linux-SHA${{ github.sha }}" + path: "${{ runner.workspace }}/Smithbox/deploy/linux" + build-mac: + runs-on: macos-latest + name: "Build macOS" + env: + NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages + steps: + - uses: actions/checkout@v6 + with: + submodules: false + - uses: actions/setup-dotnet@v5 + with: + dotnet-version: "9.0.x" + cache: false + + - name: Setup XCode + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: 26.2 + + - name: Install macos workload + run: dotnet workload install macos + + - name: Cache Rust artifacts + uses: actions/cache@v5.0.1 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + + - name: Build native lib + run: cargo build --lib --release --manifest-path='${{ runner.workspace }}/Smithbox/src/Andre/Andre.Formats/native/bhd5-decrypt-rust/Cargo.toml' + + - name: Install Vulkan SDK + uses: humbletim/install-vulkan-sdk@0ef43dbc8af56d77bcb1e8b1ebbbaa8718ead524 + with: + version: 1.4.341.0 + cache: true + + - name: Create dummy lib + run: | + cat > dummy.s << 'EOF' + .section __TEXT,__marker,regular,no_dead_strip + .asciz "DUMMY_FILE" + EOF + clang -c dummy.s -arch arm64 -arch x86_64 -o dummy.o + clang -dynamiclib -o '${{ runner.workspace }}/liboo2coremac64.2.9.dylib' -arch arm64 -arch x86_64 dummy.o -install_name @executable_path/liboo2coremac64.2.9.dylib + + - name: Cache NuGet packages + uses: actions/cache@v5.0.1 + with: + path: ${{ env.NUGET_PACKAGES }} + key: nuget-${{ runner.os }}-${{ hashFiles('**/*.csproj') }} + restore-keys: | + nuget-${{ runner.os }}- + + - name: Remove extraneous platforms + run: | + dotnet sln remove '${{ runner.workspace }}/Smithbox/src/Smithbox/Smithbox.csproj' + dotnet sln remove '${{ runner.workspace }}/Smithbox/src/Smithbox/Smithbox.Linux.csproj' + + - name: Restore + run: dotnet restore "/p:Configuration=Release;OodlePath=${{ runner.workspace }}/liboo2coremac64.2.9.dylib" + + - name: Build and Publish + run: | + chmod +x '${{ runner.workspace }}/Smithbox/src/Smithbox/Scripts/preinstall' + chmod +x '${{ runner.workspace }}/Smithbox/src/Smithbox/Scripts/postinstall' + dotnet publish '${{ runner.workspace }}/Smithbox/src/Smithbox/Smithbox.Mac.csproj' --configuration Release -o deploy/macos "/p:OodlePath=${{ runner.workspace }}/liboo2coremac64.2.9.dylib;MoltenVKPath=$VULKAN_SDK/lib/libMoltenVK.dylib;CreatePackage=true" + + - name: Upload artifacts + uses: actions/upload-artifact@v6 + with: + name: "Smithbox.Mac-SHA${{ github.sha }}" + path: "${{ runner.workspace }}/Smithbox/deploy/macos" diff --git a/.gitignore b/.gitignore index 033334c16..56c79c55a 100644 --- a/.gitignore +++ b/.gitignore @@ -365,7 +365,9 @@ CMakeSettings.json Dump Media + .DS_Store +src/Platform.Build.props Documentation/BB src/Smithbox.Data/Assets/Shaders/build_shader.bat diff --git a/Smithbox.sln b/Smithbox.sln index 1631eec01..3912994c4 100644 --- a/Smithbox.sln +++ b/Smithbox.sln @@ -48,796 +48,228 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Andre.SoapstoneLib", "src\A EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Veldrid.MetalBindings", "src\Veldrid\Veldrid.MetalBindings\Veldrid.MetalBindings.csproj", "{77EB2AA9-02E6-4356-9A86-956A946CBBBF}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Smithbox.Linux", "src\Smithbox\Smithbox.Linux.csproj", "{2112107B-0BA9-4367-BA40-3DC687C5F456}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Smithbox.Mac", "src\Smithbox\Smithbox.Mac.csproj", "{48004B40-5161-4DA3-81E7-0C1755A5558F}" +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tracy", "src\Tracy\Tracy.csproj", "{C1B942D4-F5B9-4A2E-9C8A-D5B582065899}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 - Debug-linux|Any CPU = Debug-linux|Any CPU - Debug-linux|x64 = Debug-linux|x64 - Debug-osx|Any CPU = Debug-osx|Any CPU - Debug-osx|x64 = Debug-osx|x64 - Debug-win|Any CPU = Debug-win|Any CPU - Debug-win|x64 = Debug-win|x64 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 - Release-linux|Any CPU = Release-linux|Any CPU - Release-linux|x64 = Release-linux|x64 - Release-osx|Any CPU = Release-osx|Any CPU - Release-osx|x64 = Release-osx|x64 - Release-win|Any CPU = Release-win|Any CPU - Release-win|x64 = Release-win|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Debug|Any CPU.ActiveCfg = Debug-win|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Debug|Any CPU.Build.0 = Debug-win|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Debug|x64.ActiveCfg = Debug-win|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Debug|x64.Build.0 = Debug-win|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Debug-linux|Any CPU.ActiveCfg = Debug-linux|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Debug-linux|Any CPU.Build.0 = Debug-linux|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Debug-linux|x64.ActiveCfg = Debug-linux|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Debug-linux|x64.Build.0 = Debug-linux|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Debug-osx|Any CPU.ActiveCfg = Debug-osx|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Debug-osx|Any CPU.Build.0 = Debug-osx|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Debug-osx|x64.ActiveCfg = Debug-osx|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Debug-osx|x64.Build.0 = Debug-osx|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Debug-win|Any CPU.ActiveCfg = Debug-win|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Debug-win|Any CPU.Build.0 = Debug-win|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Debug-win|x64.ActiveCfg = Debug-win|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Debug-win|x64.Build.0 = Debug-win|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Release|Any CPU.ActiveCfg = Release-win|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Release|Any CPU.Build.0 = Release-win|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Release|x64.ActiveCfg = Release-win|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Release|x64.Build.0 = Release-win|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Release-linux|Any CPU.ActiveCfg = Release-linux|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Release-linux|Any CPU.Build.0 = Release-linux|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Release-linux|x64.ActiveCfg = Release-linux|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Release-linux|x64.Build.0 = Release-linux|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Release-osx|Any CPU.ActiveCfg = Release-osx|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Release-osx|Any CPU.Build.0 = Release-osx|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Release-osx|x64.ActiveCfg = Release-osx|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Release-osx|x64.Build.0 = Release-osx|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Release-win|Any CPU.ActiveCfg = Release-win|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Release-win|Any CPU.Build.0 = Release-win|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Release-win|x64.ActiveCfg = Release-win|Any CPU - {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Release-win|x64.Build.0 = Release-win|Any CPU + {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Debug|x64.ActiveCfg = Debug|Any CPU + {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Debug|x64.Build.0 = Debug|Any CPU + {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Release|Any CPU.Build.0 = Release|Any CPU + {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Release|x64.ActiveCfg = Release|Any CPU + {E22C07F4-D305-4093-B44B-2A9914DF06A4}.Release|x64.Build.0 = Release|Any CPU {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Debug|Any CPU.Build.0 = Debug|Any CPU {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Debug|x64.ActiveCfg = Debug|Any CPU {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Debug|x64.Build.0 = Debug|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Debug-linux|Any CPU.ActiveCfg = Debug|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Debug-linux|Any CPU.Build.0 = Debug|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Debug-linux|x64.ActiveCfg = Debug|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Debug-linux|x64.Build.0 = Debug|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Debug-osx|Any CPU.ActiveCfg = Debug|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Debug-osx|Any CPU.Build.0 = Debug|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Debug-osx|x64.ActiveCfg = Debug|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Debug-osx|x64.Build.0 = Debug|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Debug-win|Any CPU.ActiveCfg = Debug|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Debug-win|Any CPU.Build.0 = Debug|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Debug-win|x64.ActiveCfg = Debug|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Debug-win|x64.Build.0 = Debug|Any CPU {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Release|Any CPU.ActiveCfg = Release|Any CPU {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Release|Any CPU.Build.0 = Release|Any CPU {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Release|x64.ActiveCfg = Release|Any CPU {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Release|x64.Build.0 = Release|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Release-linux|Any CPU.ActiveCfg = Release|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Release-linux|Any CPU.Build.0 = Release|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Release-linux|x64.ActiveCfg = Release|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Release-linux|x64.Build.0 = Release|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Release-osx|Any CPU.ActiveCfg = Release|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Release-osx|Any CPU.Build.0 = Release|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Release-osx|x64.ActiveCfg = Release|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Release-osx|x64.Build.0 = Release|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Release-win|Any CPU.ActiveCfg = Release|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Release-win|Any CPU.Build.0 = Release|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Release-win|x64.ActiveCfg = Release|Any CPU - {6E8C5B37-C0EA-4BDB-8E33-D4A1F86139C4}.Release-win|x64.Build.0 = Release|Any CPU {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Debug|Any CPU.Build.0 = Debug|Any CPU {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Debug|x64.ActiveCfg = Debug|Any CPU {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Debug|x64.Build.0 = Debug|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Debug-linux|Any CPU.ActiveCfg = Debug|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Debug-linux|Any CPU.Build.0 = Debug|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Debug-linux|x64.ActiveCfg = Debug|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Debug-linux|x64.Build.0 = Debug|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Debug-osx|Any CPU.ActiveCfg = Debug|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Debug-osx|Any CPU.Build.0 = Debug|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Debug-osx|x64.ActiveCfg = Debug|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Debug-osx|x64.Build.0 = Debug|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Debug-win|Any CPU.ActiveCfg = Debug|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Debug-win|Any CPU.Build.0 = Debug|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Debug-win|x64.ActiveCfg = Debug|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Debug-win|x64.Build.0 = Debug|Any CPU {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Release|Any CPU.ActiveCfg = Release|Any CPU {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Release|Any CPU.Build.0 = Release|Any CPU {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Release|x64.ActiveCfg = Release|Any CPU {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Release|x64.Build.0 = Release|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Release-linux|Any CPU.ActiveCfg = Release|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Release-linux|Any CPU.Build.0 = Release|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Release-linux|x64.ActiveCfg = Release|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Release-linux|x64.Build.0 = Release|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Release-osx|Any CPU.ActiveCfg = Release|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Release-osx|Any CPU.Build.0 = Release|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Release-osx|x64.ActiveCfg = Release|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Release-osx|x64.Build.0 = Release|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Release-win|Any CPU.ActiveCfg = Release|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Release-win|Any CPU.Build.0 = Release|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Release-win|x64.ActiveCfg = Release|Any CPU - {EBCA436B-24F5-4E0D-B32F-5E7EE0D061F6}.Release-win|x64.Build.0 = Release|Any CPU {7ED94989-2CE2-454E-97C0-59837B24A61F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7ED94989-2CE2-454E-97C0-59837B24A61F}.Debug|Any CPU.Build.0 = Debug|Any CPU {7ED94989-2CE2-454E-97C0-59837B24A61F}.Debug|x64.ActiveCfg = Debug|Any CPU {7ED94989-2CE2-454E-97C0-59837B24A61F}.Debug|x64.Build.0 = Debug|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Debug-linux|Any CPU.ActiveCfg = Debug|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Debug-linux|Any CPU.Build.0 = Debug|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Debug-linux|x64.ActiveCfg = Debug|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Debug-linux|x64.Build.0 = Debug|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Debug-osx|Any CPU.ActiveCfg = Debug|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Debug-osx|Any CPU.Build.0 = Debug|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Debug-osx|x64.ActiveCfg = Debug|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Debug-osx|x64.Build.0 = Debug|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Debug-win|Any CPU.ActiveCfg = Debug|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Debug-win|Any CPU.Build.0 = Debug|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Debug-win|x64.ActiveCfg = Debug|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Debug-win|x64.Build.0 = Debug|Any CPU {7ED94989-2CE2-454E-97C0-59837B24A61F}.Release|Any CPU.ActiveCfg = Release|Any CPU {7ED94989-2CE2-454E-97C0-59837B24A61F}.Release|Any CPU.Build.0 = Release|Any CPU {7ED94989-2CE2-454E-97C0-59837B24A61F}.Release|x64.ActiveCfg = Release|Any CPU {7ED94989-2CE2-454E-97C0-59837B24A61F}.Release|x64.Build.0 = Release|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Release-linux|Any CPU.ActiveCfg = Release|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Release-linux|Any CPU.Build.0 = Release|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Release-linux|x64.ActiveCfg = Release|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Release-linux|x64.Build.0 = Release|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Release-osx|Any CPU.ActiveCfg = Release|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Release-osx|Any CPU.Build.0 = Release|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Release-osx|x64.ActiveCfg = Release|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Release-osx|x64.Build.0 = Release|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Release-win|Any CPU.ActiveCfg = Release|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Release-win|Any CPU.Build.0 = Release|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Release-win|x64.ActiveCfg = Release|Any CPU - {7ED94989-2CE2-454E-97C0-59837B24A61F}.Release-win|x64.Build.0 = Release|Any CPU {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Debug|Any CPU.Build.0 = Debug|Any CPU {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Debug|x64.ActiveCfg = Debug|Any CPU {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Debug|x64.Build.0 = Debug|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Debug-linux|Any CPU.ActiveCfg = Debug|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Debug-linux|Any CPU.Build.0 = Debug|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Debug-linux|x64.ActiveCfg = Debug|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Debug-linux|x64.Build.0 = Debug|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Debug-osx|Any CPU.ActiveCfg = Debug|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Debug-osx|Any CPU.Build.0 = Debug|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Debug-osx|x64.ActiveCfg = Debug|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Debug-osx|x64.Build.0 = Debug|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Debug-win|Any CPU.ActiveCfg = Debug|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Debug-win|Any CPU.Build.0 = Debug|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Debug-win|x64.ActiveCfg = Debug|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Debug-win|x64.Build.0 = Debug|Any CPU {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Release|Any CPU.ActiveCfg = Release|Any CPU {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Release|Any CPU.Build.0 = Release|Any CPU {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Release|x64.ActiveCfg = Release|Any CPU {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Release|x64.Build.0 = Release|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Release-linux|Any CPU.ActiveCfg = Release|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Release-linux|Any CPU.Build.0 = Release|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Release-linux|x64.ActiveCfg = Release|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Release-linux|x64.Build.0 = Release|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Release-osx|Any CPU.ActiveCfg = Release|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Release-osx|Any CPU.Build.0 = Release|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Release-osx|x64.ActiveCfg = Release|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Release-osx|x64.Build.0 = Release|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Release-win|Any CPU.ActiveCfg = Release|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Release-win|Any CPU.Build.0 = Release|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Release-win|x64.ActiveCfg = Release|Any CPU - {F14604E6-9FBB-4F47-AFD8-7DB112924AF4}.Release-win|x64.Build.0 = Release|Any CPU {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Debug|Any CPU.Build.0 = Debug|Any CPU {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Debug|x64.ActiveCfg = Debug|Any CPU {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Debug|x64.Build.0 = Debug|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Debug-linux|Any CPU.ActiveCfg = Debug|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Debug-linux|Any CPU.Build.0 = Debug|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Debug-linux|x64.ActiveCfg = Debug|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Debug-linux|x64.Build.0 = Debug|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Debug-osx|Any CPU.ActiveCfg = Debug|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Debug-osx|Any CPU.Build.0 = Debug|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Debug-osx|x64.ActiveCfg = Debug|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Debug-osx|x64.Build.0 = Debug|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Debug-win|Any CPU.ActiveCfg = Debug|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Debug-win|Any CPU.Build.0 = Debug|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Debug-win|x64.ActiveCfg = Debug|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Debug-win|x64.Build.0 = Debug|Any CPU {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Release|Any CPU.ActiveCfg = Release|Any CPU {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Release|Any CPU.Build.0 = Release|Any CPU {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Release|x64.ActiveCfg = Release|Any CPU {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Release|x64.Build.0 = Release|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Release-linux|Any CPU.ActiveCfg = Release|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Release-linux|Any CPU.Build.0 = Release|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Release-linux|x64.ActiveCfg = Release|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Release-linux|x64.Build.0 = Release|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Release-osx|Any CPU.ActiveCfg = Release|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Release-osx|Any CPU.Build.0 = Release|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Release-osx|x64.ActiveCfg = Release|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Release-osx|x64.Build.0 = Release|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Release-win|Any CPU.ActiveCfg = Release|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Release-win|Any CPU.Build.0 = Release|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Release-win|x64.ActiveCfg = Release|Any CPU - {CEFBD024-2E4E-4B74-ACB5-2D17B7F4C17F}.Release-win|x64.Build.0 = Release|Any CPU {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Debug|Any CPU.Build.0 = Debug|Any CPU {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Debug|x64.ActiveCfg = Debug|Any CPU {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Debug|x64.Build.0 = Debug|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Debug-linux|Any CPU.ActiveCfg = Debug|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Debug-linux|Any CPU.Build.0 = Debug|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Debug-linux|x64.ActiveCfg = Debug|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Debug-linux|x64.Build.0 = Debug|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Debug-osx|Any CPU.ActiveCfg = Debug|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Debug-osx|Any CPU.Build.0 = Debug|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Debug-osx|x64.ActiveCfg = Debug|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Debug-osx|x64.Build.0 = Debug|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Debug-win|Any CPU.ActiveCfg = Debug|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Debug-win|Any CPU.Build.0 = Debug|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Debug-win|x64.ActiveCfg = Debug|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Debug-win|x64.Build.0 = Debug|Any CPU {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Release|Any CPU.ActiveCfg = Release|Any CPU {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Release|Any CPU.Build.0 = Release|Any CPU {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Release|x64.ActiveCfg = Release|Any CPU {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Release|x64.Build.0 = Release|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Release-linux|Any CPU.ActiveCfg = Release|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Release-linux|Any CPU.Build.0 = Release|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Release-linux|x64.ActiveCfg = Release|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Release-linux|x64.Build.0 = Release|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Release-osx|Any CPU.ActiveCfg = Release|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Release-osx|Any CPU.Build.0 = Release|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Release-osx|x64.ActiveCfg = Release|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Release-osx|x64.Build.0 = Release|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Release-win|Any CPU.ActiveCfg = Release|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Release-win|Any CPU.Build.0 = Release|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Release-win|x64.ActiveCfg = Release|Any CPU - {2A3A911A-7573-4A5B-A83B-92164B349BEA}.Release-win|x64.Build.0 = Release|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Debug|Any CPU.ActiveCfg = Debug-win|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Debug|Any CPU.Build.0 = Debug-win|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Debug|x64.ActiveCfg = Debug-win|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Debug|x64.Build.0 = Debug-win|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Debug-linux|Any CPU.ActiveCfg = Debug-linux|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Debug-linux|Any CPU.Build.0 = Debug-linux|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Debug-linux|x64.ActiveCfg = Debug-linux|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Debug-linux|x64.Build.0 = Debug-linux|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Debug-osx|Any CPU.ActiveCfg = Debug-osx|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Debug-osx|Any CPU.Build.0 = Debug-osx|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Debug-osx|x64.ActiveCfg = Debug-osx|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Debug-osx|x64.Build.0 = Debug-osx|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Debug-win|Any CPU.ActiveCfg = Debug-win|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Debug-win|Any CPU.Build.0 = Debug-win|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Debug-win|x64.ActiveCfg = Debug-win|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Debug-win|x64.Build.0 = Debug-win|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Release|Any CPU.ActiveCfg = Release-win|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Release|Any CPU.Build.0 = Release-win|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Release|x64.ActiveCfg = Release-win|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Release|x64.Build.0 = Release-win|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Release-linux|Any CPU.ActiveCfg = Release-linux|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Release-linux|Any CPU.Build.0 = Release-linux|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Release-linux|x64.ActiveCfg = Release-linux|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Release-linux|x64.Build.0 = Release-linux|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Release-osx|Any CPU.ActiveCfg = Release-osx|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Release-osx|Any CPU.Build.0 = Release-osx|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Release-osx|x64.ActiveCfg = Release-osx|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Release-osx|x64.Build.0 = Release-osx|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Release-win|Any CPU.ActiveCfg = Release-win|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Release-win|Any CPU.Build.0 = Release-win|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Release-win|x64.ActiveCfg = Release-win|Any CPU - {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Release-win|x64.Build.0 = Release-win|Any CPU + {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Debug|x64.ActiveCfg = Debug|Any CPU + {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Debug|x64.Build.0 = Debug|Any CPU + {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Release|Any CPU.Build.0 = Release|Any CPU + {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Release|x64.ActiveCfg = Release|Any CPU + {56C072EE-4011-4A0E-9B72-25A1A47969A0}.Release|x64.Build.0 = Release|Any CPU {AD901915-1F68-4774-8D9C-5BD443F933F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AD901915-1F68-4774-8D9C-5BD443F933F6}.Debug|Any CPU.Build.0 = Debug|Any CPU {AD901915-1F68-4774-8D9C-5BD443F933F6}.Debug|x64.ActiveCfg = Debug|Any CPU {AD901915-1F68-4774-8D9C-5BD443F933F6}.Debug|x64.Build.0 = Debug|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Debug-linux|Any CPU.ActiveCfg = Debug|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Debug-linux|Any CPU.Build.0 = Debug|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Debug-linux|x64.ActiveCfg = Debug|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Debug-linux|x64.Build.0 = Debug|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Debug-osx|Any CPU.ActiveCfg = Debug|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Debug-osx|Any CPU.Build.0 = Debug|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Debug-osx|x64.ActiveCfg = Debug|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Debug-osx|x64.Build.0 = Debug|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Debug-win|Any CPU.ActiveCfg = Debug|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Debug-win|Any CPU.Build.0 = Debug|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Debug-win|x64.ActiveCfg = Debug|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Debug-win|x64.Build.0 = Debug|Any CPU {AD901915-1F68-4774-8D9C-5BD443F933F6}.Release|Any CPU.ActiveCfg = Release|Any CPU {AD901915-1F68-4774-8D9C-5BD443F933F6}.Release|Any CPU.Build.0 = Release|Any CPU {AD901915-1F68-4774-8D9C-5BD443F933F6}.Release|x64.ActiveCfg = Release|Any CPU {AD901915-1F68-4774-8D9C-5BD443F933F6}.Release|x64.Build.0 = Release|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Release-linux|Any CPU.ActiveCfg = Release|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Release-linux|Any CPU.Build.0 = Release|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Release-linux|x64.ActiveCfg = Release|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Release-linux|x64.Build.0 = Release|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Release-osx|Any CPU.ActiveCfg = Release|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Release-osx|Any CPU.Build.0 = Release|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Release-osx|x64.ActiveCfg = Release|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Release-osx|x64.Build.0 = Release|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Release-win|Any CPU.ActiveCfg = Release|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Release-win|Any CPU.Build.0 = Release|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Release-win|x64.ActiveCfg = Release|Any CPU - {AD901915-1F68-4774-8D9C-5BD443F933F6}.Release-win|x64.Build.0 = Release|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Debug|Any CPU.ActiveCfg = Debug-win|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Debug|Any CPU.Build.0 = Debug-win|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Debug|x64.ActiveCfg = Debug-win|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Debug|x64.Build.0 = Debug-win|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Debug-linux|Any CPU.ActiveCfg = Debug-linux|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Debug-linux|Any CPU.Build.0 = Debug-linux|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Debug-linux|x64.ActiveCfg = Debug-linux|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Debug-linux|x64.Build.0 = Debug-linux|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Debug-osx|Any CPU.ActiveCfg = Debug-osx|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Debug-osx|Any CPU.Build.0 = Debug-osx|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Debug-osx|x64.ActiveCfg = Debug-osx|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Debug-osx|x64.Build.0 = Debug-osx|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Debug-win|Any CPU.ActiveCfg = Debug-win|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Debug-win|Any CPU.Build.0 = Debug-win|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Debug-win|x64.ActiveCfg = Debug-win|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Debug-win|x64.Build.0 = Debug-win|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Release|Any CPU.ActiveCfg = Release-win|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Release|Any CPU.Build.0 = Release-win|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Release|x64.ActiveCfg = Release-win|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Release|x64.Build.0 = Release-win|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Release-linux|Any CPU.ActiveCfg = Release-linux|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Release-linux|Any CPU.Build.0 = Release-linux|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Release-linux|x64.ActiveCfg = Release-linux|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Release-linux|x64.Build.0 = Release-linux|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Release-osx|Any CPU.ActiveCfg = Release-osx|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Release-osx|Any CPU.Build.0 = Release-osx|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Release-osx|x64.ActiveCfg = Release-osx|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Release-osx|x64.Build.0 = Release-osx|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Release-win|Any CPU.ActiveCfg = Release-win|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Release-win|Any CPU.Build.0 = Release-win|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Release-win|x64.ActiveCfg = Release-win|Any CPU - {9E5E426C-567D-45F3-9198-5280A4569B80}.Release-win|x64.Build.0 = Release-win|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Debug|Any CPU.ActiveCfg = Debug-win|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Debug|Any CPU.Build.0 = Debug-win|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Debug|x64.ActiveCfg = Debug-win|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Debug|x64.Build.0 = Debug-win|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Debug-linux|Any CPU.ActiveCfg = Debug-linux|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Debug-linux|Any CPU.Build.0 = Debug-linux|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Debug-linux|x64.ActiveCfg = Debug-linux|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Debug-linux|x64.Build.0 = Debug-linux|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Debug-osx|Any CPU.ActiveCfg = Debug-osx|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Debug-osx|Any CPU.Build.0 = Debug-osx|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Debug-osx|x64.ActiveCfg = Debug-osx|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Debug-osx|x64.Build.0 = Debug-osx|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Debug-win|Any CPU.ActiveCfg = Debug-win|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Debug-win|Any CPU.Build.0 = Debug-win|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Debug-win|x64.ActiveCfg = Debug-win|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Debug-win|x64.Build.0 = Debug-win|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Release|Any CPU.ActiveCfg = Release-win|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Release|Any CPU.Build.0 = Release-win|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Release|x64.ActiveCfg = Release-win|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Release|x64.Build.0 = Release-win|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Release-linux|Any CPU.ActiveCfg = Release-linux|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Release-linux|Any CPU.Build.0 = Release-linux|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Release-linux|x64.ActiveCfg = Release-linux|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Release-linux|x64.Build.0 = Release-linux|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Release-osx|Any CPU.ActiveCfg = Release-osx|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Release-osx|Any CPU.Build.0 = Release-osx|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Release-osx|x64.ActiveCfg = Release-osx|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Release-osx|x64.Build.0 = Release-osx|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Release-win|Any CPU.ActiveCfg = Release-win|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Release-win|Any CPU.Build.0 = Release-win|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Release-win|x64.ActiveCfg = Release-win|Any CPU - {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Release-win|x64.Build.0 = Release-win|Any CPU + {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Debug|x64.ActiveCfg = Debug|Any CPU + {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Debug|x64.Build.0 = Debug|Any CPU + {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Release|Any CPU.Build.0 = Release|Any CPU + {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Release|x64.ActiveCfg = Release|Any CPU + {FD73CB42-214B-BCE4-E634-77E4D1ED3BEE}.Release|x64.Build.0 = Release|Any CPU + {9E5E426C-567D-45F3-9198-5280A4569B80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9E5E426C-567D-45F3-9198-5280A4569B80}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9E5E426C-567D-45F3-9198-5280A4569B80}.Debug|x64.ActiveCfg = Debug|Any CPU + {9E5E426C-567D-45F3-9198-5280A4569B80}.Debug|x64.Build.0 = Debug|Any CPU + {9E5E426C-567D-45F3-9198-5280A4569B80}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9E5E426C-567D-45F3-9198-5280A4569B80}.Release|Any CPU.Build.0 = Release|Any CPU + {9E5E426C-567D-45F3-9198-5280A4569B80}.Release|x64.ActiveCfg = Release|Any CPU + {9E5E426C-567D-45F3-9198-5280A4569B80}.Release|x64.Build.0 = Release|Any CPU {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Debug|Any CPU.Build.0 = Debug|Any CPU {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Debug|x64.ActiveCfg = Debug|Any CPU {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Debug|x64.Build.0 = Debug|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Debug-linux|Any CPU.ActiveCfg = Debug|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Debug-linux|Any CPU.Build.0 = Debug|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Debug-linux|x64.ActiveCfg = Debug|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Debug-linux|x64.Build.0 = Debug|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Debug-osx|Any CPU.ActiveCfg = Debug|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Debug-osx|Any CPU.Build.0 = Debug|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Debug-osx|x64.ActiveCfg = Debug|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Debug-osx|x64.Build.0 = Debug|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Debug-win|Any CPU.ActiveCfg = Debug|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Debug-win|Any CPU.Build.0 = Debug|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Debug-win|x64.ActiveCfg = Debug|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Debug-win|x64.Build.0 = Debug|Any CPU {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Release|Any CPU.ActiveCfg = Release|Any CPU {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Release|Any CPU.Build.0 = Release|Any CPU {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Release|x64.ActiveCfg = Release|Any CPU {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Release|x64.Build.0 = Release|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Release-linux|Any CPU.ActiveCfg = Release|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Release-linux|Any CPU.Build.0 = Release|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Release-linux|x64.ActiveCfg = Release|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Release-linux|x64.Build.0 = Release|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Release-osx|Any CPU.ActiveCfg = Release|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Release-osx|Any CPU.Build.0 = Release|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Release-osx|x64.ActiveCfg = Release|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Release-osx|x64.Build.0 = Release|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Release-win|Any CPU.ActiveCfg = Release|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Release-win|Any CPU.Build.0 = Release|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Release-win|x64.ActiveCfg = Release|Any CPU - {4687FDA1-67FC-3A6D-3D82-C3C95BE30040}.Release-win|x64.Build.0 = Release|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Debug|Any CPU.ActiveCfg = Debug-win|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Debug|Any CPU.Build.0 = Debug-win|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Debug|x64.ActiveCfg = Debug-win|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Debug|x64.Build.0 = Debug-win|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Debug-linux|Any CPU.ActiveCfg = Debug-linux|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Debug-linux|Any CPU.Build.0 = Debug-linux|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Debug-linux|x64.ActiveCfg = Debug-linux|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Debug-linux|x64.Build.0 = Debug-linux|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Debug-osx|Any CPU.ActiveCfg = Debug-osx|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Debug-osx|Any CPU.Build.0 = Debug-osx|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Debug-osx|x64.ActiveCfg = Debug-osx|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Debug-osx|x64.Build.0 = Debug-osx|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Debug-win|Any CPU.ActiveCfg = Debug-win|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Debug-win|Any CPU.Build.0 = Debug-win|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Debug-win|x64.ActiveCfg = Debug-win|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Debug-win|x64.Build.0 = Debug-win|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Release|Any CPU.ActiveCfg = Release-win|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Release|Any CPU.Build.0 = Release-win|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Release|x64.ActiveCfg = Release-win|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Release|x64.Build.0 = Release-win|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Release-linux|Any CPU.ActiveCfg = Release-linux|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Release-linux|Any CPU.Build.0 = Release-linux|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Release-linux|x64.ActiveCfg = Release-linux|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Release-linux|x64.Build.0 = Release-linux|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Release-osx|Any CPU.ActiveCfg = Release-osx|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Release-osx|Any CPU.Build.0 = Release-osx|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Release-osx|x64.ActiveCfg = Release-osx|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Release-osx|x64.Build.0 = Release-osx|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Release-win|Any CPU.ActiveCfg = Release-win|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Release-win|Any CPU.Build.0 = Release-win|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Release-win|x64.ActiveCfg = Release-win|Any CPU - {958445B5-464F-F7E8-8AED-F3415FCACA78}.Release-win|x64.Build.0 = Release-win|Any CPU + {958445B5-464F-F7E8-8AED-F3415FCACA78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {958445B5-464F-F7E8-8AED-F3415FCACA78}.Debug|Any CPU.Build.0 = Debug|Any CPU + {958445B5-464F-F7E8-8AED-F3415FCACA78}.Debug|x64.ActiveCfg = Debug|Any CPU + {958445B5-464F-F7E8-8AED-F3415FCACA78}.Debug|x64.Build.0 = Debug|Any CPU + {958445B5-464F-F7E8-8AED-F3415FCACA78}.Release|Any CPU.ActiveCfg = Release|Any CPU + {958445B5-464F-F7E8-8AED-F3415FCACA78}.Release|Any CPU.Build.0 = Release|Any CPU + {958445B5-464F-F7E8-8AED-F3415FCACA78}.Release|x64.ActiveCfg = Release|Any CPU + {958445B5-464F-F7E8-8AED-F3415FCACA78}.Release|x64.Build.0 = Release|Any CPU {DAB51102-413B-083B-0371-066C72D0B5A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DAB51102-413B-083B-0371-066C72D0B5A1}.Debug|Any CPU.Build.0 = Debug|Any CPU {DAB51102-413B-083B-0371-066C72D0B5A1}.Debug|x64.ActiveCfg = Debug|Any CPU {DAB51102-413B-083B-0371-066C72D0B5A1}.Debug|x64.Build.0 = Debug|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Debug-linux|Any CPU.ActiveCfg = Debug|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Debug-linux|Any CPU.Build.0 = Debug|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Debug-linux|x64.ActiveCfg = Debug|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Debug-linux|x64.Build.0 = Debug|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Debug-osx|Any CPU.ActiveCfg = Debug|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Debug-osx|Any CPU.Build.0 = Debug|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Debug-osx|x64.ActiveCfg = Debug|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Debug-osx|x64.Build.0 = Debug|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Debug-win|Any CPU.ActiveCfg = Debug|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Debug-win|Any CPU.Build.0 = Debug|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Debug-win|x64.ActiveCfg = Debug|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Debug-win|x64.Build.0 = Debug|Any CPU {DAB51102-413B-083B-0371-066C72D0B5A1}.Release|Any CPU.ActiveCfg = Release|Any CPU {DAB51102-413B-083B-0371-066C72D0B5A1}.Release|Any CPU.Build.0 = Release|Any CPU {DAB51102-413B-083B-0371-066C72D0B5A1}.Release|x64.ActiveCfg = Release|Any CPU {DAB51102-413B-083B-0371-066C72D0B5A1}.Release|x64.Build.0 = Release|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Release-linux|Any CPU.ActiveCfg = Release|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Release-linux|Any CPU.Build.0 = Release|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Release-linux|x64.ActiveCfg = Release|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Release-linux|x64.Build.0 = Release|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Release-osx|Any CPU.ActiveCfg = Release|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Release-osx|Any CPU.Build.0 = Release|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Release-osx|x64.ActiveCfg = Release|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Release-osx|x64.Build.0 = Release|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Release-win|Any CPU.ActiveCfg = Release|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Release-win|Any CPU.Build.0 = Release|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Release-win|x64.ActiveCfg = Release|Any CPU - {DAB51102-413B-083B-0371-066C72D0B5A1}.Release-win|x64.Build.0 = Release|Any CPU {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Debug|Any CPU.Build.0 = Debug|Any CPU {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Debug|x64.ActiveCfg = Debug|x64 {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Debug|x64.Build.0 = Debug|x64 - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Debug-linux|Any CPU.ActiveCfg = Debug|Any CPU - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Debug-linux|Any CPU.Build.0 = Debug|Any CPU - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Debug-linux|x64.ActiveCfg = Debug|x64 - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Debug-linux|x64.Build.0 = Debug|x64 - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Debug-osx|Any CPU.ActiveCfg = Debug|Any CPU - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Debug-osx|Any CPU.Build.0 = Debug|Any CPU - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Debug-osx|x64.ActiveCfg = Debug|x64 - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Debug-osx|x64.Build.0 = Debug|x64 - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Debug-win|Any CPU.ActiveCfg = Debug|Any CPU - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Debug-win|Any CPU.Build.0 = Debug|Any CPU - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Debug-win|x64.ActiveCfg = Debug|x64 - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Debug-win|x64.Build.0 = Debug|x64 {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Release|Any CPU.ActiveCfg = Release|Any CPU {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Release|Any CPU.Build.0 = Release|Any CPU {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Release|x64.ActiveCfg = Release|x64 {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Release|x64.Build.0 = Release|x64 - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Release-linux|Any CPU.ActiveCfg = Release|Any CPU - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Release-linux|Any CPU.Build.0 = Release|Any CPU - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Release-linux|x64.ActiveCfg = Release|x64 - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Release-linux|x64.Build.0 = Release|x64 - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Release-osx|Any CPU.ActiveCfg = Release|Any CPU - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Release-osx|Any CPU.Build.0 = Release|Any CPU - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Release-osx|x64.ActiveCfg = Release|x64 - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Release-osx|x64.Build.0 = Release|x64 - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Release-win|Any CPU.ActiveCfg = Release|Any CPU - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Release-win|Any CPU.Build.0 = Release|Any CPU - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Release-win|x64.ActiveCfg = Release|x64 - {59DCD3E2-0EB8-914A-381F-7F858AF7D939}.Release-win|x64.Build.0 = Release|x64 {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Debug|Any CPU.Build.0 = Debug|Any CPU {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Debug|x64.ActiveCfg = Debug|x64 {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Debug|x64.Build.0 = Debug|x64 - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Debug-linux|Any CPU.ActiveCfg = Debug|Any CPU - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Debug-linux|Any CPU.Build.0 = Debug|Any CPU - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Debug-linux|x64.ActiveCfg = Debug|x64 - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Debug-linux|x64.Build.0 = Debug|x64 - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Debug-osx|Any CPU.ActiveCfg = Debug|Any CPU - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Debug-osx|Any CPU.Build.0 = Debug|Any CPU - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Debug-osx|x64.ActiveCfg = Debug|x64 - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Debug-osx|x64.Build.0 = Debug|x64 - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Debug-win|Any CPU.ActiveCfg = Debug|Any CPU - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Debug-win|Any CPU.Build.0 = Debug|Any CPU - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Debug-win|x64.ActiveCfg = Debug|x64 - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Debug-win|x64.Build.0 = Debug|x64 {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Release|Any CPU.ActiveCfg = Release|Any CPU {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Release|Any CPU.Build.0 = Release|Any CPU {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Release|x64.ActiveCfg = Release|x64 {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Release|x64.Build.0 = Release|x64 - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Release-linux|Any CPU.ActiveCfg = Release|Any CPU - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Release-linux|Any CPU.Build.0 = Release|Any CPU - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Release-linux|x64.ActiveCfg = Release|x64 - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Release-linux|x64.Build.0 = Release|x64 - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Release-osx|Any CPU.ActiveCfg = Release|Any CPU - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Release-osx|Any CPU.Build.0 = Release|Any CPU - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Release-osx|x64.ActiveCfg = Release|x64 - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Release-osx|x64.Build.0 = Release|x64 - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Release-win|Any CPU.ActiveCfg = Release|Any CPU - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Release-win|Any CPU.Build.0 = Release|Any CPU - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Release-win|x64.ActiveCfg = Release|x64 - {A699848D-D9FE-3A8B-C923-EE94F182E23A}.Release-win|x64.Build.0 = Release|x64 {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Debug|Any CPU.Build.0 = Debug|Any CPU {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Debug|x64.ActiveCfg = Debug|x64 {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Debug|x64.Build.0 = Debug|x64 - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Debug-linux|Any CPU.ActiveCfg = Debug|Any CPU - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Debug-linux|Any CPU.Build.0 = Debug|Any CPU - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Debug-linux|x64.ActiveCfg = Debug|x64 - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Debug-linux|x64.Build.0 = Debug|x64 - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Debug-osx|Any CPU.ActiveCfg = Debug|Any CPU - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Debug-osx|Any CPU.Build.0 = Debug|Any CPU - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Debug-osx|x64.ActiveCfg = Debug|x64 - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Debug-osx|x64.Build.0 = Debug|x64 - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Debug-win|Any CPU.ActiveCfg = Debug|Any CPU - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Debug-win|Any CPU.Build.0 = Debug|Any CPU - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Debug-win|x64.ActiveCfg = Debug|x64 - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Debug-win|x64.Build.0 = Debug|x64 {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Release|Any CPU.ActiveCfg = Release|Any CPU {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Release|Any CPU.Build.0 = Release|Any CPU {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Release|x64.ActiveCfg = Release|x64 {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Release|x64.Build.0 = Release|x64 - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Release-linux|Any CPU.ActiveCfg = Release|Any CPU - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Release-linux|Any CPU.Build.0 = Release|Any CPU - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Release-linux|x64.ActiveCfg = Release|x64 - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Release-linux|x64.Build.0 = Release|x64 - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Release-osx|Any CPU.ActiveCfg = Release|Any CPU - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Release-osx|Any CPU.Build.0 = Release|Any CPU - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Release-osx|x64.ActiveCfg = Release|x64 - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Release-osx|x64.Build.0 = Release|x64 - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Release-win|Any CPU.ActiveCfg = Release|Any CPU - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Release-win|Any CPU.Build.0 = Release|Any CPU - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Release-win|x64.ActiveCfg = Release|x64 - {8E322882-1EA7-7252-B0DE-B03E4B4C88ED}.Release-win|x64.Build.0 = Release|x64 {E43E4287-28B6-D908-788D-84F10D35D0EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E43E4287-28B6-D908-788D-84F10D35D0EC}.Debug|Any CPU.Build.0 = Debug|Any CPU {E43E4287-28B6-D908-788D-84F10D35D0EC}.Debug|x64.ActiveCfg = Debug|Any CPU {E43E4287-28B6-D908-788D-84F10D35D0EC}.Debug|x64.Build.0 = Debug|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Debug-linux|Any CPU.ActiveCfg = Debug|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Debug-linux|Any CPU.Build.0 = Debug|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Debug-linux|x64.ActiveCfg = Debug|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Debug-linux|x64.Build.0 = Debug|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Debug-osx|Any CPU.ActiveCfg = Debug|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Debug-osx|Any CPU.Build.0 = Debug|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Debug-osx|x64.ActiveCfg = Debug|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Debug-osx|x64.Build.0 = Debug|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Debug-win|Any CPU.ActiveCfg = Debug|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Debug-win|Any CPU.Build.0 = Debug|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Debug-win|x64.ActiveCfg = Debug|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Debug-win|x64.Build.0 = Debug|Any CPU {E43E4287-28B6-D908-788D-84F10D35D0EC}.Release|Any CPU.ActiveCfg = Release|Any CPU {E43E4287-28B6-D908-788D-84F10D35D0EC}.Release|Any CPU.Build.0 = Release|Any CPU {E43E4287-28B6-D908-788D-84F10D35D0EC}.Release|x64.ActiveCfg = Release|Any CPU {E43E4287-28B6-D908-788D-84F10D35D0EC}.Release|x64.Build.0 = Release|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Release-linux|Any CPU.ActiveCfg = Release|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Release-linux|Any CPU.Build.0 = Release|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Release-linux|x64.ActiveCfg = Release|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Release-linux|x64.Build.0 = Release|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Release-osx|Any CPU.ActiveCfg = Release|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Release-osx|Any CPU.Build.0 = Release|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Release-osx|x64.ActiveCfg = Release|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Release-osx|x64.Build.0 = Release|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Release-win|Any CPU.ActiveCfg = Release|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Release-win|Any CPU.Build.0 = Release|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Release-win|x64.ActiveCfg = Release|Any CPU - {E43E4287-28B6-D908-788D-84F10D35D0EC}.Release-win|x64.Build.0 = Release|Any CPU {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Debug|Any CPU.Build.0 = Debug|Any CPU {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Debug|x64.ActiveCfg = Debug|Any CPU {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Debug|x64.Build.0 = Debug|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Debug-linux|Any CPU.ActiveCfg = Debug|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Debug-linux|Any CPU.Build.0 = Debug|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Debug-linux|x64.ActiveCfg = Debug|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Debug-linux|x64.Build.0 = Debug|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Debug-osx|Any CPU.ActiveCfg = Debug|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Debug-osx|Any CPU.Build.0 = Debug|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Debug-osx|x64.ActiveCfg = Debug|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Debug-osx|x64.Build.0 = Debug|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Debug-win|Any CPU.ActiveCfg = Debug|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Debug-win|Any CPU.Build.0 = Debug|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Debug-win|x64.ActiveCfg = Debug|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Debug-win|x64.Build.0 = Debug|Any CPU {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Release|Any CPU.ActiveCfg = Release|Any CPU {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Release|Any CPU.Build.0 = Release|Any CPU {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Release|x64.ActiveCfg = Release|Any CPU {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Release|x64.Build.0 = Release|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Release-linux|Any CPU.ActiveCfg = Release|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Release-linux|Any CPU.Build.0 = Release|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Release-linux|x64.ActiveCfg = Release|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Release-linux|x64.Build.0 = Release|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Release-osx|Any CPU.ActiveCfg = Release|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Release-osx|Any CPU.Build.0 = Release|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Release-osx|x64.ActiveCfg = Release|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Release-osx|x64.Build.0 = Release|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Release-win|Any CPU.ActiveCfg = Release|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Release-win|Any CPU.Build.0 = Release|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Release-win|x64.ActiveCfg = Release|Any CPU - {902AFDD0-44EF-F607-FDA3-F44055BA8B40}.Release-win|x64.Build.0 = Release|Any CPU {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Debug|Any CPU.Build.0 = Debug|Any CPU {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Debug|x64.ActiveCfg = Debug|Any CPU {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Debug|x64.Build.0 = Debug|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Debug-linux|Any CPU.ActiveCfg = Debug|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Debug-linux|Any CPU.Build.0 = Debug|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Debug-linux|x64.ActiveCfg = Debug|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Debug-linux|x64.Build.0 = Debug|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Debug-osx|Any CPU.ActiveCfg = Debug|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Debug-osx|Any CPU.Build.0 = Debug|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Debug-osx|x64.ActiveCfg = Debug|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Debug-osx|x64.Build.0 = Debug|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Debug-win|Any CPU.ActiveCfg = Debug|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Debug-win|Any CPU.Build.0 = Debug|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Debug-win|x64.ActiveCfg = Debug|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Debug-win|x64.Build.0 = Debug|Any CPU {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Release|Any CPU.ActiveCfg = Release|Any CPU {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Release|Any CPU.Build.0 = Release|Any CPU {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Release|x64.ActiveCfg = Release|Any CPU {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Release|x64.Build.0 = Release|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Release-linux|Any CPU.ActiveCfg = Release|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Release-linux|Any CPU.Build.0 = Release|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Release-linux|x64.ActiveCfg = Release|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Release-linux|x64.Build.0 = Release|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Release-osx|Any CPU.ActiveCfg = Release|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Release-osx|Any CPU.Build.0 = Release|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Release-osx|x64.ActiveCfg = Release|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Release-osx|x64.Build.0 = Release|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Release-win|Any CPU.ActiveCfg = Release|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Release-win|Any CPU.Build.0 = Release|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Release-win|x64.ActiveCfg = Release|Any CPU - {69C825F6-FC8C-8C96-6DAB-2CB46589894E}.Release-win|x64.Build.0 = Release|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Debug|Any CPU.ActiveCfg = Debug-win|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Debug|Any CPU.Build.0 = Debug-win|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Debug|x64.ActiveCfg = Debug-win|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Debug|x64.Build.0 = Debug-win|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Debug-linux|Any CPU.ActiveCfg = Debug-linux|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Debug-linux|Any CPU.Build.0 = Debug-linux|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Debug-linux|x64.ActiveCfg = Debug-linux|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Debug-linux|x64.Build.0 = Debug-linux|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Debug-osx|Any CPU.ActiveCfg = Debug-osx|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Debug-osx|Any CPU.Build.0 = Debug-osx|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Debug-osx|x64.ActiveCfg = Debug-osx|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Debug-osx|x64.Build.0 = Debug-osx|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Debug-win|Any CPU.ActiveCfg = Debug-win|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Debug-win|Any CPU.Build.0 = Debug-win|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Debug-win|x64.ActiveCfg = Debug-win|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Debug-win|x64.Build.0 = Debug-win|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Release|Any CPU.ActiveCfg = Release-win|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Release|Any CPU.Build.0 = Release-win|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Release|x64.ActiveCfg = Release-win|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Release|x64.Build.0 = Release-win|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Release-linux|Any CPU.ActiveCfg = Release-linux|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Release-linux|Any CPU.Build.0 = Release-linux|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Release-linux|x64.ActiveCfg = Release-linux|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Release-linux|x64.Build.0 = Release-linux|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Release-osx|Any CPU.ActiveCfg = Release-osx|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Release-osx|Any CPU.Build.0 = Release-osx|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Release-osx|x64.ActiveCfg = Release-osx|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Release-osx|x64.Build.0 = Release-osx|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Release-win|Any CPU.ActiveCfg = Release-win|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Release-win|Any CPU.Build.0 = Release-win|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Release-win|x64.ActiveCfg = Release-win|Any CPU - {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Release-win|x64.Build.0 = Release-win|Any CPU + {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Debug|x64.ActiveCfg = Debug|Any CPU + {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Debug|x64.Build.0 = Debug|Any CPU + {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Release|Any CPU.Build.0 = Release|Any CPU + {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Release|x64.ActiveCfg = Release|Any CPU + {3ED687A7-3D13-472C-CFC6-DD37A973F82D}.Release|x64.Build.0 = Release|Any CPU {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Debug|Any CPU.Build.0 = Debug|Any CPU {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Debug|x64.ActiveCfg = Debug|Any CPU {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Debug|x64.Build.0 = Debug|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Debug-linux|Any CPU.ActiveCfg = Debug|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Debug-linux|Any CPU.Build.0 = Debug|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Debug-linux|x64.ActiveCfg = Debug|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Debug-linux|x64.Build.0 = Debug|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Debug-osx|Any CPU.ActiveCfg = Debug|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Debug-osx|Any CPU.Build.0 = Debug|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Debug-osx|x64.ActiveCfg = Debug|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Debug-osx|x64.Build.0 = Debug|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Debug-win|Any CPU.ActiveCfg = Debug|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Debug-win|Any CPU.Build.0 = Debug|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Debug-win|x64.ActiveCfg = Debug|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Debug-win|x64.Build.0 = Debug|Any CPU {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Release|Any CPU.ActiveCfg = Release|Any CPU {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Release|Any CPU.Build.0 = Release|Any CPU {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Release|x64.ActiveCfg = Release|Any CPU {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Release|x64.Build.0 = Release|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Release-linux|Any CPU.ActiveCfg = Release|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Release-linux|Any CPU.Build.0 = Release|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Release-linux|x64.ActiveCfg = Release|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Release-linux|x64.Build.0 = Release|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Release-osx|Any CPU.ActiveCfg = Release|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Release-osx|Any CPU.Build.0 = Release|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Release-osx|x64.ActiveCfg = Release|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Release-osx|x64.Build.0 = Release|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Release-win|Any CPU.ActiveCfg = Release|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Release-win|Any CPU.Build.0 = Release|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Release-win|x64.ActiveCfg = Release|Any CPU - {A75D395E-6097-BBD1-A21E-96B3297BD78B}.Release-win|x64.Build.0 = Release|Any CPU {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Debug|Any CPU.Build.0 = Debug|Any CPU {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Debug|x64.ActiveCfg = Debug|Any CPU {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Debug|x64.Build.0 = Debug|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Debug-linux|Any CPU.ActiveCfg = Debug|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Debug-linux|Any CPU.Build.0 = Debug|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Debug-linux|x64.ActiveCfg = Debug|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Debug-linux|x64.Build.0 = Debug|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Debug-osx|Any CPU.ActiveCfg = Debug|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Debug-osx|Any CPU.Build.0 = Debug|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Debug-osx|x64.ActiveCfg = Debug|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Debug-osx|x64.Build.0 = Debug|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Debug-win|Any CPU.ActiveCfg = Debug|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Debug-win|Any CPU.Build.0 = Debug|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Debug-win|x64.ActiveCfg = Debug|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Debug-win|x64.Build.0 = Debug|Any CPU {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Release|Any CPU.ActiveCfg = Release|Any CPU {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Release|Any CPU.Build.0 = Release|Any CPU {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Release|x64.ActiveCfg = Release|Any CPU {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Release|x64.Build.0 = Release|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Release-linux|Any CPU.ActiveCfg = Release|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Release-linux|Any CPU.Build.0 = Release|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Release-linux|x64.ActiveCfg = Release|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Release-linux|x64.Build.0 = Release|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Release-osx|Any CPU.ActiveCfg = Release|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Release-osx|Any CPU.Build.0 = Release|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Release-osx|x64.ActiveCfg = Release|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Release-osx|x64.Build.0 = Release|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Release-win|Any CPU.ActiveCfg = Release|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Release-win|Any CPU.Build.0 = Release|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Release-win|x64.ActiveCfg = Release|Any CPU - {77EB2AA9-02E6-4356-9A86-956A946CBBBF}.Release-win|x64.Build.0 = Release|Any CPU + {2112107B-0BA9-4367-BA40-3DC687C5F456}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2112107B-0BA9-4367-BA40-3DC687C5F456}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2112107B-0BA9-4367-BA40-3DC687C5F456}.Debug|x64.ActiveCfg = Debug|Any CPU + {2112107B-0BA9-4367-BA40-3DC687C5F456}.Debug|x64.Build.0 = Debug|Any CPU + {2112107B-0BA9-4367-BA40-3DC687C5F456}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2112107B-0BA9-4367-BA40-3DC687C5F456}.Release|Any CPU.Build.0 = Release|Any CPU + {2112107B-0BA9-4367-BA40-3DC687C5F456}.Release|x64.ActiveCfg = Release|Any CPU + {2112107B-0BA9-4367-BA40-3DC687C5F456}.Release|x64.Build.0 = Release|Any CPU + {48004B40-5161-4DA3-81E7-0C1755A5558F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {48004B40-5161-4DA3-81E7-0C1755A5558F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {48004B40-5161-4DA3-81E7-0C1755A5558F}.Debug|x64.ActiveCfg = Debug|x64 + {48004B40-5161-4DA3-81E7-0C1755A5558F}.Debug|x64.Build.0 = Debug|x64 + {48004B40-5161-4DA3-81E7-0C1755A5558F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {48004B40-5161-4DA3-81E7-0C1755A5558F}.Release|Any CPU.Build.0 = Release|Any CPU + {48004B40-5161-4DA3-81E7-0C1755A5558F}.Release|x64.ActiveCfg = Release|x64 + {48004B40-5161-4DA3-81E7-0C1755A5558F}.Release|x64.Build.0 = Release|x64 {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Debug|Any CPU.Build.0 = Debug|Any CPU {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Debug|x64.ActiveCfg = Debug|x64 {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Debug|x64.Build.0 = Debug|x64 - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Debug-linux|Any CPU.ActiveCfg = Debug|Any CPU - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Debug-linux|Any CPU.Build.0 = Debug|Any CPU - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Debug-linux|x64.ActiveCfg = Debug|x64 - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Debug-linux|x64.Build.0 = Debug|x64 - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Debug-osx|Any CPU.ActiveCfg = Debug|Any CPU - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Debug-osx|Any CPU.Build.0 = Debug|Any CPU - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Debug-osx|x64.ActiveCfg = Debug|x64 - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Debug-osx|x64.Build.0 = Debug|x64 - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Debug-win|Any CPU.ActiveCfg = Debug|Any CPU - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Debug-win|Any CPU.Build.0 = Debug|Any CPU - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Debug-win|x64.ActiveCfg = Debug|x64 - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Debug-win|x64.Build.0 = Debug|x64 {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Release|Any CPU.ActiveCfg = Release|Any CPU {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Release|Any CPU.Build.0 = Release|Any CPU {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Release|x64.ActiveCfg = Release|x64 {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Release|x64.Build.0 = Release|x64 - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Release-linux|Any CPU.ActiveCfg = Debug|Any CPU - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Release-linux|Any CPU.Build.0 = Debug|Any CPU - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Release-linux|x64.ActiveCfg = Debug|x64 - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Release-linux|x64.Build.0 = Debug|x64 - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Release-osx|Any CPU.ActiveCfg = Debug|Any CPU - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Release-osx|Any CPU.Build.0 = Debug|Any CPU - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Release-osx|x64.ActiveCfg = Debug|x64 - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Release-osx|x64.Build.0 = Debug|x64 - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Release-win|Any CPU.ActiveCfg = Debug|Any CPU - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Release-win|Any CPU.Build.0 = Debug|Any CPU - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Release-win|x64.ActiveCfg = Debug|x64 - {C1B942D4-F5B9-4A2E-9C8A-D5B582065899}.Release-win|x64.Build.0 = Debug|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/Andre/Andre.Core/Andre.Core.csproj b/src/Andre/Andre.Core/Andre.Core.csproj index c7ff1400f..9acf3a947 100644 --- a/src/Andre/Andre.Core/Andre.Core.csproj +++ b/src/Andre/Andre.Core/Andre.Core.csproj @@ -7,13 +7,11 @@ 12 - - DEBUG + true - - RELEASE + true embedded diff --git a/src/Andre/Andre.Formats/Andre.Formats.csproj b/src/Andre/Andre.Formats/Andre.Formats.csproj index f4feab47d..a4d23efe5 100644 --- a/src/Andre/Andre.Formats/Andre.Formats.csproj +++ b/src/Andre/Andre.Formats/Andre.Formats.csproj @@ -6,44 +6,37 @@ enable 12 true - Debug-win;Release-win;Debug-linux;Release-linux;Debug-osx;Release-osx;Debug;Release - - DEBUG + + bhd5_decrypt_rust.dll + libbhd5_decrypt_rust.dylib + bhd5_decrypt_rust.so - - RELEASE + embedded - - $(DefineConstants);WINDOWS - - - - $(DefineConstants);LINUX - - - - $(DefineConstants);OSX + + true - - - PreserveNewest + + + PreserveNewest + Never - + native\bhd5-decrypt-rust\target\release\ - $(RustTargetDir)bhd5_decrypt_rust.dll + $(RustTargetDir)$(RustDllName) diff --git a/src/Andre/Andre.Formats/BinderArchive.cs b/src/Andre/Andre.Formats/BinderArchive.cs index a054e2fda..7c3132417 100644 --- a/src/Andre/Andre.Formats/BinderArchive.cs +++ b/src/Andre/Andre.Formats/BinderArchive.cs @@ -206,11 +206,12 @@ public BinderArchive(string bhdPath, string bdtPath, Game game) AndreLogging.For(this).LogDebug("Decrypting {}", Path.GetFileName(bhdPath)); #endif byte[] decrypted; -#if WINDOWS - decrypted = DecryptNative(accessor.Memory, bhdPath, game); -#else - decrypted = DecryptSlow(bhdPath, game); -#endif + try { + decrypted = DecryptNative(accessor.Memory, bhdPath, game); + } + catch { + decrypted = DecryptSlow(bhdPath, game); + } bhd = BHD5.Read(decrypted, bhdGame); BhdWasEncrypted = true; } diff --git a/src/Andre/Andre.Formats/Util/NativeRsa.cs b/src/Andre/Andre.Formats/Util/NativeRsa.cs index 8aca41489..fd156f66a 100644 --- a/src/Andre/Andre.Formats/Util/NativeRsa.cs +++ b/src/Andre/Andre.Formats/Util/NativeRsa.cs @@ -14,7 +14,7 @@ namespace Andre.Formats.Util /// internal partial class NativeRsa { - private const string Dll = "bhd5_decrypt_rust.dll"; + private const string Dll = "bhd5_decrypt_rust"; private enum Bhderr : int { diff --git a/src/Andre/Andre.IO/Andre.IO.csproj b/src/Andre/Andre.IO/Andre.IO.csproj index a3854a13c..b4f8a6ed7 100644 --- a/src/Andre/Andre.IO/Andre.IO.csproj +++ b/src/Andre/Andre.IO/Andre.IO.csproj @@ -5,27 +5,6 @@ enable enable 12 - Debug-win;Release-win;Debug-linux;Release-linux;Debug-osx;Release-osx;Debug;Release - - - - DEBUG - - - - RELEASE - - - - $(DefineConstants);WINDOWS - - - - $(DefineConstants);LINUX - - - - $(DefineConstants);OSX diff --git a/src/Andre/Andre.IO/VFS/ArchiveBinderVirtualFileSystem.cs b/src/Andre/Andre.IO/VFS/ArchiveBinderVirtualFileSystem.cs index 9d16d63c7..b03456e2b 100644 --- a/src/Andre/Andre.IO/VFS/ArchiveBinderVirtualFileSystem.cs +++ b/src/Andre/Andre.IO/VFS/ArchiveBinderVirtualFileSystem.cs @@ -88,16 +88,16 @@ public static BhdDictionary GetDictionaryForGame(Game game) => game switch { Game.DES => throw new NotImplementedException(), - Game.DS1 => new(File.ReadAllText(Path.Join("Assets","UXM Dictionaries","DarkSoulsDictionary.txt")), BHD5.Game.DarkSouls1), - Game.DS1R => new(File.ReadAllText(Path.Join("Assets","UXM Dictionaries","DarkSoulsDictionary.txt")), BHD5.Game.DarkSouls1), - Game.DS2S => new(File.ReadAllText(Path.Join("Assets","UXM Dictionaries","DarkSouls2Dictionary.txt")), BHD5.Game.DarkSouls2), - Game.DS3 => new(File.ReadAllText(Path.Join("Assets","UXM Dictionaries","DarkSouls3Dictionary.txt")), BHD5.Game.DarkSouls3), + Game.DS1 => new(File.ReadAllText(Path.Join(StudioCore.Common.FileLocations.Assets,"UXM Dictionaries","DarkSoulsDictionary.txt")), BHD5.Game.DarkSouls1), + Game.DS1R => new(File.ReadAllText(Path.Join(StudioCore.Common.FileLocations.Assets,"UXM Dictionaries","DarkSoulsDictionary.txt")), BHD5.Game.DarkSouls1), + Game.DS2S => new(File.ReadAllText(Path.Join(StudioCore.Common.FileLocations.Assets,"UXM Dictionaries","DarkSouls2Dictionary.txt")), BHD5.Game.DarkSouls2), + Game.DS3 => new(File.ReadAllText(Path.Join(StudioCore.Common.FileLocations.Assets,"UXM Dictionaries","DarkSouls3Dictionary.txt")), BHD5.Game.DarkSouls3), Game.BB => throw new NotImplementedException(), - Game.SDT => new(File.ReadAllText(Path.Join("Assets","UXM Dictionaries","SekiroDictionary.txt")), BHD5.Game.DarkSouls3), - Game.ER => new(File.ReadAllText(Path.Join("Assets","UXM Dictionaries","EldenRingDictionary.txt")), BHD5.Game.EldenRing), - Game.NR => new(File.ReadAllText(Path.Join("Assets","UXM Dictionaries","EldenRingNightreignDictionary.txt")), BHD5.Game.EldenRing), - Game.AC6 => new(File.ReadAllText(Path.Join("Assets","UXM Dictionaries","ArmoredCore6Dictionary.txt")), BHD5.Game.EldenRing), - Game.DS2 => new(File.ReadAllText(Path.Join("Assets","UXM Dictionaries","ScholarDictionary.txt")), BHD5.Game.DarkSouls2), + Game.SDT => new(File.ReadAllText(Path.Join(StudioCore.Common.FileLocations.Assets,"UXM Dictionaries","SekiroDictionary.txt")), BHD5.Game.DarkSouls3), + Game.ER => new(File.ReadAllText(Path.Join(StudioCore.Common.FileLocations.Assets,"UXM Dictionaries","EldenRingDictionary.txt")), BHD5.Game.EldenRing), + Game.NR => new(File.ReadAllText(Path.Join(StudioCore.Common.FileLocations.Assets,"UXM Dictionaries","EldenRingNightreignDictionary.txt")), BHD5.Game.EldenRing), + Game.AC6 => new(File.ReadAllText(Path.Join(StudioCore.Common.FileLocations.Assets,"UXM Dictionaries","ArmoredCore6Dictionary.txt")), BHD5.Game.EldenRing), + Game.DS2 => new(File.ReadAllText(Path.Join(StudioCore.Common.FileLocations.Assets,"UXM Dictionaries","ScholarDictionary.txt")), BHD5.Game.DarkSouls2), _ => throw new ArgumentOutOfRangeException(nameof(game), game, null) }; diff --git a/src/Andre/SoapstoneLib/SoapstoneLib/Andre.SoapstoneLib.csproj b/src/Andre/SoapstoneLib/SoapstoneLib/Andre.SoapstoneLib.csproj index a4c86b046..3a33c855b 100644 --- a/src/Andre/SoapstoneLib/SoapstoneLib/Andre.SoapstoneLib.csproj +++ b/src/Andre/SoapstoneLib/SoapstoneLib/Andre.SoapstoneLib.csproj @@ -5,12 +5,7 @@ 12 - - DEBUG - - - - RELEASE + embedded diff --git a/src/Andre/SoulsFormats/SoulsFormats/Andre.SoulsFormats.csproj b/src/Andre/SoulsFormats/SoulsFormats/Andre.SoulsFormats.csproj index b562f93af..e370f64de 100644 --- a/src/Andre/SoulsFormats/SoulsFormats/Andre.SoulsFormats.csproj +++ b/src/Andre/SoulsFormats/SoulsFormats/Andre.SoulsFormats.csproj @@ -8,31 +8,12 @@ true net9.0 12 - Debug;Release;Debug-win;Release-win;Debug-linux;Release-linux;Debug-osx;Release-osx - - - DEBUG - - - - RELEASE + embedded - - $(DefineConstants);WINDOWS - - - - $(DefineConstants);LINUX - - - - $(DefineConstants);OSX - - diff --git a/src/Andre/SoulsFormats/SoulsFormats/Util/Oodle.cs b/src/Andre/SoulsFormats/SoulsFormats/Util/Oodle.cs index eb41608f4..b9c92d786 100644 --- a/src/Andre/SoulsFormats/SoulsFormats/Util/Oodle.cs +++ b/src/Andre/SoulsFormats/SoulsFormats/Util/Oodle.cs @@ -22,11 +22,14 @@ private static bool CanUseOodle6() return true; } #if WINDOWS - if (Path.Exists($@"{Directory.GetCurrentDirectory()}\oo2core_6_win64.dll")) -#elif OSX - if (Path.Exists($@"{Directory.GetCurrentDirectory()}/liboo2coremac64.2.6.dylib")) + if (Path.Exists($@"{AppContext.BaseDirectory}\oo2core_6_win64.dll")) +#elif MACOS + if (Path.Exists($@"{AppContext.BaseDirectory}/liboo2coremac64.2.6.dylib") && + new FileInfo($@"{AppContext.BaseDirectory}/liboo2coremac64.2.6.dylib").Length > 50 * 1024) #elif LINUX - if (Path.Exists($@"{Directory.GetCurrentDirectory()}/liboo2corelinux64.so.6")) + if (Path.Exists($@"{AppContext.BaseDirectory}/liboo2corelinux64.so.6")) +#else + return false; #endif { Oodle6Exists = true; @@ -42,11 +45,14 @@ private static bool CanUseOodle8() return true; } #if WINDOWS - if (Path.Exists($@"{Directory.GetCurrentDirectory()}\oo2core_8_win64.dll")) -#elif OSX - if (Path.Exists($@"{Directory.GetCurrentDirectory()}/liboo2coremac64.2.8.dylib")) + if (Path.Exists($@"{AppContext.BaseDirectory}\oo2core_8_win64.dll")) +#elif MACOS + if (Path.Exists($@"{AppContext.BaseDirectory}/liboo2coremac64.2.8.dylib") && + new FileInfo($@"{AppContext.BaseDirectory}/liboo2coremac64.2.8.dylib").Length > 50 * 1024) #elif LINUX - if (Path.Exists($@"{Directory.GetCurrentDirectory()}/liboo2corelinux64.so.8")) + if (Path.Exists($@"{AppContext.BaseDirectory}/liboo2corelinux64.so.8")) +#else + return false; #endif { Oodle8Exists = true; @@ -62,11 +68,14 @@ private static bool CanUseOodle9() return true; } #if WINDOWS - if (Path.Exists($@"{Directory.GetCurrentDirectory()}\oo2core_9_win64.dll")) -#elif OSX - if (Path.Exists($@"{Directory.GetCurrentDirectory()}/liboo2coremac64.2.9.dylib")) + if (Path.Exists($@"{AppContext.BaseDirectory}\oo2core_9_win64.dll")) +#elif MACOS + if (Path.Exists($@"{AppContext.BaseDirectory}/liboo2coremac64.2.9.dylib") && + new FileInfo($@"{AppContext.BaseDirectory}/liboo2coremac64.2.9.dylib").Length > 50*1024) #elif LINUX - if (Path.Exists($@"{Directory.GetCurrentDirectory()}/liboo2corelinux64.so.9")) + if (Path.Exists($@"{AppContext.BaseDirectory}/liboo2corelinux64.so.9")) +#else + return false; #endif { Oodle9Exists = true; @@ -121,12 +130,15 @@ public static IOodleCompressor GetOodleCompressor(int compressionLevel = -1) #if WINDOWS throw new NoOodleFoundException($"Could not find a supported version of oo2core. " + $"Please copy oo2core_6_win64.dll, oo2core_8_win64.dll or oo2core_9_win64.dll into the Smithbox program directory"); -#elif OSX +#elif MACOS throw new NoOodleFoundException($"Could not find a supported version of oo2core. " - + $"Please copy liboo2coremac64.2.6.dylib, liboo2coremac64.2.8.dylib or liboo2coremac64.2.9.dylib into the Smithbox program directory"); + + $"Please copy liboo2coremac64.2.6.dylib, liboo2coremac64.2.8.dylib or liboo2coremac64.2.9.dylib into the Smithbox MonoBundle directory " + + $"and set LC_ID_DYLIB to @executable_path/../../Contents/MonoBundle/liboo2coremac64.2.9.dylib"); #elif LINUX throw new NoOodleFoundException($"Could not find a supported version of oo2core. " + $"Please copy liboo2corelinux64.so.6, liboo2corelinux64.so.8 or liboo2corelinux64.so.9 into the Smithbox program directory"); +#else + return false; #endif } diff --git a/src/Andre/SoulsFormats/SoulsFormats/Util/Oodle26.cs b/src/Andre/SoulsFormats/SoulsFormats/Util/Oodle26.cs index e57d89ba2..ab7b51965 100644 --- a/src/Andre/SoulsFormats/SoulsFormats/Util/Oodle26.cs +++ b/src/Andre/SoulsFormats/SoulsFormats/Util/Oodle26.cs @@ -58,7 +58,7 @@ public unsafe Memory Decompress(Span source, long uncompressedSize) /// = 0 #if WINDOWS [DllImport("oo2core_6_win64.dll", CallingConvention = CallingConvention.StdCall)] -#elif OSX +#elif MACOS [DllImport("liboo2coremac64.2.6.dylib", CallingConvention = CallingConvention.StdCall)] #elif LINUX [DllImport("liboo2corelinux64.so.6", CallingConvention = CallingConvention.StdCall)] @@ -85,7 +85,7 @@ private static unsafe long OodleLZ_Compress(Oodle.OodleLZ_Compressor compressor, /// = OodleLZ_CompressionLevel_Normal #if WINDOWS [DllImport("oo2core_6_win64.dll", CallingConvention = CallingConvention.StdCall)] -#elif OSX +#elif MACOS [DllImport("liboo2coremac64.2.6.dylib", CallingConvention = CallingConvention.StdCall)] #elif LINUX [DllImport("liboo2corelinux64.so.6", CallingConvention = CallingConvention.StdCall)] @@ -114,7 +114,7 @@ public static IntPtr OodleLZ_CompressOptions_GetDefault() /// = OodleLZ_Decode_Unthreaded #if WINDOWS [DllImport("oo2core_6_win64.dll", CallingConvention = CallingConvention.StdCall)] -#elif OSX +#elif MACOS [DllImport("liboo2coremac64.2.6.dylib", CallingConvention = CallingConvention.StdCall)] #elif LINUX [DllImport("liboo2corelinux64.so.6", CallingConvention = CallingConvention.StdCall)] @@ -144,7 +144,7 @@ private static unsafe long OodleLZ_Decompress(byte* compBuf, long compBufSize, b #if WINDOWS [DllImport("oo2core_6_win64.dll", CallingConvention = CallingConvention.StdCall)] -#elif OSX +#elif MACOS [DllImport("liboo2coremac64.2.6.dylib", CallingConvention = CallingConvention.StdCall)] #elif LINUX [DllImport("liboo2corelinux64.so.6", CallingConvention = CallingConvention.StdCall)] @@ -155,7 +155,7 @@ private static extern long OodleLZ_GetCompressedBufferSizeNeeded( #if WINDOWS [DllImport("oo2core_6_win64.dll", CallingConvention = CallingConvention.StdCall)] -#elif OSX +#elif MACOS [DllImport("liboo2coremac64.2.6.dylib", CallingConvention = CallingConvention.StdCall)] #elif LINUX [DllImport("liboo2corelinux64.so.6", CallingConvention = CallingConvention.StdCall)] diff --git a/src/Andre/SoulsFormats/SoulsFormats/Util/Oodle28.cs b/src/Andre/SoulsFormats/SoulsFormats/Util/Oodle28.cs index 5add75e0b..cc529a4ce 100644 --- a/src/Andre/SoulsFormats/SoulsFormats/Util/Oodle28.cs +++ b/src/Andre/SoulsFormats/SoulsFormats/Util/Oodle28.cs @@ -58,7 +58,7 @@ public unsafe Memory Decompress(Span source, long uncompressedSize) /// = 0 #if WINDOWS [DllImport("oo2core_8_win64.dll", CallingConvention = CallingConvention.StdCall)] -#elif OSX +#elif MACOS [DllImport("liboo2coremac64.2.8.dylib", CallingConvention = CallingConvention.StdCall)] #elif LINUX [DllImport("liboo2corelinux64.so.8", CallingConvention = CallingConvention.StdCall)] @@ -85,7 +85,7 @@ private static unsafe long OodleLZ_Compress(Oodle.OodleLZ_Compressor compressor, /// = OodleLZ_CompressionLevel_Normal #if WINDOWS [DllImport("oo2core_8_win64.dll", CallingConvention = CallingConvention.StdCall)] -#elif OSX +#elif MACOS [DllImport("liboo2coremac64.2.8.dylib", CallingConvention = CallingConvention.StdCall)] #elif LINUX [DllImport("liboo2corelinux64.so.8", CallingConvention = CallingConvention.StdCall)] @@ -108,7 +108,7 @@ private static unsafe long OodleLZ_Compress(Oodle.OodleLZ_Compressor compressor, /// = OodleLZ_Decode_Unthreaded #if WINDOWS [DllImport("oo2core_8_win64.dll", CallingConvention = CallingConvention.StdCall)] -#elif OSX +#elif MACOS [DllImport("liboo2coremac64.2.8.dylib", CallingConvention = CallingConvention.StdCall)] #elif LINUX [DllImport("liboo2corelinux64.so.8", CallingConvention = CallingConvention.StdCall)] @@ -138,7 +138,7 @@ private static unsafe long OodleLZ_Decompress(byte* compBuf, long compBufSize, b #if WINDOWS [DllImport("oo2core_8_win64.dll", CallingConvention = CallingConvention.StdCall)] -#elif OSX +#elif MACOS [DllImport("liboo2coremac64.2.8.dylib", CallingConvention = CallingConvention.StdCall)] #elif LINUX [DllImport("liboo2corelinux64.so.8", CallingConvention = CallingConvention.StdCall)] @@ -150,7 +150,7 @@ private static extern long OodleLZ_GetCompressedBufferSizeNeeded( #if WINDOWS [DllImport("oo2core_8_win64.dll", CallingConvention = CallingConvention.StdCall)] -#elif OSX +#elif MACOS [DllImport("liboo2coremac64.2.8.dylib", CallingConvention = CallingConvention.StdCall)] #elif LINUX [DllImport("liboo2corelinux64.so.8", CallingConvention = CallingConvention.StdCall)] diff --git a/src/Andre/SoulsFormats/SoulsFormats/Util/Oodle29.cs b/src/Andre/SoulsFormats/SoulsFormats/Util/Oodle29.cs index 23af61c76..0e7e759cd 100644 --- a/src/Andre/SoulsFormats/SoulsFormats/Util/Oodle29.cs +++ b/src/Andre/SoulsFormats/SoulsFormats/Util/Oodle29.cs @@ -58,7 +58,7 @@ public unsafe Memory Decompress(Span source, long uncompressedSize) /// = 0 #if WINDOWS [DllImport("oo2core_9_win64.dll", CallingConvention = CallingConvention.StdCall)] -#elif OSX +#elif MACOS [DllImport("liboo2coremac64.2.9.dylib", CallingConvention = CallingConvention.StdCall)] #elif LINUX [DllImport("liboo2corelinux64.so.9", CallingConvention = CallingConvention.StdCall)] @@ -85,7 +85,7 @@ private static unsafe long OodleLZ_Compress(Oodle.OodleLZ_Compressor compressor, /// = OodleLZ_CompressionLevel_Normal #if WINDOWS [DllImport("oo2core_9_win64.dll", CallingConvention = CallingConvention.StdCall)] -#elif OSX +#elif MACOS [DllImport("liboo2coremac64.2.9.dylib", CallingConvention = CallingConvention.StdCall)] #elif LINUX [DllImport("liboo2corelinux64.so.9", CallingConvention = CallingConvention.StdCall)] @@ -108,7 +108,7 @@ private static unsafe long OodleLZ_Compress(Oodle.OodleLZ_Compressor compressor, /// = OodleLZ_Decode_Unthreaded #if WINDOWS [DllImport("oo2core_9_win64.dll", CallingConvention = CallingConvention.StdCall)] -#elif OSX +#elif MACOS [DllImport("liboo2coremac64.2.9.dylib", CallingConvention = CallingConvention.StdCall)] #elif LINUX [DllImport("liboo2corelinux64.so.9", CallingConvention = CallingConvention.StdCall)] @@ -138,7 +138,7 @@ private static unsafe long OodleLZ_Decompress(byte* compBuf, long compBufSize, b #if WINDOWS [DllImport("oo2core_9_win64.dll", CallingConvention = CallingConvention.StdCall)] -#elif OSX +#elif MACOS [DllImport("liboo2coremac64.2.9.dylib", CallingConvention = CallingConvention.StdCall)] #elif LINUX [DllImport("liboo2corelinux64.so.9", CallingConvention = CallingConvention.StdCall)] @@ -150,7 +150,7 @@ private static extern long OodleLZ_GetCompressedBufferSizeNeeded( #if WINDOWS [DllImport("oo2core_9_win64.dll", CallingConvention = CallingConvention.StdCall)] -#elif OSX +#elif MACOS [DllImport("liboo2coremac64.2.9.dylib", CallingConvention = CallingConvention.StdCall)] #elif LINUX [DllImport("liboo2corelinux64.so.9", CallingConvention = CallingConvention.StdCall)] diff --git a/src/Common/FileExplorer.cs b/src/Common/FileExplorer.cs new file mode 100644 index 000000000..64e278fe7 --- /dev/null +++ b/src/Common/FileExplorer.cs @@ -0,0 +1,18 @@ +using System.Diagnostics; + +namespace StudioCore.Common +{ + internal static class FileExplorer + { + public static Process Start(string path) + { +#if WINDOWS + return Process.Start("explorer.exe", path); +#elif MACOS + return Process.Start("/usr/bin/open", path); +#elif LINUX + return Process.Start("/usr/bin/xdg-open", path); +#endif + } + } +} \ No newline at end of file diff --git a/src/Common/FileLocations.cs b/src/Common/FileLocations.cs new file mode 100644 index 000000000..eb18b1c9d --- /dev/null +++ b/src/Common/FileLocations.cs @@ -0,0 +1,28 @@ +using System; +using System.IO; + +namespace StudioCore.Common +{ + internal static class FileLocations + { +#if MACOS + // NSBundle.MainBundle.ResourcePath + public static readonly string Resources = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "../Resources")); + public static readonly string Libraries = AppContext.BaseDirectory; + public static readonly string Assets = Path.Combine(Resources, "Assets"); + public static readonly string Res = Path.Combine(Resources, "Res"); + public static readonly string CurImgui = Path.GetFullPath(Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Smithbox")); + public static readonly string StoreImgui = Path.GetFullPath(Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "../Preferences/Smithbox")); +#else + public static readonly string Resources = AppContext.BaseDirectory; + public static readonly string Libraries = AppContext.BaseDirectory; + public static readonly string Assets = Path.Combine(Resources, "Assets"); + public static readonly string Res = Path.Combine(Resources, "Res"); + public static readonly string CurImgui = Resources; + public static readonly string StoreImgui = Path.GetFullPath(Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Smithbox")); +#endif + } +} \ No newline at end of file diff --git a/src/Directory.Build.props b/src/Directory.Build.props new file mode 100644 index 000000000..378e87a56 --- /dev/null +++ b/src/Directory.Build.props @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/Havok/ColBakeTest/Havok.ColBakeTest.csproj b/src/Havok/ColBakeTest/Havok.ColBakeTest.csproj index 33606562c..c6a4865c3 100644 --- a/src/Havok/ColBakeTest/Havok.ColBakeTest.csproj +++ b/src/Havok/ColBakeTest/Havok.ColBakeTest.csproj @@ -4,6 +4,9 @@ Exe net9.0 12 + $(DefineConstants);WINDOWS + $(DefineConstants);MACOS + $(DefineConstants);LINUX @@ -25,12 +28,4 @@ - - DEBUG - - - - RELEASE - - diff --git a/src/Havok/HKLib.Reflection/Havok.HKLib.Reflection.csproj b/src/Havok/HKLib.Reflection/Havok.HKLib.Reflection.csproj index 823c6d669..756030fc4 100644 --- a/src/Havok/HKLib.Reflection/Havok.HKLib.Reflection.csproj +++ b/src/Havok/HKLib.Reflection/Havok.HKLib.Reflection.csproj @@ -8,21 +8,18 @@ AnyCPU;x64 + + true + + PreserveNewest + Resource - - - DEBUG - - - - RELEASE - diff --git a/src/Havok/HKLib.Reflection/hk2018/HavokTypeRegistry.cs b/src/Havok/HKLib.Reflection/hk2018/HavokTypeRegistry.cs index 5c186e0b7..3672b787f 100644 --- a/src/Havok/HKLib.Reflection/hk2018/HavokTypeRegistry.cs +++ b/src/Havok/HKLib.Reflection/hk2018/HavokTypeRegistry.cs @@ -23,8 +23,7 @@ public class HavokTypeRegistry private static HavokTypeRegistry LoadDefault() { - string basePath = AppDomain.CurrentDomain.BaseDirectory; - string typeRegPath = Path.Join(basePath, "Res", "HavokTypeRegistry20180100.xml"); + string typeRegPath = Path.Join(StudioCore.Common.FileLocations.Res, "HavokTypeRegistry20180100.xml"); return Load(typeRegPath); } diff --git a/src/Havok/HKLib.Serialization/Havok.HKLib.Serialization.csproj b/src/Havok/HKLib.Serialization/Havok.HKLib.Serialization.csproj index b36245e05..0624f0aef 100644 --- a/src/Havok/HKLib.Serialization/Havok.HKLib.Serialization.csproj +++ b/src/Havok/HKLib.Serialization/Havok.HKLib.Serialization.csproj @@ -13,12 +13,4 @@ - - DEBUG - - - - RELEASE - - diff --git a/src/Havok/HKLib/Havok.HKLib.csproj b/src/Havok/HKLib/Havok.HKLib.csproj index 0cda723d8..8b340dfe2 100644 --- a/src/Havok/HKLib/Havok.HKLib.csproj +++ b/src/Havok/HKLib/Havok.HKLib.csproj @@ -23,12 +23,5 @@ - - DEBUG - - - - RELEASE - diff --git a/src/Havok/HKX.ClassGeneration/Havok.HKX.ClassGeneration.csproj b/src/Havok/HKX.ClassGeneration/Havok.HKX.ClassGeneration.csproj index 9835838a0..ac559e6b4 100644 --- a/src/Havok/HKX.ClassGeneration/Havok.HKX.ClassGeneration.csproj +++ b/src/Havok/HKX.ClassGeneration/Havok.HKX.ClassGeneration.csproj @@ -4,6 +4,9 @@ Exe net9.0 12 + $(DefineConstants);WINDOWS + $(DefineConstants);MACOS + $(DefineConstants);LINUX @@ -11,12 +14,4 @@ - - DEBUG - - - - RELEASE - - diff --git a/src/Havok/HKX2.Serialization/Havok.HKX2.Serialization.csproj b/src/Havok/HKX2.Serialization/Havok.HKX2.Serialization.csproj index 2b890cdd1..aa480100b 100644 --- a/src/Havok/HKX2.Serialization/Havok.HKX2.Serialization.csproj +++ b/src/Havok/HKX2.Serialization/Havok.HKX2.Serialization.csproj @@ -4,18 +4,13 @@ Exe net9.0 12 + $(DefineConstants);WINDOWS + $(DefineConstants);MACOS + $(DefineConstants);LINUX - - DEBUG - - - - RELEASE - - diff --git a/src/Havok/HKX2/Havok.HKX2.csproj b/src/Havok/HKX2/Havok.HKX2.csproj index 312d16690..d2f76b5fe 100644 --- a/src/Havok/HKX2/Havok.HKX2.csproj +++ b/src/Havok/HKX2/Havok.HKX2.csproj @@ -5,13 +5,11 @@ 12 - - DEBUG + true - - RELEASE + true embedded diff --git a/src/Smithbox.Data/Smithbox.Data.csproj b/src/Smithbox.Data/Smithbox.Data.csproj index d579120d5..86143d37b 100644 --- a/src/Smithbox.Data/Smithbox.Data.csproj +++ b/src/Smithbox.Data/Smithbox.Data.csproj @@ -6,23 +6,30 @@ enable + + true + + - - + + Always + Resource Always + Resource PreserveNewest PreserveNewest + Assembly PreserveNewest @@ -32,12 +39,4 @@ - - DEBUG - - - - RELEASE - - diff --git a/src/Smithbox.Program/Application/CFG.cs b/src/Smithbox.Program/Application/CFG.cs index 2af20f2cc..781ec05e1 100644 --- a/src/Smithbox.Program/Application/CFG.cs +++ b/src/Smithbox.Program/Application/CFG.cs @@ -94,7 +94,11 @@ public class CFG ///------------------------------------------------------------ /// Interface ///------------------------------------------------------------ +#if MACOS + public float Interface_UI_Scale = 0.5f; +#else public float Interface_UI_Scale = 1.0f; +#endif public bool Interface_Scale_by_DPI = true; public float Interface_Font_Size = 14.0f; public bool Interface_Allow_Window_Movement = true; diff --git a/src/Smithbox.Program/Developer/Tools/FileDictionaryGenerator.cs b/src/Smithbox.Program/Developer/Tools/FileDictionaryGenerator.cs index 61d5e3b81..ac956b43b 100644 --- a/src/Smithbox.Program/Developer/Tools/FileDictionaryGenerator.cs +++ b/src/Smithbox.Program/Developer/Tools/FileDictionaryGenerator.cs @@ -62,7 +62,11 @@ public static void Display(ProjectEntry project) /// public static void GenerateFileDictionaryFromUXM(string filepath) { +#if MACOS + var writePath = $"{Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)}/{Path.GetFileName(filepath)}.json"; +#else var writePath = $"{AppContext.BaseDirectory}/{Path.GetFileName(filepath)}.json"; +#endif var curDictionary = new FileDictionary(); curDictionary.Entries = new(); diff --git a/src/Smithbox.Program/Editors/File Browser/FileBrowserScreen.cs b/src/Smithbox.Program/Editors/File Browser/FileBrowserScreen.cs index 9c74914ab..25bdf0203 100644 --- a/src/Smithbox.Program/Editors/File Browser/FileBrowserScreen.cs +++ b/src/Smithbox.Program/Editors/File Browser/FileBrowserScreen.cs @@ -74,12 +74,12 @@ public void FileMenu() { if (ImGui.MenuItem($"View Game Directory")) { - Process.Start("explorer.exe", Project.Descriptor.DataPath); + StudioCore.Common.FileExplorer.Start(Project.Descriptor.DataPath); } if (ImGui.MenuItem($"View Project Directory")) { - Process.Start("explorer.exe", Project.Descriptor.ProjectPath); + StudioCore.Common.FileExplorer.Start(Project.Descriptor.ProjectPath); } ImGui.EndMenu(); diff --git a/src/Smithbox.Program/Editors/File Browser/GUI/FileToolView.cs b/src/Smithbox.Program/Editors/File Browser/GUI/FileToolView.cs index ab782eaa5..1a1cd57cb 100644 --- a/src/Smithbox.Program/Editors/File Browser/GUI/FileToolView.cs +++ b/src/Smithbox.Program/Editors/File Browser/GUI/FileToolView.cs @@ -398,7 +398,7 @@ public async Task DeleteUnpackedDataAsync() public void UpdateBaseFileDictionary() { // Get the unmerged base file dictionary - var folder = Path.Join(AppContext.BaseDirectory, "Assets", "File Dictionaries"); + var folder = Path.Join(StudioCore.Common.FileLocations.Assets, "File Dictionaries"); var file = ""; switch (Project.Descriptor.ProjectType) diff --git a/src/Smithbox.Program/Editors/Gparam Editor/Data/GparamData.cs b/src/Smithbox.Program/Editors/Gparam Editor/Data/GparamData.cs index e7d71f361..a20c21e13 100644 --- a/src/Smithbox.Program/Editors/Gparam Editor/Data/GparamData.cs +++ b/src/Smithbox.Program/Editors/Gparam Editor/Data/GparamData.cs @@ -87,7 +87,7 @@ public async Task SetupGparamInfo() GparamEnums = new(); // Information - var sourceFolder = Path.Join(AppContext.BaseDirectory, "Assets", "GPARAM", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)); + var sourceFolder = Path.Join(StudioCore.Common.FileLocations.Assets, "GPARAM", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)); var sourceFile = Path.Combine(sourceFolder, "Core.json"); var projectFolder = Path.Join(Project.Descriptor.ProjectPath, ".smithbox", "Assets", "GPARAM", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)); @@ -132,7 +132,7 @@ public async Task SetupGparamEnums() GparamEnums = new(); // Enums - var sourceFolder = Path.Join(AppContext.BaseDirectory, "Assets", "GPARAM", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)); + var sourceFolder = Path.Join(StudioCore.Common.FileLocations.Assets, "GPARAM", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)); var sourceFile = Path.Combine(sourceFolder, "Enums.json"); var projectFolder = Path.Join(Project.Descriptor.ProjectPath, ".smithbox", "Assets", "GPARAM", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)); diff --git a/src/Smithbox.Program/Editors/Map Editor/Data/MapData.cs b/src/Smithbox.Program/Editors/Map Editor/Data/MapData.cs index 12f9614ee..83595e1f5 100644 --- a/src/Smithbox.Program/Editors/Map Editor/Data/MapData.cs +++ b/src/Smithbox.Program/Editors/Map Editor/Data/MapData.cs @@ -147,8 +147,8 @@ public async Task SetupMapObjectNames() await Task.Yield(); - var srcDir = Path.Combine(AppContext.BaseDirectory, "Assets", "MSB", ProjectUtils.GetGameDirectory(Project), "Community Map Object Names"); - + var srcDir = Path.Combine(StudioCore.Common.FileLocations.Assets, "MSB", ProjectUtils.GetGameDirectory(Project), "Community Map Object Names"); + var projDir = Path.Combine(Project.Descriptor.ProjectPath, ".smithbox", "Project", "Community Map Object Names"); if (Directory.Exists(projDir)) @@ -301,7 +301,7 @@ public async Task SetupMsbInfo() // Information var gameDir = ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType); - var sourceFolder = Path.Join(AppContext.BaseDirectory, "Assets", "MSB", gameDir); + var sourceFolder = Path.Join(StudioCore.Common.FileLocations.Assets, "MSB", gameDir); var sourceFile = Path.Combine(sourceFolder, "Core.json"); @@ -419,7 +419,7 @@ public async Task SetupMapSpawnStates() // Information var gameDir = ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType); - var sourceFolder = Path.Join(AppContext.BaseDirectory, "Assets", "MSB", gameDir); + var sourceFolder = Path.Join(StudioCore.Common.FileLocations.Assets, "MSB", gameDir); var sourceFile = Path.Combine(sourceFolder, "SpawnStates.json"); diff --git a/src/Smithbox.Program/Editors/Map Editor/Framework/META/MsbMeta.cs b/src/Smithbox.Program/Editors/Map Editor/Framework/META/MsbMeta.cs index a707119ff..a945c860b 100644 --- a/src/Smithbox.Program/Editors/Map Editor/Framework/META/MsbMeta.cs +++ b/src/Smithbox.Program/Editors/Map Editor/Framework/META/MsbMeta.cs @@ -23,7 +23,7 @@ public async Task Setup() _MsbMetas = new(); - var metaPath = Path.Join(AppContext.BaseDirectory, "Assets", "MSB", ProjectUtils.GetGameDirectory(Project), "Meta"); + var metaPath = Path.Join(StudioCore.Common.FileLocations.Assets, "MSB", ProjectUtils.GetGameDirectory(Project), "Meta"); if (Path.Exists(metaPath)) { diff --git a/src/Smithbox.Program/Editors/Map Editor/Tools/Actions/EntityRenameAction.cs b/src/Smithbox.Program/Editors/Map Editor/Tools/Actions/EntityRenameAction.cs index 4e9621b4e..609121154 100644 --- a/src/Smithbox.Program/Editors/Map Editor/Tools/Actions/EntityRenameAction.cs +++ b/src/Smithbox.Program/Editors/Map Editor/Tools/Actions/EntityRenameAction.cs @@ -216,7 +216,7 @@ private List GetNameListInfo(string mapId, string type) { var list = new List(); - var dir = Path.Join(AppContext.BaseDirectory, "Assets", "MSB", ProjectUtils.GetGameDirectory(View.Project), "namelist.csv"); + var dir = Path.Join(StudioCore.Common.FileLocations.Assets, "MSB", ProjectUtils.GetGameDirectory(View.Project), "namelist.csv"); if (File.Exists(dir)) { diff --git a/src/Smithbox.Program/Editors/Map Editor/Tools/Insight/MapModelInsightView.cs b/src/Smithbox.Program/Editors/Map Editor/Tools/Insight/MapModelInsightView.cs index fbe74ee6f..834121edc 100644 --- a/src/Smithbox.Program/Editors/Map Editor/Tools/Insight/MapModelInsightView.cs +++ b/src/Smithbox.Program/Editors/Map Editor/Tools/Insight/MapModelInsightView.cs @@ -86,7 +86,7 @@ public void Display() if (ImGui.Button($"{Icons.EnvelopeOpen}##openOutputDir", DPI.IconButtonSize)) { - Process.Start("explorer.exe", outputDirectory); + StudioCore.Common.FileExplorer.Start(outputDirectory); } ImGui.SameLine(); diff --git a/src/Smithbox.Program/Editors/Material Editor/Data/MaterialData.cs b/src/Smithbox.Program/Editors/Material Editor/Data/MaterialData.cs index 9d8c97152..a974662cb 100644 --- a/src/Smithbox.Program/Editors/Material Editor/Data/MaterialData.cs +++ b/src/Smithbox.Program/Editors/Material Editor/Data/MaterialData.cs @@ -83,7 +83,7 @@ public async Task SetupMaterialDisplayConfiguration() MaterialDisplayConfiguration = new(); // Information - var sourceFolder = Path.Join(AppContext.BaseDirectory, "Assets", "MATERIAL", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)); + var sourceFolder = Path.Join(StudioCore.Common.FileLocations.Assets, "MATERIAL", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)); var sourceFile = Path.Combine(sourceFolder, "Display Configuration.json"); var projectFolder = Path.Join(Project.Descriptor.ProjectPath, ".smithbox", "Assets", "MATERIAL", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)); diff --git a/src/Smithbox.Program/Editors/Model Editor/Data/ModelBank.cs b/src/Smithbox.Program/Editors/Model Editor/Data/ModelBank.cs index 1d753e6b0..f8239b80f 100644 --- a/src/Smithbox.Program/Editors/Model Editor/Data/ModelBank.cs +++ b/src/Smithbox.Program/Editors/Model Editor/Data/ModelBank.cs @@ -193,7 +193,7 @@ public void PopulateModelList() var binder = new BND3Reader(fileData.Value); foreach (var file in binder.Files) { - var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name); + var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name.Replace('\\',System.IO.Path.DirectorySeparatorChar)); var filepath = file.Name.ToLower(); if (filepath.Contains(".flver") || filepath.Contains(".flv")) @@ -219,7 +219,7 @@ public void PopulateModelList() var binder = new BND4Reader(fileData.Value); foreach (var file in binder.Files) { - var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name); + var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name.Replace('\\',System.IO.Path.DirectorySeparatorChar)); var filepath = file.Name.ToLower(); if (filepath.Contains(".flver") || filepath.Contains(".flv")) @@ -272,7 +272,7 @@ or ProjectType.DS1 var binder = new BXF3Reader(bhd, bdt); foreach (var file in binder.Files) { - var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name); + var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name.Replace('\\',System.IO.Path.DirectorySeparatorChar)); var filepath = file.Name.ToLower(); if (filepath.Contains(".flver") || filepath.Contains(".flv")) @@ -287,7 +287,7 @@ or ProjectType.DS1 var binder = new BXF4Reader(bhd, bdt); foreach (var file in binder.Files) { - var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name); + var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name.Replace('\\',System.IO.Path.DirectorySeparatorChar)); var filepath = file.Name.ToLower(); if (filepath.Contains(".flver") || filepath.Contains(".flv")) @@ -343,7 +343,7 @@ public void Load() var binder = new BND3Reader(fileData.Value); foreach (var file in binder.Files) { - var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name); + var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name.Replace('\\',System.IO.Path.DirectorySeparatorChar)); var filepath = file.Name.ToLower(); if (filepath.Contains(".flver") || filepath.Contains(".flv")) @@ -372,7 +372,7 @@ public void Load() var binder = new BND4Reader(fileData.Value); foreach (var file in binder.Files) { - var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name); + var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name.Replace('\\',System.IO.Path.DirectorySeparatorChar)); var filepath = file.Name.ToLower(); if (filepath.Contains(".flver") || filepath.Contains(".flv")) @@ -428,7 +428,7 @@ or ProjectType.DS1 var binder = new BXF3Reader(bhd, bdt); foreach (var file in binder.Files) { - var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name); + var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name.Replace('\\',System.IO.Path.DirectorySeparatorChar)); var filepath = file.Name.ToLower(); if (filepath.Contains(".flver") || filepath.Contains(".flv")) @@ -446,7 +446,7 @@ or ProjectType.DS1 var binder = new BXF4Reader(bhd, bdt); foreach (var file in binder.Files) { - var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name); + var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name.Replace('\\',System.IO.Path.DirectorySeparatorChar)); var filepath = file.Name.ToLower(); if (filepath.Contains(".flver") || filepath.Contains(".flv")) @@ -570,7 +570,7 @@ public void Save() var binder = BND3.Read(binderData.Value); foreach (var file in binder.Files) { - var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name); + var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name.Replace('\\',System.IO.Path.DirectorySeparatorChar)); var filepath = file.Name.ToLower(); if (filepath.Contains(".flver") || filepath.Contains(".flv")) @@ -603,7 +603,7 @@ public void Save() var binder = BND4.Read(binderData.Value); foreach (var file in binder.Files) { - var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name); + var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name.Replace('\\',System.IO.Path.DirectorySeparatorChar)); var filepath = file.Name.ToLower(); if (filepath.Contains(".flver") || filepath.Contains(".flv")) @@ -666,7 +666,7 @@ or ProjectType.DS1 var binder = BXF3.Read(bhd, bdt); foreach (var file in binder.Files) { - var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name); + var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name.Replace('\\',System.IO.Path.DirectorySeparatorChar)); var filepath = file.Name.ToLower(); if (filepath.Contains(".flver") || filepath.Contains(".flv")) @@ -693,7 +693,7 @@ or ProjectType.DS1 var binder = BXF4.Read(bhd, bdt); foreach (var file in binder.Files) { - var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name); + var filename = System.IO.Path.GetFileNameWithoutExtension(file.Name.Replace('\\',System.IO.Path.DirectorySeparatorChar)); var filepath = file.Name.ToLower(); if (filepath.Contains(".flver") || filepath.Contains(".flv")) diff --git a/src/Smithbox.Program/Editors/Model Editor/Data/ModelData.cs b/src/Smithbox.Program/Editors/Model Editor/Data/ModelData.cs index edae41853..10bd13c4a 100644 --- a/src/Smithbox.Program/Editors/Model Editor/Data/ModelData.cs +++ b/src/Smithbox.Program/Editors/Model Editor/Data/ModelData.cs @@ -68,7 +68,7 @@ public async Task SetupFlverInfo() FlverEnums = new(); // Information - var sourceFolder = Path.Join(AppContext.BaseDirectory, "Assets", "FLVER"); + var sourceFolder = Path.Join(StudioCore.Common.FileLocations.Assets, "FLVER"); var sourceFile = Path.Combine(sourceFolder, "Core.json"); var projectFolder = Path.Join(Project.Descriptor.ProjectPath, ".smithbox", "Assets", "FLVER"); diff --git a/src/Smithbox.Program/Editors/Model Editor/Tools/Insight/ModelInsightView.cs b/src/Smithbox.Program/Editors/Model Editor/Tools/Insight/ModelInsightView.cs index 04e082b98..15cf0dc85 100644 --- a/src/Smithbox.Program/Editors/Model Editor/Tools/Insight/ModelInsightView.cs +++ b/src/Smithbox.Program/Editors/Model Editor/Tools/Insight/ModelInsightView.cs @@ -72,7 +72,7 @@ public void Display() if (ImGui.Button($"{Icons.EnvelopeOpen}##openOutputDir", DPI.IconButtonSize)) { - Process.Start("explorer.exe", outputDirectory); + StudioCore.Common.FileExplorer.Start(outputDirectory); } ImGui.SameLine(); diff --git a/src/Smithbox.Program/Editors/Param Editor/Data/ParamData.cs b/src/Smithbox.Program/Editors/Param Editor/Data/ParamData.cs index 0a630e214..3b2aeeed1 100644 --- a/src/Smithbox.Program/Editors/Param Editor/Data/ParamData.cs +++ b/src/Smithbox.Program/Editors/Param Editor/Data/ParamData.cs @@ -315,7 +315,7 @@ public async Task SetupParamDefs() } // Param Type Info - var paramTypeInfoPath = Path.Join(AppContext.BaseDirectory, "Assets", "PARAM", ProjectUtils.GetGameDirectory(Project), "Param Type Info.json"); + var paramTypeInfoPath = Path.Join(StudioCore.Common.FileLocations.Assets, "PARAM", ProjectUtils.GetGameDirectory(Project), "Param Type Info.json"); if (File.Exists(paramTypeInfoPath)) { @@ -368,7 +368,7 @@ public async Task SetupParamMeta() { await Task.Yield(); - var rootMetaDir = Path.Join(AppContext.BaseDirectory, "Assets", "PARAM", ProjectUtils.GetGameDirectory(Project), "Meta"); + var rootMetaDir = Path.Join(StudioCore.Common.FileLocations.Assets, "PARAM", ProjectUtils.GetGameDirectory(Project), "Meta"); var projectMetaDir = Path.Join(Project.Descriptor.ProjectPath, ".smithbox", "Assets", "PARAM", ProjectUtils.GetGameDirectory(Project), "Meta"); @@ -429,7 +429,7 @@ public async Task SetupGraphLegends() { await Task.Yield(); - var folder = @$"{AppContext.BaseDirectory}/Assets/PARAM/{ProjectUtils.GetGameDirectory(Project)}"; + var folder = @$"{StudioCore.Common.FileLocations.Assets}/PARAM/{ProjectUtils.GetGameDirectory(Project)}"; var file = Path.Combine(folder, "Graph Legends.json"); if(CFG.Current.Project_Enable_Project_Metadata) @@ -472,7 +472,7 @@ public async Task SetupIconConfigurations() { await Task.Yield(); - var folder = @$"{AppContext.BaseDirectory}/Assets/PARAM/{ProjectUtils.GetGameDirectory(Project)}"; + var folder = @$"{StudioCore.Common.FileLocations.Assets}/PARAM/{ProjectUtils.GetGameDirectory(Project)}"; var file = Path.Combine(folder, "Icon Configurations.json"); if (CFG.Current.Project_Enable_Project_Metadata) @@ -515,7 +515,7 @@ public async Task SetupTableGroupNames() { await Task.Yield(); - var srcDir = Path.Combine(AppContext.BaseDirectory, "Assets", "PARAM", ProjectUtils.GetGameDirectory(Project), "Community Table Names"); + var srcDir = Path.Combine(StudioCore.Common.FileLocations.Assets, "PARAM", ProjectUtils.GetGameDirectory(Project), "Community Table Names"); if (!Directory.Exists(srcDir)) { @@ -627,7 +627,7 @@ public async Task SetupTableParamList() { await Task.Yield(); - var srcFile = Path.Combine(AppContext.BaseDirectory, "Assets", "PARAM", ProjectUtils.GetGameDirectory(Project), "Table Params.json"); + var srcFile = Path.Combine(StudioCore.Common.FileLocations.Assets, "PARAM", ProjectUtils.GetGameDirectory(Project), "Table Params.json"); var projFile = Path.Combine(Project.Descriptor.ProjectPath, ".smithbox", "Project", "Table Params.json"); if (Directory.Exists(projFile)) @@ -666,7 +666,7 @@ public void CreateProjectMetadata() { // META var metaDir = ParamLocator.GetParammetaDir(Project); - var rootDir = Path.Combine(AppContext.BaseDirectory, metaDir); + var rootDir = Path.Combine(StudioCore.Common.FileLocations.Resources, metaDir); var projectDir = Path.Join(Project.Descriptor.ProjectPath, ".smithbox", metaDir); if (!Directory.Exists(projectDir)) @@ -693,7 +693,7 @@ public void CreateProjectMetadata() public void CopyMetadataFile(string name) { - var srcFolder = @$"{AppContext.BaseDirectory}/Assets/PARAM/{ProjectUtils.GetGameDirectory(Project)}"; + var srcFolder = @$"{StudioCore.Common.FileLocations.Assets}/PARAM/{ProjectUtils.GetGameDirectory(Project)}"; var srcFile = Path.Combine(srcFolder, name); var targetFolder = Path.Combine(Project.Descriptor.ProjectPath, ".smithbox", "Project"); @@ -776,7 +776,7 @@ public async Task SetupParamMemoryOffsets() ParamMemoryOffsets = new(); // Information - var sourceFolder = Path.Join(AppContext.BaseDirectory, "Assets", "PARAM", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)); + var sourceFolder = Path.Join(StudioCore.Common.FileLocations.Assets, "PARAM", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)); var sourceFile = Path.Combine(sourceFolder, "Param Reload Offsets.json"); var targetFile = sourceFile; @@ -816,7 +816,7 @@ public async Task SetupParamCategories() ParamCategories = new(); // Information - var sourceFolder = Path.Join(AppContext.BaseDirectory, "Assets", "PARAM", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)); + var sourceFolder = Path.Join(StudioCore.Common.FileLocations.Assets, "PARAM", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)); var sourceFile = Path.Combine(sourceFolder, "Param Categories.json"); var projectFolder = Path.Join(Project.Descriptor.ProjectPath, ".smithbox", "Assets", "PARAM", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)); @@ -860,7 +860,7 @@ public async Task SetupCommutativeParamGroups() CommutativeParamGroups = new(); // Information - var sourceFolder = Path.Join(AppContext.BaseDirectory, "Assets", "PARAM", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)); + var sourceFolder = Path.Join(StudioCore.Common.FileLocations.Assets, "PARAM", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)); var sourceFile = Path.Combine(sourceFolder, "Commutative Params.json"); var projectFolder = Path.Join(Project.Descriptor.ProjectPath, ".smithbox", "Assets", "PARAM", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)); diff --git a/src/Smithbox.Program/Editors/Param Editor/Framework/ParamFieldDecorators.cs b/src/Smithbox.Program/Editors/Param Editor/Framework/ParamFieldDecorators.cs index 733168c37..4ee3e8c5f 100644 --- a/src/Smithbox.Program/Editors/Param Editor/Framework/ParamFieldDecorators.cs +++ b/src/Smithbox.Program/Editors/Param Editor/Framework/ParamFieldDecorators.cs @@ -1431,7 +1431,7 @@ public static void Item(ParamEditorView curView, Param.Row keyRow, string fieldK if (File.Exists(path)) { - Process.Start("explorer.exe", $"/select,\"{path}\""); + StudioCore.Common.FileExplorer.Start($"/select,\"{path}\""); } else { diff --git a/src/Smithbox.Program/Editors/Param Editor/Mass Edit/MassEditTemplateMenu.cs b/src/Smithbox.Program/Editors/Param Editor/Mass Edit/MassEditTemplateMenu.cs index d07e36896..8c68b5042 100644 --- a/src/Smithbox.Program/Editors/Param Editor/Mass Edit/MassEditTemplateMenu.cs +++ b/src/Smithbox.Program/Editors/Param Editor/Mass Edit/MassEditTemplateMenu.cs @@ -113,7 +113,7 @@ public void DisplayMenu() { var projectScriptDir = Path.Combine(Parent.Editor.Project.Descriptor.ProjectPath, ".smithbox", "Assets", "Scripts"); - Process.Start("explorer.exe", projectScriptDir); + StudioCore.Common.FileExplorer.Start(projectScriptDir); } } diff --git a/src/Smithbox.Program/Editors/Param Editor/Tools/Delta Patcher/ParamDeltaPatcher.cs b/src/Smithbox.Program/Editors/Param Editor/Tools/Delta Patcher/ParamDeltaPatcher.cs index a3b2e9b03..34062cb9d 100644 --- a/src/Smithbox.Program/Editors/Param Editor/Tools/Delta Patcher/ParamDeltaPatcher.cs +++ b/src/Smithbox.Program/Editors/Param Editor/Tools/Delta Patcher/ParamDeltaPatcher.cs @@ -338,7 +338,7 @@ public void DisplayExportTab() { var storageDir = ProjectUtils.GetParamDeltaFolder(); - Process.Start("explorer.exe", storageDir); + StudioCore.Common.FileExplorer.Start(storageDir); } } diff --git a/src/Smithbox.Program/Editors/Param Editor/Tools/ParamListCategories.cs b/src/Smithbox.Program/Editors/Param Editor/Tools/ParamListCategories.cs index d45612ccf..b69ba34c3 100644 --- a/src/Smithbox.Program/Editors/Param Editor/Tools/ParamListCategories.cs +++ b/src/Smithbox.Program/Editors/Param Editor/Tools/ParamListCategories.cs @@ -261,7 +261,7 @@ public void Display() public void RestoreDefault() { - var sourceFolder = Path.Join(AppContext.BaseDirectory, "Assets", "PARAM", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)); + var sourceFolder = Path.Join(StudioCore.Common.FileLocations.Assets, "PARAM", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)); var sourceFile = Path.Combine(sourceFolder, "Param Categories.json"); if (File.Exists(sourceFile)) diff --git a/src/Smithbox.Program/Editors/Param Editor/Tools/ParamUpgrader.cs b/src/Smithbox.Program/Editors/Param Editor/Tools/ParamUpgrader.cs index d1a00edb9..0c45ffa91 100644 --- a/src/Smithbox.Program/Editors/Param Editor/Tools/ParamUpgrader.cs +++ b/src/Smithbox.Program/Editors/Param Editor/Tools/ParamUpgrader.cs @@ -487,7 +487,7 @@ public async Task LoadUpgraderInformation() { await Task.Yield(); - var oldRegInfoPath = Path.Join(AppContext.BaseDirectory, "Assets", "PARAM", ProjectUtils.GetGameDirectory(Project), "Upgrader Information.json"); + var oldRegInfoPath = Path.Join(StudioCore.Common.FileLocations.Assets, "PARAM", ProjectUtils.GetGameDirectory(Project), "Upgrader Information.json"); try { @@ -553,7 +553,7 @@ private string GetOldRegulationPath() var oldRegulationPath = ""; - var oldRegDirectory = Path.Join(AppContext.BaseDirectory, "Assets", "PARAM", ProjectUtils.GetGameDirectory(Project), "Regulations"); + var oldRegDirectory = Path.Join(StudioCore.Common.FileLocations.Assets, "PARAM", ProjectUtils.GetGameDirectory(Project), "Regulations"); var targetRegInfo = UpgraderInfo.RegulationEntries.Where(e => e.Version == oldVersionString).FirstOrDefault(); diff --git a/src/Smithbox.Program/Editors/Param Editor/Tools/Row Names/RowNameHelper.cs b/src/Smithbox.Program/Editors/Param Editor/Tools/Row Names/RowNameHelper.cs index ad4dc7b5d..97384a3ea 100644 --- a/src/Smithbox.Program/Editors/Param Editor/Tools/Row Names/RowNameHelper.cs +++ b/src/Smithbox.Program/Editors/Param Editor/Tools/Row Names/RowNameHelper.cs @@ -52,7 +52,7 @@ public static async Task ImportRowNamesTask(ProjectEntry project, ParamBan await Task.Yield(); var sourceDirectory = filepath; - var folder = @$"{AppContext.BaseDirectory}/Assets/PARAM/{ProjectUtils.GetGameDirectory(project)}"; + var folder = @$"{StudioCore.Common.FileLocations.Assets}/PARAM/{ProjectUtils.GetGameDirectory(project)}"; switch (sourceType) { diff --git a/src/Smithbox.Program/Editors/Param Editor/Utils/ParamUtils.cs b/src/Smithbox.Program/Editors/Param Editor/Utils/ParamUtils.cs index 3dbf7f4c4..b99519c32 100644 --- a/src/Smithbox.Program/Editors/Param Editor/Utils/ParamUtils.cs +++ b/src/Smithbox.Program/Editors/Param Editor/Utils/ParamUtils.cs @@ -512,8 +512,8 @@ public static string GetFieldExportString(Param.Row context, string fieldName) public static bool HasDeveloperRowNames(ProjectEntry curProject) { - var dir = Path.Combine(AppContext.BaseDirectory, - "Assets", "PARAM", + var dir = Path.Combine(StudioCore.Common.FileLocations.Assets, + "PARAM", ProjectUtils.GetGameDirectory(curProject), "Developer Row Names"); if(Directory.Exists(dir)) diff --git a/src/Smithbox.Program/Editors/Text Editor/Data/TextData.cs b/src/Smithbox.Program/Editors/Text Editor/Data/TextData.cs index 72d141d13..f644276d3 100644 --- a/src/Smithbox.Program/Editors/Text Editor/Data/TextData.cs +++ b/src/Smithbox.Program/Editors/Text Editor/Data/TextData.cs @@ -104,7 +104,7 @@ public async Task SetupFmgDescriptors() await Task.Yield(); - var folder = @$"{AppContext.BaseDirectory}/Assets/FMG/{ProjectUtils.GetGameDirectory(Project)}"; + var folder = @$"{StudioCore.Common.FileLocations.Assets}/FMG/{ProjectUtils.GetGameDirectory(Project)}"; var file = Path.Combine(folder, jsonName); if (File.Exists(file)) diff --git a/src/Smithbox.Program/Editors/Text Editor/Tools/TextNamingTemplateManager.cs b/src/Smithbox.Program/Editors/Text Editor/Tools/TextNamingTemplateManager.cs index 05086fd4f..fd915f475 100644 --- a/src/Smithbox.Program/Editors/Text Editor/Tools/TextNamingTemplateManager.cs +++ b/src/Smithbox.Program/Editors/Text Editor/Tools/TextNamingTemplateManager.cs @@ -29,7 +29,7 @@ public TextNamingTemplateManager(TextEditorView view, ProjectEntry project) Parent = view; Project = project; - RootPath = Path.Join(AppContext.BaseDirectory, "Assets", "Workflow", "Naming Templates"); + RootPath = Path.Join(StudioCore.Common.FileLocations.Assets, "Workflow", "Naming Templates"); ProjectPath = Path.Join(Project.Descriptor.ProjectPath, ".smithbox", "Workflow", "Naming Templates"); } diff --git a/src/Smithbox.Program/Editors/Texture Viewer/Tools/TextureExport.cs b/src/Smithbox.Program/Editors/Texture Viewer/Tools/TextureExport.cs index 45b75b984..bb775d1ba 100644 --- a/src/Smithbox.Program/Editors/Texture Viewer/Tools/TextureExport.cs +++ b/src/Smithbox.Program/Editors/Texture Viewer/Tools/TextureExport.cs @@ -56,7 +56,7 @@ public void Display() ImGui.SameLine(); if (ImGui.Button("View Folder", DPI.HalfWidthButton(windowWidth, 24))) { - Process.Start("explorer.exe", CFG.Current.TextureViewerToolbar_ExportTextureLocation); + StudioCore.Common.FileExplorer.Start(CFG.Current.TextureViewerToolbar_ExportTextureLocation); } UIHelper.Tooltip("The folder destination to export the texture to."); UIHelper.WrappedText(""); diff --git a/src/Smithbox.Program/Interface/UIHelper.cs b/src/Smithbox.Program/Interface/UIHelper.cs index bcc3bc9de..9fbadb5bc 100644 --- a/src/Smithbox.Program/Interface/UIHelper.cs +++ b/src/Smithbox.Program/Interface/UIHelper.cs @@ -72,11 +72,12 @@ public static void UnapplyBaseStyle() public static void RestoreImguiIfMissing() { - var curImgui = Path.Join(AppContext.BaseDirectory, "imgui.ini"); - var defaultImgui = Path.Join(AppContext.BaseDirectory, "imgui.default"); + var curImgui = Path.Join(StudioCore.Common.FileLocations.CurImgui, "imgui.ini"); + var defaultImgui = Path.Join(StudioCore.Common.FileLocations.Resources, "imgui.default"); if (!File.Exists(curImgui) && File.Exists(defaultImgui)) { + Directory.CreateDirectory(StudioCore.Common.FileLocations.CurImgui); var bytes = File.ReadAllBytes(defaultImgui); File.WriteAllBytes(curImgui, bytes); } diff --git a/src/Smithbox.Program/Preferences/Definitions/InterfacePrefs.cs b/src/Smithbox.Program/Preferences/Definitions/InterfacePrefs.cs index 78e7ef0fd..fba661759 100644 --- a/src/Smithbox.Program/Preferences/Definitions/InterfacePrefs.cs +++ b/src/Smithbox.Program/Preferences/Definitions/InterfacePrefs.cs @@ -33,7 +33,7 @@ public static PreferenceItem Interface_UI_Scale() Draw = () => { DPI.ApplyInputWidth(); - ImGui.SliderFloat("##inputValue", ref PreferencesUtil.TempScale, 0.5f, 4.0f); + ImGui.SliderFloat("##inputValue", ref PreferencesUtil.TempScale, 0.3f, 4.0f); if (ImGui.IsItemDeactivatedAfterEdit()) { @@ -479,7 +479,7 @@ public static PreferenceItem ThemeSelector() if (ImGui.Button("Open Folder", DPI.SelectorButtonSize)) { - Process.Start("explorer.exe", Path.Join(AppContext.BaseDirectory, "Assets", "Themes")); + StudioCore.Common.FileExplorer.Start(Path.Join(StudioCore.Common.FileLocations.Assets, "Themes")); } } }; diff --git a/src/Smithbox.Program/Project/Data/ProjectData.cs b/src/Smithbox.Program/Project/Data/ProjectData.cs index c543af23c..c0dcc3edf 100644 --- a/src/Smithbox.Program/Project/Data/ProjectData.cs +++ b/src/Smithbox.Program/Project/Data/ProjectData.cs @@ -70,7 +70,7 @@ public async Task SetupAliases() HashSet sourceDirectories = [ - Path.Join(AppContext.BaseDirectory, "Assets", "Aliases", + Path.Join(StudioCore.Common.FileLocations.Assets, "Aliases", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)), Path.Join(Project.Descriptor.ProjectPath,".smithbox","Assets","Aliases") ]; @@ -123,7 +123,7 @@ public async Task SetupProjectEnums() ProjectEnums = new(); // Information - var sourceFolder = Path.Join(AppContext.BaseDirectory, "Assets", "PARAM", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)); + var sourceFolder = Path.Join(StudioCore.Common.FileLocations.Assets, "PARAM", ProjectUtils.GetGameDirectory(Project.Descriptor.ProjectType)); var sourceFile = Path.Combine(sourceFolder, "Shared Param Enums.json"); var projectFolder = Path.Join(Project.Descriptor.ProjectPath, ".smithbox", "Project"); diff --git a/src/Smithbox.Program/Project/GUI/ProjectAliasMenu.cs b/src/Smithbox.Program/Project/GUI/ProjectAliasMenu.cs index 4d973dec1..ccc179141 100644 --- a/src/Smithbox.Program/Project/GUI/ProjectAliasMenu.cs +++ b/src/Smithbox.Program/Project/GUI/ProjectAliasMenu.cs @@ -441,7 +441,7 @@ public void Setup(ProjectEntry project) BaseAliases = new(); - var dir = Path.Join(AppContext.BaseDirectory, "Assets", "Aliases", + var dir = Path.Join(StudioCore.Common.FileLocations.Assets, "Aliases", ProjectUtils.GetGameDirectory(project.Descriptor.ProjectType)); List sourceFiles = Directory.GetFiles(dir, "*.json").ToList(); diff --git a/src/Smithbox.Program/Project/ProjectEntry.cs b/src/Smithbox.Program/Project/ProjectEntry.cs index 87f1f5b0c..10ce98ec7 100644 --- a/src/Smithbox.Program/Project/ProjectEntry.cs +++ b/src/Smithbox.Program/Project/ProjectEntry.cs @@ -338,11 +338,11 @@ public void SetupDLLs() #if WINDOWS var rootDllPath = Path.Join(Descriptor.DataPath, "oo2core_6_win64.dll"); var projectDllPath = Path.Join(AppContext.BaseDirectory, "oo2core_6_win64.dll"); -#elif OSX - var rootDllPath = Path.Join(DataPath, "liboo2coremac64.2.6.dylib"); +#elif MACOS + var rootDllPath = Path.Join(Descriptor.DataPath, "liboo2coremac64.2.6.dylib"); var projectDllPath = Path.Join(AppContext.BaseDirectory, "liboo2coremac64.2.6.dylib"); #elif LINUX - var rootDllPath = Path.Join(DataPath, "liboo2corelinux64.so.6"); + var rootDllPath = Path.Join(Descriptor.DataPath, "liboo2corelinux64.so.6"); var projectDllPath = Path.Join(AppContext.BaseDirectory, "liboo2corelinux64.so.6"); #endif @@ -360,11 +360,11 @@ public void SetupDLLs() #if WINDOWS var rootDllPath = Path.Join(Descriptor.DataPath, "oo2core_8_win64.dll"); var projectDllPath = Path.Join(AppContext.BaseDirectory, "oo2core_8_win64.dll"); -#elif OSX - var rootDllPath = Path.Join(DataPath, "liboo2coremac64.2.8.dylib"); +#elif MACOS + var rootDllPath = Path.Join(Descriptor.DataPath, "liboo2coremac64.2.8.dylib"); var projectDllPath = Path.Join(AppContext.BaseDirectory, "liboo2coremac64.2.8.dylib"); #elif LINUX - var rootDllPath = Path.Join(DataPath, "liboo2corelinux64.so.8"); + var rootDllPath = Path.Join(Descriptor.DataPath, "liboo2corelinux64.so.8"); var projectDllPath = Path.Join(AppContext.BaseDirectory, "liboo2corelinux64.so.8"); #endif @@ -383,11 +383,11 @@ public void SetupDLLs() #if WINDOWS var rootDllPath = Path.Join(Descriptor.DataPath, "oo2core_9_win64.dll"); var projectDllPath = Path.Join(AppContext.BaseDirectory, "oo2core_9_win64.dll"); -#elif OSX - var rootDllPath = Path.Join(DataPath, "liboo2coremac64.2.9.dylib"); +#elif MACOS + var rootDllPath = Path.Join(Descriptor.DataPath, "liboo2coremac64.2.9.dylib"); var projectDllPath = Path.Join(AppContext.BaseDirectory, "liboo2coremac64.2.9.dylib"); #elif LINUX - var rootDllPath = Path.Join(DataPath, "liboo2corelinux64.so.9"); + var rootDllPath = Path.Join(Descriptor.DataPath, "liboo2corelinux64.so.9"); var projectDllPath = Path.Join(AppContext.BaseDirectory, "liboo2corelinux64.so.9"); #endif diff --git a/src/Smithbox.Program/Project/ProjectFileLocator.cs b/src/Smithbox.Program/Project/ProjectFileLocator.cs index 531c1b2ec..1c848810a 100644 --- a/src/Smithbox.Program/Project/ProjectFileLocator.cs +++ b/src/Smithbox.Program/Project/ProjectFileLocator.cs @@ -55,7 +55,7 @@ public async Task Initialize(Action reportProgress, bool si Directory.CreateDirectory(projectLocalFolder); } - var folder = Path.Join(AppContext.BaseDirectory, "Assets", "File Dictionaries"); + var folder = Path.Join(StudioCore.Common.FileLocations.Assets, "File Dictionaries"); var file = ""; // Build the file dictionary JSON objects here diff --git a/src/Smithbox.Program/Project/ProjectOrchestrator.cs b/src/Smithbox.Program/Project/ProjectOrchestrator.cs index b40f8cb91..1b1cfc3d5 100644 --- a/src/Smithbox.Program/Project/ProjectOrchestrator.cs +++ b/src/Smithbox.Program/Project/ProjectOrchestrator.cs @@ -509,14 +509,14 @@ private void DisplayProjectActions(ProjectEntry curProject) if (ImGui.MenuItem($"Open Project Folder")) { - Process.Start("explorer.exe", curProject.Descriptor.ProjectPath); + StudioCore.Common.FileExplorer.Start(curProject.Descriptor.ProjectPath); } if (ImGui.MenuItem($"Open Project JSON Folder")) { var jsonPath = ProjectUtils.GetProjectsFolder(); - Process.Start("explorer.exe", jsonPath); + StudioCore.Common.FileExplorer.Start(jsonPath); } if (ImGui.MenuItem($"Clear Backup Files##clearBackupFiles")) diff --git a/src/Smithbox.Program/Project/Utilities/ProjectUtils.cs b/src/Smithbox.Program/Project/Utilities/ProjectUtils.cs index 2066b3b2b..b26dc65aa 100644 --- a/src/Smithbox.Program/Project/Utilities/ProjectUtils.cs +++ b/src/Smithbox.Program/Project/Utilities/ProjectUtils.cs @@ -93,7 +93,7 @@ public static string GetParamDeltaFolder() public static string GetThemeFolder() { - return Path.Join(AppContext.BaseDirectory, "Assets", "Themes"); + return Path.Join(StudioCore.Common.FileLocations.Assets, "Themes"); } public static string GetProjectsFolder() diff --git a/src/Smithbox.Program/Project/Utilities/SteamUtils.cs b/src/Smithbox.Program/Project/Utilities/SteamUtils.cs index 88a86b7f4..03c426b65 100644 --- a/src/Smithbox.Program/Project/Utilities/SteamUtils.cs +++ b/src/Smithbox.Program/Project/Utilities/SteamUtils.cs @@ -13,42 +13,35 @@ public static class SteamGameLocator { public static string GetSteamInstallPath() { - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { #if WINDOWS - using (var key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\Valve\Steam")) + using (var key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\Valve\Steam")) + { + if (key != null) { - if (key != null) - { - return key.GetValue("InstallPath") as string; - } + return key.GetValue("InstallPath") as string; } -#endif - } - else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) - { - string path = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "/Steam"; - if (Directory.Exists(path)) - return path; } - else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) +#elif MACOS + string path = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "/Steam"; + if (Directory.Exists(path)) + return path; +#elif LINUX + string home = Environment.GetFolderPath(Environment.SpecialFolder.Personal); + var candidates = new[] { - string home = Environment.GetFolderPath(Environment.SpecialFolder.Personal); - var candidates = new[] - { - Path.Combine(home, ".steam", "steam"), - Path.Combine(home, ".local", "share", "Steam"), - Path.Combine(home, ".steam", "root") - }; + Path.Combine(home, ".steam", "steam"), + Path.Combine(home, ".local", "share", "Steam"), + Path.Combine(home, ".steam", "root") + }; - foreach (var path in candidates) + foreach (var path in candidates) + { + if (Directory.Exists(path)) { - if (Directory.Exists(path)) - { - return path; - } + return path; } } +#endif return null; } @@ -113,7 +106,7 @@ public static string FindGameExecutable(int appId, string executableRelativePath if (installdir != null) { string gameFolder = Path.Combine(library, "steamapps", "common", installdir); - string exePath = Path.Combine(gameFolder, executableRelativePath); + string exePath = Path.Combine(gameFolder, executableRelativePath.Replace('\\',Path.DirectorySeparatorChar)); if (File.Exists(exePath)) { // Only return the directory diff --git a/src/Smithbox.Program/Renderer/Context/VulkanImGuiRenderer.cs b/src/Smithbox.Program/Renderer/Context/VulkanImGuiRenderer.cs index a3a61b611..1ed7d9e27 100644 --- a/src/Smithbox.Program/Renderer/Context/VulkanImGuiRenderer.cs +++ b/src/Smithbox.Program/Renderer/Context/VulkanImGuiRenderer.cs @@ -211,7 +211,17 @@ public void Update(float deltaSeconds, InputSnapshot snapshot, Action updateFont BeginUpdate(deltaSeconds); if (updateFontAction != null) { - updateFontAction.Invoke(); + try + { + updateFontAction.Invoke(); + } + catch (ArgumentOutOfRangeException ex) + { + //TODO precompute and check for excessive width, height from DPI.UIScale instead of using io.Fonts + Smithbox.LogError(this, $"[Smithbox] {ex.Message}", Logger.LogPriority.High, ex); + StudioCore.Application.CFG.Current.Interface_UI_Scale = StudioCore.Application.CFG.Default.Interface_UI_Scale; + updateFontAction.Invoke(); + } } UpdateImGuiInput(snapshot); @@ -431,22 +441,42 @@ public unsafe void RecreateFontDeviceTexture(GraphicsDevice gd) int height; int bytesPerPixel; + //FIXME can crash with large enough uiscale // Build io.Fonts.GetTexDataAsRGBA32(&pixels, &width, &height, &bytesPerPixel); // Store our identifier io.Fonts.SetTexID(_fontTexture.TexHandle); + var format = VkFormat.R8G8B8A8Unorm; + var usageFlags = VkImageUsageFlags.Sampled; + var createFlags = VkImageCreateFlags.None; + var tiling = VkImageTiling.Optimal; + //_fontTexture?.Dispose(); + var maxExtent = gd.GetImageFormatMaxExtent( + VkImageType.Image2D, + format, + usageFlags, + createFlags, + tiling); + if (width > maxExtent.width || height > maxExtent.height) + { + io.Fonts.ClearTexData(); + throw new ArgumentOutOfRangeException( + width > maxExtent.width ? nameof(width) : nameof(height), + $"Image dimensions {width},{height} for {format} exceed device limits ({maxExtent.width},{maxExtent.height})" + ); + } Texture tex = gd.ResourceFactory.CreateTexture(TextureDescription.Texture2D( (uint)width, (uint)height, 1, 1, - VkFormat.R8G8B8A8Unorm, - VkImageUsageFlags.Sampled, - VkImageCreateFlags.None, - VkImageTiling.Optimal)); + format, + usageFlags, + createFlags, + tiling)); tex.Name = "ImGui.NET Font Texture"; gd.UpdateTexture( tex, diff --git a/src/Smithbox.Program/Renderer/Locators/ParamLocator.cs b/src/Smithbox.Program/Renderer/Locators/ParamLocator.cs index adb0fc81c..7b3e9437c 100644 --- a/src/Smithbox.Program/Renderer/Locators/ParamLocator.cs +++ b/src/Smithbox.Program/Renderer/Locators/ParamLocator.cs @@ -65,7 +65,7 @@ public static PARAMDEF GetParamdefForParam(ProjectEntry project, string paramTyp public static string GetParamAssetsDir(ProjectEntry project) { - return Path.Join("Assets", "PARAM", ProjectUtils.GetGameDirectory(project)); + return Path.Join(StudioCore.Common.FileLocations.Assets, "PARAM", ProjectUtils.GetGameDirectory(project)); } public static string GetParamdefDir(ProjectEntry project) @@ -80,11 +80,11 @@ public static string GetParammetaDir(ProjectEntry project) public static string GetMassEditScriptCommonDir() { - return Path.Join("Assets", "Scripts", "Common"); + return Path.Join(StudioCore.Common.FileLocations.Assets, "Scripts", "Common"); } public static string GetMassEditScriptGameDir(ProjectEntry project) { - return Path.Join("Assets", "Scripts", ProjectUtils.GetGameDirectory(project)); + return Path.Join(StudioCore.Common.FileLocations.Assets, "Scripts", ProjectUtils.GetGameDirectory(project)); } } diff --git a/src/Smithbox.Program/Renderer/Locators/PathBuilder.cs b/src/Smithbox.Program/Renderer/Locators/PathBuilder.cs index dd3ae1539..49621f9ea 100644 --- a/src/Smithbox.Program/Renderer/Locators/PathBuilder.cs +++ b/src/Smithbox.Program/Renderer/Locators/PathBuilder.cs @@ -655,7 +655,7 @@ public static string GetAbsolutePath(ProjectEntry project, string virtPath) var containerName = p[i]; absPath = Path.Combine( - AppContext.BaseDirectory, "Assets", "MSB", ProjectUtils.GetGameDirectory(project.Descriptor.ProjectType), + StudioCore.Common.FileLocations.Assets, "MSB", ProjectUtils.GetGameDirectory(project.Descriptor.ProjectType), "Maps", $"{containerName}.tpf.dcx"); } diff --git a/src/Smithbox.Program/Renderer/Scene/ShaderHelper.cs b/src/Smithbox.Program/Renderer/Scene/ShaderHelper.cs index de85398fc..f10f65387 100644 --- a/src/Smithbox.Program/Renderer/Scene/ShaderHelper.cs +++ b/src/Smithbox.Program/Renderer/Scene/ShaderHelper.cs @@ -9,7 +9,7 @@ namespace StudioCore.Renderer; public static class ShaderHelper { - private static readonly string s_assetRoot = Path.Combine(AppContext.BaseDirectory, "Assets"); + private static readonly string s_assetRoot = StudioCore.Common.FileLocations.Assets; internal static string GetPath(string assetPath) { diff --git a/src/Smithbox.Program/Renderer/Texture Manager/IconManager.cs b/src/Smithbox.Program/Renderer/Texture Manager/IconManager.cs index 229d953cd..5d00e4585 100644 --- a/src/Smithbox.Program/Renderer/Texture Manager/IconManager.cs +++ b/src/Smithbox.Program/Renderer/Texture Manager/IconManager.cs @@ -60,7 +60,7 @@ public CachedTexture LoadDirectIcon(Param.Row context, IconConfig iconConfig, ob var curProject = Smithbox.Orchestrator.SelectedProject; // Instead of icon config, we search the layout folder directly - var layouts = Path.Combine(AppContext.BaseDirectory, "Assets", "PARAM", ProjectUtils.GetGameDirectory(curProject.Descriptor.ProjectType), "Icon Layouts"); + var layouts = Path.Combine(StudioCore.Common.FileLocations.Assets, "PARAM", ProjectUtils.GetGameDirectory(curProject.Descriptor.ProjectType), "Icon Layouts"); var key = $"icon_{context.ID}_{columnIndex}_{fieldName}_{fieldValue}"; diff --git a/src/Smithbox.Program/Renderer/Texture Manager/Shoebox/ShoeboxLayoutContainer.cs b/src/Smithbox.Program/Renderer/Texture Manager/Shoebox/ShoeboxLayoutContainer.cs index aad54b8cf..32c49decb 100644 --- a/src/Smithbox.Program/Renderer/Texture Manager/Shoebox/ShoeboxLayoutContainer.cs +++ b/src/Smithbox.Program/Renderer/Texture Manager/Shoebox/ShoeboxLayoutContainer.cs @@ -75,7 +75,7 @@ public async Task SetupLayoutsDirectly() { await Task.Yield(); - var srcFolder = Path.Combine(AppContext.BaseDirectory, "Assets", "PARAM", ProjectUtils.GetGameDirectory(Project), "Icon Layouts"); + var srcFolder = Path.Combine(StudioCore.Common.FileLocations.Assets, "PARAM", ProjectUtils.GetGameDirectory(Project), "Icon Layouts"); foreach (var path in Directory.EnumerateFiles(srcFolder)) { diff --git a/src/Smithbox.Program/Smithbox.Program.csproj b/src/Smithbox.Program/Smithbox.Program.csproj index 5ac496af7..c097437f2 100644 --- a/src/Smithbox.Program/Smithbox.Program.csproj +++ b/src/Smithbox.Program/Smithbox.Program.csproj @@ -3,39 +3,22 @@ net9.0 12 - - Debug-win;Release-win;Debug-linux;Release-linux;Debug-osx;Release-osx;Debug;Release StudioCore - - DEBUG + true 1701;1702;0169 - - - RELEASE + + true embedded false 1701;1702;0169 - - $(DefineConstants);WINDOWS - x64 - - - $(DefineConstants);LINUX - x64 - - - - $(DefineConstants);OSX - arm64;x64 - diff --git a/src/Smithbox.Program/Smithbox.cs b/src/Smithbox.Program/Smithbox.cs index 010456c9f..d0c37e235 100644 --- a/src/Smithbox.Program/Smithbox.cs +++ b/src/Smithbox.Program/Smithbox.cs @@ -216,6 +216,10 @@ private unsafe void SetupImGui() io.ConfigViewportsNoAutoMerge = false; io.ConfigViewportsNoTaskBarIcon = false; + byte[] iniFilename = System.Text.Encoding.UTF8.GetBytes(Path.Combine(StudioCore.Common.FileLocations.CurImgui, "imgui.ini") + '\0'); + GCHandle handle = GCHandle.Alloc(iniFilename, GCHandleType.Pinned); + io.Handle->IniFilename = (byte*)handle.AddrOfPinnedObject(); + // setup ImGui style var style = ImGui.GetStyle(); style.TabBorderSize = 0; @@ -239,17 +243,17 @@ private unsafe void SetupFonts() NonEnglishFontRelPath = CFG.Current.Interface_Non_English_Font_Path; } - var englishFontPath = Path.Combine(AppContext.BaseDirectory, EnglishFontRelPath); + var englishFontPath = Path.Combine(StudioCore.Common.FileLocations.Resources, EnglishFontRelPath); var englishFontData = File.ReadAllBytes(englishFontPath); var englishFontPtr = ImGui.MemAlloc((uint)englishFontData.Length); Marshal.Copy(englishFontData, 0, (nint)englishFontPtr, englishFontData.Length); - var nonEnglishFontPath = Path.Combine(AppContext.BaseDirectory, NonEnglishFontRelPath); + var nonEnglishFontPath = Path.Combine(StudioCore.Common.FileLocations.Resources, NonEnglishFontRelPath); var nonEnglishFontData = File.ReadAllBytes(nonEnglishFontPath); var nonEnglishFontPtr = ImGui.MemAlloc((uint)nonEnglishFontData.Length); Marshal.Copy(nonEnglishFontData, 0, (nint)nonEnglishFontPtr, nonEnglishFontData.Length); - var iconFontPath = Path.Combine(AppContext.BaseDirectory, IconFontRelPath); + var iconFontPath = Path.Combine(StudioCore.Common.FileLocations.Resources, IconFontRelPath); var iconFontData = File.ReadAllBytes(iconFontPath); var iconFontPtr = ImGui.MemAlloc((uint)iconFontData.Length); Marshal.Copy(iconFontData, 0, (nint)iconFontPtr, iconFontData.Length); diff --git a/src/Smithbox.Tests/Smithbox.Tests.csproj b/src/Smithbox.Tests/Smithbox.Tests.csproj index 983ad06eb..21a31ef51 100644 --- a/src/Smithbox.Tests/Smithbox.Tests.csproj +++ b/src/Smithbox.Tests/Smithbox.Tests.csproj @@ -1,7 +1,7 @@  - net9.0 + net9.0-windows7.0 enable enable false @@ -22,12 +22,4 @@ - - DEBUG - - - - RELEASE - - diff --git a/src/Smithbox/AppIcon.icns b/src/Smithbox/AppIcon.icns new file mode 100644 index 000000000..48325465d Binary files /dev/null and b/src/Smithbox/AppIcon.icns differ diff --git a/src/Smithbox/Info.plist b/src/Smithbox/Info.plist new file mode 100644 index 000000000..9a37a6a51 --- /dev/null +++ b/src/Smithbox/Info.plist @@ -0,0 +1,14 @@ + + + + + CFBundleIconFile + AppIcon.icns + CFBundleIdentifier + com.vawser.Smithbox + CFBundleShortVersionString + 2.1.3 + CFBundleVersion + 2.1.0 + + diff --git a/src/Smithbox/ProductDefinition.plist b/src/Smithbox/ProductDefinition.plist new file mode 100644 index 000000000..ad975aa4c --- /dev/null +++ b/src/Smithbox/ProductDefinition.plist @@ -0,0 +1,19 @@ + + + + + home + + arch + + arm64 + x86_64 + + os + + 14.0 + 15.0 + 26.0 + + + diff --git a/src/Smithbox/Program.cs b/src/Smithbox/Program.cs index fc76feb39..8c58a8e18 100644 --- a/src/Smithbox/Program.cs +++ b/src/Smithbox/Program.cs @@ -87,8 +87,12 @@ static List LogExceptions(Exception ex) return log; } - +#if MACOS + private static readonly string CrashLogPath = Path.GetFullPath(Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "../Logs/Smithbox/Crash Logs")); +#else private static readonly string CrashLogPath = Path.Join(Directory.GetCurrentDirectory(), "Crash Logs"); +#endif static void ExportCrashLog(List exceptionInfo) { var time = $"{DateTime.Now:yyyy-M-dd--HH-mm-ss}"; diff --git a/src/Smithbox/Scripts/postinstall b/src/Smithbox/Scripts/postinstall new file mode 100755 index 000000000..24542daf8 --- /dev/null +++ b/src/Smithbox/Scripts/postinstall @@ -0,0 +1,30 @@ +#!/bin/sh + +if [ -d "$INSTALLER_TEMP" ] && [ -n "$(ls $INSTALLER_TEMP)" ]; then + set -- "$INSTALLER_TEMP"/*.dylib + if [ -e $1 ]; then + cp -f $1 "$DSTROOT/Smithbox.app/Contents/MonoBundle/$(basename -- $1)" + fi +fi + +if ! command -v codesign_allocate &> /dev/null; then + cont=$( + osascript <<'EOF' +display alert "Missing codesign_allocate" ¬ + message "Xcode command line tools are required to codesign the app. Without it, you will need to override Gatekeeper. This is not recommended." ¬ + as critical buttons {"Cancel", "Continue"} default button "Cancel" + return button returned of the result +EOF + ) + if [ "$cont" = "Cancel" ]; then + mv "$DSTROOT/Smithbox.app" $HOME/.Trash + exit 1 + fi + exit 0 +fi + +codesign --force -s - "$DSTROOT/Smithbox.app/Contents/MonoBundle/libMoltenVK.dylib" +codesign --force -s - "$DSTROOT/Smithbox.app/Contents/MonoBundle/libSDL2-2.0.dylib" +codesign --force -s - "$DSTROOT/Smithbox.app/" + +exit 0 \ No newline at end of file diff --git a/src/Smithbox/Scripts/preinstall b/src/Smithbox/Scripts/preinstall new file mode 100755 index 000000000..af0a738fd --- /dev/null +++ b/src/Smithbox/Scripts/preinstall @@ -0,0 +1,58 @@ +#!/bin/sh + +if ! command -v install_name_tool &> /dev/null; then + cont=$( + osascript <<'EOF' +display alert "Missing install_name_tool" ¬ + message "Xcode command line tools are required for some unpacking features. Continue anyway?" ¬ + as critical buttons {"Cancel", "Continue"} default button "Cancel" + return button returned of the result +EOF + ) + if [ "$cont" = "Cancel" ]; then + exit 1 + elif [ "$cont" = "Continue" ]; then + exit 0 + fi +fi + +while true; do + dylib=$( + osascript <<'EOF' +set f to choose file of type {"dylib"} with prompt "Select liboo2coremac dynamic library" +POSIX path of f +EOF + ) + + if [ -z "$dylib" ]; then + canc=$( + osascript <<'EOF' +display alert "No oodle library selected" ¬ + message "Certain unpacking features will not be available." ¬ + buttons {"Cancel", "Select file...", "Continue"} default button "Cancel" + return button returned of the result +EOF + ) + + if [ "$canc" = "Cancel" ]; then + exit 1 + elif [ "$canc" = "Continue" ]; then + exit 0 + fi + else + break + fi +done + +libname=$(basename -- "$dylib") +cp "$dylib" "$INSTALLER_TEMP" +install_name_tool -id "@executable_path/../../$libname" "$INSTALLER_TEMP/$libname" +status=$? + +if [ $status -ne 0 ]; then + osascript -e 'display alert "install_name_tool failed. Please submit an issue on GitHub." buttons {"OK"} default button "Ok" as critical' + rm "$INSTALLER_TEMP/$libname" + exit $status +fi + +exit 0 diff --git a/src/Smithbox/Smithbox.Linux.csproj b/src/Smithbox/Smithbox.Linux.csproj new file mode 100644 index 000000000..8cecb99a2 --- /dev/null +++ b/src/Smithbox/Smithbox.Linux.csproj @@ -0,0 +1,58 @@ + + + + Exe + Smithbox + net9.0 + Katalash, Vawser + 2.1.3 + icon.ico + 2.1.0 + 2.1.3 + app.manifest + 12 + false + true + linux-x64 + $(DefineConstants);LINUX + StudioCore + + + + true + x64 + embedded + false + + + + true + x64 + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Smithbox/Smithbox.Mac.csproj b/src/Smithbox/Smithbox.Mac.csproj new file mode 100644 index 000000000..5ad1a69ae --- /dev/null +++ b/src/Smithbox/Smithbox.Mac.csproj @@ -0,0 +1,107 @@ + + + + Exe + Smithbox + com.vawser.Smithbox + net9.0-macos + Katalash, Vawser + 2.1.3 + icon.ico + 2.1.0 + 2.1.3 + app.manifest + 12 + false + true + AnyCPU;x64 + osx-arm64;osx-x64 + osx-x64 + 14.0 + $(DefineConstants);MACOS + StudioCore + + + + true + $(Platform) + embedded + false + + + + true + $(Platform) + + + + + <_CustomLinkFlags Include="-ld64;-undefined;dynamic_lookup" Visible="false" /> + + + false + <_UseClassicLinker>true + ProductDefinition.plist + + + + /path/to/VulkanSDK/Version + $(VULKAN_SDK)/macOS/lib/libMoltenVK.dylib + /path/to/oodle.dylib + ../Andre/Andre.Formats/libbhd5_decrypt_rust.dylib + ../Tracy/libTracyClient.dylib + + + + + + + + + + + + + + + + + + + +<Project> + <PropertyGroup> + <DefineConstants>%24(DefineConstants)%3BMACOS</DefineConstants> + </PropertyGroup> +</Project> + + + + + + + + + +s/%5C(<os-version min="[0-9.][0-9.]*"%5C).*%5C/>/%5C1%5C/>/g +s/ customLocation="%5C/Applications">/>/ + + +s/<%5C/pkg-info>/%5C + <scripts>%5C + <preinstall file=".%5C/preinstall"%5C/>%5C + <postinstall file=".%5C/postinstall"%5C/>%5C + <%5C/scripts>%5C +&/ + + + + + + + + + + + + diff --git a/src/Smithbox/Smithbox.csproj b/src/Smithbox/Smithbox.csproj index 6d06cf853..d82b230dc 100644 --- a/src/Smithbox/Smithbox.csproj +++ b/src/Smithbox/Smithbox.csproj @@ -1,8 +1,9 @@ - + - Exe - net9.0 + WinExe + Smithbox + net9.0-windows7.0 Katalash, Vawser 2.1.3 icon.ico @@ -12,43 +13,41 @@ 12 false true - Debug-win;Release-win;Debug-linux;Release-linux;Debug-osx;Release-osx;Debug;Release + win-x64 + $(DefineConstants);WINDOWS StudioCore - - DEBUG - true - - - - RELEASE + true + x64 embedded false - - WinExe - x64 - win-x64 - - - + + true x64 - linux-x64 - - arm64;x64 - osx-arm64;osx-x64 - + + + + + + + + + + + + diff --git a/src/Tracy/Tracy.cs b/src/Tracy/Tracy.cs index a4542e31f..9821fb294 100644 --- a/src/Tracy/Tracy.cs +++ b/src/Tracy/Tracy.cs @@ -23,10 +23,10 @@ public unsafe class Profiler Environment.GetEnvironmentVariable("SMITHBOX_PROFILER") != "0"; #endif - [DllImport("TracyClient.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("TracyClient", CallingConvention = CallingConvention.Cdecl)] private static extern void ___tracy_startup_profiler(); - [DllImport("TracyClient.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("TracyClient", CallingConvention = CallingConvention.Cdecl)] private static extern void ___tracy_shutdown_profiler(); public static void Startup() @@ -44,41 +44,41 @@ public static void Shutdown() EnableTracy = false; } - [DllImport("TracyClient.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("TracyClient", CallingConvention = CallingConvention.Cdecl)] private static extern ___tracy_c_zone_context ___tracy_emit_zone_begin(___tracy_source_location_data* srcloc, int active); - [DllImport("TracyClient.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("TracyClient", CallingConvention = CallingConvention.Cdecl)] private static extern ___tracy_c_zone_context ___tracy_emit_zone_begin_callstack( ___tracy_source_location_data* srcloc, int depth, int active); - [DllImport("TracyClient.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("TracyClient", CallingConvention = CallingConvention.Cdecl)] private static extern ___tracy_c_zone_context ___tracy_emit_zone_begin_alloc(ulong srcloc, int active); - [DllImport("TracyClient.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("TracyClient", CallingConvention = CallingConvention.Cdecl)] private static extern ___tracy_c_zone_context ___tracy_emit_zone_begin_alloc_callstack(ulong srcloc, int depth, int active); - [DllImport("TracyClient.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("TracyClient", CallingConvention = CallingConvention.Cdecl)] private static extern void ___tracy_emit_zone_end(___tracy_c_zone_context ctx); - [DllImport("TracyClient.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("TracyClient", CallingConvention = CallingConvention.Cdecl)] private static extern void ___tracy_emit_zone_text(___tracy_c_zone_context ctx, string txt, ulong size); - [DllImport("TracyClient.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("TracyClient", CallingConvention = CallingConvention.Cdecl)] private static extern void ___tracy_emit_zone_name(___tracy_c_zone_context ctx, string txt, ulong size); - [DllImport("TracyClient.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("TracyClient", CallingConvention = CallingConvention.Cdecl)] private static extern void ___tracy_emit_zone_color(___tracy_c_zone_context ctx, uint color); - [DllImport("TracyClient.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("TracyClient", CallingConvention = CallingConvention.Cdecl)] private static extern void ___tracy_emit_zone_value(___tracy_c_zone_context ctx, ulong value); - [DllImport("TracyClient.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("TracyClient", CallingConvention = CallingConvention.Cdecl)] private static extern ulong ___tracy_alloc_srcloc(uint line, string source, ulong sourceSz, string function, ulong functionSz); - [DllImport("TracyClient.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("TracyClient", CallingConvention = CallingConvention.Cdecl)] private static extern ulong ___tracy_alloc_srcloc_name(uint line, string source, ulong sourceSz, string function, ulong functionSz, string name, ulong nameSz); @@ -202,10 +202,10 @@ public static void TracyCZoneEnd(___tracy_c_zone_context ctx) ___tracy_emit_zone_end(ctx); } - [DllImport("TracyClient.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("TracyClient", CallingConvention = CallingConvention.Cdecl)] private static extern void ___tracy_fiber_enter(IntPtr namePtr); - [DllImport("TracyClient.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("TracyClient", CallingConvention = CallingConvention.Cdecl)] private static extern void ___tracy_fiber_leave(); private static readonly ConcurrentDictionary s_fiberNamePtrs = new(); @@ -237,13 +237,13 @@ public static void TracyFiberLeave() try { ___tracy_fiber_leave(); } catch { } } - [DllImport("TracyClient.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("TracyClient", CallingConvention = CallingConvention.Cdecl)] private static extern void ___tracy_emit_frame_mark(string? name); - [DllImport("TracyClient.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("TracyClient", CallingConvention = CallingConvention.Cdecl)] private static extern void ___tracy_emit_frame_mark_start(string name); - [DllImport("TracyClient.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("TracyClient", CallingConvention = CallingConvention.Cdecl)] private static extern void ___tracy_emit_frame_mark_end(string name); public static void TracyCFrameMark() diff --git a/src/Tracy/Tracy.csproj b/src/Tracy/Tracy.csproj index 995b166b0..46d5fc67c 100644 --- a/src/Tracy/Tracy.csproj +++ b/src/Tracy/Tracy.csproj @@ -9,17 +9,16 @@ - + + + PreserveNewest + + + Never + + PreserveNewest - - DEBUG - - - - RELEASE - - diff --git a/src/Tracy/libTracyClient.dylib b/src/Tracy/libTracyClient.dylib new file mode 100755 index 000000000..d5723fadb Binary files /dev/null and b/src/Tracy/libTracyClient.dylib differ diff --git a/src/Tracy/libTracyClient.so b/src/Tracy/libTracyClient.so new file mode 100644 index 000000000..72a2443ce Binary files /dev/null and b/src/Tracy/libTracyClient.so differ diff --git a/src/Veldrid/Veldrid.MetalBindings/Veldrid.MetalBindings.csproj b/src/Veldrid/Veldrid.MetalBindings/Veldrid.MetalBindings.csproj index 63c9b92d5..8ea4e6b30 100644 --- a/src/Veldrid/Veldrid.MetalBindings/Veldrid.MetalBindings.csproj +++ b/src/Veldrid/Veldrid.MetalBindings/Veldrid.MetalBindings.csproj @@ -9,12 +9,4 @@ - - DEBUG - - - - RELEASE - - diff --git a/src/Veldrid/Veldrid.RenderDoc/Veldrid.RenderDoc.csproj b/src/Veldrid/Veldrid.RenderDoc/Veldrid.RenderDoc.csproj index 54da41315..2b6f62d8d 100644 --- a/src/Veldrid/Veldrid.RenderDoc/Veldrid.RenderDoc.csproj +++ b/src/Veldrid/Veldrid.RenderDoc/Veldrid.RenderDoc.csproj @@ -11,12 +11,7 @@ Debug Profile 3D Graphics Direct3D DirectX Vulkan OpenGL Core Standard Game - - DEBUG - - - - RELEASE + embedded diff --git a/src/Veldrid/Veldrid.SDL2/Veldrid.SDL2.csproj b/src/Veldrid/Veldrid.SDL2/Veldrid.SDL2.csproj index 92c313291..6f338e4e2 100644 --- a/src/Veldrid/Veldrid.SDL2/Veldrid.SDL2.csproj +++ b/src/Veldrid/Veldrid.SDL2/Veldrid.SDL2.csproj @@ -19,12 +19,7 @@ Core Standard Game SDL2 Window Input - - DEBUG - - - - RELEASE + embedded diff --git a/src/Veldrid/Veldrid.SPIRV.VariantCompiler/Veldrid.SPIRV.VariantCompiler.csproj b/src/Veldrid/Veldrid.SPIRV.VariantCompiler/Veldrid.SPIRV.VariantCompiler.csproj index f2207ffd7..7aa7f426c 100644 --- a/src/Veldrid/Veldrid.SPIRV.VariantCompiler/Veldrid.SPIRV.VariantCompiler.csproj +++ b/src/Veldrid/Veldrid.SPIRV.VariantCompiler/Veldrid.SPIRV.VariantCompiler.csproj @@ -23,12 +23,4 @@ - - DEBUG - - - - RELEASE - - diff --git a/src/Veldrid/Veldrid.SPIRV/Veldrid.SPIRV.csproj b/src/Veldrid/Veldrid.SPIRV/Veldrid.SPIRV.csproj index 10801e37c..80786a9b8 100644 --- a/src/Veldrid/Veldrid.SPIRV/Veldrid.SPIRV.csproj +++ b/src/Veldrid/Veldrid.SPIRV/Veldrid.SPIRV.csproj @@ -55,12 +55,7 @@ 3D Graphics Direct3D DirectX Vulkan OpenGL Metal Core Standard Game - - DEBUG - - - - RELEASE + embedded diff --git a/src/Veldrid/Veldrid.StartupUtilities/Veldrid.StartupUtilities.csproj b/src/Veldrid/Veldrid.StartupUtilities/Veldrid.StartupUtilities.csproj index 7fafb407a..ead84d83b 100644 --- a/src/Veldrid/Veldrid.StartupUtilities/Veldrid.StartupUtilities.csproj +++ b/src/Veldrid/Veldrid.StartupUtilities/Veldrid.StartupUtilities.csproj @@ -21,12 +21,7 @@ Core Standard Game SDL2 Window Input - - $(DefineConstants);DEBUG - - - - $(DefineConstants);RELEASE + embedded diff --git a/src/Veldrid/Veldrid.Utilities/Veldrid.Utilities.csproj b/src/Veldrid/Veldrid.Utilities/Veldrid.Utilities.csproj index 7146cc7e4..18a9bbf2b 100644 --- a/src/Veldrid/Veldrid.Utilities/Veldrid.Utilities.csproj +++ b/src/Veldrid/Veldrid.Utilities/Veldrid.Utilities.csproj @@ -16,12 +16,7 @@ Core Standard Game Graphics - - DEBUG - - - - RELEASE + embedded diff --git a/src/Veldrid/Veldrid/CommonStrings.cs b/src/Veldrid/Veldrid/CommonStrings.cs index 8455897ec..3782e49d9 100644 --- a/src/Veldrid/Veldrid/CommonStrings.cs +++ b/src/Veldrid/Veldrid/CommonStrings.cs @@ -11,6 +11,7 @@ internal static class CommonStrings public static FixedUtf8String VK_KHR_SWAPCHAIN_EXTENSION_NAME { get; } = "VK_KHR_swapchain"; public static FixedUtf8String VK_MVK_MACOS_SURFACE_EXTENSION_NAME { get; } = "VK_MVK_macos_surface"; public static FixedUtf8String VK_EXT_METAL_SURFACE_EXTENSION_NAME { get; } = "VK_EXT_metal_surface"; + public static FixedUtf8String VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME { get; } = "VK_KHR_portability_enumeration"; public static FixedUtf8String VK_MVK_IOS_SURFACE_EXTENSION_NAME { get; } = "VK_MVK_ios_surface"; public static FixedUtf8String VK_EXT_DEBUG_UTILS_EXTENSION_NAME { get; } = "VK_EXT_debug_utils"; public static FixedUtf8String StandardValidationLayerName { get; } = "VK_LAYER_KHRONOS_validation"; diff --git a/src/Veldrid/Veldrid/GraphicsDevice.cs b/src/Veldrid/Veldrid/GraphicsDevice.cs index ec45e3831..bc0cc8465 100644 --- a/src/Veldrid/Veldrid/GraphicsDevice.cs +++ b/src/Veldrid/Veldrid/GraphicsDevice.cs @@ -56,6 +56,7 @@ public unsafe class GraphicsDevice : IDisposable private const int SharedCommandPoolCount = 4; private VkDescriptorPoolManager _descriptorPoolManager; private bool _standardValidationSupported; + private bool _isPortabilitySubset = OperatingSystem.IsMacOS(); private bool _standardClipYDirection; private vkGetBufferMemoryRequirements2_t _getBufferMemoryRequirements2; private vkGetImageMemoryRequirements2_t _getImageMemoryRequirements2; @@ -678,6 +679,29 @@ public VkSampleCountFlags GetSampleCountLimit(VkFormat format, bool depthFormat) return VkSampleCountFlags.Count1; } + /// + /// Gets the maximum image extent for the given . + /// + /// The image type. + /// The format to query. + /// The usage flags. + /// The creation flags. + /// The tiling options. + /// A struct representing the maximum width, height, and depth that a of that + /// format can be created with. + public VkExtent3D GetImageFormatMaxExtent(VkImageType type, VkFormat format, VkImageUsageFlags usageFlags, VkImageCreateFlags createFlags, VkImageTiling tiling) + { + vkGetPhysicalDeviceImageFormatProperties( + _physicalDevice, + format, + type, + tiling, + usageFlags, + createFlags, + out VkImageFormatProperties formatProperties); + return formatProperties.maxExtent; + } + /// /// Maps a or into a CPU-accessible data region. For Texture resources, this /// overload maps the first subresource. @@ -1673,6 +1697,12 @@ private void CreateInstance(bool debug, VulkanDeviceOptions options) } } + if (availableInstanceExtensions.Contains(CommonStrings.VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)) + { + _isPortabilitySubset = true; + instanceExtensions.Add(CommonStrings.VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME); + } + var instanceCI = new VkInstanceCreateInfo { pApplicationInfo = &applicationInfo, @@ -1681,6 +1711,8 @@ private void CreateInstance(bool debug, VulkanDeviceOptions options) enabledLayerCount = instanceLayers.Count, ppEnabledLayerNames = (instanceLayers.Count > 0) ? (sbyte**)instanceLayers.Data : null }; + if (_isPortabilitySubset) + instanceCI.flags = VkInstanceCreateFlags.EnumeratePortabilityKHR; VkDebugUtilsMessengerCreateInfoEXT debugCallbackCI; if (debug && debugUtilsExtensionAvailable) @@ -1818,9 +1850,7 @@ private void CreatePhysicalDevice() deviceVulkan11Features.uniformAndStorageBuffer16BitAccess != VkBool32.True) continue; if ( -#if !OSX - deviceVulkan12Features.drawIndirectCount != VkBool32.True || //! not supported by metal -#endif + deviceVulkan12Features.drawIndirectCount != VkBool32.True && !_isPortabilitySubset || deviceVulkan12Features.descriptorIndexing != VkBool32.True || deviceVulkan12Features.descriptorBindingVariableDescriptorCount != VkBool32.True || deviceVulkan12Features.runtimeDescriptorArray != VkBool32.True || @@ -1966,11 +1996,7 @@ ref _queueFamilyIndices[(int)QueueType.Transfer], ref _queueIndices[(int)QueueTy var deviceFeatures12 = new VkPhysicalDeviceVulkan12Features { -#if OSX - drawIndirectCount = VkBool32.False, //! not supported by metal -#else - drawIndirectCount = VkBool32.True, -#endif + drawIndirectCount = _isPortabilitySubset ? VkBool32.False : VkBool32.True, descriptorIndexing = VkBool32.True, descriptorBindingVariableDescriptorCount = VkBool32.True, descriptorBindingSampledImageUpdateAfterBind = VkBool32.True, @@ -2025,6 +2051,11 @@ ref _queueFamilyIndices[(int)QueueType.Transfer], ref _queueIndices[(int)QueueTy requiredInstanceExtensions.Remove(extensionName); hasDedicatedAllocation = true; } + else if (extensionName == "VK_KHR_portability_subset") + { + extensionNames.Add((IntPtr)properties[property].extensionName); + requiredInstanceExtensions.Remove(extensionName); + } else if (requiredInstanceExtensions.Remove(extensionName)) { extensionNames.Add((IntPtr)properties[property].extensionName); diff --git a/src/Veldrid/Veldrid/Swapchain.cs b/src/Veldrid/Veldrid/Swapchain.cs index 4e544b0fe..699c7762f 100644 --- a/src/Veldrid/Veldrid/Swapchain.cs +++ b/src/Veldrid/Veldrid/Swapchain.cs @@ -115,6 +115,14 @@ public bool AcquireNextImage(VkDevice device, VkSemaphore semaphore, VkFence fen return false; } + //HACK to obey VUID-vkAcquireNextImageKHR-fence-01287 and VUID-vkAcquireNextImageKHR-fence-10066 + if (vkGetFenceStatus(device, fence) == VkResult.Success) + { + _gd.WaitForIdle(); + vkWaitForFences(device, 1, &fence, true, ulong.MaxValue); + vkResetFences(device, 1, &fence); + } + VkResult result = vkAcquireNextImageKHR( device, _deviceSwapchain, diff --git a/src/Veldrid/Veldrid/Veldrid.csproj b/src/Veldrid/Veldrid/Veldrid.csproj index 6c8be2045..250438bc0 100644 --- a/src/Veldrid/Veldrid/Veldrid.csproj +++ b/src/Veldrid/Veldrid/Veldrid.csproj @@ -10,29 +10,8 @@ $(DefineConstants);EXCLUDE_METAL_BACKEND $(DefineConstants);EXCLUDE_OPENGL_BACKEND 12 - Debug-win;Release-win;Debug-linux;Release-linux;Debug-osx;Release-osx;Debug;Release - - $(DefineConstants);DEBUG - - - - $(DefineConstants);RELEASE - - - - $(DefineConstants);WINDOWS - - - - $(DefineConstants);LINUX - - - - $(DefineConstants);OSX - - diff --git a/src/Veldrid/Veldrid/VkSurfaceUtil.cs b/src/Veldrid/Veldrid/VkSurfaceUtil.cs index 3300497a0..01182bd9d 100644 --- a/src/Veldrid/Veldrid/VkSurfaceUtil.cs +++ b/src/Veldrid/Veldrid/VkSurfaceUtil.cs @@ -145,7 +145,7 @@ private static unsafe VkSurfaceKHR CreateNSViewSurface(GraphicsDevice gd, VkInst if (hasExtMetalSurface) { VkMetalSurfaceCreateInfoEXT surfaceCI = new VkMetalSurfaceCreateInfoEXT(); - //surfaceCI.sType = VkMetalSurfaceCreateInfoEXT.VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT; //! handled by constructor + surfaceCI.sType = VkMetalSurfaceCreateInfoEXT.VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT; surfaceCI.pLayer = metalLayer.NativePtr.ToPointer(); VkSurfaceKHR surface = new VkSurfaceKHR(); VkResult result = gd.CreateMetalSurfaceEXT(instance, &surfaceCI, null, &surface);