Fix SpawnArea and PathArea connections

This commit is contained in:
2026-09-07 11:42:22 +02:00
parent 5ab7696e5f
commit 0d7a88bb4c
4 changed files with 27 additions and 9 deletions
@@ -367,11 +367,13 @@ public class DynamicRegionEditor implements SWPlayer.Component, Listener {
checkSpawnRegionAndDelete(Tile.TILE_NP);
checkSpawnRegionAndDelete(Tile.TILE_PN);
checkSpawnRegionAndDelete(Tile.TILE_PP);
DynamicRegionSystem.INSTANCE.get(Tile.ZERO).getArea().place(new PasteBuilder(), false);
DynamicRegionSystem.INSTANCE.get(Tile.TILE_NZ).getArea().place(new PasteBuilder(), false);
DynamicRegionSystem.INSTANCE.get(Tile.TILE_PZ).getArea().place(new PasteBuilder(), false);
DynamicRegionSystem.INSTANCE.get(Tile.TILE_ZN).getArea().place(new PasteBuilder(), false);
DynamicRegionSystem.INSTANCE.get(Tile.TILE_ZP).getArea().place(new PasteBuilder(), false);
});
DynamicRegionSystem.INSTANCE.get(Tile.TILE_NZ).getArea().place(new PasteBuilder(), false);
DynamicRegionSystem.INSTANCE.get(Tile.TILE_PZ).getArea().place(new PasteBuilder(), false);
DynamicRegionSystem.INSTANCE.get(Tile.TILE_ZN).getArea().place(new PasteBuilder(), false);
DynamicRegionSystem.INSTANCE.get(Tile.TILE_ZP).getArea().place(new PasteBuilder(), false);
}
private void checkSpawnRegionAndDelete(Tile tile) {
@@ -241,7 +241,7 @@ public class PathArea extends Region.Area {
if (optionalSide == null && side.opposite().equals(spawnRegion.getPathSide())) {
return spawnPathConnection;
} else {
return Plot;
return Void;
}
}
return region.getType().getConnectionType();
@@ -59,8 +59,8 @@ class SelectorCorner {
}
public Pair<VariantSelector, PathArea.RotationCorrection> Select(Tile tile, PathCorner corner) {
RegionType.ConnectionType left = PathArea.getConnectionType(tile, corner.side1, null, RegionType.ConnectionType.Plot);
RegionType.ConnectionType right = PathArea.getConnectionType(tile, corner.side2, null, RegionType.ConnectionType.Plot);
RegionType.ConnectionType left = PathArea.getConnectionType(tile, corner.side1, null);
RegionType.ConnectionType right = PathArea.getConnectionType(tile, corner.side2, null);
RegionType.ConnectionType diagonal = PathArea.getConnectionType(tile, corner.side1, corner.side2);
int index = getIndex(left, right, diagonal);
return new Pair<>(selectors[index], rotationCorrections[index]);
@@ -35,6 +35,11 @@ import java.util.List;
public class SpawnArea extends Region.Area {
private static final VariantSelector SPAWN_BIG = VariantSelector.Schematic(179980);
private static final VariantSelector SPAWN_LITTLE_ZZ = VariantSelector.Schematic(180022);
private static final VariantSelector SPAWN_LITTLE_NZ = VariantSelector.Schematic(180024);
private static final VariantSelector SPAWN_LITTLE_PZ = VariantSelector.Schematic(180025);
private static final VariantSelector SPAWN_LITTLE_ZN = VariantSelector.Schematic(180023);
private static final VariantSelector SPAWN_LITTLE_ZP = VariantSelector.Schematic(180021);
private final Tile tile;
@@ -63,11 +68,12 @@ public class SpawnArea extends Region.Area {
.map(DynamicRegionSystem.Neighbour::region)
.toList();
if (regions.stream().map(DynamicRegion::getType).allMatch(RegionType::isSpawn)) {
if (regions.size() == 8) {
PasteUtils.paste(SPAWN_BIG.select().orElseThrow(), Tile.TILE_NN.getMinPoint().setY(WORLD_MIN_Y), 0);
return;
}
DynamicRegionSystem.INSTANCE.get(Tile.ZERO).getArea().place(new PasteBuilder(), false);
for (DynamicRegion region : regions) {
if (region.getArea() instanceof SpawnArea spawnArea) {
spawnArea.place(new PasteBuilder(), false);
@@ -77,6 +83,16 @@ public class SpawnArea extends Region.Area {
@Override
public void place(PasteBuilder pasteBuilder, boolean extension) {
if (tile.equals(Tile.ZERO)) {
PasteUtils.paste(SPAWN_LITTLE_ZZ.select().orElseThrow(), getMinPoint(false), 0);
} else if (tile.equals(Tile.TILE_NZ)) {
PasteUtils.paste(SPAWN_LITTLE_NZ.select().orElseThrow(), getMinPoint(false), 0);
} else if (tile.equals(Tile.TILE_PZ)) {
PasteUtils.paste(SPAWN_LITTLE_PZ.select().orElseThrow(), getMinPoint(false), 0);
} else if (tile.equals(Tile.TILE_ZN)) {
PasteUtils.paste(SPAWN_LITTLE_ZN.select().orElseThrow(), getMinPoint(false), 0);
} else if (tile.equals(Tile.TILE_ZP)) {
PasteUtils.paste(SPAWN_LITTLE_ZP.select().orElseThrow(), getMinPoint(false), 0);
}
}
}