1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-09-16 09:26:28 +02:00

Actually copy zone data from map generator template

* fixes https://bugs.vcmi.eu/view.php?id=2482
This commit is contained in:
AlexVinS
2018-03-05 17:05:17 +03:00
parent 4ee9d7f65a
commit 26aad17295
8 changed files with 470 additions and 362 deletions

View File

@@ -18,6 +18,7 @@
#include "../StringConstants.h"
#include "../filesystem/Filesystem.h"
#include "CZonePlacer.h"
#include "CRmgTemplateZone.h"
#include "../mapObjects/CObjectClassesHandler.h"
static const int3 dirs4[] = {int3(0,1,0),int3(0,-1,0),int3(-1,0,0),int3(+1,0,0)};
@@ -273,10 +274,15 @@ void CMapGenerator::genZones()
editManager->drawTerrain(ETerrainType::GRASS, &rand);
auto tmpl = mapGenOptions->getMapTemplate();
zones = tmpl->getZones(); //copy from template (refactor?)
//immediately set gen pointer before taking any actions on zones
for (auto zone : zones)
zone.second->setGenPtr(this);
zones.clear();
for(const auto & option : tmpl->getZones())
{
auto zone = new CRmgTemplateZone();
zone->setOptions(option.second);
zones[zone->getId()] = zone;
//todo: move to CRmgTemplateZone constructor
zone->setGenPtr(this);//immediately set gen pointer before taking any actions on zones
}
CZonePlacer placer(this);
placer.placeZones(mapGenOptions, &rand);
@@ -474,8 +480,8 @@ void CMapGenerator::findZonesForQuestArts()
for (auto connection : mapGenOptions->getMapTemplate()->getConnections())
{
auto zoneA = connection.getZoneA();
auto zoneB = connection.getZoneB();
auto zoneA = zones[connection.getZoneA()];
auto zoneB = zones[connection.getZoneB()];
if (zoneA->getId() > zoneB->getId())
{
@@ -492,8 +498,8 @@ void CMapGenerator::createDirectConnections()
{
for (auto connection : mapGenOptions->getMapTemplate()->getConnections())
{
auto zoneA = connection.getZoneA();
auto zoneB = connection.getZoneB();
auto zoneA = zones[connection.getZoneA()];
auto zoneB = zones[connection.getZoneB()];
//rearrange tiles in random order
auto tilesCopy = zoneA->getTileInfo();
@@ -572,8 +578,8 @@ void CMapGenerator::createConnections2()
{
for (auto & connection : connectionsLeft)
{
auto zoneA = connection.getZoneA();
auto zoneB = connection.getZoneB();
auto zoneA = zones[connection.getZoneA()];
auto zoneB = zones[connection.getZoneB()];
int3 guardPos(-1, -1, -1);