From 7a32ce13c4da5fbe545a3a7ee339097aa9e5ad54 Mon Sep 17 00:00:00 2001 From: EndrII Date: Sun, 13 Jun 2021 15:16:46 +0300 Subject: [PATCH] fix menu of levels --- src/Core/SnakeProject/clientapp.cpp | 2 + src/Core/SnakeProject/clientapp.h | 4 +- src/Core/SnakeProject/iworld.cpp | 28 ++++++++-- src/Core/SnakeProject/iworld.h | 11 ++++ src/Core/SnakeProjectModule/MainMenu.qml | 16 +++--- src/Core/SnakeProjectModule/SelectLvlView.qml | 52 +++++++++++++++---- src/Core/languages/de.ts | 11 ---- src/Core/languages/en.ts | 11 ---- src/Core/languages/es.ts | 11 ---- src/Core/languages/fr.ts | 11 ---- src/Core/languages/ja.ts | 11 ---- src/Core/languages/pl.ts | 11 ---- src/Core/languages/ru.ts | 11 ---- src/Core/languages/tr.ts | 11 ---- src/Core/languages/uk.ts | 11 ---- src/Core/languages/zh.ts | 11 ---- src/Empty/private/world.cpp | 2 +- submodules/ViewSolutions | 2 +- 18 files changed, 90 insertions(+), 137 deletions(-) diff --git a/src/Core/SnakeProject/clientapp.cpp b/src/Core/SnakeProject/clientapp.cpp index f2611fa..26b6f00 100644 --- a/src/Core/SnakeProject/clientapp.cpp +++ b/src/Core/SnakeProject/clientapp.cpp @@ -30,6 +30,8 @@ QByteArray ClientApp::initTheme() { ClientApp::ClientApp() { _engine = new Engine(); _menu = new MainMenuModel(); + + connect(_menu, &MainMenuModel::sigNewGame, this , &ClientApp::start); } ClientApp::~ClientApp() { diff --git a/src/Core/SnakeProject/clientapp.h b/src/Core/SnakeProject/clientapp.h index 864a7f3..e59c91d 100644 --- a/src/Core/SnakeProject/clientapp.h +++ b/src/Core/SnakeProject/clientapp.h @@ -28,9 +28,9 @@ struct WordlData { /** * @brief The ClientApp class This is main class of the Game engine. */ -class SNAKEPROJECT_EXPORT ClientApp +class SNAKEPROJECT_EXPORT ClientApp : public QObject { - + Q_OBJECT public: ClientApp(); virtual ~ClientApp(); diff --git a/src/Core/SnakeProject/iworld.cpp b/src/Core/SnakeProject/iworld.cpp index d51de55..dc7e515 100644 --- a/src/Core/SnakeProject/iworld.cpp +++ b/src/Core/SnakeProject/iworld.cpp @@ -46,6 +46,9 @@ const IWorldItem *IWorld::getItem(int id) const { bool IWorld::init() { + if (isInit()) + return true; + _worldRules = initWorldRules(); _hdrMap = initHdrBackGround(); _player = initPlayer(); @@ -54,9 +57,12 @@ bool IWorld::init() { setCameraReleativePosition(initCameraPosition()); - if (!_worldRules->size()) + if (!_worldRules->size()) { + deinit(); return false; + } + worldChanged(*_worldRules->begin()); return true; @@ -71,12 +77,24 @@ void IWorld::clearItems() { } void IWorld::deinit() { - delete _player; + if (_player) { + delete _player; + _player = nullptr; + } + + if (_worldRules) { + delete _worldRules; + _worldRules = nullptr; + } + + if (_userInterface) { + delete _userInterface; + _userInterface = nullptr; + } clearItems(); _hdrMap = ""; - delete _worldRules; } void IWorld::generateGround() { @@ -124,6 +142,10 @@ IControl *IWorld::userInterface() const { return _userInterface; } +bool IWorld::isInit() const { + return _userInterface && _player && _worldRules; +} + void IWorld::setCameraReleativePosition(const QVector3D &newCameraReleativePosition) { if (_cameraReleativePosition == newCameraReleativePosition) return; diff --git a/src/Core/SnakeProject/iworld.h b/src/Core/SnakeProject/iworld.h index 947ccab..2d393ce 100644 --- a/src/Core/SnakeProject/iworld.h +++ b/src/Core/SnakeProject/iworld.h @@ -154,6 +154,12 @@ public: */ IControl *userInterface() const; + /** + * @brief isInit This method return true if the object initialized correctly else false. + * @return true if the object initialized correctly else false. + */ + bool isInit() const; + signals: /** * @brief sigGameFinished This signal emit when game are finished @@ -185,6 +191,11 @@ protected: void setCameraReleativePosition(const QVector3D &newCameraReleativePosition); private: + /** + * @brief init This method initialize world object. + * @note If object alredy initalize then this method do nothing. + * @return + */ bool init(); void deinit(); diff --git a/src/Core/SnakeProjectModule/MainMenu.qml b/src/Core/SnakeProjectModule/MainMenu.qml index b6555ff..3eb29b1 100644 --- a/src/Core/SnakeProjectModule/MainMenu.qml +++ b/src/Core/SnakeProjectModule/MainMenu.qml @@ -36,7 +36,6 @@ Item { onClicked: { selectLvl.open() } - } MainMenuButton { @@ -47,7 +46,6 @@ Item { settingsPopUp.open(); } - } MainMenuButton { @@ -92,19 +90,19 @@ Item { source: SelectLvlView { id: view model: item1.model ? item1.model.availableLvlsModel: null + + onStart: { + if (!item1.model) + return; + + item1.model.newGame(view.selectedLvl) + } } - standardButtons: Dialog.Cancel | Dialog.Ok modal: false; width: 12 * metrix.controlPtMaterial height: 8 * metrix.controlPtMaterial; - onAccepted: { - if (!item1.model) - return; - - item1.model.newGame(view.selectedLvl) - } } } diff --git a/src/Core/SnakeProjectModule/SelectLvlView.qml b/src/Core/SnakeProjectModule/SelectLvlView.qml index bca8db2..c5943c0 100644 --- a/src/Core/SnakeProjectModule/SelectLvlView.qml +++ b/src/Core/SnakeProjectModule/SelectLvlView.qml @@ -1,24 +1,54 @@ import QtQuick 2.15 import ViewSolutionsModule 1.0 +import QtQuick.Controls 2.15 +import QtQuick.Controls.Material 2.15 +import QtQuick.Layouts 1.15 -ListView { +ColumnLayout { id: root + property alias model: list.model property string selectedLvl: "" - orientation: ListView.Horizontal - clip: true - delegate: ImageView { - property var data : modelData + signal start(var lvlName) - source: data.image - text: data.name + ListView { + id: list + Layout.fillHeight: true + Layout.fillWidth: true + orientation: ListView.Horizontal + clip: true - width: root.height * 1.5 - height: root.height * 0.9 + delegate: ImageView { + property var data : modelData + hoverColor: "#90f6ff" + selectedColor: "#90f6ff" - onClicked: { - selectedLvl = text + source: data.image + text: data.name + + width: list.height * 1.5 + height: list.height * 0.9 + selected: selectedLvl === data.name + + onClicked: { + selectedLvl = text + } } } + + Button { + + Layout.alignment: Layout.right + + text: qsTr("Start") + enabled: selectedLvl.length + + onClicked: { + root.start(selectedLvl) + } + + } } + + diff --git a/src/Core/languages/de.ts b/src/Core/languages/de.ts index 062827f..d747b8b 100644 --- a/src/Core/languages/de.ts +++ b/src/Core/languages/de.ts @@ -23,17 +23,6 @@ - - Scene - - lvl long: - - - - general long: - - - SettingsView diff --git a/src/Core/languages/en.ts b/src/Core/languages/en.ts index 062827f..d747b8b 100644 --- a/src/Core/languages/en.ts +++ b/src/Core/languages/en.ts @@ -23,17 +23,6 @@ - - Scene - - lvl long: - - - - general long: - - - SettingsView diff --git a/src/Core/languages/es.ts b/src/Core/languages/es.ts index 062827f..d747b8b 100644 --- a/src/Core/languages/es.ts +++ b/src/Core/languages/es.ts @@ -23,17 +23,6 @@ - - Scene - - lvl long: - - - - general long: - - - SettingsView diff --git a/src/Core/languages/fr.ts b/src/Core/languages/fr.ts index 062827f..d747b8b 100644 --- a/src/Core/languages/fr.ts +++ b/src/Core/languages/fr.ts @@ -23,17 +23,6 @@ - - Scene - - lvl long: - - - - general long: - - - SettingsView diff --git a/src/Core/languages/ja.ts b/src/Core/languages/ja.ts index 062827f..d747b8b 100644 --- a/src/Core/languages/ja.ts +++ b/src/Core/languages/ja.ts @@ -23,17 +23,6 @@ - - Scene - - lvl long: - - - - general long: - - - SettingsView diff --git a/src/Core/languages/pl.ts b/src/Core/languages/pl.ts index 062827f..d747b8b 100644 --- a/src/Core/languages/pl.ts +++ b/src/Core/languages/pl.ts @@ -23,17 +23,6 @@ - - Scene - - lvl long: - - - - general long: - - - SettingsView diff --git a/src/Core/languages/ru.ts b/src/Core/languages/ru.ts index 062827f..d747b8b 100644 --- a/src/Core/languages/ru.ts +++ b/src/Core/languages/ru.ts @@ -23,17 +23,6 @@ - - Scene - - lvl long: - - - - general long: - - - SettingsView diff --git a/src/Core/languages/tr.ts b/src/Core/languages/tr.ts index 062827f..d747b8b 100644 --- a/src/Core/languages/tr.ts +++ b/src/Core/languages/tr.ts @@ -23,17 +23,6 @@ - - Scene - - lvl long: - - - - general long: - - - SettingsView diff --git a/src/Core/languages/uk.ts b/src/Core/languages/uk.ts index 062827f..d747b8b 100644 --- a/src/Core/languages/uk.ts +++ b/src/Core/languages/uk.ts @@ -23,17 +23,6 @@ - - Scene - - lvl long: - - - - general long: - - - SettingsView diff --git a/src/Core/languages/zh.ts b/src/Core/languages/zh.ts index 062827f..d747b8b 100644 --- a/src/Core/languages/zh.ts +++ b/src/Core/languages/zh.ts @@ -23,17 +23,6 @@ - - Scene - - lvl long: - - - - general long: - - - SettingsView diff --git a/src/Empty/private/world.cpp b/src/Empty/private/world.cpp index 953751a..a282bdc 100644 --- a/src/Empty/private/world.cpp +++ b/src/Empty/private/world.cpp @@ -14,7 +14,7 @@ IPlayer *World::initPlayer() const { } WorldRule *World::initWorldRules() const { - return {}; + return new WorldRule{}; } QString World::initHdrBackGround() const { diff --git a/submodules/ViewSolutions b/submodules/ViewSolutions index 792627a..9a94f1f 160000 --- a/submodules/ViewSolutions +++ b/submodules/ViewSolutions @@ -1 +1 @@ -Subproject commit 792627a1dd1723882c33fef13bb6dfdb4330df48 +Subproject commit 9a94f1fd90b8c2a918242dd73315a0ad80b59b84