v2.4.0: fixed very rare cases of hourglass affecting levelgen

This commit is contained in:
Evan Debenham
2024-04-07 16:02:57 -04:00
parent 544c1e926d
commit f23962ec56
2 changed files with 19 additions and 5 deletions

View File

@@ -366,7 +366,7 @@ public class CityBossLevel extends Level {
}
private void spawnShop(){
while (impShop.itemCount() >= 7*(impShop.height()-2)){
while (impShop.spacesNeeded() >= 7*(impShop.height()-2)){
impShop.bottom++;
}
impShop.spawnShop(this);

View File

@@ -68,17 +68,31 @@ public class ShopRoom extends SpecialRoom {
@Override
public int minWidth() {
return Math.max(7, (int)(Math.sqrt(itemCount())+3));
return Math.max(7, (int)(Math.sqrt(spacesNeeded())+3));
}
@Override
public int minHeight() {
return Math.max(7, (int)(Math.sqrt(itemCount())+3));
return Math.max(7, (int)(Math.sqrt(spacesNeeded())+3));
}
public int itemCount(){
public int spacesNeeded(){
if (itemsToSpawn == null) itemsToSpawn = generateItems();
return itemsToSpawn.size();
//sandbags spawn based on current level of an hourglass the player may be holding
// so, to avoid rare cases of min sizes differing based on that, we ignore all sandbags
// and then add 4 items in all cases, which is max number of sandbags that can be in the shop
int spacesNeeded = itemsToSpawn.size();
for (Item i : itemsToSpawn){
if (i instanceof TimekeepersHourglass.sandBag){
spacesNeeded--;
}
}
spacesNeeded += 4;
//we also add 1 more space, for the shopkeeper
spacesNeeded++;
return spacesNeeded;
}
public void paint( Level level ) {