1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-08-13 19:54:17 +02:00

Minor optimization for object selection.

This commit is contained in:
DjWarmonger
2016-06-05 10:18:10 +02:00
parent 259056339f
commit 053b342721

View File

@@ -1658,6 +1658,12 @@ void CRmgTemplateZone::createTreasures(CMapGenerator* gen)
//place biggest treasures first at large distance, place smaller ones inbetween
boost::sort(treasureInfo, valueComparator);
//sort treasures by ascending value so we can stop checking treasures with too high value
boost::sort(possibleObjects, [](const ObjectInfo& oi1, const ObjectInfo& oi2) -> bool
{
return oi1.value < oi2.value;
});
int totalDensity = 0;
for (auto t : treasureInfo)
{
@@ -2199,7 +2205,9 @@ ObjectInfo CRmgTemplateZone::getRandomObject(CMapGenerator* gen, CTreasurePileIn
//roulette wheel
for (ObjectInfo &oi : possibleObjects) //copy constructor turned out to be costly
{
if (oi.value >= minValue && oi.value <= maxVal && oi.maxPerZone > 0)
if (oi.value > maxVal)
break; //this assumes values are sorted in ascending order
if (oi.value >= minValue && oi.maxPerZone > 0)
{
int3 newVisitableOffset = oi.templ.getVisitableOffset(); //visitablePos assumes object will be shifter by visitableOffset
int3 newVisitablePos = info.nextTreasurePos;