diff --git a/CMakeLists.txt b/CMakeLists.txt index bc99485..78177ae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,6 +63,8 @@ add_subdirectory(submodules/QuasarAppLib) add_subdirectory(submodules/SimpleQmlNotify) add_subdirectory(src/Core) +add_subdirectory(src/Empty) + add_subdirectory(src/Client) diff --git a/src/Core/CMakeLists.txt b/src/Core/CMakeLists.txt index 732ed3c..9d43206 100644 --- a/src/Core/CMakeLists.txt +++ b/src/Core/CMakeLists.txt @@ -45,6 +45,6 @@ set(LANGS ${CMAKE_CURRENT_SOURCE_DIR}/languages/en.ts ${CMAKE_CURRENT_SOURCE_DIR}/languages/es.ts ${CMAKE_CURRENT_SOURCE_DIR}/languages/pl.ts) -prepareQM(${CURRENT_PROJECT} ${CMAKE_CURRENT_SOURCE_DIR} "${LANGS}") +prepareQM(${CURRENT_PROJECT} ${CMAKE_CURRENT_SOURCE_DIR}/../ "${LANGS}") set(QML_IMPORT_PATH ${QML_IMPORT_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/src" CACHE STRING "" FORCE) diff --git a/src/Core/SnakeProject.qrc b/src/Core/SnakeProject.qrc index 72fb9f9..f9fbdd1 100644 --- a/src/Core/SnakeProject.qrc +++ b/src/Core/SnakeProject.qrc @@ -12,7 +12,6 @@ SnakeProjectModule/Scene.qml SnakeProjectModule/SettingsView.qml SnakeProjectModule/SnakeItem.qml - SnakeProject/IRender.qml languages/de.qm @@ -26,13 +25,7 @@ languages/zh.qm languages/uk.qm - - res/up.svg - res/logo.png - res/icon.ico - - - res/meshes/cube.mesh - + + diff --git a/src/Core/SnakeProject/clientapp.cpp b/src/Core/SnakeProject/clientapp.cpp index 602b668..9ac7300 100644 --- a/src/Core/SnakeProject/clientapp.cpp +++ b/src/Core/SnakeProject/clientapp.cpp @@ -1,13 +1,19 @@ #include "clientapp.h" #include "imageprovider.h" +#include "iworld.h" #include "mainmenumodel.h" #include #include #include -#include +#include #include +#include +#include +#include "pluginloader.h" + +#define PLUGINS_DIR QStandardPaths:: QByteArray ClientApp::initTheme() { int themeIndex = Settings::instance()->getValue(THEME, THEME_DEFAULT).toInt(); @@ -20,11 +26,11 @@ QByteArray ClientApp::initTheme() { } ClientApp::ClientApp() { - contr = new Controller(); + _engine = new Engine(); } ClientApp::~ClientApp() { - delete contr; + delete _engine; } void ClientApp::initLang() { @@ -42,13 +48,30 @@ void ClientApp::initLang() { } } +void ClientApp::initLvls() { + auto plugins = availablePlugins(); + + for (const auto& lvl: plugins) { + IWorld* worldModule = PluginLoader::load(lvl.absoluteFilePath()); + + if (worldModule) { + _availableLvls.insert(worldModule->name(), worldModule); + } + } +} + +QList ClientApp::availablePlugins() const { + QDir dir(QStandardPaths::writableLocation(QStandardPaths::DataLocation)); + auto list = dir.entryInfoList(QStringList() << "*.so" << "*.dll", QDir::Files); + + return list; +} + bool ClientApp::init(QQmlApplicationEngine *engine) { qputenv("QT_QUICK_CONTROLS_MATERIAL_THEME", initTheme()); - qputenv("QT_QUICK_CONTROLS_STYLE", "Basic"); + qputenv("QT_QUICK_CONTROLS_STYLE", "Material"); - qmlRegisterAnonymousType("GuiObject", 1); - qmlRegisterAnonymousType("Diff", 1); qmlRegisterAnonymousType("MainMenuModel", 1); auto root = engine->rootContext(); @@ -57,9 +80,10 @@ bool ClientApp::init(QQmlApplicationEngine *engine) { engine->addImageProvider(QLatin1String("userItems"), new ImageProvider()); - root->setContextProperty("contr", contr); + root->setContextProperty("engine", QVariant::fromValue(_engine)); initSnakeProjectResources(); initLang(); + initLvls(); engine->addImportPath(":/SnakeProjectModule/"); diff --git a/src/Core/SnakeProject/clientapp.h b/src/Core/SnakeProject/clientapp.h index 978fa0f..38d7401 100644 --- a/src/Core/SnakeProject/clientapp.h +++ b/src/Core/SnakeProject/clientapp.h @@ -2,28 +2,49 @@ #define CLIENTAPP_H #include +#include +#include #include "global.h" -class Controller; - +class Engine; +class IWorld; inline void initSnakeProjectResources() { Q_INIT_RESOURCE(SnakeProject); } class QQmlApplicationEngine; +/** + * @brief The ClientApp class This is main class of the Game engine. + */ class SNAKEPROJECT_EXPORT ClientApp { -private: - Controller *contr = nullptr; - QByteArray initTheme(); - - void initLang(); - public: ClientApp(); - ~ClientApp(); + virtual ~ClientApp(); + + /** + * @brief init This method initialize engine on application. + * @param engine This is qml engine instance object. + * @return true if all initialize successful + */ bool init(QQmlApplicationEngine* engine); + +private: + QByteArray initTheme(); + void initLang(); + void initLvls(); + + /** + * @brief availablePlugins This method read all available plugins. + * @return list of the available plugins. + */ + QList availablePlugins() const; + + + QHash _availableLvls; + + Engine *_engine = nullptr; }; #endif // CLIENTAPP_H diff --git a/src/Core/SnakeProject/iworld.h b/src/Core/SnakeProject/iworld.h index 02255e1..03e9397 100644 --- a/src/Core/SnakeProject/iworld.h +++ b/src/Core/SnakeProject/iworld.h @@ -65,6 +65,24 @@ public: */ virtual QString initHdrBackGround() const = 0; + /** + * @brief description This method shold be return lvl description. + * @return lvel description string. + */ + virtual QString description() const = 0; + + /** + * @brief name This method shold be return lvl name. + * @return lvl name. + */ + virtual QString name() const = 0; + + /** + * @brief amountToUnlock This method shold be return unlock cost. + * @return unlock cost + */ + virtual int amountToUnlock() const = 0; + /** * @brief render this method recursive invoke all render functions of the all world items. * The render function is main function of the SnakeEngine This method recal all propertyes of all objects. diff --git a/src/Core/SnakeProjectModule/Scene.qml b/src/Core/SnakeProjectModule/Scene.qml index 64a3ef0..1620e3b 100644 --- a/src/Core/SnakeProjectModule/Scene.qml +++ b/src/Core/SnakeProjectModule/Scene.qml @@ -9,60 +9,6 @@ View3D { id: scene; property var model: null; - property var arrayObjects: [] - readonly property bool showMenu: (model)? model.showMenu: false - property bool isPause: false - - function add (cppObjId) { - if (!model) { - console.log("create object fail") - return; - } - var objModel = model.getGameObject(cppObjId); - - if (!objModel) { - console.log("object model not found"); - return; - } - - var viewTemplate = objModel.viewTemplate; - - var temp = Qt.createComponent( viewTemplate + ".qml") - if (temp.status === Component.Ready) { - var obj = temp.createObject(mainScane) // parent - это обьект на который будет помещен соззданный элемент - obj.model = model.getGameObject(cppObjId); - arrayObjects.push(obj) - } else { - console.log("wrong viewTemplate in model. Message: " + temp.errorString()); - } - } - - function remove(id) { - if (typeof id !== "number" || id < 0) { - console.log("id not found"); - return; - } - - for (var i = 0; i < arrayObjects.length; ++i) { - if (id === arrayObjects[i].guiId) { - arrayObjects.splice(i,1); - } - } - } - - function updateBackgroundColor(lvl) { - switch(lvl % 7) { - case 0: background.clearColor = "#d6eaf8"; break; - case 1: background.clearColor = "#d0ece7"; break; - case 2: background.clearColor = "#d4efdf"; break; - case 3: background.clearColor = "#fcf3cf"; break; - case 4: background.clearColor = "#f6ddcc"; break; - case 5: background.clearColor = "#f2d7d5"; break; - case 6: background.clearColor = "#ebdef0"; break; - case 7: background.clearColor = "#fbfcfc"; break; - - } - } PerspectiveCamera { id: camera @@ -101,29 +47,6 @@ View3D { } } - Connections { - target: model; - function onGameObjectsChanged(dif) { - if (!dif) { - console.log("dif not found"); - return; - } - - var tempDifRem = []; - tempDifRem = dif.getRemoveIds(); - var tempDifAdd = []; - tempDifAdd = dif.getAddedIds(); - - for (var i = 0; i < tempDifAdd.length; ++i) { - add(tempDifAdd[i]); - } - - for (i = 0; i < tempDifRem.length; ++i) { - remove(tempDifRem[i]); - } - } - } - Component.onCompleted: { updateBackgroundColor(0); model.handleNewGame(); diff --git a/src/Core/languages/de.ts b/src/Core/languages/de.ts index d1501fb..576b594 100644 --- a/src/Core/languages/de.ts +++ b/src/Core/languages/de.ts @@ -1,17 +1,6 @@ - - Controller - - Next Lvl!!! - - - - You anblock next lvl (%0) - - - MainMenu diff --git a/src/Core/languages/en.ts b/src/Core/languages/en.ts index d1501fb..576b594 100644 --- a/src/Core/languages/en.ts +++ b/src/Core/languages/en.ts @@ -1,17 +1,6 @@ - - Controller - - Next Lvl!!! - - - - You anblock next lvl (%0) - - - MainMenu diff --git a/src/Core/languages/es.ts b/src/Core/languages/es.ts index d1501fb..576b594 100644 --- a/src/Core/languages/es.ts +++ b/src/Core/languages/es.ts @@ -1,17 +1,6 @@ - - Controller - - Next Lvl!!! - - - - You anblock next lvl (%0) - - - MainMenu diff --git a/src/Core/languages/fr.ts b/src/Core/languages/fr.ts index d1501fb..576b594 100644 --- a/src/Core/languages/fr.ts +++ b/src/Core/languages/fr.ts @@ -1,17 +1,6 @@ - - Controller - - Next Lvl!!! - - - - You anblock next lvl (%0) - - - MainMenu diff --git a/src/Core/languages/ja.ts b/src/Core/languages/ja.ts index d1501fb..576b594 100644 --- a/src/Core/languages/ja.ts +++ b/src/Core/languages/ja.ts @@ -1,17 +1,6 @@ - - Controller - - Next Lvl!!! - - - - You anblock next lvl (%0) - - - MainMenu diff --git a/src/Core/languages/pl.ts b/src/Core/languages/pl.ts index d1501fb..576b594 100644 --- a/src/Core/languages/pl.ts +++ b/src/Core/languages/pl.ts @@ -1,17 +1,6 @@ - - Controller - - Next Lvl!!! - - - - You anblock next lvl (%0) - - - MainMenu diff --git a/src/Core/languages/ru.ts b/src/Core/languages/ru.ts index d1501fb..576b594 100644 --- a/src/Core/languages/ru.ts +++ b/src/Core/languages/ru.ts @@ -1,17 +1,6 @@ - - Controller - - Next Lvl!!! - - - - You anblock next lvl (%0) - - - MainMenu diff --git a/src/Core/languages/tr.ts b/src/Core/languages/tr.ts index d1501fb..576b594 100644 --- a/src/Core/languages/tr.ts +++ b/src/Core/languages/tr.ts @@ -1,17 +1,6 @@ - - Controller - - Next Lvl!!! - - - - You anblock next lvl (%0) - - - MainMenu diff --git a/src/Core/languages/uk.ts b/src/Core/languages/uk.ts index d1501fb..576b594 100644 --- a/src/Core/languages/uk.ts +++ b/src/Core/languages/uk.ts @@ -1,17 +1,6 @@ - - Controller - - Next Lvl!!! - - - - You anblock next lvl (%0) - - - MainMenu diff --git a/src/Core/languages/zh.ts b/src/Core/languages/zh.ts index d1501fb..576b594 100644 --- a/src/Core/languages/zh.ts +++ b/src/Core/languages/zh.ts @@ -1,17 +1,6 @@ - - Controller - - Next Lvl!!! - - - - You anblock next lvl (%0) - - - MainMenu diff --git a/src/Core/private/background.cpp b/src/Core/private/background.cpp deleted file mode 100644 index f4b635f..0000000 --- a/src/Core/private/background.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include "background.h" - -BackGround::BackGround(double x, double y): ItemWorld (x, y) { - this->setSize(200, 400); - setBeckGroundObject(true); -} - -void BackGround::render() { - auto wPart = size().x() / 2; - - if (position().x() + wPart < 200) { - setX(wPart); - } -} - -void BackGround::reset() { - setX(0 - size().x()); - render(); -} diff --git a/src/Core/private/background.h b/src/Core/private/background.h deleted file mode 100644 index 26e4619..0000000 --- a/src/Core/private/background.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef BACKGROUND_H -#define BACKGROUND_H - -#include "itemworld.h" - - -class BackGround : public ItemWorld -{ -public: - BackGround(double x, double y); - - void render() override; - void reset() override; -}; - -#endif // BACKGROUND_H diff --git a/src/Core/private/backgrounditem.cpp b/src/Core/private/backgrounditem.cpp deleted file mode 100644 index c0b06f6..0000000 --- a/src/Core/private/backgrounditem.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "backgrounditem.h" - -#include - -BackGroundItem::BackGroundItem(double x, double y): - ItemWorld (x, y) { - setBeckGroundObject(true); - reset(); -} - -void BackGroundItem::reset() { - auto tempColor = QColor(rand() % 255, rand() % 255, rand() % 255, 10); - setColor(tempColor.name(QColor::HexArgb)); - auto radius = rand() % 200; - setSize(radius , radius); - -} diff --git a/src/Core/private/backgrounditem.h b/src/Core/private/backgrounditem.h deleted file mode 100644 index 6999772..0000000 --- a/src/Core/private/backgrounditem.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef BACKGROUNDITEM_H -#define BACKGROUNDITEM_H - -#include "itemworld.h" - - -class BackGroundItem : public ItemWorld -{ -public: - BackGroundItem(double x, double y); - void reset() override; - -}; - -#endif // BACKGROUNDITEM_H diff --git a/src/Core/private/controller.cpp b/src/Core/private/controller.cpp deleted file mode 100644 index 98eb211..0000000 --- a/src/Core/private/controller.cpp +++ /dev/null @@ -1,156 +0,0 @@ -#include "controller.h" -#include -#include -#include "diff.h" -#include "lvls.h" -#include "mainmenumodel.h" -#include "qmlnotifyservice.h" - -Controller::Controller() { - srand(static_cast(time(nullptr))); - timer = new QTimer(); - timer->setInterval(1); - - _networkModel = new MainMenuModel(this); - - connect(timer, SIGNAL(timeout()), this, SLOT(update())); - connect(_networkModel, &MainMenuModel::newGame, this, &Controller::handleNewGame); - -} - -Controller::~Controller() { - -} - -bool Controller::nextLvl() { - if (lvl + 1 >= lvls.size()) { - return true; - } - m_generalLong += static_cast(world.getCurrentLong()); - - generateDiff(world.init(lvls.value(++lvl))); - startTimer(); - - - return false; -} - -void Controller::generateDiff(const QMap& objs) { - - auto removeIds = objectsContainer.keys(); - QList addedIds; - - for (auto i = objs.begin(); i != objs.end(); ++i) { - if (objectsContainer.contains(i.key())) { - removeIds.removeOne(i.key()); - } else { - objectsContainer.insert(i.key(), i.value()); - addedIds.push_back(i.key()); - } - } - - if (removeIds.size() || addedIds.size()) { - Diff diff; - - diff.setRemoveIds(removeIds); - diff.setAddedIds(addedIds); - emit gameObjectsChanged(diff); - } -} - -void Controller::update() { - if (pause) { - return; - } - - world.render(); - - if(world.isDefiat()) { - stopTimer(); - if (!_showMenu) { - setShowMenu(true); - } - handleNewGame(); - } - - if (world.isEnd()) { - stopTimer(); - - if (!_showMenu) { - - - if (auto service = QmlNotificationService::NotificationService::getService()) { - QmlNotificationService::NotificationData notify(tr(" Next Lvl!!!"), - tr(" You anblock next lvl (%0)" ).arg(lvl), - "qrc:/texture/up"); - service->setNotify(notify); - } - } - - nextLvl(); - - } - - emit long_changed(static_cast(world.getCurrentLong())); - emit generalLongchanged(generalLong()); - -} - -void Controller::handleNewGame() { - - world.resetPosition(); - - WorldRules newGameRules = lvls.first(); - lvl = 0; - m_generalLong = 0; - generateDiff(world.init(newGameRules)); - startTimer(); -} - -QObject *Controller::getGameObject(int id) { - return objectsContainer.value(id, nullptr); -} - -void Controller::startTimer() { - timer->start(); -} - -void Controller::stopTimer() { - timer->stop(); -} - -int Controller::long_() const { - return static_cast(world.getCurrentLong()); -} - -int Controller::generalLong() const { - return m_generalLong + long_(); -} - -QObject *Controller::mainMenuModel() const { - return _networkModel; -} - -void Controller::buttonPress() { - world.reversClick(); -} - -void Controller::setPause(bool p){ - pause = p; - if (!pause) { - world.unPause(); - } -} - -bool Controller::showMenu() const { - return _showMenu; -} - -void Controller::setShowMenu(bool showMenu) { - if (_showMenu == showMenu) - return; - - _showMenu = showMenu; - emit showMenuChanged(_showMenu); -} - diff --git a/src/Core/private/controller.h b/src/Core/private/controller.h deleted file mode 100644 index 93c0795..0000000 --- a/src/Core/private/controller.h +++ /dev/null @@ -1,88 +0,0 @@ -#ifndef CONTROLLER_H -#define CONTROLLER_H - -#include -#include -#include -#include "diff.h" -#include "snake.h" -#include "world.h" - -class MainMenuModel; - -class Controller : public QObject -{ - Q_OBJECT - - Q_PROPERTY(int long_ READ long_ NOTIFY long_changed) - Q_PROPERTY(int generalLong READ generalLong NOTIFY generalLongchanged) - Q_PROPERTY(QObject* mainMenuModel READ mainMenuModel NOTIFY mainMenuModelchanged) - Q_PROPERTY(bool showMenu READ showMenu WRITE setShowMenu NOTIFY showMenuChanged) - -private: - - World world; - QMap objectsContainer; - QTimer *timer = nullptr; - - int lvl = 0; - int m_generalLong = 0; - bool pause = false; - bool _showMenu = true; - - void generateDiff(const QMap &); - - MainMenuModel* _networkModel = nullptr; - -public: - Controller(); - ~Controller(); - - void startTimer(); - void stopTimer(); - - int long_() const; - int generalLong() const; - bool showMenu() const; - - QObject* mainMenuModel() const; - -public slots: - void buttonPress(); - void setPause(bool); - void update(); - - /** - * @brief nextLvl - switch to next lvl from array lvels - * @return true if all levels are passed - */ - bool nextLvl(); - - /** - * @brief newGame - start game from first lvl - */ - void handleNewGame(); - - /** - * @brief getGameObject - * @param id - id of guiObject; - * @return guiObject if (id is not valid return nullptr) - */ - QObject* getGameObject(int id); - - void setShowMenu(bool showMenu); - -signals: - - /** - * @brief gameObjectsChanged - * @param dif - */ - void gameObjectsChanged(const Diff &dif); - void long_changed(int m_long); - void generalLongchanged(int generalLong); - void mainMenuModelchanged(QObject* mainMenuModel); - void showMenuChanged(bool showMenu); -}; - -#endif // CONTROLLER_H diff --git a/src/Core/private/guiobjectfactory.cpp b/src/Core/private/guiobjectfactory.cpp deleted file mode 100644 index ef76246..0000000 --- a/src/Core/private/guiobjectfactory.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include "guiobjectfactory.h" -#include "box.h" -#include "snakeutils.h" -#include "head.h" -#include "background.h" -#include "backgrounditem.h" - -GuiObjectFactory::GuiObjectFactory() {} - -ItemWorld *GuiObjectFactory::generate(const QString &name) { - ItemWorld *obj = nullptr; - if (name == "Box") { - obj = new Box(rand() % 400, 0); - } - else if (name == "BackGround") { - obj = new BackGround(0, 0); - } - else if (name == "BackGroundItem") { - obj = new BackGroundItem(0, 0); - } - - return obj; -} diff --git a/src/Core/private/guiobjectfactory.h b/src/Core/private/guiobjectfactory.h deleted file mode 100644 index 1d60fe3..0000000 --- a/src/Core/private/guiobjectfactory.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef GUIOBJECTFACTORY_H -#define GUIOBJECTFACTORY_H - -#include - -class ItemWorld; - -/** - * @brief The GuiObjectFactory class - * factory of gui ojects; - */ -class GuiObjectFactory -{ -public: - GuiObjectFactory(); - - /** - * @brief generate - generate the child of GuiObject - * by object name. - * @param name - name of class of genereta object - * @return pointer of generated object. - * If method called with not valid name then return nullptr. - */ - static ItemWorld* generate(const QString& name); -}; - -#endif // GUIOBJECTFACTORY_H diff --git a/src/Core/private/head.cpp b/src/Core/private/head.cpp deleted file mode 100644 index 9b44c6a..0000000 --- a/src/Core/private/head.cpp +++ /dev/null @@ -1,48 +0,0 @@ -#include "head.h" -#include -#include - -void Head::render() { - - - qint64 tempTime = QDateTime::currentMSecsSinceEpoch() - time; - time = QDateTime::currentMSecsSinceEpoch(); - - float u = ratation().toEulerAngles().z(); - double dy = (*speed) * sin(u * TO_RADIAN) / 1000 * tempTime; - setY(position().y() + dy); - - if (*speed < 1) { - setColor(generalSpeadColor); - - } else if (*speed < normSpead) { - setColor(normSpeadColor); - - } else if (*speed < fastSpead) { - setColor(fastSpeadColor); - - } else if (*speed < megaFastSpead) { - setColor(megaFastSpeadColor); - - } -} - -void Head::reset() { -} - -void Head::unPause() { - time = QDateTime::currentMSecsSinceEpoch(); -} - -Head::Head(float x, float y, float h, float w, float thickness, float *spead): - GuiObject ("SnakeItem") { - setposition({x, y, 0}); - setSize({w, h, thickness}); - - this->speed = spead; - setMash("qrc:/mesh/res/meshes/cube.mesh"); -} - -Head::~Head() { - -} diff --git a/src/Core/private/head.h b/src/Core/private/head.h deleted file mode 100644 index 425bffc..0000000 --- a/src/Core/private/head.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef HEAD_H -#define HEAD_H -#define TO_RADIAN 0.017453293 - - -#include "guiobject.h" -#include - -class Head : public GuiObject -{ -private: - qint64 time; - float *speed; - const int megaFastSpead = 200; - const int fastSpead = 100; - const int normSpead = 50; - - const QString generalSpeadColor = "#616a6b"; - const QString normSpeadColor = "#5d6d7e"; - const QString fastSpeadColor = "#eb984e"; - const QString megaFastSpeadColor = "#ec7063"; - -public: - Head(float x , float y, float h, float w, float thickness, float *speed); - void render() override; - void reset() override; - void unPause(); - ~Head() override; -}; - -#endif // HEAD_H diff --git a/src/Core/private/lvls.cpp b/src/Core/private/lvls.cpp deleted file mode 100644 index 007b9d5..0000000 --- a/src/Core/private/lvls.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "lvls.h" - -QList lvls { - WorldRules{{"Long", 500}, {"Box", 2}, {"Spead", 10}, {"BackGroundItem", 10}}, - WorldRules{{"Long", 1000}, {"Box", 4}, {"Spead", 10}, {"BackGroundItem", 10}}, - WorldRules{{"Long", 2000}, {"Box", 8}, {"Spead", 10}, {"BackGroundItem", 10}}, - WorldRules{{"Long", 4000}, {"Box", 16}, {"Spead", 10}, {"BackGroundItem", 10}}, - WorldRules{{"Long", 8000}, {"Box", 32}, {"Spead", 10}, {"BackGroundItem", 10}}, - WorldRules{{"Long", 16000}, {"Box", 64}, {"Spead", 10}, {"BackGroundItem", 10}} - -}; diff --git a/src/Core/private/lvls.h b/src/Core/private/lvls.h deleted file mode 100644 index dfcebf7..0000000 --- a/src/Core/private/lvls.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef LVLS_H -#define LVLS_H - -#include -#include "snakeutils.h" - -extern QList lvls; - -#endif // LVLS_H diff --git a/src/Core/private/pluginloader.cpp b/src/Core/private/pluginloader.cpp new file mode 100644 index 0000000..ee84cf5 --- /dev/null +++ b/src/Core/private/pluginloader.cpp @@ -0,0 +1,34 @@ +#include "pluginloader.h" +#include +#include + +typedef IWorld* (*instance)(); + +PluginLoader::PluginLoader() { + +} + +IWorld *PluginLoader::load(const QString &pluginPath) { + QLibrary lib(pluginPath); + + if (!lib.load()) { + + QuasarAppUtils::Params::log("Fail to load game module. Message: " + lib.errorString(), + QuasarAppUtils::Error); + + return nullptr; + } + + instance func = (instance)lib.resolve("instance"); + + if (!func) { + QuasarAppUtils::Params::log("Fail to load game module." + " Message: Failed to find a instance function in the %0 module", + QuasarAppUtils::Error); + + lib.unload(); + return nullptr; + } + + return func(); +} diff --git a/src/Core/private/pluginloader.h b/src/Core/private/pluginloader.h new file mode 100644 index 0000000..674d5d9 --- /dev/null +++ b/src/Core/private/pluginloader.h @@ -0,0 +1,25 @@ +#ifndef PLUGINLOADER_H +#define PLUGINLOADER_H + +#include + + +class IWorld; + +/** + * @brief The PluginLoader class This class load shared objects like a plugins. + */ +class PluginLoader { +public: + PluginLoader(); + + /** + * @brief load This method load a plugin game module. + * @param pluginPath Path to so or dll plugin file. + * @return Snake WorldInstance; + * @note The plugin shiold be implement instance function and if you youse Windows systems marked as a DLL_EXPORT symbol. + */ + static IWorld* load(const QString& pluginPath); +}; + +#endif // PLUGINLOADER_H diff --git a/src/Core/private/settings.h b/src/Core/private/settings.h index afcdb3c..c8812d4 100644 --- a/src/Core/private/settings.h +++ b/src/Core/private/settings.h @@ -3,9 +3,7 @@ #include #define THEME "THEME_GUI" - #define THEME_DEFAULT 0 - using Settings = QuasarAppUtils::Settings; #endif // SNAKESETTINGS_H diff --git a/src/Core/res/icon.ico b/src/Core/res/icon.ico deleted file mode 100644 index 53635b1..0000000 Binary files a/src/Core/res/icon.ico and /dev/null differ diff --git a/src/Core/res/logo.png b/src/Core/res/logo.png deleted file mode 100644 index f7120fc..0000000 Binary files a/src/Core/res/logo.png and /dev/null differ diff --git a/src/Core/res/up.svg b/src/Core/res/up.svg deleted file mode 100644 index 25413c8..0000000 --- a/src/Core/res/up.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Empty/CMakeLists.txt b/src/Empty/CMakeLists.txt new file mode 100644 index 0000000..6639093 --- /dev/null +++ b/src/Empty/CMakeLists.txt @@ -0,0 +1,32 @@ +# +# Copyright (C) 2020-2021 QuasarApp. +# Distributed under the lgplv3 software license, see the accompanying +# Everyone is permitted to copy and distribute verbatim copies +# of this license document, but changing it is not allowed. +# + +cmake_minimum_required(VERSION 3.14) +set(CURRENT_PROJECT "Empty") + +add_definitions(-DSnakeProject_LIBRARY) + + +file(GLOB SOURCE_CPP + "*Empty/*.cpp" + "private/*.cpp" + "*.qrc" + "Empty/*.qrc" + "private/*.qrc" +) + +set(PUBLIC_INCUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") +set(PRIVATE_INCUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/private") + +add_library(${CURRENT_PROJECT} ${SOURCE_CPP} ${SOURCE_QRC}) + +target_link_libraries(${CURRENT_PROJECT} PUBLIC ${PROJECT_NAME}Core) + +target_include_directories(${CURRENT_PROJECT} PUBLIC ${PUBLIC_INCUDE_DIR}) +target_include_directories(${CURRENT_PROJECT} PRIVATE ${PRIVATE_INCUDE_DIR}) + +set(QML_IMPORT_PATH ${QML_IMPORT_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/src" CACHE STRING "" FORCE) diff --git a/src/Empty/Empty.qrc b/src/Empty/Empty.qrc new file mode 100644 index 0000000..72fb9f9 --- /dev/null +++ b/src/Empty/Empty.qrc @@ -0,0 +1,38 @@ + + + SnakeProjectModule/qmldir + SnakeProjectModule/SnakeProject.qml + SnakeProjectModule/GraphicItem.qml + SnakeProjectModule/ImageView.qml + SnakeProjectModule/MainMenu.qml + SnakeProjectModule/MainMenuButton.qml + SnakeProjectModule/Metrix.qml + SnakeProjectModule/PagePopUp.qml + SnakeProjectModule/PropertyView.qml + SnakeProjectModule/Scene.qml + SnakeProjectModule/SettingsView.qml + SnakeProjectModule/SnakeItem.qml + SnakeProject/IRender.qml + + + languages/de.qm + languages/en.qm + languages/es.qm + languages/fr.qm + languages/ja.qm + languages/pl.qm + languages/ru.qm + languages/tr.qm + languages/zh.qm + languages/uk.qm + + + res/up.svg + res/logo.png + res/icon.ico + + + res/meshes/cube.mesh + + + diff --git a/src/Core/private/box.cpp b/src/Empty/Empty/Empty.cpp similarity index 100% rename from src/Core/private/box.cpp rename to src/Empty/Empty/Empty.cpp diff --git a/src/Core/private/box.h b/src/Empty/Empty/Empty.h similarity index 100% rename from src/Core/private/box.h rename to src/Empty/Empty/Empty.h diff --git a/src/Empty/private/box.cpp b/src/Empty/private/box.cpp new file mode 100644 index 0000000..b4df65c --- /dev/null +++ b/src/Empty/private/box.cpp @@ -0,0 +1,13 @@ +#include "box.h" + +#include + +Box::Box(double x, double y): + ItemWorld (x, y) { + + this->setSize(10, 10); + setMash("qrc:/mesh/res/meshes/cube.mesh"); + + setColor(QColor(100, 100, 100).name()); +} + diff --git a/src/Empty/private/box.h b/src/Empty/private/box.h new file mode 100644 index 0000000..7fd71a4 --- /dev/null +++ b/src/Empty/private/box.h @@ -0,0 +1,13 @@ +#ifndef BOX_H +#define BOX_H + +#include "itemworld.h" + +class Box: public ItemWorld +{ +public: + Box(double x, double y); + +}; + +#endif // BOX_H diff --git a/src/Core/private/snake.cpp b/src/Empty/private/snake.cpp similarity index 100% rename from src/Core/private/snake.cpp rename to src/Empty/private/snake.cpp diff --git a/src/Core/private/snake.h b/src/Empty/private/snake.h similarity index 100% rename from src/Core/private/snake.h rename to src/Empty/private/snake.h diff --git a/src/Core/private/world.cpp b/src/Empty/private/world.cpp similarity index 100% rename from src/Core/private/world.cpp rename to src/Empty/private/world.cpp diff --git a/src/Core/private/world.h b/src/Empty/private/world.h similarity index 100% rename from src/Core/private/world.h rename to src/Empty/private/world.h diff --git a/src/Core/res/meshes/cube.mesh b/src/Empty/res/meshes/cube.mesh similarity index 100% rename from src/Core/res/meshes/cube.mesh rename to src/Empty/res/meshes/cube.mesh