#ifndef LEVELBUILDER_H #define LEVELBUILDER_H #include #include #include #include #include #include #include /* QWLevelBuilder * Saves and loads game sessions by managing dependent json files. */ struct GameFeatures; class QWScene; class QWAbstractEvent; class QWAbstractGameDialogue; class QWInventoryManager; class QWTextDialogueManager; class QWWidgetDialogueManager; class QWSoundPlayer; class QWTrigger; class QWLocation; class QWLevelBuilder final : public QObject { Q_OBJECT Q_DISABLE_COPY_MOVE(QWLevelBuilder) friend class QWEventFactory; friend class QWDialogueFactory; private: QDir save_dir; QString str_profile_filename; QString str_current_profile; QString str_current_level; QJsonObject level; QWInventoryManager *ptr_inventory; QWScene *ptr_scene; QWSoundPlayer *ptr_soundplayer; QWTextDialogueManager *ptr_text_dlg; QWWidgetDialogueManager *ptr_widget_dlg; QHash> hash_events; QHash> hash_triggers; QHash> hash_dialogues; QHash> hash_locations; std::shared_ptr init_trigger; void setupTriggers(const QJsonArray &array); void setupEvents(const QJsonArray &array); void linkEvents(const QJsonArray &array); void setupDialogues(const QJsonArray &array); void setupLocations(const QJsonArray &array); void init(const QJsonObject & savefile); public: explicit QWLevelBuilder(QObject *parent = nullptr); void setGameFeatures(std::unique_ptr &features); void initLevel(const QString &lvlname); void initSaveProfile(const QString &filename, const QString &profilename); void initMenuLevel(); static QString strInitLevel() noexcept; public slots: void saveGame( ); void loadGame(/*int on_id*/); }; #endif // LEVELBUILDER_H