Add asset loading states per zone for the usecase of saving loaded menus and menu functions

This commit is contained in:
Jan
2021-11-13 22:18:44 +01:00
parent b1e5fc70a6
commit 4552a4fe4a
14 changed files with 106 additions and 2 deletions

View File

@ -2,6 +2,8 @@
#include <string>
#include <vector>
#include <map>
#include <memory>
#include "CommonItemDef.h"
#include "CommonMenuTypes.h"

View File

@ -0,0 +1,17 @@
#pragma once
#include "AssetLoading/IZoneAssetLoaderState.h"
#include "Domain/CommonFunctionDef.h"
#include "Domain/CommonMenuDef.h"
namespace menu
{
class MenuAssetZoneState final : public IZoneAssetLoaderState
{
public:
std::vector<std::unique_ptr<CommonFunctionDef>> m_functions;
std::vector<std::unique_ptr<CommonMenuDef>> m_menus;
MenuAssetZoneState() = default;
};
}

View File

@ -15,6 +15,12 @@ MenuFileParser::MenuFileParser(SimpleLexer* lexer, const FeatureLevel featureLev
CreateSequenceCollections();
}
MenuFileParser::MenuFileParser(SimpleLexer* lexer, FeatureLevel featureLevel, const MenuAssetZoneState* zoneState)
: AbstractParser(lexer, std::make_unique<MenuFileParserState>(featureLevel, zoneState))
{
CreateSequenceCollections();
}
void MenuFileParser::AddSequence(std::vector<sequence_t*>& collection, std::unique_ptr<sequence_t> test)
{
collection.push_back(test.get());

View File

@ -1,5 +1,6 @@
#pragma once
#include "MenuAssetZoneState.h"
#include "Utils/ClassUtils.h"
#include "MenuFileParserState.h"
#include "Parsing/Simple/SimpleLexer.h"
@ -26,6 +27,7 @@ namespace menu
public:
MenuFileParser(SimpleLexer* lexer, FeatureLevel featureLevel);
MenuFileParser(SimpleLexer* lexer, FeatureLevel featureLevel, const MenuAssetZoneState* zoneState);
_NODISCARD MenuFileParserState* GetState() const;
};
}

View File

@ -18,3 +18,17 @@ MenuFileParserState::MenuFileParserState(const FeatureLevel featureLevel)
m_current_nested_event_handler_set(nullptr)
{
}
MenuFileParserState::MenuFileParserState(const FeatureLevel featureLevel, const MenuAssetZoneState* zoneState)
: MenuFileParserState(featureLevel)
{
for(const auto& function : zoneState->m_functions)
{
m_functions_by_name.emplace(std::make_pair(function->m_name, function.get()));
}
for(const auto& menu : zoneState->m_menus)
{
m_menus_by_name.emplace(std::make_pair(menu->m_name, menu.get()));
}
}

View File

@ -6,9 +6,11 @@
#include <sstream>
#include <stack>
#include "MenuAssetZoneState.h"
#include "Domain/CommonFunctionDef.h"
#include "Domain/CommonMenuDef.h"
#include "Domain/MenuFeatureLevel.h"
#include "Domain/EventHandler/CommonEventHandlerSet.h"
#include "Domain/EventHandler/CommonEventHandlerCondition.h"
namespace menu
@ -45,5 +47,6 @@ namespace menu
CommonEventHandlerSet* m_current_nested_event_handler_set;
explicit MenuFileParserState(FeatureLevel featureLevel);
MenuFileParserState(FeatureLevel featureLevel, const MenuAssetZoneState* zoneState);
};
}

View File

@ -14,7 +14,8 @@ using namespace menu;
MenuFileReader::MenuFileReader(std::istream& stream, std::string fileName, const FeatureLevel featureLevel, include_callback_t includeCallback)
: m_feature_level(featureLevel),
m_file_name(std::move(fileName)),
m_stream(nullptr)
m_stream(nullptr),
m_zone_state(nullptr)
{
OpenBaseStream(stream, std::move(includeCallback));
SetupStreamProxies();
@ -24,7 +25,8 @@ MenuFileReader::MenuFileReader(std::istream& stream, std::string fileName, const
MenuFileReader::MenuFileReader(std::istream& stream, std::string fileName, const FeatureLevel featureLevel)
: m_feature_level(featureLevel),
m_file_name(std::move(fileName)),
m_stream(nullptr)
m_stream(nullptr),
m_zone_state(nullptr)
{
OpenBaseStream(stream, nullptr);
SetupStreamProxies();
@ -110,6 +112,11 @@ std::unique_ptr<ParsingResult> MenuFileReader::CreateParsingResult(MenuFileParse
return result;
}
void MenuFileReader::IncludeZoneState(const MenuAssetZoneState* zoneState)
{
m_zone_state = zoneState;
}
std::unique_ptr<ParsingResult> MenuFileReader::ReadMenuFile()
{
SimpleLexer::Config lexerConfig;

View File

@ -8,6 +8,7 @@
#include "Domain/MenuFeatureLevel.h"
#include "Domain/MenuParsingResult.h"
#include "Parsing/IParserLineStream.h"
#include "MenuAssetZoneState.h"
namespace menu
{
@ -23,6 +24,8 @@ namespace menu
IParserLineStream* m_stream;
std::vector<std::unique_ptr<IParserLineStream>> m_open_streams;
const MenuAssetZoneState* m_zone_state;
bool OpenBaseStream(std::istream& stream, include_callback_t includeCallback);
void SetupDefinesProxy();
void SetupStreamProxies();
@ -34,6 +37,8 @@ namespace menu
MenuFileReader(std::istream& stream, std::string fileName, FeatureLevel featureLevel);
MenuFileReader(std::istream& stream, std::string fileName, FeatureLevel featureLevel, include_callback_t includeCallback);
void IncludeZoneState(const MenuAssetZoneState* zoneState);
std::unique_ptr<ParsingResult> ReadMenuFile();
};
}