Add possibility to include asset lists in project definition

This commit is contained in:
Jan
2023-10-07 15:06:41 +02:00
parent e4fd8543e3
commit fb5c67b5ce
18 changed files with 142 additions and 70 deletions

View File

@ -0,0 +1,19 @@
#include "SequenceZoneDefinitionAssetList.h"
#include "Parsing/ZoneDefinition/Matcher/ZoneDefinitionMatcherFactory.h"
SequenceZoneDefinitionAssetList::SequenceZoneDefinitionAssetList()
{
const ZoneDefinitionMatcherFactory create(this);
AddMatchers({
create.Keyword("assetlist"),
create.Char(','),
create.Field().Capture(CAPTURE_ASSET_LIST_NAME)
});
}
void SequenceZoneDefinitionAssetList::ProcessMatch(ZoneDefinition* state, SequenceResult<ZoneDefinitionParserValue>& result) const
{
state->m_asset_lists.emplace_back(result.NextCapture(CAPTURE_ASSET_LIST_NAME).FieldValue());
}

View File

@ -0,0 +1,14 @@
#pragma once
#include "Parsing/ZoneDefinition/ZoneDefinitionParser.h"
class SequenceZoneDefinitionAssetList final : public ZoneDefinitionParser::sequence_t
{
static constexpr auto CAPTURE_ASSET_LIST_NAME = 1;
protected:
void ProcessMatch(ZoneDefinition* state, SequenceResult<ZoneDefinitionParserValue>& result) const override;
public:
SequenceZoneDefinitionAssetList();
};

View File

@ -1,5 +1,6 @@
#include "ZoneDefinitionParser.h"
#include "Sequence/SequenceZoneDefinitionAssetList.h"
#include "Sequence/SequenceZoneDefinitionEntry.h"
#include "Sequence/SequenceZoneDefinitionIgnore.h"
#include "Sequence/SequenceZoneDefinitionInclude.h"
@ -16,6 +17,7 @@ const std::vector<AbstractParser<ZoneDefinitionParserValue, ZoneDefinition>::seq
new SequenceZoneDefinitionMetaData(),
new SequenceZoneDefinitionInclude(),
new SequenceZoneDefinitionIgnore(),
new SequenceZoneDefinitionAssetList(),
new SequenceZoneDefinitionEntry()
});

View File

@ -1,5 +1,6 @@
#pragma once
#include <string>
#include <vector>
class AssetListEntry
{
@ -10,3 +11,9 @@ public:
AssetListEntry();
AssetListEntry(std::string type, std::string name);
};
class AssetList
{
public:
std::vector<AssetListEntry> m_entries;
};

View File

@ -29,7 +29,15 @@ void ZoneDefinition::AddMetaData(std::string key, std::string value)
m_metadata_lookup.emplace(std::make_pair(metaDataPtr->m_key, metaDataPtr));
}
void ZoneDefinition::Include(ZoneDefinition& definitionToInclude)
void ZoneDefinition::Include(const AssetList& assetListToInclude)
{
for (const auto& entry : assetListToInclude.m_entries)
{
m_assets.emplace_back(entry.m_type, entry.m_name, false);
}
}
void ZoneDefinition::Include(const ZoneDefinition& definitionToInclude)
{
for (const auto& metaData : definitionToInclude.m_metadata)
{

View File

@ -5,6 +5,8 @@
#include <unordered_map>
#include <vector>
#include "Zone/AssetList/AssetList.h"
class ZoneDefinitionEntry
{
public:
@ -33,9 +35,11 @@ public:
std::vector<std::unique_ptr<ZoneMetaDataEntry>> m_metadata;
std::unordered_multimap<std::string, ZoneMetaDataEntry*> m_metadata_lookup;
std::vector<std::string> m_includes;
std::vector<std::string> m_asset_lists;
std::vector<std::string> m_ignores;
std::vector<ZoneDefinitionEntry> m_assets;
void AddMetaData(std::string key, std::string value);
void Include(ZoneDefinition& definitionToInclude);
void Include(const AssetList& assetListToInclude);
void Include(const ZoneDefinition& definitionToInclude);
};