mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-26 08:33:54 -07:00
* [Game] [Arrows] Track creatorId, use arrowData in arrowItem, use registry, generate unique arrow id's on server side and delete-on-exist inserts. Took 2 minutes Took 1 minute * Fix emitting slot instead of signal. Took 15 minutes * Clear arrows locally in special circumstances i.e. teardown. Took 28 minutes --------- Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
43 lines
No EOL
987 B
C++
43 lines
No EOL
987 B
C++
#ifndef COCKATRICE_ARROW_REGISTRY_H
|
|
#define COCKATRICE_ARROW_REGISTRY_H
|
|
|
|
#include "board/arrow_data.h"
|
|
|
|
#include <QMap>
|
|
#include <QSet>
|
|
#include <QSharedPointer>
|
|
|
|
class ArrowItem;
|
|
|
|
struct ArrowKey
|
|
{
|
|
int creatorId;
|
|
int arrowId;
|
|
|
|
bool operator<(const ArrowKey &other) const
|
|
{
|
|
if (creatorId != other.creatorId) {
|
|
return creatorId < other.creatorId;
|
|
}
|
|
return arrowId < other.arrowId;
|
|
}
|
|
};
|
|
|
|
class ArrowRegistry
|
|
{
|
|
public:
|
|
void insert(QSharedPointer<ArrowData> data, ArrowItem *arrow);
|
|
ArrowItem *take(int creatorId, int arrowId);
|
|
|
|
[[nodiscard]] ArrowItem *get(int creatorId, int arrowId) const;
|
|
[[nodiscard]] bool contains(int creatorId, int arrowId) const;
|
|
[[nodiscard]] QSet<int> idsForPlayer(int playerId) const;
|
|
[[nodiscard]] QList<ArrowItem *> all() const;
|
|
|
|
private:
|
|
QMap<ArrowKey, QSharedPointer<ArrowData>> dataStore;
|
|
QMap<ArrowKey, ArrowItem *> items;
|
|
QMap<int, QSet<int>> byPlayer;
|
|
};
|
|
|
|
#endif |