Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions src/PhoenixSim/LDS/Json/JsonCatalogBuilderBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ namespace Phoenix::LDS::Json

protected:

static bool GetValueFromJson(
bool GetValueFromJson(
const json& json,
ELDSValueType type,
LDSValue& outValue)
Expand Down Expand Up @@ -129,7 +129,6 @@ namespace Phoenix::LDS::Json
}
break;
case ELDSValueType::Text:
case ELDSValueType::Asset:
case ELDSValueType::Enum:
case ELDSValueType::EnumFlags:
if (json.is_string())
Expand All @@ -138,6 +137,16 @@ namespace Phoenix::LDS::Json
return true;
}
break;
case ELDSValueType::Asset:
if (json.is_string())
{
// Store the full asset path string in the catalog's asset table
// The handle (index into AssetStrings) is stored in UInt32
const PHXString& assetPath = json.get<PHXString>();
outValue.UInt32 = Catalog->AddAssetString(assetPath);
return true;
}
break;
case ELDSValueType::Unknown:
case ELDSValueType::Array:
case ELDSValueType::Object:
Expand Down
5 changes: 4 additions & 1 deletion src/PhoenixSim/LDS/Json/JsonCatalogTypeBuilder.inl
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,10 @@ namespace Phoenix::LDS::Json

if (typeStr.starts_with("Asset"))
{
// TODO (jfarris): implement assets?
// Record the type
PHXString typePropertyPath = propertyPath + "/type";
this->Catalog->EmplaceTypeRecord(rootTypeId, typePropertyPath, LDSTypedValue(ELDSValueType::Asset));

return ProcessValueProperty(rootTypeId, jsonObject, ELDSValueType::Asset, propertyPath);
}

Expand Down
18 changes: 18 additions & 0 deletions src/PhoenixSim/LDS/LDSCatalog.h
Original file line number Diff line number Diff line change
Expand Up @@ -289,8 +289,26 @@ namespace Phoenix::LDS
return {};
}

uint32 AddAssetString(const PHXString& assetPath)
{
uint32 handle = static_cast<uint32>(AssetStrings.size());
AssetStrings.push_back(assetPath);
return handle;
}

const PHXString& GetAssetString(uint32 handle) const
{
static const PHXString EmptyString;
if (handle >= AssetStrings.size())
{
return EmptyString;
}
return AssetStrings[handle];
}

TObjectStore Objects;
TTypeStore Types;
TArray<PHXString> AssetStrings;
};

template <size_t NObjects, size_t NTypes>
Expand Down
10 changes: 10 additions & 0 deletions src/PhoenixSim/LDS/LDSCatalogQueryContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,16 @@ namespace Phoenix::LDS
return false;
}

const PHXString& GetAssetString(uint32 handle) const override
{
if (!Catalog)
{
static const PHXString EmptyString;
return EmptyString;
}
return Catalog->GetAssetString(handle);
}

private:
const TCatalog* Catalog;
ELDSCatalogRecordStore Mode = ELDSCatalogRecordStore::Object;
Expand Down
44 changes: 44 additions & 0 deletions src/PhoenixSim/LDS/LDSFeatureQueryContext.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "PhoenixSim/Worlds.h"

using namespace Phoenix::LDS;
using Phoenix::PHXString;

LDSFeatureQueryContext LDSFeatureQueryContext::Create(SessionConstRef session, WorldConstPtr world)
{
Expand Down Expand Up @@ -260,3 +261,46 @@ bool LDSFeatureQueryContext::TypeExists(const FName& typeId) const
return false;
}

const PHXString& LDSFeatureQueryContext::GetAssetString(uint32 handle) const
{
static const PHXString EmptyString;

if (WorldDynamicCatalog && HasNoneFlags(FeatureQueryFlags, ELDSFeatureRecordQueryFlags::SessionOnly, ELDSFeatureRecordQueryFlags::StaticOnly))
{
const PHXString& str = WorldDynamicCatalog->GetAssetString(handle);
if (!str.empty())
{
return str;
}
}

if (WorldStaticCatalog && HasNoneFlags(FeatureQueryFlags, ELDSFeatureRecordQueryFlags::SessionOnly, ELDSFeatureRecordQueryFlags::DynamicOnly))
{
const PHXString& str = WorldStaticCatalog->GetAssetString(handle);
if (!str.empty())
{
return str;
}
}

if (SessionDynamicCatalog && HasNoneFlags(FeatureQueryFlags, ELDSFeatureRecordQueryFlags::WorldOnly, ELDSFeatureRecordQueryFlags::StaticOnly))
{
const PHXString& str = SessionDynamicCatalog->GetAssetString(handle);
if (!str.empty())
{
return str;
}
}

if (SessionStaticCatalog && HasNoneFlags(FeatureQueryFlags, ELDSFeatureRecordQueryFlags::WorldOnly, ELDSFeatureRecordQueryFlags::DynamicOnly))
{
const PHXString& str = SessionStaticCatalog->GetAssetString(handle);
if (!str.empty())
{
return str;
}
}

return EmptyString;
}

2 changes: 2 additions & 0 deletions src/PhoenixSim/LDS/LDSFeatureQueryContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ namespace Phoenix::LDS

bool TypeExists(const FName& typeId) const;

const PHXString& GetAssetString(uint32 handle) const override;

private:

TSharedPtr<const Catalog> SessionStaticCatalog = nullptr;
Expand Down
6 changes: 6 additions & 0 deletions src/PhoenixSim/LDS/LDSQueryContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ namespace Phoenix::LDS

virtual bool Exists(const FName& objectId) const = 0;

virtual const PHXString& GetAssetString(uint32 handle) const
{
static const PHXString EmptyString;
return EmptyString;
}

virtual bool RecordExists(
const LDSRecordPath& path,
ELDSRecordQueryFlags flags = ELDSRecordQueryFlags::None) const;
Expand Down