mirror of
https://github.com/vcmi/vcmi.git
synced 2024-11-30 08:57:00 +02:00
Fixed issue that allowed to build multiple boats in town. Renamed state() to sth more sensible.
This commit is contained in:
parent
e45d174ba5
commit
e9d51a2670
@ -3771,7 +3771,7 @@ int3 SectorMap::firstTileToGet(HeroPtr h, crint3 dst)
|
|||||||
|
|
||||||
shipyards.erase(boost::remove_if(shipyards, [=](const IShipyard *shipyard) -> bool
|
shipyards.erase(boost::remove_if(shipyards, [=](const IShipyard *shipyard) -> bool
|
||||||
{
|
{
|
||||||
return shipyard->state() != 0 || retreiveTile(shipyard->bestLocation()) != sectorToReach->id;
|
return shipyard->shipyardStatus() != 0 || retreiveTile(shipyard->bestLocation()) != sectorToReach->id;
|
||||||
}),shipyards.end());
|
}),shipyards.end());
|
||||||
|
|
||||||
if(!shipyards.size())
|
if(!shipyards.size())
|
||||||
|
@ -604,7 +604,8 @@ void CCastleBuildings::buildingClicked(BuildingID building)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case BuildingID::SHIPYARD:
|
case BuildingID::SHIPYARD:
|
||||||
LOCPLINT->showShipyardDialog(town);
|
if(town->shipyardStatus() == IBoatGenerator::GOOD)
|
||||||
|
LOCPLINT->showShipyardDialog(town);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BuildingID::FORT:
|
case BuildingID::FORT:
|
||||||
|
@ -1497,7 +1497,7 @@ void CPlayerInterface::waitWhileDialog(bool unlockPim /*= true*/)
|
|||||||
void CPlayerInterface::showShipyardDialog(const IShipyard *obj)
|
void CPlayerInterface::showShipyardDialog(const IShipyard *obj)
|
||||||
{
|
{
|
||||||
EVENT_HANDLER_CALLED_BY_CLIENT;
|
EVENT_HANDLER_CALLED_BY_CLIENT;
|
||||||
auto state = obj->state();
|
auto state = obj->shipyardStatus();
|
||||||
std::vector<si32> cost;
|
std::vector<si32> cost;
|
||||||
obj->getBoatCost(cost);
|
obj->getBoatCost(cost);
|
||||||
CShipyardWindow *csw = new CShipyardWindow(cost, state, obj->getBoatType(), [=]{ cb->buildBoat(obj); });
|
CShipyardWindow *csw = new CShipyardWindow(cost, state, obj->getBoatType(), [=]{ cb->buildBoat(obj); });
|
||||||
@ -2316,7 +2316,7 @@ void CPlayerInterface::showQuestLog()
|
|||||||
|
|
||||||
void CPlayerInterface::showShipyardDialogOrProblemPopup(const IShipyard *obj)
|
void CPlayerInterface::showShipyardDialogOrProblemPopup(const IShipyard *obj)
|
||||||
{
|
{
|
||||||
if(obj->state() != IBoatGenerator::GOOD)
|
if(obj->shipyardStatus() != IBoatGenerator::GOOD)
|
||||||
{
|
{
|
||||||
MetaString txt;
|
MetaString txt;
|
||||||
obj->getProblemText(txt);
|
obj->getProblemText(txt);
|
||||||
|
@ -1347,7 +1347,7 @@ void CGameState::init(StartInfo * si)
|
|||||||
vti->builtBuildings.insert(BuildingID::DWELL_LVL_2);
|
vti->builtBuildings.insert(BuildingID::DWELL_LVL_2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vstd::contains(vti->builtBuildings, BuildingID::SHIPYARD) && vti->state()==IBoatGenerator::TILE_BLOCKED)
|
if (vstd::contains(vti->builtBuildings, BuildingID::SHIPYARD) && vti->shipyardStatus()==IBoatGenerator::TILE_BLOCKED)
|
||||||
vti->builtBuildings.erase(BuildingID::SHIPYARD);//if we have harbor without water - erase it (this is H3 behaviour)
|
vti->builtBuildings.erase(BuildingID::SHIPYARD);//if we have harbor without water - erase it (this is H3 behaviour)
|
||||||
|
|
||||||
//init hordes
|
//init hordes
|
||||||
|
@ -6744,7 +6744,7 @@ int3 IBoatGenerator::bestLocation() const
|
|||||||
return int3 (-1,-1,-1);
|
return int3 (-1,-1,-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
IBoatGenerator::EGeneratorState IBoatGenerator::state() const
|
IBoatGenerator::EGeneratorState IBoatGenerator::shipyardStatus() const
|
||||||
{
|
{
|
||||||
int3 tile = bestLocation();
|
int3 tile = bestLocation();
|
||||||
const TerrainTile *t = IObjectInterface::cb->getTile(tile);
|
const TerrainTile *t = IObjectInterface::cb->getTile(tile);
|
||||||
@ -6772,7 +6772,7 @@ IBoatGenerator::IBoatGenerator(const CGObjectInstance *O)
|
|||||||
|
|
||||||
void IBoatGenerator::getProblemText(MetaString &out, const CGHeroInstance *visitor) const
|
void IBoatGenerator::getProblemText(MetaString &out, const CGHeroInstance *visitor) const
|
||||||
{
|
{
|
||||||
switch(state())
|
switch(shipyardStatus())
|
||||||
{
|
{
|
||||||
case BOAT_ALREADY_BUILT:
|
case BOAT_ALREADY_BUILT:
|
||||||
out.addTxt(MetaString::GENERAL_TXT, 51);
|
out.addTxt(MetaString::GENERAL_TXT, 51);
|
||||||
@ -6848,7 +6848,7 @@ void CGShipyard::onHeroVisit( const CGHeroInstance * h ) const
|
|||||||
if(!cb->gameState()->getPlayerRelations(tempOwner, h->tempOwner))
|
if(!cb->gameState()->getPlayerRelations(tempOwner, h->tempOwner))
|
||||||
cb->setOwner(this, h->tempOwner);
|
cb->setOwner(this, h->tempOwner);
|
||||||
|
|
||||||
auto s = state();
|
auto s = shipyardStatus();
|
||||||
if(s != IBoatGenerator::GOOD)
|
if(s != IBoatGenerator::GOOD)
|
||||||
{
|
{
|
||||||
InfoWindow iw;
|
InfoWindow iw;
|
||||||
|
@ -140,7 +140,7 @@ public:
|
|||||||
int3 bestLocation() const; //returns location when the boat should be placed
|
int3 bestLocation() const; //returns location when the boat should be placed
|
||||||
|
|
||||||
enum EGeneratorState {GOOD, BOAT_ALREADY_BUILT, TILE_BLOCKED, NO_WATER};
|
enum EGeneratorState {GOOD, BOAT_ALREADY_BUILT, TILE_BLOCKED, NO_WATER};
|
||||||
EGeneratorState state() const; //0 - can buid, 1 - there is already a boat at dest tile, 2 - dest tile is blocked, 3 - no water
|
EGeneratorState shipyardStatus() const; //0 - can buid, 1 - there is already a boat at dest tile, 2 - dest tile is blocked, 3 - no water
|
||||||
void getProblemText(MetaString &out, const CGHeroInstance *visitor = nullptr) const;
|
void getProblemText(MetaString &out, const CGHeroInstance *visitor = nullptr) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -4931,7 +4931,7 @@ bool CGameHandler::buildBoat( ObjectInstanceID objid )
|
|||||||
{
|
{
|
||||||
const IShipyard *obj = IShipyard::castFrom(getObj(objid));
|
const IShipyard *obj = IShipyard::castFrom(getObj(objid));
|
||||||
|
|
||||||
if(obj->state() != IBoatGenerator::GOOD)
|
if(obj->shipyardStatus() != IBoatGenerator::GOOD)
|
||||||
{
|
{
|
||||||
complain("Cannot build boat in this shipyard!");
|
complain("Cannot build boat in this shipyard!");
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
Reference in New Issue
Block a user