mirror of
https://github.com/QuasarApp/Snake.git
synced 2025-04-26 01:34:40 +00:00
added store view implementation
This commit is contained in:
parent
d5cd452ee2
commit
dd206439d6
@ -37,6 +37,17 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JungleLvl::Snake</name>
|
||||
<message>
|
||||
<source>JungleSnake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>JungleSnake Snake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JungleLvl::World</name>
|
||||
<message>
|
||||
@ -100,4 +111,15 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TestLvl::TestSnake</name>
|
||||
<message>
|
||||
<source>TestSnake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TestSnake Snake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
@ -37,6 +37,17 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JungleLvl::Snake</name>
|
||||
<message>
|
||||
<source>JungleSnake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>JungleSnake Snake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JungleLvl::World</name>
|
||||
<message>
|
||||
@ -100,4 +111,15 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TestLvl::TestSnake</name>
|
||||
<message>
|
||||
<source>TestSnake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TestSnake Snake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
@ -37,6 +37,17 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JungleLvl::Snake</name>
|
||||
<message>
|
||||
<source>JungleSnake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>JungleSnake Snake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JungleLvl::World</name>
|
||||
<message>
|
||||
@ -100,4 +111,15 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TestLvl::TestSnake</name>
|
||||
<message>
|
||||
<source>TestSnake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TestSnake Snake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
@ -37,6 +37,17 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JungleLvl::Snake</name>
|
||||
<message>
|
||||
<source>JungleSnake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>JungleSnake Snake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JungleLvl::World</name>
|
||||
<message>
|
||||
@ -100,4 +111,15 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TestLvl::TestSnake</name>
|
||||
<message>
|
||||
<source>TestSnake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TestSnake Snake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
@ -37,6 +37,17 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JungleLvl::Snake</name>
|
||||
<message>
|
||||
<source>JungleSnake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>JungleSnake Snake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JungleLvl::World</name>
|
||||
<message>
|
||||
@ -100,4 +111,15 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TestLvl::TestSnake</name>
|
||||
<message>
|
||||
<source>TestSnake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TestSnake Snake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
@ -37,6 +37,17 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JungleLvl::Snake</name>
|
||||
<message>
|
||||
<source>JungleSnake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>JungleSnake Snake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JungleLvl::World</name>
|
||||
<message>
|
||||
@ -100,4 +111,15 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TestLvl::TestSnake</name>
|
||||
<message>
|
||||
<source>TestSnake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TestSnake Snake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
@ -37,6 +37,17 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JungleLvl::Snake</name>
|
||||
<message>
|
||||
<source>JungleSnake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>JungleSnake Snake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JungleLvl::World</name>
|
||||
<message>
|
||||
@ -100,4 +111,15 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TestLvl::TestSnake</name>
|
||||
<message>
|
||||
<source>TestSnake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TestSnake Snake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
@ -37,6 +37,17 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JungleLvl::Snake</name>
|
||||
<message>
|
||||
<source>JungleSnake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>JungleSnake Snake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JungleLvl::World</name>
|
||||
<message>
|
||||
@ -100,4 +111,15 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TestLvl::TestSnake</name>
|
||||
<message>
|
||||
<source>TestSnake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TestSnake Snake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
@ -37,6 +37,17 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JungleLvl::Snake</name>
|
||||
<message>
|
||||
<source>JungleSnake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>JungleSnake Snake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JungleLvl::World</name>
|
||||
<message>
|
||||
@ -100,4 +111,15 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TestLvl::TestSnake</name>
|
||||
<message>
|
||||
<source>TestSnake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TestSnake Snake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
@ -37,6 +37,17 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JungleLvl::Snake</name>
|
||||
<message>
|
||||
<source>JungleSnake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>JungleSnake Snake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>JungleLvl::World</name>
|
||||
<message>
|
||||
@ -100,4 +111,15 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>TestLvl::TestSnake</name>
|
||||
<message>
|
||||
<source>TestSnake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TestSnake Snake</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
@ -25,5 +25,6 @@
|
||||
<file>CrawlModule/particles/Fire.qml</file>
|
||||
<file>CrawlModule/particles/Wint.qml</file>
|
||||
<file>CrawlModule/PreviewControl.qml</file>
|
||||
<file>CrawlModule/StoreView.qml</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
@ -67,14 +67,11 @@ ClientApp::~ClientApp() {
|
||||
_availableLvls.clear();
|
||||
}
|
||||
|
||||
void ClientApp::initStore(Store *store) {
|
||||
QMultiHash<int, const IItem *> storeItems;
|
||||
void ClientApp::initStore(QMultiHash<int, const IItem *> & result) {
|
||||
for (const auto &data : qAsConst(_availableLvls)) {
|
||||
if (data.model && data.model->world())
|
||||
storeItems.unite(data.model->world()->childItemsRecursive());
|
||||
result.unite(data.model->world()->childItemsRecursive());
|
||||
}
|
||||
|
||||
store->init(storeItems);
|
||||
}
|
||||
|
||||
void ClientApp::changeLevel(int lvl) {
|
||||
@ -133,9 +130,11 @@ bool ClientApp::init(QQmlApplicationEngine *engine) {
|
||||
if (engine->rootObjects().isEmpty())
|
||||
return false;
|
||||
|
||||
QMultiHash<int, const IItem *> availabelItems;
|
||||
initStore(availabelItems);
|
||||
_engine->initStore(availabelItems);
|
||||
|
||||
_engine->setLevel(getLastLevel());
|
||||
_engine->setQmlEngine(engine);
|
||||
initStore(_engine->store());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -69,7 +69,12 @@ private:
|
||||
QByteArray initTheme();
|
||||
ILevel *getLastLevel();
|
||||
|
||||
void initStore(Store* store);
|
||||
/**
|
||||
* @brief initStore This method push to @a result map all available store items.
|
||||
* @param result This is result value. Hash map of the available items.
|
||||
*/
|
||||
void initStore(QMultiHash<int, const IItem *> &result);
|
||||
|
||||
/**
|
||||
* @brief addLvl This method should be add level to game.
|
||||
* @param levelWordl This is world instance
|
||||
|
@ -34,6 +34,11 @@ ApplicationWindow {
|
||||
anchors.fill: parent;
|
||||
}
|
||||
|
||||
StoreView {
|
||||
model: (mainWindow.model)? mainWindow.model.storeView: null
|
||||
anchors.fill: parent;
|
||||
}
|
||||
|
||||
MainMenu {
|
||||
|
||||
model: (mainmenu)? mainmenu: null;
|
||||
|
65
src/Core/CrawlModule/StoreView.qml
Normal file
65
src/Core/CrawlModule/StoreView.qml
Normal file
@ -0,0 +1,65 @@
|
||||
import QtQuick
|
||||
import ViewSolutionsModule
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Controls.Material
|
||||
import QtQuick.Layouts
|
||||
|
||||
Page {
|
||||
id: store
|
||||
property var model: null;
|
||||
visible: model && model.visible
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
ListView {
|
||||
id: listView
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
model: store.model
|
||||
delegate: delegateRow
|
||||
|
||||
Component {
|
||||
id: delegateRow
|
||||
|
||||
RowLayout {
|
||||
width: listView.width
|
||||
height: 100
|
||||
Image {
|
||||
id: img
|
||||
fillMode: Image.PreserveAspectCrop
|
||||
source: itemImage
|
||||
Layout.fillHeight: true
|
||||
Layout.preferredWidth: height * 2
|
||||
}
|
||||
|
||||
Label {
|
||||
text: itemName
|
||||
Layout.fillHeight: true
|
||||
}
|
||||
|
||||
Label {
|
||||
text: itemDescription
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
}
|
||||
|
||||
CheckBox {
|
||||
id: buyStatus
|
||||
tristate: false
|
||||
checkState: (itemWasBuy)? Qt.Checked: Qt.Unchecked
|
||||
enabled: false
|
||||
}
|
||||
|
||||
Button {
|
||||
text: qsTr("Buy");
|
||||
visible: !itemWasBuy
|
||||
|
||||
onClicked: () => {
|
||||
if (store.model)
|
||||
store.model.buy(itemId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -24,6 +24,7 @@ namespace CRAWL {
|
||||
Engine::Engine(QObject *parent): QObject(parent) {
|
||||
_store = new Store();
|
||||
_storeView = new StoreViewModel;
|
||||
_currentUser = new User();
|
||||
|
||||
}
|
||||
|
||||
@ -36,14 +37,9 @@ QObject *Engine::scane() {
|
||||
return _scane;
|
||||
}
|
||||
|
||||
void Engine::setQmlEngine(QQmlEngine *newEngine) {
|
||||
if (_engine == newEngine)
|
||||
return;
|
||||
|
||||
_engine = newEngine;
|
||||
}
|
||||
|
||||
void Engine::setLevel(ILevel *world) {
|
||||
_storeView->setVisible(!world);
|
||||
|
||||
if (_currentLevel == world)
|
||||
return ;
|
||||
|
||||
|
@ -45,12 +45,6 @@ public:
|
||||
*/
|
||||
Q_INVOKABLE QObject* scane();
|
||||
|
||||
/**
|
||||
* @brief setQmlEngine This method sets qml engine
|
||||
* @param newEngine This is pointer to the qml engine.
|
||||
*/
|
||||
void setQmlEngine(QQmlEngine *newEngine);
|
||||
|
||||
/**
|
||||
* @brief setLevel This method set new world level for game.
|
||||
* @param world This is pointer to new world level.
|
||||
@ -157,7 +151,6 @@ private:
|
||||
void renderLoop();
|
||||
|
||||
QObject *_scane = nullptr;
|
||||
QQmlEngine *_engine = nullptr;
|
||||
ILevel* _currentLevel = nullptr;
|
||||
|
||||
quint64 _oldTimeRender = 0;
|
||||
|
@ -60,7 +60,7 @@ QHash<int, QByteArray> StoreViewModel::roleNames() const {
|
||||
return roles;
|
||||
}
|
||||
|
||||
void StoreViewModel::init(const Store * store, const User* user) {
|
||||
void StoreViewModel::init(Store *store, User *user) {
|
||||
setUser(user);
|
||||
|
||||
int diff = store->size() - _keys.size();
|
||||
@ -86,8 +86,25 @@ void StoreViewModel::init(const Store * store, const User* user) {
|
||||
}
|
||||
}
|
||||
|
||||
void StoreViewModel::setUser(const User *user) {
|
||||
void StoreViewModel::setUser(User *user) {
|
||||
_currentUser = user;
|
||||
emit dataChanged(index(0,0), index(rowCount() - 1, columnCount() - 1), {ItemWasBuy});
|
||||
}
|
||||
|
||||
bool StoreViewModel::visible() const {
|
||||
return _visible;
|
||||
}
|
||||
|
||||
void StoreViewModel::setVisible(bool newVisible) {
|
||||
if (_visible == newVisible)
|
||||
return;
|
||||
_visible = newVisible;
|
||||
emit visibleChanged();
|
||||
}
|
||||
|
||||
void StoreViewModel::buy(int item) {
|
||||
if (_store && _currentUser) {
|
||||
_store->buy(*_currentUser, item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -21,6 +21,11 @@ class User;
|
||||
class StoreViewModel: public QAbstractListModel
|
||||
{
|
||||
Q_OBJECT
|
||||
/**
|
||||
* @brief visible If you sets thsis proprtye to false then store view qml view will be hide.
|
||||
*/
|
||||
Q_PROPERTY(bool visible READ visible NOTIFY visibleChanged)
|
||||
|
||||
public:
|
||||
StoreViewModel();
|
||||
|
||||
@ -36,13 +41,35 @@ public:
|
||||
* @param user This is new pointer to current user.
|
||||
* @see StoreViewModel::setUser
|
||||
*/
|
||||
void init(const Store * store, const User* user);
|
||||
void init(Store * store, User* user);
|
||||
|
||||
/**
|
||||
* @brief setUser This method update user pointer
|
||||
* @param user This is new pointer to current user.
|
||||
*/
|
||||
void setUser(const User* user);
|
||||
void setUser(User* user);
|
||||
|
||||
/**
|
||||
* @brief visible This method return true if the store view is visible.
|
||||
* @return true if the store view is visible.
|
||||
*/
|
||||
bool visible() const;
|
||||
|
||||
/**
|
||||
* @brief setVisible This method chnge the visible state of the qml view of store.
|
||||
* @param newVisible This is new value of the qml-store visible
|
||||
*/
|
||||
void setVisible(bool newVisible);
|
||||
|
||||
/**
|
||||
* @brief buy This is qml method for receive signal from view about buying item.
|
||||
* @param item This is item id that user want to buy.
|
||||
*/
|
||||
Q_INVOKABLE void buy(int item);
|
||||
|
||||
signals:
|
||||
void visibleChanged();
|
||||
|
||||
private:
|
||||
|
||||
enum StoreRoles {
|
||||
@ -53,9 +80,10 @@ private:
|
||||
ItemWasBuy
|
||||
};
|
||||
|
||||
const Store *_store = nullptr;
|
||||
Store *_store = nullptr;
|
||||
QList<int> _keys;
|
||||
const User* _currentUser = nullptr;
|
||||
User* _currentUser = nullptr;
|
||||
bool _visible = false;
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -60,6 +60,7 @@ bool User::isUnlocked(int item) const {
|
||||
|
||||
void User::unclokItem(int item) {
|
||||
_unlockedItems.insert(item);
|
||||
emit itemUlocked({item});
|
||||
}
|
||||
|
||||
void User::droppItem(int item) {
|
||||
@ -68,6 +69,7 @@ void User::droppItem(int item) {
|
||||
|
||||
void User::setUnlockedItems(const QSet<int> &newUnlockedItems) {
|
||||
_unlockedItems = newUnlockedItems;
|
||||
emit itemUlocked(newUnlockedItems);
|
||||
}
|
||||
|
||||
int User::recalcTier() {
|
||||
|
@ -144,6 +144,12 @@ signals:
|
||||
void tierChanged();
|
||||
void xpChanged();
|
||||
|
||||
/**
|
||||
* @brief itemUlocked This signal emited when user unlocked item.
|
||||
* @param unclokedItems This is unlocked items set. Each items in the set is id of the unclocked item.
|
||||
*/
|
||||
void itemUlocked(const QSet<int> & unclokedItems);
|
||||
|
||||
protected:
|
||||
/**
|
||||
* @brief setUnlockedItems This method sets new set of uncloked items
|
||||
|
Loading…
x
Reference in New Issue
Block a user