#pragma once #include "ILoadingStep.h" #include "Zone/Zone.h" #include "Zone/XBlock.h" #include "StreamProcessor.h" #include #include #include class ILoadingStep; class ZoneLoader { std::vector> m_steps; std::vector> m_processors; bool m_processor_chain_dirty; std::unique_ptr m_zone; ILoadingStream* BuildLoadingChain(ILoadingStream* rootStream); public: std::vector m_blocks; explicit ZoneLoader(std::unique_ptr zone); void AddXBlock(std::unique_ptr block); void AddLoadingStep(std::unique_ptr step); void AddStreamProcessor(std::unique_ptr streamProcessor); void RemoveStreamProcessor(StreamProcessor* streamProcessor); std::unique_ptr LoadZone(std::istream& stream); };