You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.0 KiB
C++

#ifndef LEVELBUILDER_H
#define LEVELBUILDER_H
#include <memory>
#include <functional>
#include <QDir>
#include <QFile>
#include <QJsonObject>
#include <QJsonDocument>
#include <QJsonArray>
/* 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<QString, std::shared_ptr<QWAbstractEvent>> hash_events;
QHash<QString, std::shared_ptr<QWTrigger>> hash_triggers;
QHash<QString, std::shared_ptr<QWAbstractGameDialogue>> hash_dialogues;
QHash<QString, std::shared_ptr<QWLocation>> hash_locations;
std::shared_ptr<QWTrigger> 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<GameFeatures> &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