mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-12-21 02:39:17 +00:00
Applied a bunch of fixes to get the current game exporter functionality working with the resource store system
This commit is contained in:
@@ -60,7 +60,6 @@ class CFont : public CResource
|
||||
public:
|
||||
CFont(CResourceEntry *pEntry = 0);
|
||||
~CFont();
|
||||
CResource* MakeCopy(CResCache *pCopyCache);
|
||||
CVector2f RenderString(const TString& rkString, CRenderer *pRenderer, float AspectRatio,
|
||||
CVector2f Position = CVector2f(0,0),
|
||||
CColor FillColor = CColor::skWhite, CColor StrokeColor = CColor::skBlack,
|
||||
|
||||
@@ -9,8 +9,6 @@
|
||||
#include <Common/types.h>
|
||||
#include <Common/TString.h>
|
||||
|
||||
class CResCache;
|
||||
|
||||
// This macro creates functions that allow us to easily identify this resource type.
|
||||
// Must be included on every CResource subclass.
|
||||
#define DECLARE_RESOURCE_TYPE(ResTypeEnum) \
|
||||
@@ -38,18 +36,17 @@ public:
|
||||
CResource(CResourceEntry *pEntry = 0)
|
||||
: mpEntry(pEntry), mRefCount(0)
|
||||
{
|
||||
if (!mpEntry) mpEntry = gResourceStore.RegisterTransientResource(Type());
|
||||
}
|
||||
|
||||
virtual ~CResource() {}
|
||||
|
||||
inline CResourceEntry* Entry() const { return mpEntry; }
|
||||
inline TString Source() const { return mpEntry->CookedAssetPath(true).GetFileName(); }
|
||||
inline TString FullSource() const { return mpEntry->CookedAssetPath(true); }
|
||||
inline CUniqueID ResID() const { return mpEntry->ID(); }
|
||||
inline EGame Game() const { return mpEntry->Game(); }
|
||||
inline TString Source() const { return mpEntry ? mpEntry->CookedAssetPath(true).GetFileName() : ""; }
|
||||
inline TString FullSource() const { return mpEntry ? mpEntry->CookedAssetPath(true) : ""; }
|
||||
inline CUniqueID ResID() const { return mpEntry ? mpEntry->ID() : CUniqueID::skInvalidID64; }
|
||||
inline EGame Game() const { return mpEntry ? mpEntry->Game() : eUnknownVersion; }
|
||||
inline bool IsReferenced() const { return mRefCount > 0; }
|
||||
inline void SetGame(EGame Game) { mpEntry->SetGame(Game); }
|
||||
inline void SetGame(EGame Game) { if (mpEntry) mpEntry->SetGame(Game); }
|
||||
inline void Lock() { mRefCount++; }
|
||||
inline void Release() { mRefCount--; }
|
||||
|
||||
|
||||
@@ -60,9 +60,9 @@ public:
|
||||
if (!IsValid())
|
||||
return nullptr;
|
||||
if (mIsPath)
|
||||
return gResourceStore.LoadResource(mPath);
|
||||
return gpResourceStore->LoadResource(mPath);
|
||||
else
|
||||
return gResourceStore.LoadResource(ID(), Type());
|
||||
return gpResourceStore->LoadResource(ID(), Type());
|
||||
}
|
||||
|
||||
inline bool IsValid() const
|
||||
|
||||
@@ -14,7 +14,7 @@ CAnimSet* CAnimSetLoader::LoadCorruptionCHAR(IInputStream& rCHAR)
|
||||
CAnimSet::SNode& node = pSet->mNodes[0];
|
||||
|
||||
node.Name = rCHAR.ReadString();
|
||||
node.pModel = gResourceStore.LoadResource(rCHAR.ReadLongLong(), "CMDL");
|
||||
node.pModel = gpResourceStore->LoadResource(rCHAR.ReadLongLong(), "CMDL");
|
||||
return pSet;
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ CAnimSet* CAnimSetLoader::LoadReturnsCHAR(IInputStream& rCHAR)
|
||||
rNode.Name = rCHAR.ReadString();
|
||||
rCHAR.Seek(0x14, SEEK_CUR);
|
||||
rCHAR.ReadString();
|
||||
rNode.pModel = gResourceStore.LoadResource(rCHAR.ReadLongLong(), "CMDL");
|
||||
rNode.pModel = gpResourceStore->LoadResource(rCHAR.ReadLongLong(), "CMDL");
|
||||
return pSet;
|
||||
}
|
||||
|
||||
@@ -238,9 +238,9 @@ CAnimSet* CAnimSetLoader::LoadANCS(IInputStream& rANCS, CResourceEntry *pEntry)
|
||||
Loader.pSet->SetGame(Loader.mVersion);
|
||||
}
|
||||
pNode->Name = rANCS.ReadString();
|
||||
pNode->pModel = gResourceStore.LoadResource(rANCS.ReadLong(), "CMDL");
|
||||
pNode->pSkin = gResourceStore.LoadResource(rANCS.ReadLong(), "CSKR");
|
||||
pNode->pSkeleton = gResourceStore.LoadResource(rANCS.ReadLong(), "CINF");
|
||||
pNode->pModel = gpResourceStore->LoadResource(rANCS.ReadLong(), "CMDL");
|
||||
pNode->pSkin = gpResourceStore->LoadResource(rANCS.ReadLong(), "CSKR");
|
||||
pNode->pSkeleton = gpResourceStore->LoadResource(rANCS.ReadLong(), "CINF");
|
||||
if (pNode->pModel) pNode->pModel->SetSkin(pNode->pSkin);
|
||||
|
||||
// Unfortunately that's all that's actually supported at the moment. Hope to expand later.
|
||||
@@ -349,7 +349,7 @@ CAnimSet* CAnimSetLoader::LoadANCS(IInputStream& rANCS, CResourceEntry *pEntry)
|
||||
{
|
||||
CAnimSet::SAnimation Anim;
|
||||
Anim.Name = rPrim.Name;
|
||||
Anim.pAnim = gResourceStore.LoadResource(rPrim.AnimID, "ANIM");
|
||||
Anim.pAnim = gpResourceStore->LoadResource(rPrim.AnimID, "ANIM");
|
||||
Loader.pSet->mAnims.push_back(Anim);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
class CAnimSetLoader
|
||||
{
|
||||
TResPtr<CAnimSet> pSet;
|
||||
CResCache *mpResCache;
|
||||
EGame mVersion;
|
||||
|
||||
CAnimSetLoader();
|
||||
|
||||
@@ -603,7 +603,7 @@ void CAreaLoader::ReadEGMC()
|
||||
Log::FileWrite(mpMREA->GetSourceString(), "Reading EGMC");
|
||||
mpSectionMgr->ToSection(mEGMCBlockNum);
|
||||
CUniqueID EGMC(*mpMREA, (mVersion <= eEchoes ? e32Bit : e64Bit));
|
||||
mpArea->mpPoiToWorldMap = gResourceStore.LoadResource(EGMC, "EGMC");
|
||||
mpArea->mpPoiToWorldMap = gpResourceStore->LoadResource(EGMC, "EGMC");
|
||||
}
|
||||
|
||||
void CAreaLoader::SetUpObjects()
|
||||
|
||||
@@ -18,8 +18,8 @@ CFont* CFontLoader::LoadFont(IInputStream& rFONT)
|
||||
mpFont->mDefaultSize = rFONT.ReadLong();
|
||||
mpFont->mFontName = rFONT.ReadString();
|
||||
|
||||
if (mVersion <= eEchoes) mpFont->mpFontTexture = gResourceStore.LoadResource(rFONT.ReadLong(), "TXTR");
|
||||
else mpFont->mpFontTexture = gResourceStore.LoadResource(rFONT.ReadLongLong(), "TXTR");
|
||||
if (mVersion <= eEchoes) mpFont->mpFontTexture = gpResourceStore->LoadResource(rFONT.ReadLong(), "TXTR");
|
||||
else mpFont->mpFontTexture = gpResourceStore->LoadResource(rFONT.ReadLongLong(), "TXTR");
|
||||
|
||||
mpFont->mTextureFormat = rFONT.ReadLong();
|
||||
u32 NumGlyphs = rFONT.ReadLong();
|
||||
|
||||
@@ -50,7 +50,7 @@ void CMaterialLoader::ReadPrimeMatSet()
|
||||
for (u32 iTex = 0; iTex < NumTextures; iTex++)
|
||||
{
|
||||
u32 TextureID = mpFile->ReadLong();
|
||||
mTextures[iTex] = gResourceStore.LoadResource(TextureID, "TXTR");
|
||||
mTextures[iTex] = gpResourceStore->LoadResource(TextureID, "TXTR");
|
||||
}
|
||||
|
||||
// Materials
|
||||
@@ -366,7 +366,7 @@ CMaterial* CMaterialLoader::ReadCorruptionMaterial()
|
||||
continue;
|
||||
}
|
||||
|
||||
pPass->mpTexture = gResourceStore.LoadResource(TextureID, "TXTR");
|
||||
pPass->mpTexture = gpResourceStore->LoadResource(TextureID, "TXTR");
|
||||
|
||||
pPass->mTexCoordSource = 4 + (u8) mpFile->ReadLong();
|
||||
u32 AnimSize = mpFile->ReadLong();
|
||||
|
||||
@@ -10,7 +10,7 @@ CScan* CScanLoader::LoadScanMP1(IInputStream& rSCAN)
|
||||
{
|
||||
// Basic support at the moment - don't read animation/scan image data
|
||||
rSCAN.Seek(0x4, SEEK_CUR); // Skip FRME ID
|
||||
mpScan->mpStringTable = gResourceStore.LoadResource(rSCAN.ReadLong(), "STRG");
|
||||
mpScan->mpStringTable = gpResourceStore->LoadResource(rSCAN.ReadLong(), "STRG");
|
||||
mpScan->mIsSlow = (rSCAN.ReadLong() != 0);
|
||||
mpScan->mCategory = (CScan::ELogbookCategory) rSCAN.ReadLong();
|
||||
mpScan->mIsImportant = (rSCAN.ReadByte() == 1);
|
||||
@@ -88,7 +88,7 @@ void CScanLoader::LoadParamsMP2(IInputStream& rSCAN)
|
||||
switch (PropertyID)
|
||||
{
|
||||
case 0x2F5B6423:
|
||||
mpScan->mpStringTable = gResourceStore.LoadResource(rSCAN.ReadLong(), "STRG");
|
||||
mpScan->mpStringTable = gpResourceStore->LoadResource(rSCAN.ReadLong(), "STRG");
|
||||
break;
|
||||
|
||||
case 0xC308A322:
|
||||
@@ -121,7 +121,7 @@ void CScanLoader::LoadParamsMP3(IInputStream& rSCAN)
|
||||
switch (PropertyID)
|
||||
{
|
||||
case 0x2F5B6423:
|
||||
mpScan->mpStringTable = gResourceStore.LoadResource(rSCAN.ReadLongLong(), "STRG");
|
||||
mpScan->mpStringTable = gpResourceStore->LoadResource(rSCAN.ReadLongLong(), "STRG");
|
||||
break;
|
||||
|
||||
case 0xC308A322:
|
||||
|
||||
@@ -117,7 +117,7 @@ void CScriptLoader::ReadProperty(IProperty *pProp, u32 Size, IInputStream& rSCLY
|
||||
|
||||
if (ResID.IsValid())
|
||||
{
|
||||
CFourCC Type = gResourceStore.ResourceTypeByID(ResID, rkExtensions);
|
||||
CFourCC Type = gpResourceStore->ResourceTypeByID(ResID, rkExtensions);
|
||||
Info = CResourceInfo(ResID, Type);
|
||||
}
|
||||
|
||||
|
||||
@@ -15,19 +15,19 @@ void CWorldLoader::LoadPrimeMLVL(IInputStream& rMLVL)
|
||||
// Header
|
||||
if (mVersion < eCorruptionProto)
|
||||
{
|
||||
mpWorld->mpWorldName = gResourceStore.LoadResource(rMLVL.ReadLong(), "STRG");
|
||||
if (mVersion == eEchoes) mpWorld->mpDarkWorldName = gResourceStore.LoadResource(rMLVL.ReadLong(), "STRG");
|
||||
mpWorld->mpWorldName = gpResourceStore->LoadResource(rMLVL.ReadLong(), "STRG");
|
||||
if (mVersion == eEchoes) mpWorld->mpDarkWorldName = gpResourceStore->LoadResource(rMLVL.ReadLong(), "STRG");
|
||||
if (mVersion >= eEchoes) mpWorld->mUnknown1 = rMLVL.ReadLong();
|
||||
if (mVersion >= ePrime) mpWorld->mpSaveWorld = gResourceStore.LoadResource(rMLVL.ReadLong(), "SAVW");
|
||||
mpWorld->mpDefaultSkybox = gResourceStore.LoadResource(rMLVL.ReadLong(), "CMDL");
|
||||
if (mVersion >= ePrime) mpWorld->mpSaveWorld = gpResourceStore->LoadResource(rMLVL.ReadLong(), "SAVW");
|
||||
mpWorld->mpDefaultSkybox = gpResourceStore->LoadResource(rMLVL.ReadLong(), "CMDL");
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
mpWorld->mpWorldName = gResourceStore.LoadResource(rMLVL.ReadLongLong(), "STRG");
|
||||
mpWorld->mpWorldName = gpResourceStore->LoadResource(rMLVL.ReadLongLong(), "STRG");
|
||||
rMLVL.Seek(0x4, SEEK_CUR); // Skipping unknown value
|
||||
mpWorld->mpSaveWorld = gResourceStore.LoadResource(rMLVL.ReadLongLong(), "SAVW");
|
||||
mpWorld->mpDefaultSkybox = gResourceStore.LoadResource(rMLVL.ReadLongLong(), "CMDL");
|
||||
mpWorld->mpSaveWorld = gpResourceStore->LoadResource(rMLVL.ReadLongLong(), "SAVW");
|
||||
mpWorld->mpDefaultSkybox = gpResourceStore->LoadResource(rMLVL.ReadLongLong(), "CMDL");
|
||||
}
|
||||
|
||||
// Memory relays - only in MP1
|
||||
@@ -58,9 +58,9 @@ void CWorldLoader::LoadPrimeMLVL(IInputStream& rMLVL)
|
||||
CWorld::SArea *pArea = &mpWorld->mAreas[iArea];
|
||||
|
||||
if (mVersion < eCorruptionProto)
|
||||
pArea->pAreaName = gResourceStore.LoadResource(rMLVL.ReadLong(), "STRG");
|
||||
pArea->pAreaName = gpResourceStore->LoadResource(rMLVL.ReadLong(), "STRG");
|
||||
else
|
||||
pArea->pAreaName = gResourceStore.LoadResource(rMLVL.ReadLongLong(), "STRG");
|
||||
pArea->pAreaName = gpResourceStore->LoadResource(rMLVL.ReadLongLong(), "STRG");
|
||||
|
||||
pArea->Transform = CTransform4f(rMLVL);
|
||||
pArea->AetherBox = CAABox(rMLVL);
|
||||
@@ -169,9 +169,9 @@ void CWorldLoader::LoadPrimeMLVL(IInputStream& rMLVL)
|
||||
|
||||
// MapWorld
|
||||
if (mVersion < eCorruptionProto)
|
||||
mpWorld->mpMapWorld = gResourceStore.LoadResource(rMLVL.ReadLong(), "MAPW");
|
||||
mpWorld->mpMapWorld = gpResourceStore->LoadResource(rMLVL.ReadLong(), "MAPW");
|
||||
else
|
||||
mpWorld->mpMapWorld = gResourceStore.LoadResource(rMLVL.ReadLongLong(), "MAPW");
|
||||
mpWorld->mpMapWorld = gpResourceStore->LoadResource(rMLVL.ReadLongLong(), "MAPW");
|
||||
rMLVL.Seek(0x5, SEEK_CUR); // Unknown values which are always 0
|
||||
|
||||
// AudioGrps
|
||||
@@ -221,7 +221,7 @@ void CWorldLoader::LoadPrimeMLVL(IInputStream& rMLVL)
|
||||
|
||||
void CWorldLoader::LoadReturnsMLVL(IInputStream& rMLVL)
|
||||
{
|
||||
mpWorld->mpWorldName = gResourceStore.LoadResource(rMLVL.ReadLongLong(), "STRG");
|
||||
mpWorld->mpWorldName = gpResourceStore->LoadResource(rMLVL.ReadLongLong(), "STRG");
|
||||
|
||||
bool Check = (rMLVL.ReadByte() != 0);
|
||||
if (Check)
|
||||
@@ -230,8 +230,8 @@ void CWorldLoader::LoadReturnsMLVL(IInputStream& rMLVL)
|
||||
rMLVL.Seek(0x10, SEEK_CUR);
|
||||
}
|
||||
|
||||
mpWorld->mpSaveWorld = gResourceStore.LoadResource(rMLVL.ReadLongLong(), "SAVW");
|
||||
mpWorld->mpDefaultSkybox = gResourceStore.LoadResource(rMLVL.ReadLongLong(), "CMDL");
|
||||
mpWorld->mpSaveWorld = gpResourceStore->LoadResource(rMLVL.ReadLongLong(), "SAVW");
|
||||
mpWorld->mpDefaultSkybox = gpResourceStore->LoadResource(rMLVL.ReadLongLong(), "CMDL");
|
||||
|
||||
// Areas
|
||||
u32 NumAreas = rMLVL.ReadLong();
|
||||
@@ -242,7 +242,7 @@ void CWorldLoader::LoadReturnsMLVL(IInputStream& rMLVL)
|
||||
// Area header
|
||||
CWorld::SArea *pArea = &mpWorld->mAreas[iArea];
|
||||
|
||||
pArea->pAreaName = gResourceStore.LoadResource(rMLVL.ReadLongLong(), "STRG");
|
||||
pArea->pAreaName = gpResourceStore->LoadResource(rMLVL.ReadLongLong(), "STRG");
|
||||
pArea->Transform = CTransform4f(rMLVL);
|
||||
pArea->AetherBox = CAABox(rMLVL);
|
||||
pArea->FileID = rMLVL.ReadLongLong();
|
||||
|
||||
@@ -166,7 +166,7 @@ CResource* CScriptTemplate::FindDisplayAsset(CPropertyStruct *pProperties, u32&
|
||||
if (it->AssetSource == SEditorAsset::eFile)
|
||||
{
|
||||
TString Path = "../resources/" + it->AssetLocation;
|
||||
pRes = gResourceStore.LoadResource(Path);
|
||||
pRes = gpResourceStore->LoadResource(Path);
|
||||
}
|
||||
|
||||
// Property
|
||||
@@ -216,7 +216,7 @@ CCollisionMeshGroup* CScriptTemplate::FindCollision(CPropertyStruct *pProperties
|
||||
if (it->AssetSource == SEditorAsset::eFile)
|
||||
{
|
||||
TString path = "../resources/" + it->AssetLocation;
|
||||
pRes = gResourceStore.LoadResource(path);
|
||||
pRes = gpResourceStore->LoadResource(path);
|
||||
}
|
||||
|
||||
// Property
|
||||
|
||||
Reference in New Issue
Block a user