#ifndef SPECBASE_HPP #define SPECBASE_HPP #include #include #include namespace Retro { struct SpecBase : HECL::Database::IDataSpec { bool canExtract(HECL::Database::Project& project, const ExtractPassInfo& info, std::vector& reps); void doExtract(HECL::Database::Project& project, const ExtractPassInfo& info, FExtractProgress progress); bool canCook(const HECL::Database::Project& project, const CookTaskInfo& info); void doCook(const HECL::Database::Project& project, const CookTaskInfo& info); bool canPackage(const HECL::Database::Project& project, const PackagePassInfo& info); void gatherDependencies(const HECL::Database::Project& project, const PackagePassInfo& info, std::unordered_set& implicitsOut); void doPackage(const HECL::Database::Project& project, const PackagePassInfo& info); virtual bool checkStandaloneID(const char* id) const=0; virtual bool checkFromStandaloneDisc(HECL::Database::Project& project, NOD::DiscBase& disc, const HECL::SystemString& regstr, const std::vector& args, std::vector& reps)=0; virtual bool checkFromTrilogyDisc(HECL::Database::Project& project, NOD::DiscBase& disc, const HECL::SystemString& regstr, const std::vector& args, std::vector& reps)=0; virtual bool extractFromDisc(HECL::Database::Project& project, NOD::DiscBase& disc, bool force, FExtractProgress progress)=0; virtual bool checkFromProject(HECL::Database::Project& proj)=0; virtual bool readFromProject(HECL::Database::Project& proj)=0; virtual bool visitGameObjects(std::function)=0; struct ILevelSpec { virtual bool visitLevelObjects(std::function)=0; struct IAreaSpec { virtual bool visitAreaObjects(std::function)=0; }; virtual bool visitAreas(std::function)=0; }; virtual bool visitLevels(std::function)=0; private: std::unique_ptr m_disc; bool m_isWii; bool m_standalone; }; } #endif // SPECBASE_HPP