code cleanup

This commit is contained in:
Max-Wilhelm Bruker 2013-01-03 17:18:37 +01:00
parent cc3760a7df
commit 8b6eace312
4 changed files with 52 additions and 43 deletions

View file

@ -60,19 +60,20 @@ int Server_CardZone::removeCard(Server_Card *card)
return index; return index;
} }
Server_Card *Server_CardZone::getCard(int id, int *position) Server_Card *Server_CardZone::getCard(int id, int *position, bool remove)
{ {
if (type != ServerInfo_Zone::HiddenZone) { if (type != ServerInfo_Zone::HiddenZone) {
QListIterator<Server_Card *> CardIterator(cards); for (int i = 0; i < cards.size(); ++i) {
int i = 0; Server_Card *tmp = cards[i];
while (CardIterator.hasNext()) {
Server_Card *tmp = CardIterator.next();
if (tmp->getId() == id) { if (tmp->getId() == id) {
if (position) if (position)
*position = i; *position = i;
if (remove) {
cards.removeAt(i);
tmp->setZone(0);
}
return tmp; return tmp;
} }
i++;
} }
return NULL; return NULL;
} else { } else {
@ -81,6 +82,10 @@ Server_Card *Server_CardZone::getCard(int id, int *position)
Server_Card *tmp = cards[id]; Server_Card *tmp = cards[id];
if (position) if (position)
*position = id; *position = id;
if (remove) {
cards.removeAt(id);
tmp->setZone(0);
}
return tmp; return tmp;
} }
} }
@ -202,7 +207,10 @@ void Server_CardZone::insertCard(Server_Card *card, int x, int y)
cards.append(card); cards.append(card);
} else { } else {
card->setCoords(0, 0); card->setCoords(0, 0);
cards.insert(x, card); if (x == -1)
cards.append(card);
else
cards.insert(x, card);
} }
card->setZone(this); card->setZone(this);
} }

View file

@ -40,12 +40,14 @@ private:
int cardsBeingLookedAt; int cardsBeingLookedAt;
QSet<int> playersWithWritePermission; QSet<int> playersWithWritePermission;
bool alwaysRevealTopCard; bool alwaysRevealTopCard;
QList<Server_Card *> cards;
public: public:
Server_CardZone(Server_Player *_player, const QString &_name, bool _has_coords, ServerInfo_Zone::ZoneType _type); Server_CardZone(Server_Player *_player, const QString &_name, bool _has_coords, ServerInfo_Zone::ZoneType _type);
~Server_CardZone(); ~Server_CardZone();
const QList<Server_Card *> &getCards() const { return cards; }
int removeCard(Server_Card *card); int removeCard(Server_Card *card);
Server_Card *getCard(int id, int *position = NULL); Server_Card *getCard(int id, int *position = NULL, bool remove = false);
int getCardsBeingLookedAt() const { return cardsBeingLookedAt; } int getCardsBeingLookedAt() const { return cardsBeingLookedAt; }
void setCardsBeingLookedAt(int _cardsBeingLookedAt) { cardsBeingLookedAt = _cardsBeingLookedAt; } void setCardsBeingLookedAt(int _cardsBeingLookedAt) { cardsBeingLookedAt = _cardsBeingLookedAt; }
@ -60,7 +62,6 @@ public:
bool isColumnStacked(int x, int y) const; bool isColumnStacked(int x, int y) const;
void fixFreeSpaces(GameEventStorage &ges); void fixFreeSpaces(GameEventStorage &ges);
void moveCard(GameEventStorage &ges, QMap<int, Server_Card *> &coordMap, Server_Card *card, int x, int y); void moveCard(GameEventStorage &ges, QMap<int, Server_Card *> &coordMap, Server_Card *card, int x, int y);
QList<Server_Card *> cards;
void insertCard(Server_Card *card, int x, int y); void insertCard(Server_Card *card, int x, int y);
void shuffle(); void shuffle();
void clear(); void clear();

View file

@ -516,8 +516,8 @@ void Server_Game::unattachCards(GameEventStorage &ges, Server_Player *player)
QMapIterator<QString, Server_CardZone *> zoneIterator(player->getZones()); QMapIterator<QString, Server_CardZone *> zoneIterator(player->getZones());
while (zoneIterator.hasNext()) { while (zoneIterator.hasNext()) {
Server_CardZone *zone = zoneIterator.next().value(); Server_CardZone *zone = zoneIterator.next().value();
for (int i = 0; i < zone->cards.size(); ++i) { for (int i = 0; i < zone->getCards().size(); ++i) {
Server_Card *card = zone->cards.at(i); Server_Card *card = zone->getCards().at(i);
// Make a copy of the list because the original one gets modified during the loop // Make a copy of the list because the original one gets modified during the loop
QList<Server_Card *> attachedCards = card->getAttachedCards(); QList<Server_Card *> attachedCards = card->getAttachedCards();

View file

@ -185,7 +185,7 @@ void Server_Player::setupZones()
if (!currentCard) if (!currentCard)
continue; continue;
for (int k = 0; k < currentCard->getNumber(); ++k) for (int k = 0; k < currentCard->getNumber(); ++k)
z->cards.append(new Server_Card(currentCard->getName(), nextCardId++, 0, 0, z)); z->insertCard(new Server_Card(currentCard->getName(), nextCardId++, 0, 0, z), -1, 0);
} }
} }
@ -209,11 +209,10 @@ void Server_Player::setupZones()
else else
continue; continue;
for (int j = 0; j < start->cards.size(); ++j) for (int j = 0; j < start->getCards().size(); ++j)
if (start->cards[j]->getName() == QString::fromStdString(m.card_name())) { if (start->getCards()[j]->getName() == QString::fromStdString(m.card_name())) {
Server_Card *card = start->cards[j]; Server_Card *card = start->getCard(j, NULL, true);
start->cards.removeAt(j); target->insertCard(card, -1, 0);
target->cards.append(card);
break; break;
} }
} }
@ -286,16 +285,16 @@ Response::ResponseCode Server_Player::drawCards(GameEventStorage &ges, int numbe
{ {
Server_CardZone *deckZone = zones.value("deck"); Server_CardZone *deckZone = zones.value("deck");
Server_CardZone *handZone = zones.value("hand"); Server_CardZone *handZone = zones.value("hand");
if (deckZone->cards.size() < number) if (deckZone->getCards().size() < number)
number = deckZone->cards.size(); number = deckZone->getCards().size();
Event_DrawCards eventOthers; Event_DrawCards eventOthers;
eventOthers.set_number(number); eventOthers.set_number(number);
Event_DrawCards eventPrivate(eventOthers); Event_DrawCards eventPrivate(eventOthers);
for (int i = 0; i < number; ++i) { for (int i = 0; i < number; ++i) {
Server_Card *card = deckZone->cards.takeFirst(); Server_Card *card = deckZone->getCard(0, NULL, true);
handZone->cards.append(card); handZone->insertCard(card, -1, 0);
lastDrawList.append(card->getId()); lastDrawList.append(card->getId());
ServerInfo_Card *cardInfo = eventPrivate.add_cards(); ServerInfo_Card *cardInfo = eventPrivate.add_cards();
@ -306,11 +305,11 @@ Response::ResponseCode Server_Player::drawCards(GameEventStorage &ges, int numbe
ges.enqueueGameEvent(eventPrivate, playerId, GameEventStorageItem::SendToPrivate, playerId); ges.enqueueGameEvent(eventPrivate, playerId, GameEventStorageItem::SendToPrivate, playerId);
ges.enqueueGameEvent(eventOthers, playerId, GameEventStorageItem::SendToOthers); ges.enqueueGameEvent(eventOthers, playerId, GameEventStorageItem::SendToOthers);
if (deckZone->getAlwaysRevealTopCard() && !deckZone->cards.isEmpty()) { if (deckZone->getAlwaysRevealTopCard() && !deckZone->getCards().isEmpty()) {
Event_RevealCards revealEvent; Event_RevealCards revealEvent;
revealEvent.set_zone_name(deckZone->getName().toStdString()); revealEvent.set_zone_name(deckZone->getName().toStdString());
revealEvent.set_card_id(0); revealEvent.set_card_id(0);
deckZone->cards.first()->getInfo(revealEvent.add_cards()); deckZone->getCards().first()->getInfo(revealEvent.add_cards());
ges.enqueueGameEvent(revealEvent, playerId); ges.enqueueGameEvent(revealEvent, playerId);
} }
@ -346,7 +345,7 @@ Response::ResponseCode Server_Player::moveCard(GameEventStorage &ges, Server_Car
return Response::RespContextError; return Response::RespContextError;
if (!targetzone->hasCoords() && (x == -1)) if (!targetzone->hasCoords() && (x == -1))
x = targetzone->cards.size(); x = targetzone->getCards().size();
QList<QPair<Server_Card *, int> > cardsToMove; QList<QPair<Server_Card *, int> > cardsToMove;
QMap<Server_Card *, const CardToMove *> cardProperties; QMap<Server_Card *, const CardToMove *> cardProperties;
@ -525,19 +524,19 @@ Response::ResponseCode Server_Player::moveCard(GameEventStorage &ges, Server_Car
if (!ptString.isEmpty() && !faceDown) if (!ptString.isEmpty() && !faceDown)
setCardAttrHelper(ges, targetzone->getName(), card->getId(), AttrPT, ptString); setCardAttrHelper(ges, targetzone->getName(), card->getId(), AttrPT, ptString);
} }
if (startzone->getAlwaysRevealTopCard() && !startzone->cards.isEmpty() && (originalPosition == 0)) { if (startzone->getAlwaysRevealTopCard() && !startzone->getCards().isEmpty() && (originalPosition == 0)) {
Event_RevealCards revealEvent; Event_RevealCards revealEvent;
revealEvent.set_zone_name(startzone->getName().toStdString()); revealEvent.set_zone_name(startzone->getName().toStdString());
revealEvent.set_card_id(0); revealEvent.set_card_id(0);
startzone->cards.first()->getInfo(revealEvent.add_cards()); startzone->getCards().first()->getInfo(revealEvent.add_cards());
ges.enqueueGameEvent(revealEvent, playerId); ges.enqueueGameEvent(revealEvent, playerId);
} }
if (targetzone->getAlwaysRevealTopCard() && !targetzone->cards.isEmpty() && (newX == 0)) { if (targetzone->getAlwaysRevealTopCard() && !targetzone->getCards().isEmpty() && (newX == 0)) {
Event_RevealCards revealEvent; Event_RevealCards revealEvent;
revealEvent.set_zone_name(targetzone->getName().toStdString()); revealEvent.set_zone_name(targetzone->getName().toStdString());
revealEvent.set_card_id(0); revealEvent.set_card_id(0);
targetzone->cards.first()->getInfo(revealEvent.add_cards()); targetzone->getCards().first()->getInfo(revealEvent.add_cards());
ges.enqueueGameEvent(revealEvent, playerId); ges.enqueueGameEvent(revealEvent, playerId);
} }
@ -580,7 +579,7 @@ Response::ResponseCode Server_Player::setCardAttrHelper(GameEventStorage &ges, c
QString result; QString result;
if (cardId == -1) { if (cardId == -1) {
QListIterator<Server_Card *> CardIterator(zone->cards); QListIterator<Server_Card *> CardIterator(zone->getCards());
while (CardIterator.hasNext()) { while (CardIterator.hasNext()) {
result = CardIterator.next()->setAttribute(attribute, attrValue, true); result = CardIterator.next()->setAttribute(attribute, attrValue, true);
if (result.isNull()) if (result.isNull())
@ -782,11 +781,11 @@ Response::ResponseCode Server_Player::cmdShuffle(const Command_Shuffle & /*cmd*/
event.set_zone_name("deck"); event.set_zone_name("deck");
ges.enqueueGameEvent(event, playerId); ges.enqueueGameEvent(event, playerId);
if (deckZone->getAlwaysRevealTopCard() && !deckZone->cards.isEmpty()) { if (deckZone->getAlwaysRevealTopCard() && !deckZone->getCards().isEmpty()) {
Event_RevealCards revealEvent; Event_RevealCards revealEvent;
revealEvent.set_zone_name(deckZone->getName().toStdString()); revealEvent.set_zone_name(deckZone->getName().toStdString());
revealEvent.set_card_id(0); revealEvent.set_card_id(0);
deckZone->cards.first()->getInfo(revealEvent.add_cards()); deckZone->getCards().first()->getInfo(revealEvent.add_cards());
ges.enqueueGameEvent(revealEvent, playerId); ges.enqueueGameEvent(revealEvent, playerId);
} }
@ -805,12 +804,12 @@ Response::ResponseCode Server_Player::cmdMulligan(const Command_Mulligan & /*cmd
return Response::RespContextError; return Response::RespContextError;
Server_CardZone *hand = zones.value("hand"); Server_CardZone *hand = zones.value("hand");
int number = (hand->cards.size() <= 1) ? initialCards : hand->cards.size() - 1; int number = (hand->getCards().size() <= 1) ? initialCards : hand->getCards().size() - 1;
Server_CardZone *deck = zones.value("deck"); Server_CardZone *deck = zones.value("deck");
while (!hand->cards.isEmpty()) { while (!hand->getCards().isEmpty()) {
CardToMove *cardToMove = new CardToMove; CardToMove *cardToMove = new CardToMove;
cardToMove->set_card_id(hand->cards.first()->getId()); cardToMove->set_card_id(hand->getCards().first()->getId());
moveCard(ges, hand, QList<const CardToMove *>() << cardToMove, deck, 0, 0, false); moveCard(ges, hand, QList<const CardToMove *>() << cardToMove, deck, 0, 0, false);
delete cardToMove; delete cardToMove;
} }
@ -1407,16 +1406,17 @@ Response::ResponseCode Server_Player::cmdDumpZone(const Command_DumpZone &cmd, R
return Response::RespContextError; return Response::RespContextError;
int numberCards = cmd.number_cards(); int numberCards = cmd.number_cards();
const QList<Server_Card *> &cards = zone->getCards();
Response_DumpZone *re = new Response_DumpZone; Response_DumpZone *re = new Response_DumpZone;
ServerInfo_Zone *zoneInfo = re->mutable_zone_info(); ServerInfo_Zone *zoneInfo = re->mutable_zone_info();
zoneInfo->set_name(zone->getName().toStdString()); zoneInfo->set_name(zone->getName().toStdString());
zoneInfo->set_type(zone->getType()); zoneInfo->set_type(zone->getType());
zoneInfo->set_with_coords(zone->hasCoords()); zoneInfo->set_with_coords(zone->hasCoords());
zoneInfo->set_card_count(numberCards < zone->cards.size() ? zone->cards.size() : numberCards); zoneInfo->set_card_count(numberCards < cards.size() ? cards.size() : numberCards);
for (int i = 0; (i < zone->cards.size()) && (i < numberCards || numberCards == -1); ++i) { for (int i = 0; (i < cards.size()) && (i < numberCards || numberCards == -1); ++i) {
Server_Card *card = zone->cards[i]; Server_Card *card = cards[i];
QString displayedName = card->getFaceDown() ? QString() : card->getName(); QString displayedName = card->getFaceDown() ? QString() : card->getName();
ServerInfo_Card *cardInfo = zoneInfo->add_card_list(); ServerInfo_Card *cardInfo = zoneInfo->add_card_list();
cardInfo->set_name(displayedName.toStdString()); cardInfo->set_name(displayedName.toStdString());
@ -1510,11 +1510,11 @@ Response::ResponseCode Server_Player::cmdRevealCards(const Command_RevealCards &
QList<Server_Card *> cardsToReveal; QList<Server_Card *> cardsToReveal;
if (!cmd.has_card_id()) if (!cmd.has_card_id())
cardsToReveal = zone->cards; cardsToReveal = zone->getCards();
else if (cmd.card_id() == -2) { else if (cmd.card_id() == -2) {
if (zone->cards.isEmpty()) if (zone->getCards().isEmpty())
return Response::RespContextError; return Response::RespContextError;
cardsToReveal.append(zone->cards.at(rng->getNumber(0, zone->cards.size() - 1))); cardsToReveal.append(zone->getCards().at(rng->getNumber(0, zone->getCards().size() - 1)));
} else { } else {
Server_Card *card = zone->getCard(cmd.card_id()); Server_Card *card = zone->getCard(cmd.card_id());
if (!card) if (!card)
@ -1600,11 +1600,11 @@ Response::ResponseCode Server_Player::cmdChangeZoneProperties(const Command_Chan
ges.enqueueGameEvent(event, playerId); ges.enqueueGameEvent(event, playerId);
if (!zone->cards.isEmpty() && cmd.always_reveal_top_card()) { if (!zone->getCards().isEmpty() && cmd.always_reveal_top_card()) {
Event_RevealCards revealEvent; Event_RevealCards revealEvent;
revealEvent.set_zone_name(zone->getName().toStdString()); revealEvent.set_zone_name(zone->getName().toStdString());
revealEvent.set_card_id(0); revealEvent.set_card_id(0);
zone->cards.first()->getInfo(revealEvent.add_cards()); zone->getCards().first()->getInfo(revealEvent.add_cards());
ges.enqueueGameEvent(revealEvent, playerId); ges.enqueueGameEvent(revealEvent, playerId);
} }