mirror of
https://github.com/vcmi/vcmi.git
synced 2025-08-15 20:03:15 +02:00
Templates now contain info about mines.
This commit is contained in:
@@ -9,7 +9,8 @@
|
||||
"1" :
|
||||
{
|
||||
"type" : "playerStart", "size" : 1, "owner" : 1,
|
||||
"playerTowns" : { "castles" : 1 }, "neutralTowns" : { "towns" : 1 }, "townsAreSameType" : true
|
||||
"playerTowns" : { "castles" : 1 }, "neutralTowns" : { "towns" : 1 }, "townsAreSameType" : true,
|
||||
"mines" : {"wood" : 1, "ore" : 1, "gems" : 1, "crystal" : 1, "sulfur" : 1, "mercury" : 1},
|
||||
"treasure" : [
|
||||
{"min" : 2100, "max": 3000, "density" : 5},
|
||||
{"min" : 300, "max": 1500, "density" : 10}
|
||||
@@ -19,24 +20,28 @@
|
||||
{
|
||||
"type" : "playerStart", "size" : 1, "owner" : 2,
|
||||
"playerTowns" : { "castles" : 1 }, "neutralTowns" : { "towns" : 1 }, "townsAreSameType" : true,
|
||||
"minesLikeZone" : 1,
|
||||
"treasureLikeZone" : 1
|
||||
},
|
||||
"3" :
|
||||
{
|
||||
"type" : "playerStart", "size" : 1, "owner" : 3,
|
||||
"playerTowns" : { "castles" : 1 }, "neutralTowns" : { "towns" : 1 }, "townsAreSameType" : true,
|
||||
"minesLikeZone" : 1,
|
||||
"treasureLikeZone" : 1
|
||||
},
|
||||
"4" :
|
||||
{
|
||||
"type" : "playerStart", "size" : 1, "owner" : 4,
|
||||
"playerTowns" : { "castles" : 1 }, "neutralTowns" : { "towns" : 1 }, "townsAreSameType" : true,
|
||||
"minesLikeZone" : 1,
|
||||
"treasureLikeZone" : 1
|
||||
},
|
||||
"5" :
|
||||
{
|
||||
"type" : "treasure", "size" : 2, "terrainTypes" : [ "sand" ], "matchTerrainToTown" : false,
|
||||
"neutralTowns" : { "castles" : 1 },
|
||||
"mines" : {"gold" : 2},
|
||||
"treasure" : [
|
||||
{"min" : 9000, "max": 10000, "density" : 3},
|
||||
{"min" : 6000, "max": 10000, "density" : 15}
|
||||
@@ -61,6 +66,7 @@
|
||||
{
|
||||
"type" : "playerStart", "size" : 1, "owner" : 1,
|
||||
"playerTowns" : { "castles" : 1 },
|
||||
"mines" : {"wood" : 1, "ore" : 1},
|
||||
"treasure" : [
|
||||
{"min" : 400, "max": 1500, "density" : 16},
|
||||
{"min" : 1500, "max": 2500, "density" : 4}
|
||||
@@ -70,11 +76,13 @@
|
||||
{
|
||||
"type" : "playerStart", "size" : 1, "owner" : 2,
|
||||
"playerTowns" : { "castles" : 1 },
|
||||
"minesLikeZone" : 1,
|
||||
"treasureLikeZone" : 1
|
||||
},
|
||||
"3" :
|
||||
{
|
||||
"type" : "treasure", "size" : 2, "neutralTowns" : { "towns" : 1 }, "townTypeLikeZone" : 1,
|
||||
"mines" : {"gems" : 1, "crystal" : 1, "sulfur" : 1, "mercury" : 1, "gold" : 1},
|
||||
"treasure" : [
|
||||
{"min" : 2000, "max": 4000, "density" : 15},
|
||||
{"min" : 4000, "max": 5000, "density" : 5}
|
||||
@@ -83,11 +91,13 @@
|
||||
"4" :
|
||||
{
|
||||
"type" : "treasure", "size" : 2, "neutralTowns" : { "towns" : 1 }, "townTypeLikeZone" : 2,
|
||||
"minesLikeZone" : 3,
|
||||
"treasureLikeZone" : 3
|
||||
},
|
||||
"5" :
|
||||
{
|
||||
"type" : "treasure", "size" : 3, "neutralTowns" : { "castles" : 1 }, "terrainTypes" : [ "sand" ],
|
||||
"mines" : {"gold" : 2},
|
||||
"treasure" : [
|
||||
{"min" : 11000, "max": 12000, "density" : 5},
|
||||
{"min" : 6000, "max": 11000, "density" : 10}
|
||||
@@ -114,6 +124,7 @@
|
||||
{
|
||||
"type" : "playerStart", "size" : 3, "owner" : 1,
|
||||
"playerTowns" : { "castles" : 1 },
|
||||
"mines" : {"wood" : 1, "ore" : 1},
|
||||
"treasure" : [
|
||||
{"min" : 300, "max": 2000, "density": 15},
|
||||
{"min" : 2100, "max": 2500, "density": 5}
|
||||
@@ -123,29 +134,37 @@
|
||||
{
|
||||
"type" : "playerStart", "size" : 3, "owner" : 2,
|
||||
"playerTowns" : { "castles" : 1 },
|
||||
"minesLikeZone" : 1,
|
||||
"treasureLikeZone" : 1
|
||||
},
|
||||
"3" :
|
||||
{
|
||||
"type" : "playerStart", "size" : 3, "owner" : 3,
|
||||
"playerTowns" : { "castles" : 1 },
|
||||
"minesLikeZone" : 1,
|
||||
"treasureLikeZone" : 1
|
||||
},
|
||||
"4" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : 1, "treasure" : [
|
||||
{"min" : 3000, "max": 10000, "density" : 12},
|
||||
{"min" : 6000, "max": 10000, "density" : 6}
|
||||
]},
|
||||
"5" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : 1, "treasureLikeZone" : 4},
|
||||
"6" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : 2, "treasureLikeZone" : 4 },
|
||||
"7" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : 2, "treasureLikeZone" : 4 },
|
||||
"8" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : 3, "treasureLikeZone" : 4 },
|
||||
"9" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : 3, "treasureLikeZone" : 4 },
|
||||
"10" : { "type" : "treasure", "size" : 1, "neutralTowns" : { "towns" : 1 }, "treasure" : [
|
||||
{"min" : 21000, "max": 25000, "density" : 3},
|
||||
{"min" : 10000, "max": 21000, "density" : 10}
|
||||
]},
|
||||
"11" : { "type" : "treasure", "size" : 1, "neutralTowns" : { "towns" : 1 }, "treasureLikeZone" : 10 },
|
||||
"12" : { "type" : "treasure", "size" : 1, "neutralTowns" : { "towns" : 1 }, "treasureLikeZone" : 10 }
|
||||
"4" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : 1,
|
||||
"mines" : {"gems" : 1, "crystal" : 1},
|
||||
"treasure" : [
|
||||
{"min" : 3000, "max": 10000, "density" : 12},
|
||||
{"min" : 6000, "max": 10000, "density" : 6}
|
||||
]},
|
||||
"5" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : 1,
|
||||
"mines" : {"sulfur" : 1, "mercury" : 1},
|
||||
"treasureLikeZone" : 4},
|
||||
"6" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : 2, "minesLikeZone" : 5, "treasureLikeZone" : 4 },
|
||||
"7" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : 2, "minesLikeZone" : 4, "treasureLikeZone" : 4 },
|
||||
"8" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : 3, "minesLikeZone" : 4, "treasureLikeZone" : 4 },
|
||||
"9" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : 3, "minesLikeZone" : 5, "treasureLikeZone" : 4 },
|
||||
"10" : { "type" : "treasure", "size" : 1, "neutralTowns" : { "towns" : 1 },
|
||||
"mines" : {"gold" : 1},
|
||||
"treasure" : [
|
||||
{"min" : 21000, "max": 25000, "density" : 3},
|
||||
{"min" : 10000, "max": 21000, "density" : 10}
|
||||
]},
|
||||
"11" : { "type" : "treasure", "size" : 1, "neutralTowns" : { "towns" : 1 }, "minesLikeZone" : 10, "treasureLikeZone" : 10 },
|
||||
"12" : { "type" : "treasure", "size" : 1, "neutralTowns" : { "towns" : 1 }, "minesLikeZone" : 10, "treasureLikeZone" : 10 }
|
||||
},
|
||||
"connections" :
|
||||
[
|
||||
@@ -213,6 +232,7 @@
|
||||
"type" : "playerStart", "size" : 30, "owner" : 1,
|
||||
"playerTowns" : { "castles" : 1 },
|
||||
"neutralTowns" : { "towns" : 2 },
|
||||
"mines" : {"wood" : 4, "ore" : 4, "gems" : 1, "crystal" : 1, "sulfur" : 1, "mercury" : 1, "gold" : 2},
|
||||
"treasure" : [
|
||||
{"min" : 12000, "max": 22000, "density": 1},
|
||||
{"min" : 500, "max": 1600, "density": 6},
|
||||
@@ -224,6 +244,7 @@
|
||||
"type" : "playerStart", "size" : 30, "owner" : 2,
|
||||
"playerTowns" : { "castles" : 1 },
|
||||
"neutralTowns" : { "towns" : 2 },
|
||||
"minesLikeZone" : 1,
|
||||
"treasureLikeZone" : 1
|
||||
},
|
||||
"3":
|
||||
@@ -231,6 +252,7 @@
|
||||
"type" : "playerStart", "size" : 30, "owner" : 3,
|
||||
"playerTowns" : { "castles" : 1 },
|
||||
"neutralTowns" : { "towns" : 2 },
|
||||
"minesLikeZone" : 1,
|
||||
"treasureLikeZone" : 1
|
||||
},
|
||||
"4":
|
||||
@@ -238,6 +260,7 @@
|
||||
"type" : "playerStart", "size" : 30, "owner" : 4,
|
||||
"playerTowns" : { "castles" : 1 },
|
||||
"neutralTowns" : { "towns" : 2 },
|
||||
"minesLikeZone" : 1,
|
||||
"treasureLikeZone" : 1
|
||||
},
|
||||
"5" :
|
||||
@@ -245,6 +268,7 @@
|
||||
"type" : "treasure", "size" : 40,
|
||||
"neutralTowns" : { "towns" : 2 },
|
||||
"terrainTypes" : [ "sand" ], "matchTerrainToTown" : false,
|
||||
"mines" : {"gold" : 4},
|
||||
"treasure" : [
|
||||
{"min" : 35000, "max": 55000, "density" : 3},
|
||||
{"min" : 25000, "max": 35000, "density" : 10},
|
||||
|
@@ -65,6 +65,20 @@ void CJsonRmgTemplateLoader::loadTemplates()
|
||||
zone->setTerrainTypes(parseTerrainTypes(zoneNode["terrainTypes"].Vector(), zone->getDefaultTerrainTypes()));
|
||||
zone->setTownsAreSameType((zoneNode["townsAreSameType"].Bool()));
|
||||
|
||||
if (!zoneNode["mines"].isNull())
|
||||
{
|
||||
auto mines = zoneNode["mines"].Struct();
|
||||
//FIXME: maybe there is a smarter way to parse it already?
|
||||
zone->setMinesAmount(Res::WOOD, mines["wood"].Float());
|
||||
zone->setMinesAmount(Res::ORE, mines["ore"].Float());
|
||||
zone->setMinesAmount(Res::GEMS, mines["gems"].Float());
|
||||
zone->setMinesAmount(Res::CRYSTAL, mines["crystal"].Float());
|
||||
zone->setMinesAmount(Res::SULFUR, mines["sulfur"].Float());
|
||||
zone->setMinesAmount(Res::MERCURY, mines["mercury"].Float());
|
||||
zone->setMinesAmount(Res::GOLD, mines["gold"].Float());
|
||||
//TODO: Mithril
|
||||
}
|
||||
|
||||
//treasures
|
||||
if (!zoneNode["treasure"].isNull())
|
||||
{
|
||||
@@ -124,6 +138,15 @@ void CJsonRmgTemplateLoader::loadTemplates()
|
||||
}
|
||||
zone->setTotalDensity (zones[zoneNode["treasureLikeZone"].Float()]->getTotalDensity());
|
||||
}
|
||||
|
||||
if (!zoneNode["minesLikeZone"].isNull())
|
||||
{
|
||||
for (auto mineInfo : zones[zoneNode["minesLikeZone"].Float()]->getMinesInfo())
|
||||
{
|
||||
zone->setMinesAmount (mineInfo.first, mineInfo.second);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
tpl->setZones(zones);
|
||||
|
@@ -256,6 +256,16 @@ std::set<ETerrainType> CRmgTemplateZone::getDefaultTerrainTypes() const
|
||||
return terTypes;
|
||||
}
|
||||
|
||||
void CRmgTemplateZone::setMinesAmount (TResource res, ui16 amount)
|
||||
{
|
||||
mines[res] = amount;
|
||||
}
|
||||
|
||||
std::map<TResource, ui16> CRmgTemplateZone::getMinesInfo() const
|
||||
{
|
||||
return mines;
|
||||
}
|
||||
|
||||
void CRmgTemplateZone::addConnection(TRmgTemplateZoneId otherZone)
|
||||
{
|
||||
connections.push_back (otherZone);
|
||||
@@ -726,20 +736,6 @@ void CRmgTemplateZone::initTownType (CMapGenerator* gen)
|
||||
playerInfo.generateHeroAtMainTown = true;
|
||||
|
||||
//requiredObjects.push_back(town);
|
||||
|
||||
std::vector<Res::ERes> required_mines;
|
||||
required_mines.push_back(Res::ERes::WOOD);
|
||||
required_mines.push_back(Res::ERes::ORE);
|
||||
|
||||
for(const auto res : required_mines)
|
||||
{
|
||||
auto mine = new CGMine();
|
||||
mine->ID = Obj::MINE;
|
||||
mine->subID = static_cast<si32>(res);
|
||||
mine->producedResource = res;
|
||||
mine->producedQuantity = mine->defaultResProduction();
|
||||
addRequiredObject(mine);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -772,11 +768,61 @@ void CRmgTemplateZone::initTerrainType (CMapGenerator* gen)
|
||||
gen->editManager->drawTerrain(terrainType, &gen->rand);
|
||||
}
|
||||
|
||||
bool CRmgTemplateZone::placeMines (CMapGenerator* gen)
|
||||
{
|
||||
std::vector<Res::ERes> required_mines;
|
||||
required_mines.push_back(Res::ERes::WOOD);
|
||||
required_mines.push_back(Res::ERes::ORE);
|
||||
|
||||
static const Res::ERes woodOre[] = {Res::ERes::WOOD, Res::ERes::ORE};
|
||||
static const Res::ERes preciousResources[] = {Res::ERes::GEMS, Res::ERes::CRYSTAL, Res::ERes::MERCURY, Res::ERes::SULFUR};
|
||||
|
||||
|
||||
//TODO: factory / copy constructor?
|
||||
for (const auto & res : woodOre)
|
||||
{
|
||||
//TODO: these 2 should be close to town (within 12 tiles radius)
|
||||
for (int i = 0; i < mines[res]; i++)
|
||||
{
|
||||
auto mine = new CGMine();
|
||||
mine->ID = Obj::MINE;
|
||||
mine->subID = static_cast<si32>(res);
|
||||
mine->producedResource = res;
|
||||
mine->producedQuantity = mine->defaultResProduction();
|
||||
addRequiredObject(mine, 1500);
|
||||
}
|
||||
}
|
||||
for (const auto & res : preciousResources)
|
||||
{
|
||||
for (int i = 0; i < mines[res]; i++)
|
||||
{
|
||||
auto mine = new CGMine();
|
||||
mine->ID = Obj::MINE;
|
||||
mine->subID = static_cast<si32>(res);
|
||||
mine->producedResource = res;
|
||||
mine->producedQuantity = mine->defaultResProduction();
|
||||
addRequiredObject(mine, 3500);
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < mines[Res::GOLD]; i++)
|
||||
{
|
||||
auto mine = new CGMine();
|
||||
mine->ID = Obj::MINE;
|
||||
mine->subID = static_cast<si32>(Res::GOLD);
|
||||
mine->producedResource = Res::GOLD;
|
||||
mine->producedQuantity = mine->defaultResProduction();
|
||||
addRequiredObject(mine, 7000);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CRmgTemplateZone::fill(CMapGenerator* gen)
|
||||
{
|
||||
addAllPossibleObjects (gen);
|
||||
initTownType(gen);
|
||||
initTerrainType(gen);
|
||||
placeMines(gen);
|
||||
|
||||
logGlobal->infoStream() << "Creating required objects";
|
||||
for(const auto &obj : requiredObjects)
|
||||
|
@@ -15,6 +15,7 @@
|
||||
#include "CMapGenerator.h"
|
||||
#include "float3.h"
|
||||
#include "../int3.h"
|
||||
#include "../ResourceSet.h" //for TResource (?)
|
||||
|
||||
class CMapGenerator;
|
||||
class CTileInfo;
|
||||
@@ -115,6 +116,8 @@ public:
|
||||
const std::set<ETerrainType> & getTerrainTypes() const; /// Default: all
|
||||
void setTerrainTypes(const std::set<ETerrainType> & value);
|
||||
std::set<ETerrainType> getDefaultTerrainTypes() const;
|
||||
void setMinesAmount (TResource res, ui16 amount);
|
||||
std::map<TResource, ui16> getMinesInfo() const;
|
||||
|
||||
float3 getCenter() const;
|
||||
void setCenter(const float3 &f);
|
||||
@@ -127,7 +130,8 @@ public:
|
||||
void addRequiredObject(CGObjectInstance * obj, si32 guardStrength=0);
|
||||
bool addMonster(CMapGenerator* gen, int3 &pos, si32 strength);
|
||||
bool createTreasurePile (CMapGenerator* gen, int3 &pos);
|
||||
bool fill(CMapGenerator* gen);
|
||||
bool fill (CMapGenerator* gen);
|
||||
bool placeMines (CMapGenerator* gen);
|
||||
void initTownType (CMapGenerator* gen);
|
||||
void initTerrainType (CMapGenerator* gen);
|
||||
void createBorder(CMapGenerator* gen);
|
||||
@@ -154,6 +158,7 @@ private:
|
||||
std::set<TFaction> townTypes;
|
||||
bool matchTerrainToTown;
|
||||
std::set<ETerrainType> terrainTypes;
|
||||
std::map<TResource, ui16> mines; //obligatory mines to spawn in this zone
|
||||
|
||||
si32 townType;
|
||||
ETerrainType terrainType;
|
||||
|
Reference in New Issue
Block a user