From 85baeb6eedf8a878ab4102885a347bd0ada2878d Mon Sep 17 00:00:00 2001 From: EndrII Date: Sun, 6 Jun 2021 15:53:49 +0300 Subject: [PATCH] engine refactoring to plugins system --- CMakeLists.txt | 2 +- src/ClientLib/SnakeProject/diff.h | 23 ----- src/ClientLib/SnakeProject/snakeutils.cpp | 3 - src/ClientLib/SnakeProject/snakeutils.h | 20 ----- src/{ClientLib => Core}/CMakeLists.txt | 6 +- src/{ClientLib => Core}/SnakeProject.qrc | 0 .../SnakeProject/clientapp.cpp | 7 +- .../SnakeProject/clientapp.h | 9 +- src/{ClientLib => Core}/SnakeProject/global.h | 0 src/Core/SnakeProject/isnake.cpp | 6 ++ src/Core/SnakeProject/isnake.h | 14 +++ src/Core/SnakeProject/iworld.cpp | 28 ++++++ src/Core/SnakeProject/iworld.h | 80 ++++++++++++++++++ .../SnakeProject/qtquickcontrols2.conf | 0 .../SnakeProjectModule/GraphicItem.qml | 0 .../SnakeProjectModule/ImageView.qml | 0 .../SnakeProjectModule/MainMenu.qml | 0 .../SnakeProjectModule/MainMenuButton.qml | 0 .../SnakeProjectModule/Metrix.qml | 0 .../SnakeProjectModule/PagePopUp.qml | 0 .../SnakeProjectModule/PropertyView.qml | 0 .../SnakeProjectModule/Scene.qml | 0 .../SnakeProjectModule/SettingsView.qml | 0 .../SnakeProjectModule/SnakeItem.qml | 0 .../SnakeProjectModule/SnakeProject.qml | 0 .../SnakeProjectModule/qmldir | 0 src/{ClientLib => Core}/languages/de.ts | 0 src/{ClientLib => Core}/languages/en.ts | 0 src/{ClientLib => Core}/languages/es.ts | 0 src/{ClientLib => Core}/languages/fr.ts | 0 src/{ClientLib => Core}/languages/ja.ts | 0 src/{ClientLib => Core}/languages/pl.ts | 0 src/{ClientLib => Core}/languages/ru.ts | 0 src/{ClientLib => Core}/languages/tr.ts | 0 src/{ClientLib => Core}/languages/uk.ts | 0 src/{ClientLib => Core}/languages/zh.ts | 0 .../private}/asyncimageresponse.cpp | 0 .../private}/asyncimageresponse.h | 0 .../private}/background.cpp | 0 .../private}/background.h | 0 .../private}/backgrounditem.cpp | 0 .../private}/backgrounditem.h | 0 .../private}/baseclass.cpp | 0 .../SnakeProject => Core/private}/baseclass.h | 0 .../SnakeProject => Core/private}/box.cpp | 0 .../SnakeProject => Core/private}/box.h | 0 .../private}/controller.cpp | 0 .../private}/controller.h | 0 .../SnakeProject => Core/private}/diff.cpp | 6 +- src/Core/private/diff.h | 26 ++++++ src/Core/private/engine.cpp | 66 +++++++++++++++ src/Core/private/engine.h | 43 ++++++++++ .../private}/guiobject.cpp | 0 .../SnakeProject => Core/private}/guiobject.h | 0 .../private}/guiobjectfactory.cpp | 0 .../private}/guiobjectfactory.h | 0 .../SnakeProject => Core/private}/head.cpp | 0 .../SnakeProject => Core/private}/head.h | 0 .../private}/imageprovider.cpp | 0 .../private}/imageprovider.h | 0 .../private}/itemworld.cpp | 0 .../SnakeProject => Core/private}/itemworld.h | 0 .../SnakeProject => Core/private}/lvls.cpp | 0 .../SnakeProject => Core/private}/lvls.h | 0 .../private}/mainmenumodel.cpp | 0 .../private}/mainmenumodel.h | 2 +- .../private}/settings.cpp | 0 .../SnakeProject => Core/private}/settings.h | 0 .../private}/settingsviewmodel.cpp | 0 .../private}/settingsviewmodel.h | 2 +- .../SnakeProject => Core/private}/snake.cpp | 0 .../SnakeProject => Core/private}/snake.h | 0 .../SnakeProject => Core/private}/world.cpp | 0 .../SnakeProject => Core/private}/world.h | 0 src/{ClientLib => Core}/res/icon.ico | Bin src/{ClientLib => Core}/res/logo.png | Bin src/{ClientLib => Core}/res/meshes/cube.mesh | Bin src/{ClientLib => Core}/res/up.svg | 0 78 files changed, 283 insertions(+), 60 deletions(-) delete mode 100644 src/ClientLib/SnakeProject/diff.h delete mode 100644 src/ClientLib/SnakeProject/snakeutils.cpp delete mode 100644 src/ClientLib/SnakeProject/snakeutils.h rename src/{ClientLib => Core}/CMakeLists.txt (91%) rename src/{ClientLib => Core}/SnakeProject.qrc (100%) rename src/{ClientLib => Core}/SnakeProject/clientapp.cpp (92%) rename src/{ClientLib => Core}/SnakeProject/clientapp.h (79%) rename src/{ClientLib => Core}/SnakeProject/global.h (100%) create mode 100644 src/Core/SnakeProject/isnake.cpp create mode 100644 src/Core/SnakeProject/isnake.h create mode 100644 src/Core/SnakeProject/iworld.cpp create mode 100644 src/Core/SnakeProject/iworld.h rename src/{ClientLib => Core}/SnakeProject/qtquickcontrols2.conf (100%) rename src/{ClientLib => Core}/SnakeProjectModule/GraphicItem.qml (100%) rename src/{ClientLib => Core}/SnakeProjectModule/ImageView.qml (100%) rename src/{ClientLib => Core}/SnakeProjectModule/MainMenu.qml (100%) rename src/{ClientLib => Core}/SnakeProjectModule/MainMenuButton.qml (100%) rename src/{ClientLib => Core}/SnakeProjectModule/Metrix.qml (100%) rename src/{ClientLib => Core}/SnakeProjectModule/PagePopUp.qml (100%) rename src/{ClientLib => Core}/SnakeProjectModule/PropertyView.qml (100%) rename src/{ClientLib => Core}/SnakeProjectModule/Scene.qml (100%) rename src/{ClientLib => Core}/SnakeProjectModule/SettingsView.qml (100%) rename src/{ClientLib => Core}/SnakeProjectModule/SnakeItem.qml (100%) rename src/{ClientLib => Core}/SnakeProjectModule/SnakeProject.qml (100%) rename src/{ClientLib => Core}/SnakeProjectModule/qmldir (100%) rename src/{ClientLib => Core}/languages/de.ts (100%) rename src/{ClientLib => Core}/languages/en.ts (100%) rename src/{ClientLib => Core}/languages/es.ts (100%) rename src/{ClientLib => Core}/languages/fr.ts (100%) rename src/{ClientLib => Core}/languages/ja.ts (100%) rename src/{ClientLib => Core}/languages/pl.ts (100%) rename src/{ClientLib => Core}/languages/ru.ts (100%) rename src/{ClientLib => Core}/languages/tr.ts (100%) rename src/{ClientLib => Core}/languages/uk.ts (100%) rename src/{ClientLib => Core}/languages/zh.ts (100%) rename src/{ClientLib/SnakeProject => Core/private}/asyncimageresponse.cpp (100%) rename src/{ClientLib/SnakeProject => Core/private}/asyncimageresponse.h (100%) rename src/{ClientLib/SnakeProject => Core/private}/background.cpp (100%) rename src/{ClientLib/SnakeProject => Core/private}/background.h (100%) rename src/{ClientLib/SnakeProject => Core/private}/backgrounditem.cpp (100%) rename src/{ClientLib/SnakeProject => Core/private}/backgrounditem.h (100%) rename src/{ClientLib/SnakeProject => Core/private}/baseclass.cpp (100%) rename src/{ClientLib/SnakeProject => Core/private}/baseclass.h (100%) rename src/{ClientLib/SnakeProject => Core/private}/box.cpp (100%) rename src/{ClientLib/SnakeProject => Core/private}/box.h (100%) rename src/{ClientLib/SnakeProject => Core/private}/controller.cpp (100%) rename src/{ClientLib/SnakeProject => Core/private}/controller.h (100%) rename src/{ClientLib/SnakeProject => Core/private}/diff.cpp (54%) create mode 100644 src/Core/private/diff.h create mode 100644 src/Core/private/engine.cpp create mode 100644 src/Core/private/engine.h rename src/{ClientLib/SnakeProject => Core/private}/guiobject.cpp (100%) rename src/{ClientLib/SnakeProject => Core/private}/guiobject.h (100%) rename src/{ClientLib/SnakeProject => Core/private}/guiobjectfactory.cpp (100%) rename src/{ClientLib/SnakeProject => Core/private}/guiobjectfactory.h (100%) rename src/{ClientLib/SnakeProject => Core/private}/head.cpp (100%) rename src/{ClientLib/SnakeProject => Core/private}/head.h (100%) rename src/{ClientLib/SnakeProject => Core/private}/imageprovider.cpp (100%) rename src/{ClientLib/SnakeProject => Core/private}/imageprovider.h (100%) rename src/{ClientLib/SnakeProject => Core/private}/itemworld.cpp (100%) rename src/{ClientLib/SnakeProject => Core/private}/itemworld.h (100%) rename src/{ClientLib/SnakeProject => Core/private}/lvls.cpp (100%) rename src/{ClientLib/SnakeProject => Core/private}/lvls.h (100%) rename src/{ClientLib/SnakeProject => Core/private}/mainmenumodel.cpp (100%) rename src/{ClientLib/SnakeProject => Core/private}/mainmenumodel.h (94%) rename src/{ClientLib/SnakeProject => Core/private}/settings.cpp (100%) rename src/{ClientLib/SnakeProject => Core/private}/settings.h (100%) rename src/{ClientLib/SnakeProject => Core/private}/settingsviewmodel.cpp (100%) rename src/{ClientLib/SnakeProject => Core/private}/settingsviewmodel.h (94%) rename src/{ClientLib/SnakeProject => Core/private}/snake.cpp (100%) rename src/{ClientLib/SnakeProject => Core/private}/snake.h (100%) rename src/{ClientLib/SnakeProject => Core/private}/world.cpp (100%) rename src/{ClientLib/SnakeProject => Core/private}/world.h (100%) rename src/{ClientLib => Core}/res/icon.ico (100%) rename src/{ClientLib => Core}/res/logo.png (100%) rename src/{ClientLib => Core}/res/meshes/cube.mesh (100%) rename src/{ClientLib => Core}/res/up.svg (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2eab321..bc99485 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,7 +62,7 @@ endif() add_subdirectory(submodules/QuasarAppLib) add_subdirectory(submodules/SimpleQmlNotify) -add_subdirectory(src/ClientLib) +add_subdirectory(src/Core) add_subdirectory(src/Client) diff --git a/src/ClientLib/SnakeProject/diff.h b/src/ClientLib/SnakeProject/diff.h deleted file mode 100644 index 7733e7b..0000000 --- a/src/ClientLib/SnakeProject/diff.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef DIFF_H -#define DIFF_H - -#include - -class Diff -{ - Q_GADGET -private: - QList removeIds; - QList addedIds; -public: - explicit Diff(); - - Q_INVOKABLE QList getRemoveIds() const; - void setRemoveIds(const QList &value); - Q_INVOKABLE QList getAddedIds() const; - void setAddedIds(const QList &value); -}; - -Q_DECLARE_METATYPE(Diff) - -#endif // DIFF_H diff --git a/src/ClientLib/SnakeProject/snakeutils.cpp b/src/ClientLib/SnakeProject/snakeutils.cpp deleted file mode 100644 index 3570290..0000000 --- a/src/ClientLib/SnakeProject/snakeutils.cpp +++ /dev/null @@ -1,3 +0,0 @@ -#include "snakeutils.h" - - diff --git a/src/ClientLib/SnakeProject/snakeutils.h b/src/ClientLib/SnakeProject/snakeutils.h deleted file mode 100644 index aa44f88..0000000 --- a/src/ClientLib/SnakeProject/snakeutils.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef SNAKEUTILS_H -#define SNAKEUTILS_H - -#include "SnakeProject/global.h" -#include -#include -#include - -/** - * @brief WorldRules - * this map conteins: - * 1. list of generated objects and they count. - * 2. long of world (Long), - * 3. spead of world (Spead), - * !!!Note: all object show on map alltime. - */ -typedef QMap WorldRules; - - -#endif // SNAKEUTILS_Hм. diff --git a/src/ClientLib/CMakeLists.txt b/src/Core/CMakeLists.txt similarity index 91% rename from src/ClientLib/CMakeLists.txt rename to src/Core/CMakeLists.txt index d83eb3c..732ed3c 100644 --- a/src/ClientLib/CMakeLists.txt +++ b/src/Core/CMakeLists.txt @@ -13,16 +13,16 @@ add_definitions(-DSnakeProject_LIBRARY) file(GLOB SOURCE_CPP "*SnakeProject/*.cpp" - "SnakeProject/private/*.cpp" + "private/*.cpp" "*.qrc" "SnakeProject/*.qrc" - "SnakeProject/private/*.qrc" + "private/*.qrc" ) set(PUBLIC_INCUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") set(PRIVATE_INCUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/private") -find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Quick QuickControls2 Concurrent REQUIRED) +find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Quick Quick3D Concurrent REQUIRED) add_library(${CURRENT_PROJECT} ${SOURCE_CPP} ${SOURCE_QRC}) diff --git a/src/ClientLib/SnakeProject.qrc b/src/Core/SnakeProject.qrc similarity index 100% rename from src/ClientLib/SnakeProject.qrc rename to src/Core/SnakeProject.qrc diff --git a/src/ClientLib/SnakeProject/clientapp.cpp b/src/Core/SnakeProject/clientapp.cpp similarity index 92% rename from src/ClientLib/SnakeProject/clientapp.cpp rename to src/Core/SnakeProject/clientapp.cpp index 56d4f97..602b668 100644 --- a/src/ClientLib/SnakeProject/clientapp.cpp +++ b/src/Core/SnakeProject/clientapp.cpp @@ -1,10 +1,11 @@ #include "clientapp.h" #include "imageprovider.h" -#include "SnakeProject/mainmenumodel.h" +#include "mainmenumodel.h" #include #include #include +#include #include @@ -19,9 +20,11 @@ QByteArray ClientApp::initTheme() { } ClientApp::ClientApp() { + contr = new Controller(); } ClientApp::~ClientApp() { + delete contr; } void ClientApp::initLang() { @@ -54,7 +57,7 @@ bool ClientApp::init(QQmlApplicationEngine *engine) { engine->addImageProvider(QLatin1String("userItems"), new ImageProvider()); - root->setContextProperty("contr", &contr); + root->setContextProperty("contr", contr); initSnakeProjectResources(); initLang(); diff --git a/src/ClientLib/SnakeProject/clientapp.h b/src/Core/SnakeProject/clientapp.h similarity index 79% rename from src/ClientLib/SnakeProject/clientapp.h rename to src/Core/SnakeProject/clientapp.h index ec1e9cf..978fa0f 100644 --- a/src/ClientLib/SnakeProject/clientapp.h +++ b/src/Core/SnakeProject/clientapp.h @@ -1,8 +1,11 @@ #ifndef CLIENTAPP_H #define CLIENTAPP_H -#include "controller.h" -#include "diff.h" +#include +#include "global.h" + +class Controller; + inline void initSnakeProjectResources() { Q_INIT_RESOURCE(SnakeProject); } @@ -11,7 +14,7 @@ class QQmlApplicationEngine; class SNAKEPROJECT_EXPORT ClientApp { private: - Controller contr; + Controller *contr = nullptr; QByteArray initTheme(); diff --git a/src/ClientLib/SnakeProject/global.h b/src/Core/SnakeProject/global.h similarity index 100% rename from src/ClientLib/SnakeProject/global.h rename to src/Core/SnakeProject/global.h diff --git a/src/Core/SnakeProject/isnake.cpp b/src/Core/SnakeProject/isnake.cpp new file mode 100644 index 0000000..6edcd22 --- /dev/null +++ b/src/Core/SnakeProject/isnake.cpp @@ -0,0 +1,6 @@ +#include "isnake.h" + +ISnake::ISnake() +{ + +} diff --git a/src/Core/SnakeProject/isnake.h b/src/Core/SnakeProject/isnake.h new file mode 100644 index 0000000..2cbcc76 --- /dev/null +++ b/src/Core/SnakeProject/isnake.h @@ -0,0 +1,14 @@ +#ifndef ISNAKE_H +#define ISNAKE_H + +/** + * @brief The ISnake class This interface used for impementation player object on a World. + * + */ +class ISnake +{ +public: + ISnake(); +}; + +#endif // ISNAKE_H diff --git a/src/Core/SnakeProject/iworld.cpp b/src/Core/SnakeProject/iworld.cpp new file mode 100644 index 0000000..905176a --- /dev/null +++ b/src/Core/SnakeProject/iworld.cpp @@ -0,0 +1,28 @@ +#include "iworld.h" +#include "itemworld.h" + +IWorld::IWorld() { + +} + +IWorld::~IWorld() { + deinit(); +} + +bool IWorld::init() { + +} + +void IWorld::deinit() { + delete _snake; + for (const auto& item : qAsConst(items)) { + delete item; + } + + items.clear(); + + spead = 0; + currentLong = 0; + _hdrMap = ""; + delete _worldRules; +} diff --git a/src/Core/SnakeProject/iworld.h b/src/Core/SnakeProject/iworld.h new file mode 100644 index 0000000..efd8363 --- /dev/null +++ b/src/Core/SnakeProject/iworld.h @@ -0,0 +1,80 @@ +#ifndef IWORLD_H +#define IWORLD_H + +#include "isnake.h" + +#include +#include + +class ItemWorld; + +/** + * @brief WorldRules + * this map conteins: + * 1. list of generated objects and they count. + * 2. long of world (Long), + * 3. spead of world (Spead), + * !!!Note: all object show on map alltime. + */ + +/** + * @brief WorldObjects This is map list of the avalable objects and its count on a lvl-long point. + */ +typedef QMap WorldObjects; + +/** + * @brief WorldRule This is list of the lvl-long points and its rules. For get more information see the WorldOBjects typedef. + */ +typedef QMap WorldRule; + +/** + * @brief The IWorld class use this interface for implementation your own game levels + */ +class IWorld +{ +public: + IWorld(); + virtual ~IWorld(); + + /** + * @brief initPlayer The implementation of This interface must be return playerObject. + * @return raw pointer to the player object. + * @note The Palyer object will be deleted when wold distroed. + * So do not delete your created player pbject yuorself. + */ + virtual ISnake* initPlayer() const = 0; + + /** + * @brief initWorldRules The implementation of this interface must be retun initialized list of the world rules. + * For more information see the WorldRules map. + * @return a raw pointer to world a rules map. + * @note The Palyer object will be deleted when wold distroed. + * So do not delete your created player pbject yuorself. + */ + virtual WorldRule* initWorldRules() const = 0; + + /** + * @brief initHdrBackGround The implementation of this method must be return valid path to the hdr image map. + * The hdr image map it is background jpeg image. + * @return path to hfr map. + */ + virtual QString initHdrBackGround() const = 0; + +private: + + bool init(); + + void deinit(); + + ISnake * _snake; + QMap items; + + int endLong; + float spead = 0, d_spead = 0, currentLong = 0; + QString _hdrMap; + WorldRule *_worldRules = nullptr; + + friend class Engine; +}; + +#endif // IWORLD_H diff --git a/src/ClientLib/SnakeProject/qtquickcontrols2.conf b/src/Core/SnakeProject/qtquickcontrols2.conf similarity index 100% rename from src/ClientLib/SnakeProject/qtquickcontrols2.conf rename to src/Core/SnakeProject/qtquickcontrols2.conf diff --git a/src/ClientLib/SnakeProjectModule/GraphicItem.qml b/src/Core/SnakeProjectModule/GraphicItem.qml similarity index 100% rename from src/ClientLib/SnakeProjectModule/GraphicItem.qml rename to src/Core/SnakeProjectModule/GraphicItem.qml diff --git a/src/ClientLib/SnakeProjectModule/ImageView.qml b/src/Core/SnakeProjectModule/ImageView.qml similarity index 100% rename from src/ClientLib/SnakeProjectModule/ImageView.qml rename to src/Core/SnakeProjectModule/ImageView.qml diff --git a/src/ClientLib/SnakeProjectModule/MainMenu.qml b/src/Core/SnakeProjectModule/MainMenu.qml similarity index 100% rename from src/ClientLib/SnakeProjectModule/MainMenu.qml rename to src/Core/SnakeProjectModule/MainMenu.qml diff --git a/src/ClientLib/SnakeProjectModule/MainMenuButton.qml b/src/Core/SnakeProjectModule/MainMenuButton.qml similarity index 100% rename from src/ClientLib/SnakeProjectModule/MainMenuButton.qml rename to src/Core/SnakeProjectModule/MainMenuButton.qml diff --git a/src/ClientLib/SnakeProjectModule/Metrix.qml b/src/Core/SnakeProjectModule/Metrix.qml similarity index 100% rename from src/ClientLib/SnakeProjectModule/Metrix.qml rename to src/Core/SnakeProjectModule/Metrix.qml diff --git a/src/ClientLib/SnakeProjectModule/PagePopUp.qml b/src/Core/SnakeProjectModule/PagePopUp.qml similarity index 100% rename from src/ClientLib/SnakeProjectModule/PagePopUp.qml rename to src/Core/SnakeProjectModule/PagePopUp.qml diff --git a/src/ClientLib/SnakeProjectModule/PropertyView.qml b/src/Core/SnakeProjectModule/PropertyView.qml similarity index 100% rename from src/ClientLib/SnakeProjectModule/PropertyView.qml rename to src/Core/SnakeProjectModule/PropertyView.qml diff --git a/src/ClientLib/SnakeProjectModule/Scene.qml b/src/Core/SnakeProjectModule/Scene.qml similarity index 100% rename from src/ClientLib/SnakeProjectModule/Scene.qml rename to src/Core/SnakeProjectModule/Scene.qml diff --git a/src/ClientLib/SnakeProjectModule/SettingsView.qml b/src/Core/SnakeProjectModule/SettingsView.qml similarity index 100% rename from src/ClientLib/SnakeProjectModule/SettingsView.qml rename to src/Core/SnakeProjectModule/SettingsView.qml diff --git a/src/ClientLib/SnakeProjectModule/SnakeItem.qml b/src/Core/SnakeProjectModule/SnakeItem.qml similarity index 100% rename from src/ClientLib/SnakeProjectModule/SnakeItem.qml rename to src/Core/SnakeProjectModule/SnakeItem.qml diff --git a/src/ClientLib/SnakeProjectModule/SnakeProject.qml b/src/Core/SnakeProjectModule/SnakeProject.qml similarity index 100% rename from src/ClientLib/SnakeProjectModule/SnakeProject.qml rename to src/Core/SnakeProjectModule/SnakeProject.qml diff --git a/src/ClientLib/SnakeProjectModule/qmldir b/src/Core/SnakeProjectModule/qmldir similarity index 100% rename from src/ClientLib/SnakeProjectModule/qmldir rename to src/Core/SnakeProjectModule/qmldir diff --git a/src/ClientLib/languages/de.ts b/src/Core/languages/de.ts similarity index 100% rename from src/ClientLib/languages/de.ts rename to src/Core/languages/de.ts diff --git a/src/ClientLib/languages/en.ts b/src/Core/languages/en.ts similarity index 100% rename from src/ClientLib/languages/en.ts rename to src/Core/languages/en.ts diff --git a/src/ClientLib/languages/es.ts b/src/Core/languages/es.ts similarity index 100% rename from src/ClientLib/languages/es.ts rename to src/Core/languages/es.ts diff --git a/src/ClientLib/languages/fr.ts b/src/Core/languages/fr.ts similarity index 100% rename from src/ClientLib/languages/fr.ts rename to src/Core/languages/fr.ts diff --git a/src/ClientLib/languages/ja.ts b/src/Core/languages/ja.ts similarity index 100% rename from src/ClientLib/languages/ja.ts rename to src/Core/languages/ja.ts diff --git a/src/ClientLib/languages/pl.ts b/src/Core/languages/pl.ts similarity index 100% rename from src/ClientLib/languages/pl.ts rename to src/Core/languages/pl.ts diff --git a/src/ClientLib/languages/ru.ts b/src/Core/languages/ru.ts similarity index 100% rename from src/ClientLib/languages/ru.ts rename to src/Core/languages/ru.ts diff --git a/src/ClientLib/languages/tr.ts b/src/Core/languages/tr.ts similarity index 100% rename from src/ClientLib/languages/tr.ts rename to src/Core/languages/tr.ts diff --git a/src/ClientLib/languages/uk.ts b/src/Core/languages/uk.ts similarity index 100% rename from src/ClientLib/languages/uk.ts rename to src/Core/languages/uk.ts diff --git a/src/ClientLib/languages/zh.ts b/src/Core/languages/zh.ts similarity index 100% rename from src/ClientLib/languages/zh.ts rename to src/Core/languages/zh.ts diff --git a/src/ClientLib/SnakeProject/asyncimageresponse.cpp b/src/Core/private/asyncimageresponse.cpp similarity index 100% rename from src/ClientLib/SnakeProject/asyncimageresponse.cpp rename to src/Core/private/asyncimageresponse.cpp diff --git a/src/ClientLib/SnakeProject/asyncimageresponse.h b/src/Core/private/asyncimageresponse.h similarity index 100% rename from src/ClientLib/SnakeProject/asyncimageresponse.h rename to src/Core/private/asyncimageresponse.h diff --git a/src/ClientLib/SnakeProject/background.cpp b/src/Core/private/background.cpp similarity index 100% rename from src/ClientLib/SnakeProject/background.cpp rename to src/Core/private/background.cpp diff --git a/src/ClientLib/SnakeProject/background.h b/src/Core/private/background.h similarity index 100% rename from src/ClientLib/SnakeProject/background.h rename to src/Core/private/background.h diff --git a/src/ClientLib/SnakeProject/backgrounditem.cpp b/src/Core/private/backgrounditem.cpp similarity index 100% rename from src/ClientLib/SnakeProject/backgrounditem.cpp rename to src/Core/private/backgrounditem.cpp diff --git a/src/ClientLib/SnakeProject/backgrounditem.h b/src/Core/private/backgrounditem.h similarity index 100% rename from src/ClientLib/SnakeProject/backgrounditem.h rename to src/Core/private/backgrounditem.h diff --git a/src/ClientLib/SnakeProject/baseclass.cpp b/src/Core/private/baseclass.cpp similarity index 100% rename from src/ClientLib/SnakeProject/baseclass.cpp rename to src/Core/private/baseclass.cpp diff --git a/src/ClientLib/SnakeProject/baseclass.h b/src/Core/private/baseclass.h similarity index 100% rename from src/ClientLib/SnakeProject/baseclass.h rename to src/Core/private/baseclass.h diff --git a/src/ClientLib/SnakeProject/box.cpp b/src/Core/private/box.cpp similarity index 100% rename from src/ClientLib/SnakeProject/box.cpp rename to src/Core/private/box.cpp diff --git a/src/ClientLib/SnakeProject/box.h b/src/Core/private/box.h similarity index 100% rename from src/ClientLib/SnakeProject/box.h rename to src/Core/private/box.h diff --git a/src/ClientLib/SnakeProject/controller.cpp b/src/Core/private/controller.cpp similarity index 100% rename from src/ClientLib/SnakeProject/controller.cpp rename to src/Core/private/controller.cpp diff --git a/src/ClientLib/SnakeProject/controller.h b/src/Core/private/controller.h similarity index 100% rename from src/ClientLib/SnakeProject/controller.h rename to src/Core/private/controller.h diff --git a/src/ClientLib/SnakeProject/diff.cpp b/src/Core/private/diff.cpp similarity index 54% rename from src/ClientLib/SnakeProject/diff.cpp rename to src/Core/private/diff.cpp index 489a756..ab53b9d 100644 --- a/src/ClientLib/SnakeProject/diff.cpp +++ b/src/Core/private/diff.cpp @@ -1,6 +1,6 @@ #include "diff.h" -QList Diff::getRemoveIds() const { +const QList& Diff::getRemoveIds() const { return removeIds; } @@ -8,11 +8,11 @@ void Diff::setRemoveIds(const QList &value) { removeIds = value; } -QList Diff::getAddedIds() const { +const QList& Diff::getAddedIds() const { return addedIds; } -void Diff::setAddedIds(const QList &value) { +void Diff::setAddedIds(const QList &value) { addedIds = value; } diff --git a/src/Core/private/diff.h b/src/Core/private/diff.h new file mode 100644 index 0000000..7bcd6b8 --- /dev/null +++ b/src/Core/private/diff.h @@ -0,0 +1,26 @@ +#ifndef DIFF_H +#define DIFF_H + +#include + +class GuiObject; + +/** + * @brief The Diff class contains list of the last changes on a game world. + */ +class Diff { +private: + QList removeIds; + QList addedIds; +public: + explicit Diff(); + + Q_INVOKABLE const QList &getRemoveIds() const; + void setRemoveIds(const QList &value); + Q_INVOKABLE const QList &getAddedIds() const; + void setAddedIds(const QList &value); +}; + +Q_DECLARE_METATYPE(Diff) + +#endif // DIFF_H diff --git a/src/Core/private/engine.cpp b/src/Core/private/engine.cpp new file mode 100644 index 0000000..e892e49 --- /dev/null +++ b/src/Core/private/engine.cpp @@ -0,0 +1,66 @@ +#include "engine.h" + +#include +#include + +Engine::Engine() { + +} + +QObject *Engine::scane() { + return _scane; +} + +void Engine::handleGameObjectsChanged(Diff diff) { + + for (const auto &item: diff.getAddedIds()) { + add(item); + } + + for (int id: diff.getRemoveIds()) { + remove(id); + } +} + +bool Engine::add(GuiObject *obj) { + + if (!_engine) + return false; + + if (!_scane) + return false; + + // Using QQmlComponent + QQmlComponent component(_engine, + QUrl::fromLocalFile("MyItem.qml"), + _scane); + QObject *object = component.create(); + + if (!object) + return false; + + if (!object->setProperty("model", QVariant::fromValue(obj))) + return false; + + _qmlObjects.insert(obj->guiId(), object); + + return true; +} + +bool Engine::remove(int id) { + if (!_qmlObjects.contains(id)) { + return false; + } + + _qmlObjects[id]->deleteLater(); + _qmlObjects.remove(id); + + return true; +} + +void Engine::setEngine(QQmlEngine *newEngine) { + if (_engine == newEngine) + return; + + _engine = newEngine; +} diff --git a/src/Core/private/engine.h b/src/Core/private/engine.h new file mode 100644 index 0000000..52c3bcb --- /dev/null +++ b/src/Core/private/engine.h @@ -0,0 +1,43 @@ +#ifndef ENGINE_H +#define ENGINE_H + +#include +#include +#include + +/** + * @brief The Engine class + */ +class Engine : public QObject { + + Q_OBJECT + +public: + Engine(); + + /** + * @brief scane This method return main scane of the game. + * @return pointer to main game scane. + */ + Q_INVOKABLE QObject* scane(); + void setEngine(QQmlEngine *newEngine); + +public slots: + + /** + * @brief handleGameObjectsChanged This slot invoked when games objects changed. + * @brief diff this is changes of the lvl. + */ + void handleGameObjectsChanged(Diff diff); + +private: + bool add(GuiObject* obj); + bool remove(int id); + + QObject *_scane = nullptr; + QQmlEngine *_engine = nullptr; + + QHash _qmlObjects; +}; + +#endif // ENGINE_H diff --git a/src/ClientLib/SnakeProject/guiobject.cpp b/src/Core/private/guiobject.cpp similarity index 100% rename from src/ClientLib/SnakeProject/guiobject.cpp rename to src/Core/private/guiobject.cpp diff --git a/src/ClientLib/SnakeProject/guiobject.h b/src/Core/private/guiobject.h similarity index 100% rename from src/ClientLib/SnakeProject/guiobject.h rename to src/Core/private/guiobject.h diff --git a/src/ClientLib/SnakeProject/guiobjectfactory.cpp b/src/Core/private/guiobjectfactory.cpp similarity index 100% rename from src/ClientLib/SnakeProject/guiobjectfactory.cpp rename to src/Core/private/guiobjectfactory.cpp diff --git a/src/ClientLib/SnakeProject/guiobjectfactory.h b/src/Core/private/guiobjectfactory.h similarity index 100% rename from src/ClientLib/SnakeProject/guiobjectfactory.h rename to src/Core/private/guiobjectfactory.h diff --git a/src/ClientLib/SnakeProject/head.cpp b/src/Core/private/head.cpp similarity index 100% rename from src/ClientLib/SnakeProject/head.cpp rename to src/Core/private/head.cpp diff --git a/src/ClientLib/SnakeProject/head.h b/src/Core/private/head.h similarity index 100% rename from src/ClientLib/SnakeProject/head.h rename to src/Core/private/head.h diff --git a/src/ClientLib/SnakeProject/imageprovider.cpp b/src/Core/private/imageprovider.cpp similarity index 100% rename from src/ClientLib/SnakeProject/imageprovider.cpp rename to src/Core/private/imageprovider.cpp diff --git a/src/ClientLib/SnakeProject/imageprovider.h b/src/Core/private/imageprovider.h similarity index 100% rename from src/ClientLib/SnakeProject/imageprovider.h rename to src/Core/private/imageprovider.h diff --git a/src/ClientLib/SnakeProject/itemworld.cpp b/src/Core/private/itemworld.cpp similarity index 100% rename from src/ClientLib/SnakeProject/itemworld.cpp rename to src/Core/private/itemworld.cpp diff --git a/src/ClientLib/SnakeProject/itemworld.h b/src/Core/private/itemworld.h similarity index 100% rename from src/ClientLib/SnakeProject/itemworld.h rename to src/Core/private/itemworld.h diff --git a/src/ClientLib/SnakeProject/lvls.cpp b/src/Core/private/lvls.cpp similarity index 100% rename from src/ClientLib/SnakeProject/lvls.cpp rename to src/Core/private/lvls.cpp diff --git a/src/ClientLib/SnakeProject/lvls.h b/src/Core/private/lvls.h similarity index 100% rename from src/ClientLib/SnakeProject/lvls.h rename to src/Core/private/lvls.h diff --git a/src/ClientLib/SnakeProject/mainmenumodel.cpp b/src/Core/private/mainmenumodel.cpp similarity index 100% rename from src/ClientLib/SnakeProject/mainmenumodel.cpp rename to src/Core/private/mainmenumodel.cpp diff --git a/src/ClientLib/SnakeProject/mainmenumodel.h b/src/Core/private/mainmenumodel.h similarity index 94% rename from src/ClientLib/SnakeProject/mainmenumodel.h rename to src/Core/private/mainmenumodel.h index 99b8cd6..9418bd3 100644 --- a/src/ClientLib/SnakeProject/mainmenumodel.h +++ b/src/Core/private/mainmenumodel.h @@ -2,7 +2,7 @@ #define NETWORKPROFILEMAINMODEL_H #include -#include "SnakeProject/settings.h" +#include "settings.h" class MainMenuModel : public QObject diff --git a/src/ClientLib/SnakeProject/settings.cpp b/src/Core/private/settings.cpp similarity index 100% rename from src/ClientLib/SnakeProject/settings.cpp rename to src/Core/private/settings.cpp diff --git a/src/ClientLib/SnakeProject/settings.h b/src/Core/private/settings.h similarity index 100% rename from src/ClientLib/SnakeProject/settings.h rename to src/Core/private/settings.h diff --git a/src/ClientLib/SnakeProject/settingsviewmodel.cpp b/src/Core/private/settingsviewmodel.cpp similarity index 100% rename from src/ClientLib/SnakeProject/settingsviewmodel.cpp rename to src/Core/private/settingsviewmodel.cpp diff --git a/src/ClientLib/SnakeProject/settingsviewmodel.h b/src/Core/private/settingsviewmodel.h similarity index 94% rename from src/ClientLib/SnakeProject/settingsviewmodel.h rename to src/Core/private/settingsviewmodel.h index 33dbbcf..25147bf 100644 --- a/src/ClientLib/SnakeProject/settingsviewmodel.h +++ b/src/Core/private/settingsviewmodel.h @@ -2,7 +2,7 @@ #define SETTINGSVIEWMODEL_H #include -#include "SnakeProject/settings.h" +#include "settings.h" class SettingsViewModel: public QObject diff --git a/src/ClientLib/SnakeProject/snake.cpp b/src/Core/private/snake.cpp similarity index 100% rename from src/ClientLib/SnakeProject/snake.cpp rename to src/Core/private/snake.cpp diff --git a/src/ClientLib/SnakeProject/snake.h b/src/Core/private/snake.h similarity index 100% rename from src/ClientLib/SnakeProject/snake.h rename to src/Core/private/snake.h diff --git a/src/ClientLib/SnakeProject/world.cpp b/src/Core/private/world.cpp similarity index 100% rename from src/ClientLib/SnakeProject/world.cpp rename to src/Core/private/world.cpp diff --git a/src/ClientLib/SnakeProject/world.h b/src/Core/private/world.h similarity index 100% rename from src/ClientLib/SnakeProject/world.h rename to src/Core/private/world.h diff --git a/src/ClientLib/res/icon.ico b/src/Core/res/icon.ico similarity index 100% rename from src/ClientLib/res/icon.ico rename to src/Core/res/icon.ico diff --git a/src/ClientLib/res/logo.png b/src/Core/res/logo.png similarity index 100% rename from src/ClientLib/res/logo.png rename to src/Core/res/logo.png diff --git a/src/ClientLib/res/meshes/cube.mesh b/src/Core/res/meshes/cube.mesh similarity index 100% rename from src/ClientLib/res/meshes/cube.mesh rename to src/Core/res/meshes/cube.mesh diff --git a/src/ClientLib/res/up.svg b/src/Core/res/up.svg similarity index 100% rename from src/ClientLib/res/up.svg rename to src/Core/res/up.svg