copy arrows on transform (#4907)

This commit is contained in:
ebbit1q 2023-10-14 01:01:08 +02:00 committed by GitHub
parent 2bd0e58354
commit 6bf7c79891
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 49 additions and 0 deletions

View file

@ -25,10 +25,18 @@ public:
{
return startCard;
}
void setStartCard(Server_Card *startCard_)
{
startCard = startCard_;
}
Server_ArrowTarget *getTargetItem() const
{
return targetItem;
}
void setTargetItem(Server_ArrowTarget *targetItem_)
{
targetItem = targetItem_;
}
const color &getColor() const
{
return arrowColor;

View file

@ -1475,6 +1475,47 @@ Server_Player::cmdCreateToken(const Command_CreateToken &cmd, ResponseContainer
attachedCard->getZone()->getPlayer()->getPlayerId());
}
// Copy Arrows
const QList<Server_Player *> &players = game->getPlayers().values();
for (auto player : players) {
QMapIterator<int, Server_Arrow *> arrowIterator(player->getArrows());
while (arrowIterator.hasNext()) {
Server_Arrow *arrow = arrowIterator.next().value();
bool sendGameEvent = false;
const auto *startCard = arrow->getStartCard();
if (startCard == targetCard) {
sendGameEvent = true;
arrow->setStartCard(card);
startCard = card;
}
const auto *targetItem = arrow->getTargetItem();
if (targetItem == targetCard) {
sendGameEvent = true;
arrow->setTargetItem(card);
targetItem = card;
}
if (sendGameEvent) {
Event_CreateArrow event;
ServerInfo_Arrow *arrowInfo = event.mutable_arrow_info();
arrowInfo->set_id(arrow->getId());
arrowInfo->set_start_player_id(player->getPlayerId());
arrowInfo->set_start_zone(startCard->getZone()->getName().toStdString());
arrowInfo->set_start_card_id(startCard->getId());
const Server_Player *arrowTargetPlayer = qobject_cast<const Server_Player *>(targetItem);
if (arrowTargetPlayer != nullptr) {
arrowInfo->set_target_player_id(arrowTargetPlayer->getPlayerId());
} else {
const Server_Card *arrowTargetCard = qobject_cast<const Server_Card *>(targetItem);
arrowInfo->set_target_player_id(arrowTargetCard->getZone()->getPlayer()->getPlayerId());
arrowInfo->set_target_zone(arrowTargetCard->getZone()->getName().toStdString());
arrowInfo->set_target_card_id(arrowTargetCard->getId());
}
arrowInfo->mutable_arrow_color()->CopyFrom(arrow->getColor());
ges.enqueueGameEvent(event, player->getPlayerId());
}
}
}
targetCard->resetState();
card->setStashedCard(targetCard);
break;