mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-06-10 14:58:10 -05:00
Add asset loading states per zone for the usecase of saving loaded menus and menu functions
This commit is contained in:
@ -2,6 +2,8 @@
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
|
||||
#include "CommonItemDef.h"
|
||||
#include "CommonMenuTypes.h"
|
||||
|
17
src/ObjLoading/Parsing/Menu/MenuAssetZoneState.h
Normal file
17
src/ObjLoading/Parsing/Menu/MenuAssetZoneState.h
Normal 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;
|
||||
};
|
||||
}
|
@ -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());
|
||||
|
@ -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;
|
||||
};
|
||||
}
|
||||
|
@ -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()));
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
};
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
};
|
||||
}
|
||||
|
Reference in New Issue
Block a user