mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-06-26 06:37:52 -05:00
chore: implement obj loading skeleton with localize asset
This commit is contained in:
@ -79,7 +79,7 @@ XAssetInfoGeneric* AssetCreationContext::AddAssetGeneric(GenericAssetRegistratio
|
||||
return addedAsset;
|
||||
}
|
||||
|
||||
XAssetInfoGeneric* AssetCreationContext::LoadDefaultAssetDependency(const asset_type_t assetType, const std::string& assetName) const
|
||||
XAssetInfoGeneric* AssetCreationContext::LoadDefaultAssetDependency(const asset_type_t assetType, const std::string& assetName)
|
||||
{
|
||||
const auto result = m_creators->CreateDefaultAsset(assetType, assetName, *this);
|
||||
if (result.HasTakenAction() && !result.HasFailed())
|
||||
|
@ -39,6 +39,13 @@ public:
|
||||
return static_cast<XAssetInfo<typename AssetType::Type>*>(AddAssetGeneric(std::move(registration)));
|
||||
}
|
||||
|
||||
template<typename AssetType> XAssetInfo<typename AssetType::Type>* AddAsset(std::string assetName, typename AssetType::Type* asset)
|
||||
{
|
||||
static_assert(std::is_base_of_v<IAssetBase, AssetType>);
|
||||
|
||||
return static_cast<XAssetInfo<typename AssetType::Type>*>(AddAssetGeneric(AssetRegistration<AssetType>(std::move(assetName), asset)));
|
||||
}
|
||||
|
||||
XAssetInfoGeneric* AddAssetGeneric(GenericAssetRegistration registration) const;
|
||||
|
||||
template<typename AssetType> XAssetInfo<typename AssetType::Type>* LoadDependency(const std::string& assetName)
|
||||
@ -76,7 +83,7 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
[[nodiscard]] XAssetInfoGeneric* LoadDefaultAssetDependency(asset_type_t assetType, const std::string& assetName) const;
|
||||
[[nodiscard]] XAssetInfoGeneric* LoadDefaultAssetDependency(asset_type_t assetType, const std::string& assetName);
|
||||
|
||||
Zone* m_zone;
|
||||
const AssetCreatorCollection* m_creators;
|
||||
|
@ -44,15 +44,13 @@ AssetCreationResult AssetCreatorCollection::CreateAsset(const asset_type_t asset
|
||||
return AssetCreationResult::NoAction();
|
||||
}
|
||||
|
||||
AssetCreationResult
|
||||
AssetCreatorCollection::CreateDefaultAsset(const asset_type_t assetType, const std::string& assetName, const AssetCreationContext& context) const
|
||||
AssetCreationResult AssetCreatorCollection::CreateDefaultAsset(const asset_type_t assetType, const std::string& assetName, AssetCreationContext& context) const
|
||||
{
|
||||
assert(assetType >= 0 && static_cast<unsigned>(assetType) < m_default_asset_creators_by_type.size());
|
||||
|
||||
if (assetType >= 0 && static_cast<unsigned>(assetType) < m_default_asset_creators_by_type.size() && m_default_asset_creators_by_type[assetType])
|
||||
{
|
||||
auto defaultAsset = m_default_asset_creators_by_type[assetType]->CreateDefaultAsset(assetName);
|
||||
return AssetCreationResult::Success(context.AddAssetGeneric(std::move(defaultAsset)));
|
||||
return m_default_asset_creators_by_type[assetType]->CreateDefaultAsset(assetName, context);
|
||||
}
|
||||
|
||||
return AssetCreationResult::NoAction();
|
||||
|
@ -22,7 +22,7 @@ public:
|
||||
void AddDefaultAssetCreator(std::unique_ptr<IDefaultAssetCreator> defaultAssetCreator);
|
||||
|
||||
AssetCreationResult CreateAsset(asset_type_t assetType, const std::string& assetName, AssetCreationContext& context) const;
|
||||
AssetCreationResult CreateDefaultAsset(asset_type_t assetType, const std::string& assetName, const AssetCreationContext& context) const;
|
||||
AssetCreationResult CreateDefaultAsset(asset_type_t assetType, const std::string& assetName, AssetCreationContext& context) const;
|
||||
void FinalizeZone(AssetCreationContext& context) const;
|
||||
|
||||
private:
|
||||
|
46
src/ObjLoading/Asset/GlobalAssetPoolsLoader.h
Normal file
46
src/ObjLoading/Asset/GlobalAssetPoolsLoader.h
Normal file
@ -0,0 +1,46 @@
|
||||
#pragma once
|
||||
#include "Asset/IAssetCreator.h"
|
||||
#include "Pool/GlobalAssetPool.h"
|
||||
|
||||
template<typename AssetType> class GlobalAssetPoolsLoader : public AssetCreator<AssetType>
|
||||
{
|
||||
public:
|
||||
static_assert(std::is_base_of_v<IAssetBase, AssetType>);
|
||||
|
||||
GlobalAssetPoolsLoader(Zone& zone)
|
||||
: m_zone(zone)
|
||||
{
|
||||
}
|
||||
|
||||
AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) override
|
||||
{
|
||||
auto* existingAsset = GlobalAssetPool<typename AssetType::Type>::GetAssetByName(assetName);
|
||||
|
||||
if (!existingAsset)
|
||||
return AssetCreationResult::Failure();
|
||||
|
||||
AssetRegistration<AssetType> registration(assetName, existingAsset->Asset());
|
||||
|
||||
for (const auto* dependency : existingAsset->m_dependencies)
|
||||
{
|
||||
auto* newDependency = context.LoadDependencyGeneric(dependency->m_type, dependency->m_name);
|
||||
if (newDependency)
|
||||
registration.AddDependency(newDependency);
|
||||
else
|
||||
return AssetCreationResult::Failure();
|
||||
}
|
||||
|
||||
for (const auto& indirectAssetReference : existingAsset->m_indirect_asset_references)
|
||||
registration.AddIndirectAssetReference(context.LoadIndirectAssetReferenceGeneric(indirectAssetReference.m_type, indirectAssetReference.m_name));
|
||||
|
||||
// Make sure any used script string is available in the created zone
|
||||
// The replacement of the scr_string_t values will be done upon writing
|
||||
for (const auto scrString : existingAsset->m_used_script_strings)
|
||||
m_zone.m_script_strings.AddOrGetScriptString(existingAsset->m_zone->m_script_strings.CValue(scrString));
|
||||
|
||||
return AssetCreationResult::Success(context.AddAsset(std::move(registration)));
|
||||
}
|
||||
|
||||
private:
|
||||
Zone& m_zone;
|
||||
};
|
@ -15,6 +15,11 @@ AssetCreationResult AssetCreationResult::NoAction()
|
||||
return AssetCreationResult(false, nullptr);
|
||||
}
|
||||
|
||||
bool AssetCreationResult::HasBeenSuccessful() const
|
||||
{
|
||||
return m_taken_action && m_asset_info != nullptr;
|
||||
}
|
||||
|
||||
bool AssetCreationResult::HasTakenAction() const
|
||||
{
|
||||
return m_taken_action;
|
||||
|
@ -17,6 +17,7 @@ public:
|
||||
static AssetCreationResult Failure();
|
||||
static AssetCreationResult NoAction();
|
||||
|
||||
[[nodiscard]] bool HasBeenSuccessful() const;
|
||||
[[nodiscard]] bool HasTakenAction() const;
|
||||
[[nodiscard]] bool HasFailed() const;
|
||||
[[nodiscard]] XAssetInfoGeneric* GetAssetInfo() const;
|
||||
|
@ -1,16 +1,15 @@
|
||||
#pragma once
|
||||
|
||||
#include "AssetCreationContext.h"
|
||||
#include "AssetRegistration.h"
|
||||
#include "Game/IAsset.h"
|
||||
#include "Utils/MemoryManager.h"
|
||||
#include "IAssetCreator.h"
|
||||
#include "Zone/ZoneTypes.h"
|
||||
|
||||
#include <string>
|
||||
#include <type_traits>
|
||||
|
||||
class GenericAssetRegistration;
|
||||
template<typename AssetType> class AssetRegistration;
|
||||
class AssetCreationResult;
|
||||
class AssetCreationContext;
|
||||
|
||||
class IDefaultAssetCreator
|
||||
{
|
||||
@ -23,7 +22,7 @@ public:
|
||||
IDefaultAssetCreator& operator=(IDefaultAssetCreator&& other) noexcept = default;
|
||||
|
||||
[[nodiscard]] virtual asset_type_t GetHandlingAssetType() const = 0;
|
||||
virtual GenericAssetRegistration CreateDefaultAsset(const std::string& assetName) const = 0;
|
||||
virtual AssetCreationResult CreateDefaultAsset(const std::string& assetName, AssetCreationContext& context) const = 0;
|
||||
};
|
||||
|
||||
template<typename AssetType> class DefaultAssetCreator : public IDefaultAssetCreator
|
||||
@ -35,12 +34,4 @@ public:
|
||||
{
|
||||
return AssetType::EnumEntry;
|
||||
}
|
||||
|
||||
GenericAssetRegistration CreateDefaultAsset(const std::string& assetName) const override
|
||||
{
|
||||
return CreateDefaultAssetInternal(assetName);
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual AssetRegistration<typename AssetType::Type> CreateDefaultAssetInternal(const std::string& assetName) const = 0;
|
||||
};
|
||||
|
Reference in New Issue
Block a user