4jcraft/Minecraft.Client/Textures/Packs/FolderTexturePack.cpp
2026-03-21 22:46:45 -05:00

110 lines
3.2 KiB
C++

#include "../../Platform/stdafx.h"
#include "FolderTexturePack.h"
FolderTexturePack::FolderTexturePack(std::uint32_t id, const std::wstring& name,
File* folder, TexturePack* fallback)
: AbstractTexturePack(id, folder, name, fallback) {
// 4J Stu - These calls need to be in the most derived version of the class
loadIcon();
loadName();
loadDescription();
bUILoaded = false;
}
InputStream* FolderTexturePack::getResourceImplementation(
const std::wstring& name) // throws IOException
{
#if 0
final File file = new File(this.file, name.substring(1));
if (!file.exists()) {
throw new FileNotFoundException(name);
}
return new BufferedInputStream(new FileInputStream(file));
#endif
std::wstring wDrive = L"";
// Make the content package point to to the UPDATE: drive is needed
#ifdef _XBOX
wDrive = L"GAME:\\DummyTexturePack\\res";
#else
wDrive = L"Common\\DummyTexturePack\\res";
#endif
InputStream* resource = InputStream::getResourceAsStream(wDrive + name);
// InputStream *stream =
// DefaultTexturePack::class->getResourceAsStream(name); if (stream == NULL)
//{
// throw new FileNotFoundException(name);
// }
// return stream;
return resource;
}
bool FolderTexturePack::hasFile(const std::wstring& name) {
File file = File(getPath() + name);
return file.exists() && file.isFile();
// return true;
}
bool FolderTexturePack::isTerrainUpdateCompatible() {
#if 0
final File dir = new File(this.file, "textures/");
final boolean hasTexturesFolder = dir.exists() && dir.isDirectory();
final boolean hasOldFiles = hasFile("terrain.png") || hasFile("gui/items.png");
return hasTexturesFolder || !hasOldFiles;
#endif
return true;
}
std::wstring FolderTexturePack::getPath(bool bTitleUpdateTexture /*= false*/,
const char* pchBDPatchFilename) {
std::wstring wDrive;
#ifdef _XBOX
wDrive = L"GAME:\\" + file->getPath() + L"\\";
#else
wDrive = L"Common\\" + file->getPath() + L"\\";
#endif
return wDrive;
}
void FolderTexturePack::loadUI() {
#ifdef _XBOX
//"file://" + Drive + PathToXZP + "#" + PathInsideXZP
// L"file://game:/ui.xzp#skin_default.xur"
// Load new skin
if (hasFile(L"TexturePack.xzp")) {
constexpr int LOCATOR_SIZE =
256; // Use this to allocate space to hold a ResourceLocator string
WCHAR szResourceLocator[LOCATOR_SIZE];
swprintf(szResourceLocator, LOCATOR_SIZE,
L"file://%lsTexturePack.xzp#skin_Minecraft.xur",
getPath().c_str());
XuiFreeVisuals(L"");
app.LoadSkin(szResourceLocator, NULL); // L"TexturePack");
bUILoaded = true;
// CXuiSceneBase::GetInstance()->SetVisualPrefix(L"TexturePack");
}
AbstractTexturePack::loadUI();
#endif
}
void FolderTexturePack::unloadUI() {
#ifdef _XBOX
// Unload skin
if (bUILoaded) {
XuiFreeVisuals(L"TexturePack");
XuiFreeVisuals(L"");
CXuiSceneBase::GetInstance()->SetVisualPrefix(L"");
CXuiSceneBase::GetInstance()->SkinChanged(
CXuiSceneBase::GetInstance()->m_hObj);
}
AbstractTexturePack::unloadUI();
#endif
}