mirror of
https://github.com/vcmi/vcmi.git
synced 2025-11-06 09:09:40 +02:00
Bulk move artifacts. id
This commit is contained in:
@@ -295,7 +295,7 @@ void ApplyClientNetPackVisitor::visitMoveArtifact(MoveArtifact & pack)
|
|||||||
|
|
||||||
void ApplyClientNetPackVisitor::visitBulkMoveArtifacts(BulkMoveArtifacts & pack)
|
void ApplyClientNetPackVisitor::visitBulkMoveArtifacts(BulkMoveArtifacts & pack)
|
||||||
{
|
{
|
||||||
/*auto applyMove = [this, &pack](std::vector<BulkMoveArtifacts::LinkedSlots> & artsPack) -> void
|
auto applyMove = [this, &pack](std::vector<BulkMoveArtifacts::LinkedSlots> & artsPack) -> void
|
||||||
{
|
{
|
||||||
for(auto & slotToMove : artsPack)
|
for(auto & slotToMove : artsPack)
|
||||||
{
|
{
|
||||||
@@ -306,8 +306,8 @@ void ApplyClientNetPackVisitor::visitBulkMoveArtifacts(BulkMoveArtifacts & pack)
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
auto srcOwner = std::get<ConstTransitivePtr<CGHeroInstance>>(pack.srcArtHolder)->tempOwner;
|
auto srcOwner = cl.getOwner(pack.srcArtHolder);
|
||||||
auto dstOwner = std::get<ConstTransitivePtr<CGHeroInstance>>(pack.dstArtHolder)->tempOwner;
|
auto dstOwner = cl.getOwner(pack.dstArtHolder);
|
||||||
|
|
||||||
// Begin a session of bulk movement of arts. It is not necessary but useful for the client optimization.
|
// Begin a session of bulk movement of arts. It is not necessary but useful for the client optimization.
|
||||||
callInterfaceIfPresent(cl, srcOwner, &IGameEventsReceiver::bulkArtMovementStart, pack.artsPack0.size() + pack.artsPack1.size());
|
callInterfaceIfPresent(cl, srcOwner, &IGameEventsReceiver::bulkArtMovementStart, pack.artsPack0.size() + pack.artsPack1.size());
|
||||||
@@ -316,7 +316,7 @@ void ApplyClientNetPackVisitor::visitBulkMoveArtifacts(BulkMoveArtifacts & pack)
|
|||||||
|
|
||||||
applyMove(pack.artsPack0);
|
applyMove(pack.artsPack0);
|
||||||
if(pack.swap)
|
if(pack.swap)
|
||||||
applyMove(pack.artsPack1);*/
|
applyMove(pack.artsPack1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ApplyClientNetPackVisitor::visitAssembledArtifact(AssembledArtifact & pack)
|
void ApplyClientNetPackVisitor::visitAssembledArtifact(AssembledArtifact & pack)
|
||||||
|
|||||||
@@ -1813,8 +1813,8 @@ void BulkMoveArtifacts::applyGs(CGameState * gs)
|
|||||||
BULK_PUT
|
BULK_PUT
|
||||||
};
|
};
|
||||||
|
|
||||||
auto bulkArtsOperation = [this](std::vector<LinkedSlots> & artsPack,
|
auto bulkArtsOperation = [this, gs](std::vector<LinkedSlots> & artsPack,
|
||||||
CArtifactSet * artSet, EBulkArtsOp operation) -> void
|
CArtifactSet & artSet, EBulkArtsOp operation) -> void
|
||||||
{
|
{
|
||||||
int numBackpackArtifactsMoved = 0;
|
int numBackpackArtifactsMoved = 0;
|
||||||
for(auto & slot : artsPack)
|
for(auto & slot : artsPack)
|
||||||
@@ -1827,25 +1827,22 @@ void BulkMoveArtifacts::applyGs(CGameState * gs)
|
|||||||
{
|
{
|
||||||
srcPos = ArtifactPosition(srcPos.num - numBackpackArtifactsMoved);
|
srcPos = ArtifactPosition(srcPos.num - numBackpackArtifactsMoved);
|
||||||
}
|
}
|
||||||
const auto * slotInfo = artSet->getSlot(srcPos);
|
auto * art = artSet.getArt(srcPos);
|
||||||
assert(slotInfo);
|
|
||||||
auto * art = const_cast<CArtifactInstance *>(slotInfo->getArt());
|
|
||||||
assert(art);
|
assert(art);
|
||||||
/*switch(operation)
|
switch(operation)
|
||||||
{
|
{
|
||||||
case EBulkArtsOp::BULK_MOVE:
|
case EBulkArtsOp::BULK_MOVE:
|
||||||
const_cast<CArtifactInstance*>(art)->move(
|
art->move(artSet, srcPos, *gs->getHero(dstArtHolder), slot.dstPos);
|
||||||
ArtifactLocation(srcArtHolder, srcPos), ArtifactLocation(dstArtHolder, slot.dstPos));
|
|
||||||
break;
|
break;
|
||||||
case EBulkArtsOp::BULK_REMOVE:
|
case EBulkArtsOp::BULK_REMOVE:
|
||||||
art->removeFrom(ArtifactLocation(dstArtHolder, srcPos));
|
art->removeFrom(artSet, srcPos);
|
||||||
break;
|
break;
|
||||||
case EBulkArtsOp::BULK_PUT:
|
case EBulkArtsOp::BULK_PUT:
|
||||||
art->putAt(ArtifactLocation(srcArtHolder, slot.dstPos));
|
art->putAt(*gs->getHero(srcArtHolder), slot.dstPos);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}*/
|
}
|
||||||
|
|
||||||
if(srcPos >= ArtifactPosition::BACKPACK_START)
|
if(srcPos >= ArtifactPosition::BACKPACK_START)
|
||||||
{
|
{
|
||||||
@@ -1854,23 +1851,23 @@ void BulkMoveArtifacts::applyGs(CGameState * gs)
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
auto * leftSet = gs->getArtSet(ArtifactLocation(srcArtHolder));
|
||||||
if(swap)
|
if(swap)
|
||||||
{
|
{
|
||||||
// Swap
|
// Swap
|
||||||
auto * leftSet = getSrcHolderArtSet();
|
auto * rightSet = gs->getArtSet(ArtifactLocation(dstArtHolder));
|
||||||
auto * rightSet = getDstHolderArtSet();
|
|
||||||
CArtifactFittingSet artFittingSet(leftSet->bearerType());
|
CArtifactFittingSet artFittingSet(leftSet->bearerType());
|
||||||
|
|
||||||
artFittingSet.artifactsWorn = rightSet->artifactsWorn;
|
artFittingSet.artifactsWorn = rightSet->artifactsWorn;
|
||||||
artFittingSet.artifactsInBackpack = rightSet->artifactsInBackpack;
|
artFittingSet.artifactsInBackpack = rightSet->artifactsInBackpack;
|
||||||
|
|
||||||
bulkArtsOperation(artsPack1, rightSet, EBulkArtsOp::BULK_REMOVE);
|
bulkArtsOperation(artsPack1, *rightSet, EBulkArtsOp::BULK_REMOVE);
|
||||||
bulkArtsOperation(artsPack0, leftSet, EBulkArtsOp::BULK_MOVE);
|
bulkArtsOperation(artsPack0, *leftSet, EBulkArtsOp::BULK_MOVE);
|
||||||
bulkArtsOperation(artsPack1, &artFittingSet, EBulkArtsOp::BULK_PUT);
|
bulkArtsOperation(artsPack1, artFittingSet, EBulkArtsOp::BULK_PUT);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bulkArtsOperation(artsPack0, getSrcHolderArtSet(), EBulkArtsOp::BULK_MOVE);
|
bulkArtsOperation(artsPack0, *leftSet, EBulkArtsOp::BULK_MOVE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2549,14 +2546,4 @@ const CArtifactInstance * ArtSlotInfo::getArt() const
|
|||||||
return artifact;
|
return artifact;
|
||||||
}
|
}
|
||||||
|
|
||||||
CArtifactSet * BulkMoveArtifacts::getSrcHolderArtSet()
|
|
||||||
{
|
|
||||||
return std::visit(GetBase<CArtifactSet>(), srcArtHolder);
|
|
||||||
}
|
|
||||||
|
|
||||||
CArtifactSet * BulkMoveArtifacts::getDstHolderArtSet()
|
|
||||||
{
|
|
||||||
return std::visit(GetBase<CArtifactSet>(), dstArtHolder);
|
|
||||||
}
|
|
||||||
|
|
||||||
VCMI_LIB_NAMESPACE_END
|
VCMI_LIB_NAMESPACE_END
|
||||||
|
|||||||
@@ -1060,14 +1060,16 @@ struct DLL_LINKAGE BulkMoveArtifacts : CArtifactOperationPack
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
TArtHolder srcArtHolder;
|
ObjectInstanceID srcArtHolder;
|
||||||
TArtHolder dstArtHolder;
|
ObjectInstanceID dstArtHolder;
|
||||||
|
|
||||||
BulkMoveArtifacts()
|
BulkMoveArtifacts()
|
||||||
: swap(false)
|
: srcArtHolder(ObjectInstanceID::NONE)
|
||||||
|
, dstArtHolder(ObjectInstanceID::NONE)
|
||||||
|
, swap(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
BulkMoveArtifacts(TArtHolder srcArtHolder, TArtHolder dstArtHolder, bool swap)
|
BulkMoveArtifacts(const ObjectInstanceID srcArtHolder, const ObjectInstanceID dstArtHolder, bool swap)
|
||||||
: srcArtHolder(std::move(srcArtHolder))
|
: srcArtHolder(std::move(srcArtHolder))
|
||||||
, dstArtHolder(std::move(dstArtHolder))
|
, dstArtHolder(std::move(dstArtHolder))
|
||||||
, swap(swap)
|
, swap(swap)
|
||||||
@@ -1079,8 +1081,6 @@ struct DLL_LINKAGE BulkMoveArtifacts : CArtifactOperationPack
|
|||||||
std::vector<LinkedSlots> artsPack0;
|
std::vector<LinkedSlots> artsPack0;
|
||||||
std::vector<LinkedSlots> artsPack1;
|
std::vector<LinkedSlots> artsPack1;
|
||||||
bool swap;
|
bool swap;
|
||||||
CArtifactSet * getSrcHolderArtSet();
|
|
||||||
CArtifactSet * getDstHolderArtSet();
|
|
||||||
|
|
||||||
void visitTyped(ICPackVisitor & visitor) override;
|
void visitTyped(ICPackVisitor & visitor) override;
|
||||||
|
|
||||||
|
|||||||
@@ -2750,8 +2750,7 @@ bool CGameHandler::bulkMoveArtifacts(ObjectInstanceID srcHero, ObjectInstanceID
|
|||||||
if((!psrcHero) || (!pdstHero))
|
if((!psrcHero) || (!pdstHero))
|
||||||
COMPLAIN_RET("bulkMoveArtifacts: wrong hero's ID");
|
COMPLAIN_RET("bulkMoveArtifacts: wrong hero's ID");
|
||||||
|
|
||||||
BulkMoveArtifacts ma(static_cast<ConstTransitivePtr<CGHeroInstance>>(psrcHero),
|
BulkMoveArtifacts ma(srcHero, dstHero, swap);
|
||||||
static_cast<ConstTransitivePtr<CGHeroInstance>>(pdstHero), swap);
|
|
||||||
auto & slotsSrcDst = ma.artsPack0;
|
auto & slotsSrcDst = ma.artsPack0;
|
||||||
auto & slotsDstSrc = ma.artsPack1;
|
auto & slotsDstSrc = ma.artsPack1;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user