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