From b3bb4a62ad7aa8f19096e83304776ae38681cd33 Mon Sep 17 00:00:00 2001 From: Fabio Pedretti Date: Tue, 20 Oct 2026 11:44:43 +0200 Subject: [PATCH] Create the CityPainter placement constraint once per area It was recreated for every candidate building. --- .../mods/public/maps/random/rmgen/painter/CityPainter.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/binaries/data/mods/public/maps/random/rmgen/painter/CityPainter.js b/binaries/data/mods/public/maps/random/rmgen/painter/CityPainter.js index 54dbe7c38d..bb021f2312 100644 --- a/binaries/data/mods/public/maps/random/rmgen/painter/CityPainter.js +++ b/binaries/data/mods/public/maps/random/rmgen/painter/CityPainter.js @@ -40,6 +40,12 @@ CityPainter.prototype.paint = function(area) // if it would use a custom, more fine-grained obstruction grid const tileClass = g_Map.createTileClass(); + const placeConstraint = new AndConstraint([ + new StayAreasConstraint([area]), + avoidClasses(tileClass, 0), + new PassableMapAreaConstraint() + ]); + const processed = new Array(mapSize).fill(0).map(() => new Uint8Array(mapSize)); const areaPoints = area.getPoints(); @@ -77,8 +83,7 @@ CityPainter.prototype.paint = function(area) const obstructionCorners = template.obstructionCorners.map(obstructionCorner => Vector2D.add(point, obstructionCorner.clone().rotate(buildingAngle))); - const obstructionPoints = new ConvexPolygonPlacer(obstructionCorners, 0).place( - new AndConstraint([new StayAreasConstraint([area]), avoidClasses(tileClass, 0), new PassableMapAreaConstraint()])); + const obstructionPoints = new ConvexPolygonPlacer(obstructionCorners, 0).place(placeConstraint); if (!obstructionPoints) continue;