#ifndef CREATURELIB_SCRIPTSOURCE_HPP #define CREATURELIB_SCRIPTSOURCE_HPP #include "ScriptAggregator.hpp" namespace CreatureLib::Battling { class ScriptSource { bool _areScriptsInitialized = false; ArbUt::List _scripts; ScriptAggregator _scriptsIterator; protected: void ResetActiveScripts() { _areScriptsInitialized = false; _scripts.Clear(); } public: virtual size_t ScriptCount() const = 0; const ScriptAggregator& GetScriptIterator() { if (!_areScriptsInitialized) { _scripts.Reserve(ScriptCount()); GetActiveScripts(_scripts); _scriptsIterator = ScriptAggregator(_scripts); _areScriptsInitialized = true; } _scriptsIterator.Reset(); return _scriptsIterator; } virtual void GetActiveScripts(ArbUt::List& scripts) = 0; virtual void GetOwnScripts(ArbUt::List& scripts) = 0; }; } #endif // CREATURELIB_SCRIPTSOURCE_HPP