mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-08-15 16:39:06 +00:00
61 lines
2.1 KiB
C++
61 lines
2.1 KiB
C++
#ifndef CRESOURCE_H
|
|
#define CRESOURCE_H
|
|
|
|
#include "CResTypeInfo.h"
|
|
#include "EResType.h"
|
|
#include "Core/GameProject/CDependencyTree.h"
|
|
#include "Core/GameProject/CResourceEntry.h"
|
|
#include "Core/GameProject/CResourceStore.h"
|
|
#include <Common/CAssetID.h>
|
|
#include <Common/CFourCC.h>
|
|
#include <Common/TString.h>
|
|
#include <Common/Serialization/IArchive.h>
|
|
|
|
// This macro creates functions that allow us to easily identify this resource type.
|
|
// Must be included on every CResource subclass.
|
|
#define DECLARE_RESOURCE_TYPE(ResourceTypeEnum) \
|
|
public: \
|
|
static EResourceType StaticType() \
|
|
{ \
|
|
return EResourceType::ResourceTypeEnum; \
|
|
} \
|
|
\
|
|
static CResTypeInfo* StaticTypeInfo() \
|
|
{ \
|
|
return CResTypeInfo::FindTypeInfo(StaticType()); \
|
|
} \
|
|
\
|
|
private: \
|
|
|
|
class CResource
|
|
{
|
|
DECLARE_RESOURCE_TYPE(Resource)
|
|
|
|
CResourceEntry *mpEntry;
|
|
int mRefCount;
|
|
|
|
public:
|
|
CResource(CResourceEntry *pEntry = 0)
|
|
: mpEntry(pEntry), mRefCount(0)
|
|
{
|
|
}
|
|
|
|
virtual ~CResource() {}
|
|
virtual CDependencyTree* BuildDependencyTree() const { return new CDependencyTree(); }
|
|
virtual void Serialize(IArchive& /*rArc*/) {}
|
|
virtual void InitializeNewResource() {}
|
|
|
|
inline CResourceEntry* Entry() const { return mpEntry; }
|
|
inline CResTypeInfo* TypeInfo() const { return mpEntry->TypeInfo(); }
|
|
inline EResourceType Type() const { return mpEntry->TypeInfo()->Type(); }
|
|
inline TString Source() const { return mpEntry ? mpEntry->CookedAssetPath(true).GetFileName() : ""; }
|
|
inline TString FullSource() const { return mpEntry ? mpEntry->CookedAssetPath(true) : ""; }
|
|
inline CAssetID ID() const { return mpEntry ? mpEntry->ID() : CAssetID::skInvalidID64; }
|
|
inline EGame Game() const { return mpEntry ? mpEntry->Game() : EGame::Invalid; }
|
|
inline bool IsReferenced() const { return mRefCount > 0; }
|
|
inline void Lock() { mRefCount++; }
|
|
inline void Release() { mRefCount--; }
|
|
};
|
|
|
|
#endif // CRESOURCE_H
|