SP3-102 Changed all previous references to updated versions. Removed function call to obsolete functons
This commit is contained in:
parent
1cabcefe0f
commit
3b9d14944e
|
@ -7,8 +7,8 @@
|
||||||
* or disclosure of this file or its contents without the prior
|
* or disclosure of this file or its contents without the prior
|
||||||
* written consent of Digipen Institute of Technology is prohibited
|
* written consent of Digipen Institute of Technology is prohibited
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#ifndef SH_RESOURCE_MACROS_H
|
#ifndef SH_ASSET_MACROS_H
|
||||||
#define SH_RESOURCE_MACROS_H
|
#define SH_ASSET_MACROS_H
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
@ -37,11 +37,12 @@ typedef unsigned char AssetTypeMeta;
|
||||||
typedef FMOD::Sound* SHSound;
|
typedef FMOD::Sound* SHSound;
|
||||||
|
|
||||||
// Asset Meta Version
|
// Asset Meta Version
|
||||||
#define RESOURCE_META_VER "1.0"
|
#define ASSET_META_VER "1.0"
|
||||||
|
|
||||||
// Asset type enum
|
// Asset type enum
|
||||||
enum class AssetType : AssetTypeMeta
|
enum class AssetType : int
|
||||||
{
|
{
|
||||||
|
INVALID = -1,
|
||||||
AUDIO = 0,
|
AUDIO = 0,
|
||||||
SHADER,
|
SHADER,
|
||||||
MATERIAL,
|
MATERIAL,
|
||||||
|
@ -54,7 +55,10 @@ enum class AssetType : AssetTypeMeta
|
||||||
AUDIO_WAV
|
AUDIO_WAV
|
||||||
};
|
};
|
||||||
|
|
||||||
// RESOURCE EXTENSIONS
|
//Directory
|
||||||
|
#define ASSET_ROOT "./Assets/"
|
||||||
|
|
||||||
|
// ASSET EXTENSIONS
|
||||||
#define META_EXTENSION ".shmeta"
|
#define META_EXTENSION ".shmeta"
|
||||||
#define IMAGE_EXTENSION ".png"
|
#define IMAGE_EXTENSION ".png"
|
||||||
#define AUDIO_EXTENSION ".ogg"
|
#define AUDIO_EXTENSION ".ogg"
|
||||||
|
@ -83,7 +87,7 @@ std::string const EXTENSIONS[] = {
|
||||||
// Error flags
|
// Error flags
|
||||||
#define FILE_NOT_FOUND_ERR "FILE NOT FOUND"
|
#define FILE_NOT_FOUND_ERR "FILE NOT FOUND"
|
||||||
#define META_NOT_FOUND_ERR "META NOT FOUND"
|
#define META_NOT_FOUND_ERR "META NOT FOUND"
|
||||||
#define RESOURCE_NOT_FOUND_ERR "RESOURCE NOT FOUND"
|
#define ASSET_NOT_FOUND_ERR "ASSET NOT FOUND"
|
||||||
#define EXT_DOES_NOT_EXIST "TYPE DOES NOT HAVE EXTENSION DEFINED"
|
#define EXT_DOES_NOT_EXIST "TYPE DOES NOT HAVE EXTENSION DEFINED"
|
||||||
|
|
||||||
#endif // !SH_RESOURCE_MACROS_H
|
#endif // !SH_ASSET_MACROS_H
|
||||||
|
|
|
@ -43,72 +43,6 @@ namespace SHADE
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Generate path relative to exe
|
|
||||||
*
|
|
||||||
* \param p - std::filesystem::path containing file
|
|
||||||
* \return std::filesystem::path - containing full relative path
|
|
||||||
****************************************************************************/
|
|
||||||
AssetPath SHAssetManager::GenerateLocalPath(AssetPath path) noexcept
|
|
||||||
{
|
|
||||||
if (!IsRecognised(path.extension().string().c_str()))
|
|
||||||
{
|
|
||||||
//TODO:ASSERT UNRECOGNISED FILE TYPE
|
|
||||||
return std::filesystem::path();
|
|
||||||
}
|
|
||||||
|
|
||||||
AssetType type = SHAssetMetaHandler::GetTypeFromExtension(path.extension().string().c_str());
|
|
||||||
std::string folder;
|
|
||||||
switch (type)
|
|
||||||
{
|
|
||||||
case AssetType::AUDIO:
|
|
||||||
folder = AUDIO_FOLDER;
|
|
||||||
break;
|
|
||||||
case AssetType::AUDIO_WAV:
|
|
||||||
folder = AUDIO_FOLDER;
|
|
||||||
break;
|
|
||||||
case AssetType::IMAGE:
|
|
||||||
folder = IMAGES_FOLDER;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
//TODO:ASSERT UNSUPPORTED FILE TYPE
|
|
||||||
return std::filesystem::path();
|
|
||||||
}
|
|
||||||
|
|
||||||
return std::filesystem::path(RESOURCE_ROOT + folder + path.filename().string());
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* \brief Deallocates all memory used by image data
|
|
||||||
****************************************************************************/
|
|
||||||
void SHAssetManager::UnloadImages() noexcept
|
|
||||||
{
|
|
||||||
for (auto& [key, value] : imageData)
|
|
||||||
{
|
|
||||||
stbi_image_free(value.data);
|
|
||||||
}
|
|
||||||
|
|
||||||
imageData.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SHAssetManager::UpdateSpriteSetIndices(std::shared_ptr<SHSpriteSet>& set) noexcept
|
|
||||||
{
|
|
||||||
return SHSpriteSetLibrary::UpdateIndicesAuto(set);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SHAssetManager::IsRecognised(char const* ext) noexcept
|
|
||||||
{
|
|
||||||
for (auto const& e : EXTENSIONS)
|
|
||||||
{
|
|
||||||
if (strcmp(ext, e.c_str()) == 0)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* \brief Deallocate all memory used by resource data
|
* \brief Deallocate all memory used by resource data
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
@ -118,7 +52,6 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
SHAssetMetaHandler::WriteMetaData(meta, pathRegistry[meta.GetID()].string().append(META_EXTENSION));
|
SHAssetMetaHandler::WriteMetaData(meta, pathRegistry[meta.GetID()].string().append(META_EXTENSION));
|
||||||
}
|
}
|
||||||
UnloadImages();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
@ -139,6 +72,26 @@ namespace SHADE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AssetPath SHAssetManager::GenerateLocalPath(AssetPath path) noexcept
|
||||||
|
{
|
||||||
|
if (!IsRecognised(path.extension().string().c_str()))
|
||||||
|
{
|
||||||
|
//TODO:ASSERT UNRECOGNISED FILE TYPE
|
||||||
|
return std::filesystem::path();
|
||||||
|
}
|
||||||
|
|
||||||
|
AssetType type = SHAssetMetaHandler::GetTypeFromExtension(path.extension().string().c_str());
|
||||||
|
std::string folder;
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
//TODO:ASSERT UNSUPPORTED FILE TYPE
|
||||||
|
return std::filesystem::path();
|
||||||
|
}
|
||||||
|
|
||||||
|
return std::filesystem::path(ASSET_ROOT + folder + path.filename().string());
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<AssetID> SHAssetManager::GetIDFromNames(std::initializer_list<AssetName> const& files) noexcept
|
std::vector<AssetID> SHAssetManager::GetIDFromNames(std::initializer_list<AssetName> const& files) noexcept
|
||||||
{
|
{
|
||||||
std::vector<AssetID> result;
|
std::vector<AssetID> result;
|
||||||
|
@ -256,7 +209,7 @@ namespace SHADE
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* \brief Create record for new resource. CAN ONLY CREATE FOR CUSTOM
|
* \brief Create record for new resource. CAN ONLY CREATE FOR CUSTOM
|
||||||
* RESOURCES CREATED BY THE ENGINE.
|
* ASSETS CREATED BY THE ENGINE.
|
||||||
*
|
*
|
||||||
* \param type of resource
|
* \param type of resource
|
||||||
* \param name of resource
|
* \param name of resource
|
||||||
|
@ -268,19 +221,16 @@ namespace SHADE
|
||||||
SHAssetMeta meta;
|
SHAssetMeta meta;
|
||||||
meta.SetID(id);
|
meta.SetID(id);
|
||||||
meta.SetType(type);
|
meta.SetType(type);
|
||||||
meta.SetVersion(RESOURCE_META_VER);
|
meta.SetVersion(ASSET_META_VER);
|
||||||
|
|
||||||
std::string folder;
|
std::string folder;
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case AssetType::SPRITE_SET:
|
|
||||||
folder = SPRITE_SET_FOLDER;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
folder = "";
|
folder = "";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
AssetPath path{ RESOURCE_ROOT + folder + name + SHAssetMetaHandler::GetExtensionFromType(type) };
|
AssetPath path{ ASSET_ROOT + folder + name + SHAssetMetaHandler::GetExtensionFromType(type) };
|
||||||
|
|
||||||
metaCollection.push_back(meta);
|
metaCollection.push_back(meta);
|
||||||
pathRegistry[id] = path;
|
pathRegistry[id] = path;
|
||||||
|
@ -340,7 +290,7 @@ namespace SHADE
|
||||||
std::vector<AssetPath> metaFiles;
|
std::vector<AssetPath> metaFiles;
|
||||||
std::vector<AssetPath> resourceFiles;
|
std::vector<AssetPath> resourceFiles;
|
||||||
|
|
||||||
SHFileSystem::LoadAllFiles(metaFiles, resourceFiles);
|
//SHFileSystem::LoadAllFiles(metaFiles, resourceFiles);
|
||||||
//std::vector<AssetPath> resourceFilesVerified;
|
//std::vector<AssetPath> resourceFilesVerified;
|
||||||
std::vector<AssetPath> resourceFilesNew;
|
std::vector<AssetPath> resourceFilesNew;
|
||||||
|
|
||||||
|
@ -378,404 +328,6 @@ namespace SHADE
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* \param Asset ID to image resource
|
|
||||||
|
|
||||||
* \brief Gets image raw data from provided ID.
|
|
||||||
****************************************************************************/
|
|
||||||
SHImageRawData const* SHAssetManager::GetImageRawData(AssetID const& id) noexcept
|
|
||||||
{
|
|
||||||
if (imageData.find(id) == imageData.end())
|
|
||||||
{
|
|
||||||
// Error resource does not exist
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return &imageData[id];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* \param resource ID
|
|
||||||
|
|
||||||
* \brief Gets image dimensions of image file
|
|
||||||
****************************************************************************/
|
|
||||||
SHUMathVec2i SHAssetManager::GetImageDimensions(AssetID const& image) noexcept
|
|
||||||
{
|
|
||||||
SHImageRawData const* const data = GetImageRawData(image);
|
|
||||||
if (data != nullptr)
|
|
||||||
{
|
|
||||||
return SHUMathVec2i{ data->width, data->height };
|
|
||||||
}
|
|
||||||
return SHUMathVec2i();
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* \param vector containing resource IDs
|
|
||||||
|
|
||||||
* \brief Checks if all images referred to by resource IDs have the same
|
|
||||||
* dimensions. To be used when checking images in the same batch
|
|
||||||
****************************************************************************/
|
|
||||||
bool SHAssetManager::MatchImageFiles(std::vector<AssetID> const& files) noexcept
|
|
||||||
{
|
|
||||||
if (files.size() == 0)
|
|
||||||
{
|
|
||||||
std::cout << "Nothing to compare. Image files list is empty or doesn't contain enough to compare. " << std::endl;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!imageData.contains(*files.begin()))
|
|
||||||
{
|
|
||||||
std::cout << "Comparison failed. " << *files.begin() << "does not exist in the image library." << std::endl;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto const& firstElement = GetImageRawData(*files.begin());
|
|
||||||
for (auto it = files.begin() + 1; it < files.end(); ++it)
|
|
||||||
{
|
|
||||||
if (imageData.contains(*it))
|
|
||||||
{
|
|
||||||
if (firstElement->CompareProperties(*GetImageRawData(*it)) == false)
|
|
||||||
{
|
|
||||||
std::cout << "Comparison failed. Not all images are the same. " << std::endl;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::cout << "Comparison failed. " << *files.begin() << "does not exist in the image library." << std::endl;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* \brief Create sprite set with single image.
|
|
||||||
*
|
|
||||||
* \param imageName - file name of image
|
|
||||||
* \return result of creation
|
|
||||||
****************************************************************************/
|
|
||||||
bool SHAssetManager::AddSpriteSet(std::string const& imageName) noexcept
|
|
||||||
{
|
|
||||||
if (spriteSetNameRegistry.find(imageName) == spriteSetNameRegistry.end())
|
|
||||||
{
|
|
||||||
std::shared_ptr<SHSpriteSet> ptr = SHSpriteSetLibrary::AddSpriteSet(imageName);
|
|
||||||
if (ptr != nullptr)
|
|
||||||
{
|
|
||||||
AssetID id{ CreateNewAsset(AssetType::SPRITE_SET, imageName) };
|
|
||||||
ptr->SetImageRef(filenameRegistry[imageName]);
|
|
||||||
spriteSetData[id] = ptr;
|
|
||||||
spriteSetNameRegistry[imageName] = id;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* \brief Create sprite set with single image (Asset ID).
|
|
||||||
*
|
|
||||||
* \param id - resource id of single image
|
|
||||||
* \return resource id of sprite set created
|
|
||||||
****************************************************************************/
|
|
||||||
AssetID SHAssetManager::AddSpriteSet(AssetID id) noexcept
|
|
||||||
{
|
|
||||||
AssetName newName{ idNameRegistry[id] };
|
|
||||||
newName += "SpriteSet";
|
|
||||||
if (spriteSetNameRegistry.find(newName) == spriteSetNameRegistry.end())
|
|
||||||
{
|
|
||||||
AssetID ssID{ CreateEmptySpriteSet(newName) };
|
|
||||||
if (ssID)
|
|
||||||
{
|
|
||||||
std::shared_ptr<SHSpriteSet> ptr = spriteSetData[ssID];
|
|
||||||
if (ptr != nullptr)
|
|
||||||
{
|
|
||||||
ptr->SetImageRef(id);
|
|
||||||
UpdateSpriteSetIndices(ptr);
|
|
||||||
SHSpriteSetLibrary::WriteSpriteSet(
|
|
||||||
ptr,
|
|
||||||
pathRegistry[ssID]
|
|
||||||
);
|
|
||||||
return ssID;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* \brief Create empty sprite set without any image references.
|
|
||||||
*
|
|
||||||
* \param setName - std::string sprite set name
|
|
||||||
* \return resource ID of sprite set created
|
|
||||||
****************************************************************************/
|
|
||||||
AssetID SHAssetManager::CreateEmptySpriteSet(std::string setName) noexcept
|
|
||||||
{
|
|
||||||
if (spriteSetNameRegistry.find(setName) == spriteSetNameRegistry.end())
|
|
||||||
{
|
|
||||||
std::shared_ptr<SHSpriteSet> ptr = std::make_shared<SHSpriteSet>(setName);
|
|
||||||
if (ptr != nullptr)
|
|
||||||
{
|
|
||||||
AssetID id{ CreateNewAsset(AssetType::SPRITE_SET, setName) };
|
|
||||||
spriteSetData[id] = ptr;
|
|
||||||
spriteSetNameRegistry[setName] = id;
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* \brief Get ID of sprite set by name.
|
|
||||||
*
|
|
||||||
* \param name - name of sprite set std::string
|
|
||||||
* \return resource iD
|
|
||||||
****************************************************************************/
|
|
||||||
AssetID SHAssetManager::GetSpriteSet(std::string name) noexcept
|
|
||||||
{
|
|
||||||
if (spriteSetNameRegistry.find(name) == spriteSetNameRegistry.end())
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return spriteSetNameRegistry[name];
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* \brief Get name of sprite set from resource ID.
|
|
||||||
*
|
|
||||||
* \param id - resource id
|
|
||||||
* \return std::string sprite set name
|
|
||||||
****************************************************************************/
|
|
||||||
std::string SHAssetManager::GetSpriteSetName(AssetID id) noexcept
|
|
||||||
{
|
|
||||||
for (auto const& entry : spriteSetNameRegistry)
|
|
||||||
{
|
|
||||||
if (entry.second == id)
|
|
||||||
{
|
|
||||||
return entry.first;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return std::string("NO SUCH SPRITE SET");
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* \brief Get data of sprite set with sprite set name.
|
|
||||||
*
|
|
||||||
* \param name - std::string sprite set name
|
|
||||||
* \return pointer to sprite set
|
|
||||||
****************************************************************************/
|
|
||||||
std::shared_ptr<SHADE::SHSpriteSet> SHAssetManager::GetSpriteSetData(std::string name) noexcept
|
|
||||||
{
|
|
||||||
if (spriteSetNameRegistry.find(name) == spriteSetNameRegistry.end())
|
|
||||||
{
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
return spriteSetData[spriteSetNameRegistry[name]];
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* \brief Get data of sprite set with sprite set resource id.
|
|
||||||
*
|
|
||||||
* \param id - sprite set resource id
|
|
||||||
* \return pointer to sprite set
|
|
||||||
****************************************************************************/
|
|
||||||
std::shared_ptr<SHADE::SHSpriteSet> SHAssetManager::GetSpriteSetData(AssetID id) noexcept
|
|
||||||
{
|
|
||||||
return spriteSetData[id];
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* \brief Add event to frame in sprite set.
|
|
||||||
*
|
|
||||||
* \param spriteSet - sprite set resource ID
|
|
||||||
* \param evt - pointer to method in script class
|
|
||||||
* \param soh - script object handle to script instance object
|
|
||||||
* \param frame - target frame in sprite set
|
|
||||||
****************************************************************************/
|
|
||||||
void SHAssetManager::AddSpriteEvent(AssetID spriteSet, MonoMethod* evt, uint32_t soh, size_t frame) noexcept
|
|
||||||
{
|
|
||||||
SHSpriteSet& set = *spriteSetData[spriteSet];
|
|
||||||
set.ModifyFrameEvent(static_cast<uint32_t>(frame), evt, soh);
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* \brief Remove event from frame in sprite set.
|
|
||||||
*
|
|
||||||
* \param spriteSet - sprite set resource iD
|
|
||||||
* \param frame - target frame
|
|
||||||
****************************************************************************/
|
|
||||||
void SHAssetManager::RemoveSpriteEvent(AssetID spriteSet, size_t frame) noexcept
|
|
||||||
{
|
|
||||||
SHSpriteSet& set = *spriteSetData[spriteSet];
|
|
||||||
set.ModifyFrameEvent(static_cast<uint32_t>(frame), nullptr, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* \brief Write sprite set to memory in system.
|
|
||||||
*
|
|
||||||
* \param id - sprite set resource id
|
|
||||||
****************************************************************************/
|
|
||||||
void SHAssetManager::SaveSpriteSet(AssetID id) noexcept
|
|
||||||
{
|
|
||||||
SHAssetMeta meta;
|
|
||||||
for (auto const& met : metaCollection)
|
|
||||||
{
|
|
||||||
if (met.GetID() == id)
|
|
||||||
{
|
|
||||||
meta = met;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SHSpriteSetLibrary::WriteSpriteSet(
|
|
||||||
spriteSetData[id],
|
|
||||||
pathRegistry[id]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* \brief Update all texture layer indices in sprite set.
|
|
||||||
****************************************************************************/
|
|
||||||
void SHAssetManager::UpdateAllSpriteSets() noexcept
|
|
||||||
{
|
|
||||||
for (auto& data : spriteSetData)
|
|
||||||
{
|
|
||||||
SHSpriteSetLibrary::UpdateIndicesAuto(data.second);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
std::shared_ptr<SHAtlas> SHAssetManager::GetAtlas(AssetID id) noexcept
|
|
||||||
{
|
|
||||||
auto const it = spriteSetData.find(id);
|
|
||||||
if (it == spriteSetData.end())
|
|
||||||
{
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
return it->second->GetAtlasData();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SHAssetManager::SliceSpriteFixed(AssetID id, uint32_t cols, uint32_t rows) noexcept
|
|
||||||
{
|
|
||||||
std::shared_ptr<SHAtlas> atlas = nullptr;
|
|
||||||
|
|
||||||
auto const it = spriteSetData.find(id);
|
|
||||||
if (it == spriteSetData.end())
|
|
||||||
{
|
|
||||||
// TODO error log no sprite set found for data
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
atlas = std::make_shared<SHAtlas>(SHAtlasSlicer::FixedSlice(idNameRegistry[id], imageData[id], cols, rows));
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<AssetID> slices;
|
|
||||||
slices.reserve(atlas->slices.size());
|
|
||||||
for (auto const& slice : atlas->slices)
|
|
||||||
{
|
|
||||||
AssetID newID{ GenerateAssetID() };
|
|
||||||
typeRegistry[newID] = AssetType::IMAGE;
|
|
||||||
idNameRegistry[newID] = slice.name;
|
|
||||||
nameIDRegistry[slice.name] = newID;
|
|
||||||
spriteSetNameRegistry[slice.name] = newID;
|
|
||||||
|
|
||||||
slices.emplace_back(newID);
|
|
||||||
}
|
|
||||||
|
|
||||||
auto& spriteSet = spriteSetData[id];
|
|
||||||
spriteSet->SetAtlas(true);
|
|
||||||
spriteSet->SetIsAnimation(true);
|
|
||||||
spriteSet->SetAtlasData(atlas);
|
|
||||||
SHSpriteSetLibrary::UpdateIndicesAuto(spriteSet);
|
|
||||||
|
|
||||||
SHSpriteSetLibrary::WriteSpriteSet(
|
|
||||||
spriteSet,
|
|
||||||
pathRegistry[id]
|
|
||||||
);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SHAssetManager::SliceSpriteAuto(AssetID id) noexcept
|
|
||||||
{
|
|
||||||
std::shared_ptr<SHAtlas> atlas = nullptr;
|
|
||||||
auto const it = spriteSetData.find(id);
|
|
||||||
if (it == spriteSetData.end())
|
|
||||||
{
|
|
||||||
// TODO error log sprite set does not exist
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
atlas = std::make_shared<SHAtlas>(SHAtlasSlicer::AutoSlice(idNameRegistry[id], imageData[id]));
|
|
||||||
}
|
|
||||||
|
|
||||||
auto& spriteSet = spriteSetData[id];
|
|
||||||
spriteSet->SetAtlas(true);
|
|
||||||
spriteSet->SetIsAnimation(false);
|
|
||||||
std::vector<AssetID> slices;
|
|
||||||
slices.reserve(atlas->slices.size());
|
|
||||||
for (auto const& slice : atlas->slices)
|
|
||||||
{
|
|
||||||
AssetID newID{ GenerateAssetID() };
|
|
||||||
|
|
||||||
std::shared_ptr<SHSpriteSet> newSpriteSet = std::make_shared<SHSpriteSet>(slice.name);
|
|
||||||
newSpriteSet->SetImageRef(id);
|
|
||||||
SHSpriteSetLibrary::UpdateIndicesAuto(newSpriteSet);
|
|
||||||
spriteSetData[newID] = newSpriteSet;
|
|
||||||
typeRegistry[newID] = AssetType::IMAGE;
|
|
||||||
idNameRegistry[newID] = slice.name;
|
|
||||||
nameIDRegistry[slice.name] = newID;
|
|
||||||
spriteSetNameRegistry[slice.name] = newID;
|
|
||||||
|
|
||||||
slices.emplace_back(newID);
|
|
||||||
}
|
|
||||||
spriteSet->SetAtlasData(atlas);
|
|
||||||
spriteSet->SetNonFixedSlicesID(slices);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* \param Pointer to FMOD system
|
|
||||||
* \param reference to vector containing class holding sound data
|
|
||||||
|
|
||||||
* \brief Loads all audio resource data into memory and fmod system
|
|
||||||
****************************************************************************/
|
|
||||||
void SHAssetManager::LoadAllAudio(FMOD::System* system, std::unordered_map<AssetID,SHSound>& soundList)
|
|
||||||
{
|
|
||||||
audioSystem = system;
|
|
||||||
audioSoundList = &soundList;
|
|
||||||
|
|
||||||
for (auto const& meta : metaCollection)
|
|
||||||
{
|
|
||||||
if (meta.GetType() == AssetType::AUDIO || meta.GetType() == AssetType::AUDIO_WAV)
|
|
||||||
{
|
|
||||||
char name[256], newName[256];
|
|
||||||
SHSound sound;
|
|
||||||
system->createSound(pathRegistry[meta.GetID()].string().c_str(), FMOD_LOOP_NORMAL | FMOD_3D, nullptr, &sound);
|
|
||||||
|
|
||||||
sound->getName(newName, 256);
|
|
||||||
std::vector<SHSound>::size_type i = 0;
|
|
||||||
for (auto& snd : soundList)
|
|
||||||
{
|
|
||||||
snd.second->getName(name, 256);
|
|
||||||
if (strcmp(name, newName) == 0) // sound already exists in soundList
|
|
||||||
{
|
|
||||||
sound->release();
|
|
||||||
}
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
soundList.emplace(meta.GetID(),sound);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* \param Path for meta data file
|
* \param Path for meta data file
|
||||||
* \param Path for resource file
|
* \param Path for resource file
|
||||||
|
@ -806,7 +358,7 @@ namespace SHADE
|
||||||
SHAssetMeta meta;
|
SHAssetMeta meta;
|
||||||
meta.SetID(GenerateAssetID());
|
meta.SetID(GenerateAssetID());
|
||||||
meta.SetType(SHAssetMetaHandler::GetTypeFromExtension(resource.extension().string()));
|
meta.SetType(SHAssetMetaHandler::GetTypeFromExtension(resource.extension().string()));
|
||||||
meta.SetVersion(RESOURCE_META_VER);
|
meta.SetVersion(ASSET_META_VER);
|
||||||
|
|
||||||
metaCollection.push_back(meta);
|
metaCollection.push_back(meta);
|
||||||
pathRegistry.emplace(meta.GetID(), resource);
|
pathRegistry.emplace(meta.GetID(), resource);
|
||||||
|
@ -829,17 +381,6 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
RetrieveAssets();
|
RetrieveAssets();
|
||||||
LoadAllData();
|
LoadAllData();
|
||||||
|
|
||||||
//SHShaderLibrary::Load();
|
|
||||||
SHShaderLibrary::Load();
|
|
||||||
|
|
||||||
// Load all the default meshes
|
|
||||||
SHMeshLibrary::Load();
|
|
||||||
|
|
||||||
// Initialize all array textures
|
|
||||||
SHTexture2DArrayContainer::Init();
|
|
||||||
|
|
||||||
UpdateAllSpriteSets();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
@ -849,65 +390,12 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
for (auto const& meta : metaCollection)
|
for (auto const& meta : metaCollection)
|
||||||
{
|
{
|
||||||
if (meta.GetType() == AssetType::IMAGE)
|
|
||||||
{
|
|
||||||
SHImageRawData data;
|
|
||||||
std::string string{ pathRegistry[meta.GetID()].string() };
|
|
||||||
SHImageLibrary::LoadImageFromFile(string, data);
|
|
||||||
imageData.emplace(meta.GetID(), data);
|
|
||||||
}
|
|
||||||
else if (meta.GetType() == AssetType::SPRITE_SET)
|
|
||||||
{
|
|
||||||
std::shared_ptr<SHSpriteSet> data = SHSpriteSetLibrary::LoadSpriteSet(pathRegistry[meta.GetID()]);
|
|
||||||
UpdateSpriteSetIndices(data);
|
|
||||||
spriteSetNameRegistry[data->GetSpriteSetName()] = meta.GetID();
|
|
||||||
spriteSetData.emplace(meta.GetID(), data);
|
|
||||||
}
|
|
||||||
else if (meta.GetType() == AssetType::WAYPOINTS_C)
|
|
||||||
{
|
|
||||||
std::shared_ptr<SHWaypointCollection> data = SHWaypointLibrary::LoadWaypointCollection(pathRegistry[meta.GetID()]);
|
|
||||||
waypointData.emplace(meta.GetID(), data);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHAssetManager::LoadData(AssetID id) noexcept
|
void SHAssetManager::LoadData(AssetID id) noexcept
|
||||||
{
|
{
|
||||||
AssetType type{ typeRegistry[id] };
|
AssetType type{ typeRegistry[id] };
|
||||||
if (type == AssetType::IMAGE)
|
|
||||||
{
|
|
||||||
SHImageRawData data;
|
|
||||||
std::string string{ pathRegistry[id].string() };
|
|
||||||
SHImageLibrary::LoadImageFromFile(string, data);
|
|
||||||
imageData.emplace(id, data);
|
|
||||||
SHTexture2DArrayContainer::AddImageToTexture(imageData[id], idNameRegistry[id]);
|
|
||||||
}
|
|
||||||
else if (type == AssetType::AUDIO || type == AssetType::AUDIO_WAV)
|
|
||||||
{
|
|
||||||
char name[256], newName[256];
|
|
||||||
SHSound sound;
|
|
||||||
audioSystem->createSound(pathRegistry[id].string().c_str(), FMOD_LOOP_NORMAL | FMOD_3D, nullptr, &sound);
|
|
||||||
|
|
||||||
sound->getName(newName, 256);
|
|
||||||
std::vector<SHSound>::size_type i = 0;
|
|
||||||
for (auto& snd : *audioSoundList)
|
|
||||||
{
|
|
||||||
snd.second->getName(name, 256);
|
|
||||||
if (strcmp(name, newName) == 0) // sound already exists in soundList
|
|
||||||
{
|
|
||||||
sound->release();
|
|
||||||
}
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
audioSoundList->emplace(id,sound);
|
|
||||||
}
|
|
||||||
else if (type == AssetType::SPRITE_SET)
|
|
||||||
{
|
|
||||||
std::shared_ptr<SHSpriteSet> data = SHSpriteSetLibrary::LoadSpriteSet(pathRegistry[id]);
|
|
||||||
UpdateSpriteSetIndices(data);
|
|
||||||
spriteSetNameRegistry[data->GetSpriteSetName()] = id;
|
|
||||||
spriteSetData.emplace(id, data);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
@ -918,7 +406,8 @@ namespace SHADE
|
||||||
std::vector<AssetPath> metaFiles;
|
std::vector<AssetPath> metaFiles;
|
||||||
std::vector<AssetPath> resourceFiles;
|
std::vector<AssetPath> resourceFiles;
|
||||||
|
|
||||||
SHFileSystem::LoadAllFiles(metaFiles, resourceFiles);
|
//TODO: Write new function for file manager to loop through all files
|
||||||
|
//SHFileSystem::LoadAllFiles(metaFiles, resourceFiles);
|
||||||
|
|
||||||
for (auto const& meta : metaFiles)
|
for (auto const& meta : metaFiles)
|
||||||
{
|
{
|
||||||
|
|
|
@ -30,13 +30,7 @@ namespace SHADE
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
static AssetID GenerateAssetID() noexcept;
|
static AssetID GenerateAssetID() noexcept;
|
||||||
|
|
||||||
/****************************************************************************
|
static AssetPath GenerateLocalPath(AssetPath path) noexcept;
|
||||||
* Generate path relative to exe
|
|
||||||
*
|
|
||||||
* \param p - std::filesystem::path containing file
|
|
||||||
* \return std::filesystem::path - containing full relative path
|
|
||||||
****************************************************************************/
|
|
||||||
static AssetPath GenerateLocalPath(AssetPath p) noexcept;
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* \brief Deallocate all memory used by resource data
|
* \brief Deallocate all memory used by resource data
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* \file SHResourceMeta.cpp
|
* \file SHAssetMeta.cpp
|
||||||
* \author Loh Xiao Qi
|
* \author Loh Xiao Qi
|
||||||
* \brief Implementation for SHResourceMeta.h
|
* \brief Implementation for SHAssetMeta.h
|
||||||
*
|
*
|
||||||
* \copyright Copyright (c) 2021 Digipen Institute of Technology. Reproduction
|
* \copyright Copyright (c) 2021 Digipen Institute of Technology. Reproduction
|
||||||
* or disclosure of this file or its contents without the prior
|
* or disclosure of this file or its contents without the prior
|
||||||
* written consent of Digipen Institute of Technology is prohibited
|
* written consent of Digipen Institute of Technology is prohibited
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#include "SHpch.h"
|
#include "SHpch.h"
|
||||||
#include "SHResourceMeta.h"
|
#include "SHAssetMeta.h"
|
||||||
|
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* \brief Default constructor
|
* \brief Default constructor
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
SHResourceMeta::SHResourceMeta() noexcept : id{ 0 }, type{ResourceType::INVALID}
|
SHAssetMeta::SHAssetMeta() noexcept : id{ 0 }, type{AssetType::INVALID}
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@ namespace SHADE
|
||||||
|
|
||||||
* \brief copy constructor
|
* \brief copy constructor
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
SHResourceMeta::SHResourceMeta(SHResourceMeta const& ref) noexcept
|
SHAssetMeta::SHAssetMeta(SHAssetMeta const& ref) noexcept
|
||||||
{
|
{
|
||||||
ver = ref.ver;
|
ver = ref.ver;
|
||||||
id = ref.id;
|
id = ref.id;
|
||||||
|
@ -37,7 +37,7 @@ namespace SHADE
|
||||||
|
|
||||||
* \brief copy assignment operator overload
|
* \brief copy assignment operator overload
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
SHResourceMeta& SHResourceMeta::operator=(SHResourceMeta const& ref) noexcept
|
SHAssetMeta& SHAssetMeta::operator=(SHAssetMeta const& ref) noexcept
|
||||||
{
|
{
|
||||||
ver = ref.ver;
|
ver = ref.ver;
|
||||||
id = ref.id;
|
id = ref.id;
|
||||||
|
@ -51,7 +51,7 @@ namespace SHADE
|
||||||
|
|
||||||
* \brief Set meta version for data file
|
* \brief Set meta version for data file
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
void SHResourceMeta::SetVersion(ResourceMetaVersion vers) noexcept
|
void SHAssetMeta::SetVersion(AssetMetaVersion vers) noexcept
|
||||||
{
|
{
|
||||||
ver = vers;
|
ver = vers;
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,7 @@ namespace SHADE
|
||||||
|
|
||||||
* \brief Set ID
|
* \brief Set ID
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
void SHResourceMeta::SetID(ResourceID idin) noexcept
|
void SHAssetMeta::SetID(AssetID idin) noexcept
|
||||||
{
|
{
|
||||||
this->id = idin;
|
this->id = idin;
|
||||||
}
|
}
|
||||||
|
@ -69,9 +69,9 @@ namespace SHADE
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* \param Enum class value
|
* \param Enum class value
|
||||||
|
|
||||||
* \brief Set Resource Type
|
* \brief Set Asset Type
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
void SHResourceMeta::SetType(ResourceType rType) noexcept
|
void SHAssetMeta::SetType(AssetType rType) noexcept
|
||||||
{
|
{
|
||||||
this->type = rType;
|
this->type = rType;
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,7 @@ namespace SHADE
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* \brief Get version
|
* \brief Get version
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
ResourceMetaVersion SHResourceMeta::GetVersion() const noexcept
|
AssetMetaVersion SHAssetMeta::GetVersion() const noexcept
|
||||||
{
|
{
|
||||||
return ver;
|
return ver;
|
||||||
}
|
}
|
||||||
|
@ -87,7 +87,7 @@ namespace SHADE
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* \brief Get ID
|
* \brief Get ID
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
ResourceID SHResourceMeta::GetID() const noexcept
|
AssetID SHAssetMeta::GetID() const noexcept
|
||||||
{
|
{
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
@ -95,7 +95,7 @@ namespace SHADE
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* \brief Get resource type
|
* \brief Get resource type
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
ResourceType SHResourceMeta::GetType() const noexcept
|
AssetType SHAssetMeta::GetType() const noexcept
|
||||||
{
|
{
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,13 @@ namespace SHADE
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
AssetType SHAssetMetaHandler::GetTypeFromExtension(AssetExtension ext) noexcept
|
AssetType SHAssetMetaHandler::GetTypeFromExtension(AssetExtension ext) noexcept
|
||||||
{
|
{
|
||||||
for (int i{0}; i < EXTENSIONS->size())
|
for (int i{0}; i < EXTENSIONS->size(); ++i)
|
||||||
|
{
|
||||||
|
if (ext == EXTENSIONS[i])
|
||||||
|
{
|
||||||
|
return static_cast<AssetType>(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
@ -45,27 +51,7 @@ namespace SHADE
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
AssetExtension SHAssetMetaHandler::GetExtensionFromType(AssetType type) noexcept
|
AssetExtension SHAssetMetaHandler::GetExtensionFromType(AssetType type) noexcept
|
||||||
{
|
{
|
||||||
switch (type)
|
return EXTENSIONS[static_cast<size_t>(type)];
|
||||||
{
|
|
||||||
case AssetType::AUDIO:
|
|
||||||
return AUDIO_EXTENSION;
|
|
||||||
case AssetType::AUDIO_WAV:
|
|
||||||
return AUDIO_WAV_EXTENSION;
|
|
||||||
case AssetType::IMAGE:
|
|
||||||
return IMAGE_EXTENSION;
|
|
||||||
case AssetType::SPRITE_SET:
|
|
||||||
return SPRITE_SET_EXTENSION;
|
|
||||||
case AssetType::SCRIPT:
|
|
||||||
return SCRIPT_EXTENSION;
|
|
||||||
case AssetType::WAYPOINTS_C:
|
|
||||||
return WAYPOINT_EXTENSION;
|
|
||||||
case AssetType::PREFAB:
|
|
||||||
return PREFAB_EXTENSION;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return EXT_DOES_NOT_EXIST;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
@ -100,7 +86,7 @@ namespace SHADE
|
||||||
std::stringstream typeStream{ line };
|
std::stringstream typeStream{ line };
|
||||||
AssetTypeMeta type;
|
AssetTypeMeta type;
|
||||||
typeStream >> type;
|
typeStream >> type;
|
||||||
meta.SetType(SHAssetMetaHandler::GetTypeFromString(type));
|
meta.SetType(static_cast<AssetType>(type));
|
||||||
|
|
||||||
metaFile.close();
|
metaFile.close();
|
||||||
|
|
||||||
|
@ -124,7 +110,7 @@ namespace SHADE
|
||||||
|
|
||||||
metaFile << "Meta Version: " << meta.GetVersion() << "\n";
|
metaFile << "Meta Version: " << meta.GetVersion() << "\n";
|
||||||
metaFile << "ID: " << meta.GetID() << "\n";
|
metaFile << "ID: " << meta.GetID() << "\n";
|
||||||
metaFile << "Type: " << GetStringFromType(meta.GetType()) << std::endl;
|
metaFile << "Type: " << static_cast<int>(meta.GetType()) << std::endl;
|
||||||
metaFile.close();
|
metaFile.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue