mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-16 10:19:47 +02:00
48 lines
1.3 KiB
C++
48 lines
1.3 KiB
C++
/*
|
|
* VisitQueries.cpp, part of VCMI engine
|
|
*
|
|
* Authors: listed in file AUTHORS in main folder
|
|
*
|
|
* License: GNU General Public License v2.0 or later
|
|
* Full text of license available in license.txt file, in main folder
|
|
*
|
|
*/
|
|
#include "StdInc.h"
|
|
#include "VisitQueries.h"
|
|
|
|
#include "QueriesProcessor.h"
|
|
#include "../CGameHandler.h"
|
|
#include "../../lib/mapObjects/CGHeroInstance.h"
|
|
|
|
CObjectVisitQuery::CObjectVisitQuery(CGameHandler * owner, const CGObjectInstance * Obj, const CGHeroInstance * Hero):
|
|
CQuery(owner), visitedObject(Obj), visitingHero(Hero), removeObjectAfterVisit(false)
|
|
{
|
|
addPlayer(Hero->tempOwner);
|
|
}
|
|
|
|
bool CObjectVisitQuery::blocksPack(const CPack *pack) const
|
|
{
|
|
//During the visit itself ALL actions are blocked.
|
|
//(However, the visit may trigger a query above that'll pass some.)
|
|
return true;
|
|
}
|
|
|
|
void CObjectVisitQuery::onRemoval(PlayerColor color)
|
|
{
|
|
gh->objectVisitEnded(*this);
|
|
|
|
//TODO or should it be destructor?
|
|
//Can object visit affect 2 players and what would be desired behavior?
|
|
if(removeObjectAfterVisit)
|
|
gh->removeObject(visitedObject, color);
|
|
}
|
|
|
|
void CObjectVisitQuery::onExposure(QueryPtr topQuery)
|
|
{
|
|
//Object may have been removed and deleted.
|
|
if(gh->isValidObject(visitedObject))
|
|
topQuery->notifyObjectAboutRemoval(visitedObject, visitingHero);
|
|
|
|
owner->popIfTop(*this);
|
|
}
|