mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
3dd4fa2528
Final goal (of multiple PR's) is to remove all remaining pointers from serializeable game state, and replace them with either identifiers or with shared/unique pointers. CGTownInstance::town and CGHeroInstance::type members have been removed. Now this data is computed dynamically using subID member. VLC entity of a town can now be accessed via following methods: - getFactionID() returns ID of a faction - getFaction() returns pointer to a faction - getTown() returns pointer to a town VLC entity of a hero can now be accessed via following methods: - getHeroTypeID() returns ID of a hero - getHeroClassID() returns ID of a hero class - getHeroType() returns pointer to a hero - getHeroClass() returns pointer to a hero class
66 lines
1.4 KiB
C++
66 lines
1.4 KiB
C++
/*
|
|
* BuildThis.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 "BuildThis.h"
|
|
#include "../AIGateway.h"
|
|
#include "../AIUtility.h"
|
|
#include "../../../lib/constants/StringConstants.h"
|
|
#include "../../../lib/entities/building/CBuilding.h"
|
|
|
|
namespace NKAI
|
|
{
|
|
|
|
using namespace Goals;
|
|
|
|
BuildThis::BuildThis(BuildingID Bid, const CGTownInstance * tid)
|
|
: ElementarGoal(Goals::BUILD_STRUCTURE)
|
|
{
|
|
buildingInfo = BuildingInfo(
|
|
tid->getTown()->buildings.at(Bid),
|
|
nullptr,
|
|
CreatureID::NONE,
|
|
tid,
|
|
nullptr);
|
|
|
|
bid = Bid;
|
|
town = tid;
|
|
}
|
|
|
|
bool BuildThis::operator==(const BuildThis & other) const
|
|
{
|
|
return town == other.town && bid == other.bid;
|
|
}
|
|
|
|
std::string BuildThis::toString() const
|
|
{
|
|
return "Build " + buildingInfo.name + " in " + town->getNameTranslated();
|
|
}
|
|
|
|
void BuildThis::accept(AIGateway * ai)
|
|
{
|
|
auto b = BuildingID(bid);
|
|
|
|
if(town)
|
|
{
|
|
if(cb->canBuildStructure(town, b) == EBuildingState::ALLOWED)
|
|
{
|
|
logAi->debug("Player %d will build %s in town of %s at %s",
|
|
ai->playerID, town->getTown()->buildings.at(b)->getNameTranslated(), town->getNameTranslated(), town->anchorPos().toString());
|
|
cb->buildBuilding(town, b);
|
|
|
|
return;
|
|
}
|
|
}
|
|
|
|
throw cannotFulfillGoalException("Cannot build a given structure!");
|
|
}
|
|
|
|
}
|