forked from SteamWar/SteamWar
Fix SpawnArea and PathArea connections
This commit is contained in:
+6
-4
@@ -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) {
|
||||
|
||||
+1
-1
@@ -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();
|
||||
|
||||
+2
-2
@@ -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]);
|
||||
|
||||
+18
-2
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user