mirror of
https://github.com/QuasarApp/Snake.git
synced 2025-04-26 09:44:40 +00:00
tmp commit
This commit is contained in:
parent
82c2a7e2ed
commit
6158ce4a3b
@ -126,7 +126,7 @@ bool ClientApp::init(QQmlApplicationEngine *engine) {
|
||||
|
||||
QMultiHash<int, const IItem *> availabelItems;
|
||||
initStore(availabelItems);
|
||||
_engine->initStore(availabelItems);
|
||||
_engine->init(availabelItems);
|
||||
|
||||
_engine->setLevel(getLastLevel());
|
||||
|
||||
|
@ -19,8 +19,8 @@ const QHash<int, const IItem *>& IItem::childItems() const {
|
||||
return _childs;
|
||||
}
|
||||
|
||||
QMultiHash<int, const IItem *> IItem::childItemsRecursive() const {
|
||||
QMultiHash<int, const IItem *> result;
|
||||
QMultiHash<int, const IItem *> IItem::childItemsRecursive() const {
|
||||
QMultiHash<int, const IItem *> result;
|
||||
|
||||
for (const IItem* item : _childs) {
|
||||
result.unite(item->childItemsRecursive());
|
||||
@ -70,4 +70,22 @@ void IItem::deactivate(int item) {
|
||||
bool IItem::isActive(int item) {
|
||||
return _childs.contains(item) && _activeItems.contains(item);
|
||||
}
|
||||
|
||||
unsigned int IItem::itemType() {
|
||||
if (_typeItem) {
|
||||
return _typeItem;
|
||||
}
|
||||
|
||||
_typeItem = qHash(itemTextType());
|
||||
return _typeItem;
|
||||
}
|
||||
|
||||
unsigned int IItem::itemType() const {
|
||||
if (_typeItem) {
|
||||
return _typeItem;
|
||||
}
|
||||
|
||||
return qHash(itemTextType());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -34,6 +34,13 @@ public:
|
||||
*/
|
||||
virtual QString itemTextId() const = 0;
|
||||
|
||||
/**
|
||||
* @brief itemTextType This method return text of the item group or type.
|
||||
* @return text of the item group of type.
|
||||
* @see IITem::itemType
|
||||
*/
|
||||
virtual QString itemTextType() const = 0;
|
||||
|
||||
/**
|
||||
* @brief itemName This method should be return name of the item.
|
||||
* @return Name of the item (translated to all supported languages)
|
||||
@ -92,6 +99,7 @@ public:
|
||||
/**
|
||||
* @brief itemId This method return hash of the IItem::itemTextId.
|
||||
* @return hash of the IItem::itemTextId.
|
||||
* @see IItem::itemTextId
|
||||
* @note The not const implementation inlike const implementation write a id to cache.
|
||||
*/
|
||||
unsigned int itemId();
|
||||
@ -99,10 +107,27 @@ public:
|
||||
/**
|
||||
* @brief itemId This method return hash of the IItem::itemTextId.
|
||||
* @return hash of the IItem::itemTextId.
|
||||
* @warning if the object are const and not const implementation of the IItem::itemId method never invoked then this method return 0.
|
||||
* @see IItem::itemTextId
|
||||
* @warning This method not cached id value, so works sloyle then not cons implementation.
|
||||
*/
|
||||
unsigned int itemId() const;
|
||||
|
||||
/**
|
||||
* @brief itemType This method return item type id. (items group)
|
||||
* @return item type id.
|
||||
* @see IItem::itemTextType
|
||||
* @note The not const implementation inlike const implementation write a id to cache.
|
||||
*/
|
||||
unsigned int itemType();
|
||||
|
||||
/**
|
||||
* @brief itemType This method return item type id. (items group)
|
||||
* @return item type id.
|
||||
* @see IItem::itemTextType
|
||||
* @warning This method not cached id value, so works sloyle then not cons implementation.
|
||||
*/
|
||||
unsigned int itemType() const;
|
||||
|
||||
/**
|
||||
* @brief activeItems This method return set of the actived items.
|
||||
* @return set of the actived items.
|
||||
@ -156,6 +181,7 @@ public:
|
||||
|
||||
private:
|
||||
unsigned int _id = 0;
|
||||
unsigned int _typeItem = 0;
|
||||
QHash<int, const IItem*> _childs;
|
||||
QSet<int> _activeItems;
|
||||
|
||||
|
@ -41,6 +41,18 @@ IWorld::~IWorld() {
|
||||
delete _eventServer;
|
||||
}
|
||||
|
||||
QString IWorld::itemTextType() const {
|
||||
return IWorld::typeText();
|
||||
}
|
||||
|
||||
unsigned int IWorld::type() {
|
||||
return qHash(IWorld::typeText());
|
||||
}
|
||||
|
||||
QString IWorld::typeText() {
|
||||
return "WorldObject";
|
||||
}
|
||||
|
||||
void IWorld::init() {
|
||||
}
|
||||
|
||||
|
@ -81,6 +81,22 @@ public:
|
||||
IWorld();
|
||||
~IWorld() override;
|
||||
|
||||
QString itemTextType() const override;
|
||||
|
||||
/**
|
||||
* @brief type This method return const string value of the all world types.
|
||||
* @return const string value of the all world types.
|
||||
* @see IItem::itemTextType
|
||||
* @see IItem::type
|
||||
*/
|
||||
static QString typeText();
|
||||
|
||||
/**
|
||||
* @brief type This is wrapper of the IWorld::typeText method that invoke the qHash function for results string.
|
||||
* @return integer type object id.
|
||||
*/
|
||||
static unsigned int type();
|
||||
|
||||
void init() override;
|
||||
|
||||
/**
|
||||
@ -549,6 +565,7 @@ private:
|
||||
|
||||
// testing
|
||||
friend ClastersTest;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -41,6 +41,18 @@ Snake::~Snake( ){
|
||||
delete [] _vectors;
|
||||
}
|
||||
|
||||
QString Snake::itemTextType() const {
|
||||
return Snake::typeText();
|
||||
}
|
||||
|
||||
QString Snake::typeText() {
|
||||
return "PlayableObject";
|
||||
}
|
||||
|
||||
unsigned int Snake::type() {
|
||||
return qHash(typeText());
|
||||
}
|
||||
|
||||
void Snake::render(unsigned int tbfMsec) {
|
||||
PlayableObject::render(tbfMsec);
|
||||
}
|
||||
|
@ -28,6 +28,22 @@ public:
|
||||
QObject *ptr = nullptr);
|
||||
~Snake() override;
|
||||
|
||||
QString itemTextType() const override;
|
||||
|
||||
/**
|
||||
* @brief type This method return const string value of the all world types.
|
||||
* @return const string value of the all world types.
|
||||
* @see IItem::itemTextType
|
||||
* @see IItem::type
|
||||
*/
|
||||
static QString typeText();
|
||||
|
||||
/**
|
||||
* @brief type This is wrapper of the IWorld::typeText method that invoke the qHash function for results string.
|
||||
* @return integer type object id.
|
||||
*/
|
||||
static unsigned int type();
|
||||
|
||||
void render(unsigned int tbfMsec) override;
|
||||
|
||||
void add(ClasterItem *object) override;
|
||||
@ -132,6 +148,7 @@ private:
|
||||
float _speed;
|
||||
|
||||
int _hp = 100;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -42,4 +42,8 @@ void AvailableLevelsModel::select(int levelId) {
|
||||
}
|
||||
}
|
||||
|
||||
const IItem *AvailableLevelsModel::getItem(int id) const {
|
||||
return _allLevels.value(id, nullptr);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ class IItem;
|
||||
/**
|
||||
* @brief The AvailableLevelsModel class is model of the available levels qml view.
|
||||
* This model just show available levels of the current user.
|
||||
* @see the SelectLevelView.qml module.
|
||||
*/
|
||||
class AvailableLevelsModel: public BaseUserListModel
|
||||
{
|
||||
@ -64,6 +65,11 @@ public:
|
||||
*/
|
||||
Q_INVOKABLE void select(int levelId);
|
||||
|
||||
|
||||
// BaseUserListModel interface
|
||||
protected:
|
||||
const IItem *getItem(int id) const;
|
||||
|
||||
signals:
|
||||
/**
|
||||
* @brief currentLevelChanged This signal emited when the currentLevel propertye is changed.
|
||||
@ -82,6 +88,7 @@ signals:
|
||||
private:
|
||||
QList<const IItem*> _allLevels;
|
||||
int currentLevel = -1;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -72,6 +72,27 @@ void BaseUserListModel::setKeys(const QList<int> &visibleKeysList) {
|
||||
}
|
||||
}
|
||||
|
||||
void BaseUserListModel::addKey(int newKey) {
|
||||
beginInsertRows({}, _keys.size(), _keys.size());
|
||||
_keys.push_back(newKey);
|
||||
_keysIndexes[newKey] = _keys.size();
|
||||
endInsertRows();
|
||||
}
|
||||
|
||||
void BaseUserListModel::removeKey(int oldKey) {
|
||||
int idx = getIndexById(oldKey);
|
||||
|
||||
if (idx >= 0) {
|
||||
beginInsertRows({}, _keys.size(), _keys.size());
|
||||
|
||||
_keys.removeAt(idx);
|
||||
_keysIndexes.remove(oldKey);
|
||||
|
||||
endInsertRows();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
int BaseUserListModel::rowCount(const QModelIndex &) const {
|
||||
return _keys.size();
|
||||
}
|
||||
|
@ -44,6 +44,18 @@ public:
|
||||
*/
|
||||
void setKeys(const QList<int>& visibleKeysList);
|
||||
|
||||
/**
|
||||
* @brief addKey This method add new key value for view.
|
||||
* @param newKey new key value.
|
||||
*/
|
||||
void addKey(int newKey);
|
||||
|
||||
/**
|
||||
* @brief removeKey This method remove old key from view.
|
||||
* @param oldKey This is old key that will be removed.
|
||||
*/
|
||||
void removeKey(int oldKey);
|
||||
|
||||
int rowCount(const QModelIndex &parent = {}) const override;
|
||||
int columnCount(const QModelIndex &parent = {}) const override;
|
||||
QVariant data(const QModelIndex &index, int role) const override;
|
||||
|
@ -5,6 +5,7 @@
|
||||
//# of this license document, but changing it is not allowed.
|
||||
//#
|
||||
|
||||
#include "availablelevelsmodel.h"
|
||||
#include "engine.h"
|
||||
#include "mainmenumodel.h"
|
||||
|
||||
@ -24,9 +25,10 @@ namespace CRAWL {
|
||||
|
||||
Engine::Engine(QObject *parent): QObject(parent) {
|
||||
_store = new Store();
|
||||
_currentUser = new User();
|
||||
_menu = new MainMenuModel();
|
||||
|
||||
setNewUser(new User());
|
||||
|
||||
}
|
||||
|
||||
Engine::~Engine() {
|
||||
@ -124,6 +126,18 @@ void Engine::stop() const {
|
||||
_currentLevel->previewScane()->start(_currentLevel->previewScane()->configuration());
|
||||
}
|
||||
|
||||
void Engine::handleUnlockedItem(int item) {
|
||||
static_cast<AvailableLevelsModel*>(_menu->selectLevelModle())->addKey(item);
|
||||
}
|
||||
|
||||
void Engine::handleDroppedItem(int item) {
|
||||
static_cast<AvailableLevelsModel*>(_menu->selectLevelModle())->removeKey(item);
|
||||
}
|
||||
|
||||
void Engine::handleUnlockedItemsListChanged(const QSet<int> &newSet) {
|
||||
static_cast<AvailableLevelsModel*>(_menu->selectLevelModle())->setKeys(QList<int>(newSet.begin(), newSet.end()));
|
||||
}
|
||||
|
||||
QObject *Engine::getGameObject(int id) const {
|
||||
if (!_currentLevel)
|
||||
return nullptr;
|
||||
@ -171,6 +185,29 @@ QObject *Engine::menu() const {
|
||||
return _menu;
|
||||
}
|
||||
|
||||
void Engine::setNewUser(User *user) {
|
||||
if (_currentUser) {
|
||||
|
||||
disconnect(_currentUser, &User::sigUnlcoked, this, &Engine::handleUnlockedItem);
|
||||
disconnect(_currentUser, &User::sigDropped, this, &Engine::handleDroppedItem);
|
||||
disconnect(_currentUser, &User::sigUlockedItemsChanged,
|
||||
this, &Engine::handleUnlockedItemsListChanged);
|
||||
}
|
||||
|
||||
_currentUser = user;
|
||||
static_cast<StoreViewModel*>(_menu->storeView())->setUser(_currentUser);
|
||||
static_cast<AvailableLevelsModel*>(_menu->selectLevelModle())->setUser(_currentUser);
|
||||
|
||||
|
||||
if (_currentUser) {
|
||||
|
||||
connect(_currentUser, &User::sigUnlcoked, this, &Engine::handleUnlockedItem);
|
||||
connect(_currentUser, &User::sigDropped, this, &Engine::handleDroppedItem);
|
||||
connect(_currentUser, &User::sigUlockedItemsChanged,
|
||||
this, &Engine::handleUnlockedItemsListChanged);
|
||||
}
|
||||
}
|
||||
|
||||
Store *Engine::store() const {
|
||||
return _store;
|
||||
}
|
||||
@ -186,10 +223,18 @@ User *Engine::currentUser() const {
|
||||
return _currentUser;
|
||||
}
|
||||
|
||||
|
||||
void Engine::initStore(const QMultiHash<int, const IItem *> &availabelItems) {
|
||||
void Engine::init(const QMultiHash<int, const IItem *> &availabelItems) {
|
||||
_store->init(availabelItems);
|
||||
static_cast<StoreViewModel*>(_menu->storeView())->init(_store, _currentUser);
|
||||
|
||||
QList<const IItem*> availableWorlds;
|
||||
for (const IItem * item : availabelItems) {
|
||||
if (item->itemType() == IWorld::type()) {
|
||||
availableWorlds.push_back(item);
|
||||
}
|
||||
}
|
||||
|
||||
static_cast<AvailableLevelsModel*>(_menu->selectLevelModle())->setAllLevels(availableWorlds);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -107,10 +107,10 @@ public:
|
||||
User *currentUser() const;
|
||||
|
||||
/**
|
||||
* @brief initStore This method is wrapper of the Store::init method.
|
||||
* @brief init This method initialize the main model. Sets available levels and items.
|
||||
* @param availabelItems This is list of available items.
|
||||
*/
|
||||
void initStore(const QMultiHash<int, const IItem *> &availabelItems);
|
||||
void init(const QMultiHash<int, const IItem *> &availabelItems);
|
||||
|
||||
/**
|
||||
* @brief store This pointer return pointer to store.
|
||||
@ -130,6 +130,11 @@ public:
|
||||
*/
|
||||
QObject *menu() const;
|
||||
|
||||
/**
|
||||
* @brief setNewUser This method will initialise the new user profile.
|
||||
* @param user This is pointer to new user profile.
|
||||
*/
|
||||
void setNewUser(User* user);
|
||||
|
||||
signals:
|
||||
void scaneChanged();
|
||||
@ -151,6 +156,24 @@ private slots:
|
||||
*/
|
||||
void stop() const;
|
||||
|
||||
/**
|
||||
* @brief handleUnlockedItem This slot invoked when emited the User::unclokItem signal.
|
||||
* @param item This is id of the unlocked item
|
||||
*/
|
||||
void handleUnlockedItem(int item);
|
||||
|
||||
/**
|
||||
* @brief handleUnlockedItem This slot invoked when emited the User::droppItem signal.
|
||||
* @param item This is id of the dropped item
|
||||
*/
|
||||
void handleDroppedItem(int item);
|
||||
|
||||
/**
|
||||
* @brief handleUnlockedItem This slot invoked when emited the User::setUnlockedItems signal.
|
||||
* @param item This is new list of the unclod items.
|
||||
*/
|
||||
void handleUnlockedItemsListChanged(const QSet<int>& newSet);
|
||||
|
||||
private:
|
||||
void renderLoop();
|
||||
|
||||
|
@ -6,6 +6,7 @@
|
||||
//#
|
||||
|
||||
#include <listviewmodel.h>
|
||||
#include "availablelevelsmodel.h"
|
||||
#include "mainmenumodel.h"
|
||||
#include "settingsviewmodel.h"
|
||||
#include "storeviewmodel.h"
|
||||
@ -19,10 +20,12 @@ MainMenuModel::MainMenuModel(QObject *ptr): QObject (ptr) {
|
||||
_conf = QuasarAppUtils::Settings::instance();
|
||||
_userSettingsModel = new SettingsViewModel(this);
|
||||
_storeView = new StoreViewModel();
|
||||
_selectLevelModle = new AvailableLevelsModel();
|
||||
}
|
||||
|
||||
MainMenuModel::~MainMenuModel() {
|
||||
delete _storeView;
|
||||
delete _selectLevelModle;
|
||||
}
|
||||
|
||||
QObject *MainMenuModel::userSettingsModel() const {
|
||||
@ -44,4 +47,8 @@ QObject *MainMenuModel::storeView() const {
|
||||
return _storeView;
|
||||
}
|
||||
|
||||
AvailableLevelsModel *MainMenuModel::selectLevelModle() const {
|
||||
return _selectLevelModle;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ namespace CRAWL {
|
||||
|
||||
class WorldInfo;
|
||||
class StoreViewModel;
|
||||
class AvailableLevelsModel;
|
||||
|
||||
/**
|
||||
* @brief The MainMenuModel class This is main class for controll user interface
|
||||
@ -30,13 +31,28 @@ class MainMenuModel : public QObject
|
||||
Q_PROPERTY(QObject* userSettingsModel READ userSettingsModel NOTIFY userSettingsModelChanged)
|
||||
Q_PROPERTY(bool visible READ getVisible WRITE setVisible NOTIFY visibleChanged)
|
||||
Q_PROPERTY(QObject * storeView READ storeView NOTIFY storeViewChanged)
|
||||
Q_PROPERTY(AvailableLevelsModel * selectLevelModle READ selectLevelModle NOTIFY selectLevelModleChanged)
|
||||
|
||||
public:
|
||||
MainMenuModel(QObject *ptr = nullptr);
|
||||
~MainMenuModel();
|
||||
|
||||
/**
|
||||
* @brief userSettingsModel This method return pointer to the setting model.
|
||||
* @return This is pointer to setting model.
|
||||
*/
|
||||
QObject* userSettingsModel() const;
|
||||
|
||||
/**
|
||||
* @brief getVisible This method return visible property of the main game menu.
|
||||
* @return true if the menu is visble.
|
||||
*/
|
||||
bool getVisible() const;
|
||||
|
||||
/**
|
||||
* @brief setVisible This method will change visible of the main menu.
|
||||
* @param newVisible This is new vlaue of the visible.
|
||||
*/
|
||||
void setVisible(bool newVisible);
|
||||
|
||||
/**
|
||||
@ -45,18 +61,25 @@ public:
|
||||
*/
|
||||
QObject *storeView() const;
|
||||
|
||||
/**
|
||||
* @brief selectLevelModle This method return pointer to the available levels model.
|
||||
* @return pointer to main available levels model.
|
||||
*/
|
||||
AvailableLevelsModel *selectLevelModle() const;
|
||||
|
||||
|
||||
signals:
|
||||
void userSettingsModelChanged(QObject* userSettingsModel);
|
||||
|
||||
void visibleChanged();
|
||||
|
||||
void storeViewChanged();
|
||||
void selectLevelModleChanged();
|
||||
|
||||
private:
|
||||
Settings *_conf = nullptr;
|
||||
QObject* _userSettingsModel = nullptr;
|
||||
bool visible = true;
|
||||
StoreViewModel *_storeView = nullptr;
|
||||
AvailableLevelsModel *_selectLevelModle = nullptr;
|
||||
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user