diff --git a/.gitignore b/.gitignore
index 0a42b42e5..eef95bde6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -423,4 +423,10 @@ Minecraft.World/x64_Debug/
Minecraft.World/Release/
Minecraft.World/x64_Release/
-build/*
\ No newline at end of file
+build/*
+
+# Existing build output files
+!x64/**/Effects.msscmp
+!x64/**/iggy_w64.dll
+!x64/**/mss64.dll
+!x64/**/redist64/
diff --git a/Minecraft.Client/Common/UI/UILayer.cpp b/Minecraft.Client/Common/UI/UILayer.cpp
index ceec33f12..13b26c845 100644
--- a/Minecraft.Client/Common/UI/UILayer.cpp
+++ b/Minecraft.Client/Common/UI/UILayer.cpp
@@ -328,6 +328,10 @@ bool UILayer::NavigateToScene(int iPad, EUIScene scene, void *initData)
newScene = new UIScene_InGameInfoMenu(iPad, initData, this);
break;
case eUIScene_InGameHostOptionsMenu:
+ if (IsSceneInStack(eUIScene_InGameHostOptionsMenu)) {
+ app.DebugPrintf("Skipped eUIScene_InGameHostOptionsMenu, we have already this tab!");
+ return false;
+ }
newScene = new UIScene_InGameHostOptionsMenu(iPad, initData, this);
break;
case eUIScene_InGamePlayerOptionsMenu:
diff --git a/Minecraft.Client/Minecraft.Client.vcxproj b/Minecraft.Client/Minecraft.Client.vcxproj
index 765fb49c2..c6e4964ba 100644
--- a/Minecraft.Client/Minecraft.Client.vcxproj
+++ b/Minecraft.Client/Minecraft.Client.vcxproj
@@ -1466,14 +1466,8 @@ if not exist "$(TargetDir)\savedata" mkdir "$(TargetDir)\savedata"
false
- Copying sound assets to output directory
- xcopy /q /y /i /s /e "$(ProjectDir)Durango\Sound" "$(OutDir)Durango\Sound"
-xcopy /q /y /i /s /e "$(ProjectDir)music" "$(OutDir)music"
-xcopy /q /y /i /s /e "$(ProjectDir)Windows64\GameHDD" "$(OutDir)Windows64\GameHDD"
-xcopy /q /y /i /s /e "$(ProjectDir)Common\Media" "$(OutDir)Common\Media"
-xcopy /q /y /i /s /e "$(ProjectDir)Common\res" "$(OutDir)Common\res"
-xcopy /q /y /i /s /e "$(ProjectDir)Common\Trial" "$(OutDir)Common\Trial"
-xcopy /q /y /i /s /e "$(ProjectDir)Common\Tutorial" "$(OutDir)Common\Tutorial"
+ Run postbuild script
+ powershell -ExecutionPolicy Bypass -File "$(ProjectDir)postbuild.ps1" -OutDir "$(OutDir)/" -ProjectDir "$(ProjectDir)/"
$(ProjectDir)xbox\xex-dev.xml
@@ -1605,25 +1599,8 @@ xcopy /q /y /i /s /e $(ProjectDir)DurangoMedia\CU $(LayoutDir)Image\Loose\CUfalse
- Copying game assets to output directory
- mkdir "$(OutDir)music" 2>nul
-mkdir "$(OutDir)Windows64\GameHDD" 2>nul
-mkdir "$(OutDir)Common\Media" 2>nul
-mkdir "$(OutDir)Common\res" 2>nul
-mkdir "$(OutDir)Common\Trial" 2>nul
-mkdir "$(OutDir)Common\Tutorial" 2>nul
-mkdir "$(OutDir)Windows64Media" 2>nul
-
-xcopy /q /y /i /s /e "$(ProjectDir)music" "$(OutDir)music" || exit /b 0
-xcopy /q /y /i /s /e "$(ProjectDir)Windows64\GameHDD" "$(OutDir)Windows64\GameHDD" || exit /b 0
-xcopy /q /y /i /s /e "$(ProjectDir)Common\Media" "$(OutDir)Common\Media" || exit /b 0
-xcopy /q /y /i /s /e "$(ProjectDir)Common\res" "$(OutDir)Common\res" || exit /b 0
-xcopy /q /y /i /s /e "$(ProjectDir)Common\Trial" "$(OutDir)Common\Trial" || exit /b 0
-xcopy /q /y /i /s /e "$(ProjectDir)Common\Tutorial" "$(OutDir)Common\Tutorial" || exit /b 0
-xcopy /q /y /i /s /e "$(ProjectDir)DurangoMedia" "$(OutDir)Windows64Media" || exit /b 0
-xcopy /q /y /i /s /e "$(ProjectDir)Windows64Media" "$(OutDir)Windows64Media" || exit /b 0
-
-exit /b 0
+ Run postbuild script
+ powershell -ExecutionPolicy Bypass -File "$(ProjectDir)postbuild.ps1" -OutDir "$(OutDir)/" -ProjectDir "$(ProjectDir)/"
$(ProjectDir)xbox\xex-dev.xml
diff --git a/Minecraft.Client/Minecraft.Client.vcxproj.user b/Minecraft.Client/Minecraft.Client.vcxproj.user
index ace9a86ac..10dbfa336 100644
--- a/Minecraft.Client/Minecraft.Client.vcxproj.user
+++ b/Minecraft.Client/Minecraft.Client.vcxproj.user
@@ -1,3 +1,14 @@
+
+ Debug
+
+
+ $(SolutionDir)$(Platform)\$(Configuration)\
+ WindowsLocalDebugger
+
+
+ $(SolutionDir)$(Platform)\$(Configuration)\
+ WindowsLocalDebugger
+
\ No newline at end of file
diff --git a/Minecraft.Client/TextureHolder.h b/Minecraft.Client/TextureHolder.h
index 304d03e75..6c600d637 100644
--- a/Minecraft.Client/TextureHolder.h
+++ b/Minecraft.Client/TextureHolder.h
@@ -30,7 +30,8 @@ public:
int compareTo(const TextureHolder *other) const;
};
-typedef struct
+struct TextureHolderLessThan
{
- bool operator() (const TextureHolder *first, const TextureHolder *second) const { return first->compareTo(second) >= 0; }
-} TextureHolderLessThan;
\ No newline at end of file
+ inline bool operator()(const TextureHolder *first, const TextureHolder *second) const
+ { return first->compareTo(second) >= 0; }
+};
\ No newline at end of file
diff --git a/Minecraft.Client/postbuild.ps1 b/Minecraft.Client/postbuild.ps1
new file mode 100644
index 000000000..1c965758a
--- /dev/null
+++ b/Minecraft.Client/postbuild.ps1
@@ -0,0 +1,42 @@
+param(
+ [string]$OutDir,
+ [string]$ProjectDir
+)
+
+Write-Host "Post-build script started. Output Directory: $OutDir, Project Directory: $ProjectDir"
+
+$directories = @(
+ "music",
+ "Windows64\GameHDD",
+ "Common\Media",
+ "Common\res",
+ "Common\Trial",
+ "Common\Tutorial",
+ "Windows64Media"
+)
+
+foreach ($dir in $directories) {
+ New-Item -ItemType Directory -Path (Join-Path $OutDir $dir) -Force | Out-Null
+}
+
+$copies = @(
+ @{ Source = "music"; Dest = "music" },
+ @{ Source = "Common\Media"; Dest = "Common\Media" },
+ @{ Source = "Common\res"; Dest = "Common\res" },
+ @{ Source = "Common\Trial"; Dest = "Common\Trial" },
+ @{ Source = "Common\Tutorial"; Dest = "Common\Tutorial" },
+ @{ Source = "Windows64\GameHDD"; Dest = "Windows64\GameHDD" },
+ @{ Source = "Windows64\Sound"; Dest = "Windows64\Sound" },
+ @{ Source = "DurangoMedia"; Dest = "Windows64Media" },
+ @{ Source = "Windows64Media"; Dest = "Windows64Media" }
+)
+
+foreach ($copy in $copies) {
+ $src = Join-Path $ProjectDir $copy.Source
+ $dst = Join-Path $OutDir $copy.Dest
+
+ if (Test-Path $src) {
+ # Copy the files using xcopy, forcing overwrite and suppressing errors, and only copying if the source is newer than the destination
+ xcopy /q /y /i /s /e /d "$src" "$dst" 2>$null
+ }
+}
diff --git a/Minecraft.World/ChunkPos.h b/Minecraft.World/ChunkPos.h
index f1d483c7e..2a3fda02b 100644
--- a/Minecraft.World/ChunkPos.h
+++ b/Minecraft.World/ChunkPos.h
@@ -28,13 +28,14 @@ public:
ChunkPos & operator= (const ChunkPos & other) { x = other.x; z = other.z; return *this; }
};
-typedef struct
+struct ChunkPosKeyHash
{
- __int64 operator() (const ChunkPos &k) const { return ChunkPos::hash_fnct(k); }
+ inline __int64 operator()(const ChunkPos &k) const
+ { return ChunkPos::hash_fnct(k); }
+};
-} ChunkPosKeyHash;
-
-typedef struct
+struct ChunkPosKeyEq
{
- bool operator() (const ChunkPos &x, const ChunkPos &y) const { return ChunkPos::eq_test(x, y); }
-} ChunkPosKeyEq;
\ No newline at end of file
+ inline bool operator()(const ChunkPos &x, const ChunkPos &y) const
+ { return ChunkPos::eq_test(x, y); }
+};
\ No newline at end of file
diff --git a/Minecraft.World/TilePos.h b/Minecraft.World/TilePos.h
index d4a3e84eb..04804066a 100644
--- a/Minecraft.World/TilePos.h
+++ b/Minecraft.World/TilePos.h
@@ -14,14 +14,15 @@ public:
static bool eq_test(const TilePos &x, const TilePos &y);
};
-typedef struct
+struct TilePosKeyHash
{
- int operator() (const TilePos &k) const { return TilePos::hash_fnct (k); }
+ inline int operator()(const TilePos &k) const
+ { return TilePos::hash_fnct (k); }
+};
-} TilePosKeyHash;
-
-typedef struct
+struct TilePosKeyEq
{
- bool operator() (const TilePos &x, const TilePos &y) const { return TilePos::eq_test (x, y); }
-} TilePosKeyEq;
+ inline bool operator()(const TilePos &x, const TilePos &y) const
+ { return TilePos::eq_test (x, y); }
+};