79 lines
2.0 KiB
C
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
|