copy arrows on transform (#4907)
This commit is contained in:
parent
2bd0e58354
commit
6bf7c79891
2 changed files with 49 additions and 0 deletions
|
@ -25,10 +25,18 @@ public:
|
||||||
{
|
{
|
||||||
return startCard;
|
return startCard;
|
||||||
}
|
}
|
||||||
|
void setStartCard(Server_Card *startCard_)
|
||||||
|
{
|
||||||
|
startCard = startCard_;
|
||||||
|
}
|
||||||
Server_ArrowTarget *getTargetItem() const
|
Server_ArrowTarget *getTargetItem() const
|
||||||
{
|
{
|
||||||
return targetItem;
|
return targetItem;
|
||||||
}
|
}
|
||||||
|
void setTargetItem(Server_ArrowTarget *targetItem_)
|
||||||
|
{
|
||||||
|
targetItem = targetItem_;
|
||||||
|
}
|
||||||
const color &getColor() const
|
const color &getColor() const
|
||||||
{
|
{
|
||||||
return arrowColor;
|
return arrowColor;
|
||||||
|
|
|
@ -1475,6 +1475,47 @@ Server_Player::cmdCreateToken(const Command_CreateToken &cmd, ResponseContainer
|
||||||
attachedCard->getZone()->getPlayer()->getPlayerId());
|
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();
|
targetCard->resetState();
|
||||||
card->setStashedCard(targetCard);
|
card->setStashedCard(targetCard);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue