mirror of
https://github.com/QuasarApp/Snake.git
synced 2025-04-28 18:54:40 +00:00
works store
This commit is contained in:
parent
dd206439d6
commit
ce75c0c5ee
@ -111,6 +111,13 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>StoreView</name>
|
||||||
|
<message>
|
||||||
|
<source>Buy</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TestLvl::TestSnake</name>
|
<name>TestLvl::TestSnake</name>
|
||||||
<message>
|
<message>
|
||||||
|
@ -111,6 +111,13 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>StoreView</name>
|
||||||
|
<message>
|
||||||
|
<source>Buy</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TestLvl::TestSnake</name>
|
<name>TestLvl::TestSnake</name>
|
||||||
<message>
|
<message>
|
||||||
|
@ -111,6 +111,13 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>StoreView</name>
|
||||||
|
<message>
|
||||||
|
<source>Buy</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TestLvl::TestSnake</name>
|
<name>TestLvl::TestSnake</name>
|
||||||
<message>
|
<message>
|
||||||
|
@ -111,6 +111,13 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>StoreView</name>
|
||||||
|
<message>
|
||||||
|
<source>Buy</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TestLvl::TestSnake</name>
|
<name>TestLvl::TestSnake</name>
|
||||||
<message>
|
<message>
|
||||||
|
@ -111,6 +111,13 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>StoreView</name>
|
||||||
|
<message>
|
||||||
|
<source>Buy</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TestLvl::TestSnake</name>
|
<name>TestLvl::TestSnake</name>
|
||||||
<message>
|
<message>
|
||||||
|
@ -111,6 +111,13 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>StoreView</name>
|
||||||
|
<message>
|
||||||
|
<source>Buy</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TestLvl::TestSnake</name>
|
<name>TestLvl::TestSnake</name>
|
||||||
<message>
|
<message>
|
||||||
|
@ -111,6 +111,13 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>StoreView</name>
|
||||||
|
<message>
|
||||||
|
<source>Buy</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TestLvl::TestSnake</name>
|
<name>TestLvl::TestSnake</name>
|
||||||
<message>
|
<message>
|
||||||
|
@ -111,6 +111,13 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>StoreView</name>
|
||||||
|
<message>
|
||||||
|
<source>Buy</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TestLvl::TestSnake</name>
|
<name>TestLvl::TestSnake</name>
|
||||||
<message>
|
<message>
|
||||||
|
@ -111,6 +111,13 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>StoreView</name>
|
||||||
|
<message>
|
||||||
|
<source>Buy</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TestLvl::TestSnake</name>
|
<name>TestLvl::TestSnake</name>
|
||||||
<message>
|
<message>
|
||||||
|
@ -111,6 +111,13 @@
|
|||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>StoreView</name>
|
||||||
|
<message>
|
||||||
|
<source>Buy</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>TestLvl::TestSnake</name>
|
<name>TestLvl::TestSnake</name>
|
||||||
<message>
|
<message>
|
||||||
|
@ -10,10 +10,6 @@ StoreViewModel::StoreViewModel() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QModelIndex StoreViewModel::index(int row, int column, const QModelIndex &parent) const {
|
|
||||||
return QAbstractListModel::index(row, column, parent);
|
|
||||||
}
|
|
||||||
|
|
||||||
int StoreViewModel::rowCount(const QModelIndex &) const {
|
int StoreViewModel::rowCount(const QModelIndex &) const {
|
||||||
return _keys.size();
|
return _keys.size();
|
||||||
}
|
}
|
||||||
@ -65,12 +61,17 @@ void StoreViewModel::init(Store *store, User *user) {
|
|||||||
|
|
||||||
int diff = store->size() - _keys.size();
|
int diff = store->size() - _keys.size();
|
||||||
|
|
||||||
if (diff > 0) {
|
auto update = [this](Store *store) {
|
||||||
beginInsertRows({}, _keys.size(), store->size() - 1);
|
|
||||||
|
|
||||||
_store = store;
|
_store = store;
|
||||||
_keys = store->keysList();
|
_keys = store->keysList();
|
||||||
|
for (int index = 0; index < _keys.size(); ++index) {
|
||||||
|
_keysIndexes[index] = _keys[index];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (diff > 0) {
|
||||||
|
beginInsertRows({}, _keys.size(), store->size() - 1);
|
||||||
|
update(store);
|
||||||
endInsertRows();
|
endInsertRows();
|
||||||
|
|
||||||
} else if (diff == 0) {
|
} else if (diff == 0) {
|
||||||
@ -78,17 +79,26 @@ void StoreViewModel::init(Store *store, User *user) {
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
beginRemoveRows({}, store->size(), _keys.size() - 1);
|
beginRemoveRows({}, store->size(), _keys.size() - 1);
|
||||||
|
update(store);
|
||||||
_store = store;
|
|
||||||
_keys = store->keysList();
|
|
||||||
|
|
||||||
endRemoveRows();
|
endRemoveRows();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void StoreViewModel::setUser(User *user) {
|
void StoreViewModel::setUser(User *user) {
|
||||||
|
if (_currentUser) {
|
||||||
|
disconnect(_currentUser, &User::sigItemsUlocked,
|
||||||
|
this, &StoreViewModel::handleItemsUnlocked);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
_currentUser = user;
|
_currentUser = user;
|
||||||
emit dataChanged(index(0,0), index(rowCount() - 1, columnCount() - 1), {ItemWasBuy});
|
|
||||||
|
if (_currentUser) {
|
||||||
|
connect(_currentUser, &User::sigItemsUlocked,
|
||||||
|
this, &StoreViewModel::handleItemsUnlocked);
|
||||||
|
|
||||||
|
handleItemsUnlocked(_currentUser->unlockedItems());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool StoreViewModel::visible() const {
|
bool StoreViewModel::visible() const {
|
||||||
@ -107,4 +117,11 @@ void StoreViewModel::buy(int item) {
|
|||||||
_store->buy(*_currentUser, item);
|
_store->buy(*_currentUser, item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StoreViewModel::handleItemsUnlocked (const QSet<int> & ) {
|
||||||
|
|
||||||
|
emit dataChanged(index(0,0), index(_keys.size() - 1, 0), {ItemWasBuy});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,6 @@ class StoreViewModel: public QAbstractListModel
|
|||||||
public:
|
public:
|
||||||
StoreViewModel();
|
StoreViewModel();
|
||||||
|
|
||||||
QModelIndex index(int row, int column, const QModelIndex &parent = {}) const override;
|
|
||||||
int rowCount(const QModelIndex &parent = {}) const override;
|
int rowCount(const QModelIndex &parent = {}) const override;
|
||||||
int columnCount(const QModelIndex &parent = {}) const override;
|
int columnCount(const QModelIndex &parent = {}) const override;
|
||||||
QVariant data(const QModelIndex &index, int role) const override;
|
QVariant data(const QModelIndex &index, int role) const override;
|
||||||
@ -68,10 +67,18 @@ public:
|
|||||||
Q_INVOKABLE void buy(int item);
|
Q_INVOKABLE void buy(int item);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
/**
|
||||||
|
* @brief visibleChanged This slot emited when store visibel changed
|
||||||
|
*/
|
||||||
void visibleChanged();
|
void visibleChanged();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void handleItemsUnlocked(const QSet<int> &);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
void updateView();
|
||||||
|
|
||||||
enum StoreRoles {
|
enum StoreRoles {
|
||||||
ItemId,
|
ItemId,
|
||||||
ItemName,
|
ItemName,
|
||||||
@ -82,8 +89,10 @@ private:
|
|||||||
|
|
||||||
Store *_store = nullptr;
|
Store *_store = nullptr;
|
||||||
QList<int> _keys;
|
QList<int> _keys;
|
||||||
|
QHash<int, int> _keysIndexes;
|
||||||
User* _currentUser = nullptr;
|
User* _currentUser = nullptr;
|
||||||
bool _visible = false;
|
bool _visible = false;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ bool User::isUnlocked(int item) const {
|
|||||||
|
|
||||||
void User::unclokItem(int item) {
|
void User::unclokItem(int item) {
|
||||||
_unlockedItems.insert(item);
|
_unlockedItems.insert(item);
|
||||||
emit itemUlocked({item});
|
emit sigItemsUlocked({item});
|
||||||
}
|
}
|
||||||
|
|
||||||
void User::droppItem(int item) {
|
void User::droppItem(int item) {
|
||||||
@ -69,7 +69,7 @@ void User::droppItem(int item) {
|
|||||||
|
|
||||||
void User::setUnlockedItems(const QSet<int> &newUnlockedItems) {
|
void User::setUnlockedItems(const QSet<int> &newUnlockedItems) {
|
||||||
_unlockedItems = newUnlockedItems;
|
_unlockedItems = newUnlockedItems;
|
||||||
emit itemUlocked(newUnlockedItems);
|
emit sigItemsUlocked(newUnlockedItems);
|
||||||
}
|
}
|
||||||
|
|
||||||
int User::recalcTier() {
|
int User::recalcTier() {
|
||||||
|
@ -145,10 +145,10 @@ signals:
|
|||||||
void xpChanged();
|
void xpChanged();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief itemUlocked This signal emited when user unlocked item.
|
* @brief sigItemsUlocked 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.
|
* @param unclokedItems This is unlocked items set. Each items in the set is id of the unclocked item.
|
||||||
*/
|
*/
|
||||||
void itemUlocked(const QSet<int> & unclokedItems);
|
void sigItemsUlocked(const QSet<int> & unclokedItems);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user