forked from SteamWar/SteamWar
Remove ConnectionType.Void
This commit is contained in:
@@ -26,17 +26,17 @@ import lombok.RequiredArgsConstructor;
|
|||||||
@Getter
|
@Getter
|
||||||
public enum RegionType {
|
public enum RegionType {
|
||||||
|
|
||||||
GLOBAL(ConnectionType.Void),
|
GLOBAL(ConnectionType.Water),
|
||||||
/**
|
/**
|
||||||
* This should not be used by the DynamicRegionSystem
|
* This should not be used by the DynamicRegionSystem
|
||||||
*/
|
*/
|
||||||
NORMAL(ConnectionType.Plot),
|
NORMAL(ConnectionType.Plot),
|
||||||
|
|
||||||
SPAWN(ConnectionType.Void),
|
SPAWN(ConnectionType.Water),
|
||||||
SPAWN_EXTENSION(ConnectionType.Void),
|
SPAWN_EXTENSION(ConnectionType.Water),
|
||||||
PATH(ConnectionType.Path),
|
PATH(ConnectionType.Path),
|
||||||
|
|
||||||
DRY(ConnectionType.Void),
|
DRY(ConnectionType.Water),
|
||||||
DRY_SPECIAL(ConnectionType.Plot),
|
DRY_SPECIAL(ConnectionType.Plot),
|
||||||
WET(ConnectionType.Water),
|
WET(ConnectionType.Water),
|
||||||
WET_SPECIAL(ConnectionType.Water),
|
WET_SPECIAL(ConnectionType.Water),
|
||||||
@@ -64,7 +64,6 @@ public enum RegionType {
|
|||||||
Plot,
|
Plot,
|
||||||
Path,
|
Path,
|
||||||
Water,
|
Water,
|
||||||
Void,
|
|
||||||
Garden,
|
Garden,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-33
@@ -49,10 +49,6 @@ public class PathArea extends Region.Area {
|
|||||||
|
|
||||||
private static final VariantSelector CENTER = VariantSelector.Folder("Path", "Center");
|
private static final VariantSelector CENTER = VariantSelector.Folder("Path", "Center");
|
||||||
|
|
||||||
private static final VariantSelector SIDE_VOID = VariantSelector.Folder("Path", "Edge", "Void");
|
|
||||||
private static final VariantSelector CORNER_INNER_VOID = VariantSelector.Folder("Path", "Corner", "Inner", "Void");
|
|
||||||
private static final VariantSelector CORNER_OUTER_VOID = VariantSelector.Folder("Path", "Corner", "Outer", "Void");
|
|
||||||
|
|
||||||
private static final VariantSelector SIDE_WATER = VariantSelector.Folder("Path", "Edge", "Water");
|
private static final VariantSelector SIDE_WATER = VariantSelector.Folder("Path", "Edge", "Water");
|
||||||
private static final VariantSelector CORNER_INNER_WATER = VariantSelector.Folder("Path", "Corner", "Inner", "Water");
|
private static final VariantSelector CORNER_INNER_WATER = VariantSelector.Folder("Path", "Corner", "Inner", "Water");
|
||||||
private static final VariantSelector CORNER_OUTER_WATER = VariantSelector.Folder("Path", "Corner", "Outer", "Water");
|
private static final VariantSelector CORNER_OUTER_WATER = VariantSelector.Folder("Path", "Corner", "Outer", "Water");
|
||||||
@@ -68,12 +64,10 @@ public class PathArea extends Region.Area {
|
|||||||
private static final VariantSelector CORNER_OUTER_GARDEN = VariantSelector.Get(new File(PATH_DIR, "couter/garden"));
|
private static final VariantSelector CORNER_OUTER_GARDEN = VariantSelector.Get(new File(PATH_DIR, "couter/garden"));
|
||||||
|
|
||||||
private static final VariantSelector TORII_CENTER = VariantSelector.Schematic("Path", "Torii", "Center");
|
private static final VariantSelector TORII_CENTER = VariantSelector.Schematic("Path", "Torii", "Center");
|
||||||
private static final VariantSelector TORII_SIDE_VOID = VariantSelector.Schematic("Path", "Torii", "Edge_Void");
|
|
||||||
private static final VariantSelector TORII_SIDE_WATER = VariantSelector.Schematic("Path", "Torii", "Edge_Water");
|
private static final VariantSelector TORII_SIDE_WATER = VariantSelector.Schematic("Path", "Torii", "Edge_Water");
|
||||||
|
|
||||||
private static final SelectorSide SELECTOR_SIDE = new SelectorSide()
|
private static final SelectorSide SELECTOR_SIDE = new SelectorSide()
|
||||||
.Case(Path, CENTER)
|
.Case(Path, CENTER)
|
||||||
.Case(Void, SIDE_VOID)
|
|
||||||
.Case(Water, SIDE_WATER)
|
.Case(Water, SIDE_WATER)
|
||||||
.Case(Plot, SIDE_CLOSED)
|
.Case(Plot, SIDE_CLOSED)
|
||||||
.Case(Garden, SIDE_GARDEN_CONNECTED);
|
.Case(Garden, SIDE_GARDEN_CONNECTED);
|
||||||
@@ -81,15 +75,7 @@ public class PathArea extends Region.Area {
|
|||||||
private static final SelectorCorner SELECTOR_CORNER = new SelectorCorner()
|
private static final SelectorCorner SELECTOR_CORNER = new SelectorCorner()
|
||||||
// Path to Path
|
// Path to Path
|
||||||
.Case(Path, Path, Path, CENTER, RotationCorrection.UsingOrdinal)
|
.Case(Path, Path, Path, CENTER, RotationCorrection.UsingOrdinal)
|
||||||
// Path to Global
|
// Path to Water, Spawn, Global
|
||||||
.Case(Path, Void, Void, SIDE_VOID, RotationCorrection.WithCorrection)
|
|
||||||
.Case(Void, Path, Path, SIDE_VOID)
|
|
||||||
.Case(Void, Path, Void, SIDE_VOID)
|
|
||||||
.Case(Path, Void, Path, SIDE_VOID, RotationCorrection.WithCorrection)
|
|
||||||
.Case(Void, Void, Void, CORNER_OUTER_VOID, RotationCorrection.UsingOrdinal)
|
|
||||||
.Case(Void, Void, Path, CORNER_OUTER_VOID, RotationCorrection.UsingOrdinal)
|
|
||||||
.Case(Path, Path, Void, CORNER_INNER_VOID, RotationCorrection.UsingOrdinal)
|
|
||||||
// Path to Water
|
|
||||||
.Case(Path, Water, Water, SIDE_WATER, RotationCorrection.WithCorrection)
|
.Case(Path, Water, Water, SIDE_WATER, RotationCorrection.WithCorrection)
|
||||||
.Case(Water, Path, Path, SIDE_WATER)
|
.Case(Water, Path, Path, SIDE_WATER)
|
||||||
.Case(Water, Path, Water, SIDE_WATER)
|
.Case(Water, Path, Water, SIDE_WATER)
|
||||||
@@ -97,7 +83,7 @@ public class PathArea extends Region.Area {
|
|||||||
.Case(Water, Water, Water, CORNER_OUTER_WATER, RotationCorrection.UsingOrdinal)
|
.Case(Water, Water, Water, CORNER_OUTER_WATER, RotationCorrection.UsingOrdinal)
|
||||||
.Case(Water, Water, Path, CORNER_OUTER_WATER, RotationCorrection.UsingOrdinal)
|
.Case(Water, Water, Path, CORNER_OUTER_WATER, RotationCorrection.UsingOrdinal)
|
||||||
.Case(Path, Path, Water, CORNER_INNER_WATER, RotationCorrection.UsingOrdinal)
|
.Case(Path, Path, Water, CORNER_INNER_WATER, RotationCorrection.UsingOrdinal)
|
||||||
// Path to Closed
|
// Path to Plot
|
||||||
.Case(Path, Plot, Plot, SIDE_CLOSED, RotationCorrection.WithCorrection)
|
.Case(Path, Plot, Plot, SIDE_CLOSED, RotationCorrection.WithCorrection)
|
||||||
.Case(Plot, Path, Path, SIDE_CLOSED)
|
.Case(Plot, Path, Path, SIDE_CLOSED)
|
||||||
.Case(Plot, Path, Plot, SIDE_CLOSED)
|
.Case(Plot, Path, Plot, SIDE_CLOSED)
|
||||||
@@ -166,13 +152,9 @@ public class PathArea extends Region.Area {
|
|||||||
public void reset(PathSide side, boolean torii) {
|
public void reset(PathSide side, boolean torii) {
|
||||||
SchematicNode reset = null;
|
SchematicNode reset = null;
|
||||||
VariantSelector selector = SELECTOR_SIDE.Select(tile, side);
|
VariantSelector selector = SELECTOR_SIDE.Select(tile, side);
|
||||||
if (torii) {
|
if (torii && selector == SIDE_WATER) {
|
||||||
if (selector == SIDE_VOID) {
|
|
||||||
selector = TORII_SIDE_VOID;
|
|
||||||
} else if (selector == SIDE_WATER) {
|
|
||||||
selector = TORII_SIDE_WATER;
|
selector = TORII_SIDE_WATER;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (selector != null) reset = selector.select().orElse(null);
|
if (selector != null) reset = selector.select().orElse(null);
|
||||||
if (selector == null || reset == null) {
|
if (selector == null || reset == null) {
|
||||||
if (!BauSystem.DEV_SERVER) return;
|
if (!BauSystem.DEV_SERVER) return;
|
||||||
@@ -237,27 +219,27 @@ public class PathArea extends Region.Area {
|
|||||||
VariantSelector north = SELECTOR_SIDE.Select(tile, PathSide.North);
|
VariantSelector north = SELECTOR_SIDE.Select(tile, PathSide.North);
|
||||||
VariantSelector south = SELECTOR_SIDE.Select(tile, PathSide.South);
|
VariantSelector south = SELECTOR_SIDE.Select(tile, PathSide.South);
|
||||||
boolean zAxis = false;
|
boolean zAxis = false;
|
||||||
if (isValidTorriVariantSelector(north) && isValidTorriVariantSelector(south)) {
|
if (north == SIDE_WATER && south == SIDE_WATER) {
|
||||||
zAxis = true;
|
zAxis = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
VariantSelector east = SELECTOR_SIDE.Select(tile, PathSide.East);
|
VariantSelector east = SELECTOR_SIDE.Select(tile, PathSide.East);
|
||||||
VariantSelector west = SELECTOR_SIDE.Select(tile, PathSide.West);
|
VariantSelector west = SELECTOR_SIDE.Select(tile, PathSide.West);
|
||||||
boolean xAxis = false;
|
boolean xAxis = false;
|
||||||
if (isValidTorriVariantSelector(east) && isValidTorriVariantSelector(west)) {
|
if (east == SIDE_WATER && west == SIDE_WATER) {
|
||||||
xAxis = true;
|
xAxis = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xAxis && zAxis) return null;
|
if (xAxis && zAxis) return null;
|
||||||
|
|
||||||
VariantSelector northEast = SELECTOR_CORNER.Select(tile, PathCorner.NorthEast).getKey();
|
VariantSelector northEast = SELECTOR_CORNER.Select(tile, PathCorner.NorthEast).getKey();
|
||||||
if (!isValidTorriVariantSelector(northEast)) return null;
|
if (northEast != SIDE_WATER) return null;
|
||||||
VariantSelector northWest = SELECTOR_CORNER.Select(tile, PathCorner.NorthWest).getKey();
|
VariantSelector northWest = SELECTOR_CORNER.Select(tile, PathCorner.NorthWest).getKey();
|
||||||
if (!isValidTorriVariantSelector(northWest)) return null;
|
if (northWest != SIDE_WATER) return null;
|
||||||
VariantSelector southEast = SELECTOR_CORNER.Select(tile, PathCorner.SouthEast).getKey();
|
VariantSelector southEast = SELECTOR_CORNER.Select(tile, PathCorner.SouthEast).getKey();
|
||||||
if (!isValidTorriVariantSelector(southEast)) return null;
|
if (southEast != SIDE_WATER) return null;
|
||||||
VariantSelector southWest = SELECTOR_CORNER.Select(tile, PathCorner.SouthWest).getKey();
|
VariantSelector southWest = SELECTOR_CORNER.Select(tile, PathCorner.SouthWest).getKey();
|
||||||
if (!isValidTorriVariantSelector(southWest)) return null;
|
if (southWest != SIDE_WATER) return null;
|
||||||
|
|
||||||
if (zAxis) {
|
if (zAxis) {
|
||||||
return PathSide.North;
|
return PathSide.North;
|
||||||
@@ -268,17 +250,13 @@ public class PathArea extends Region.Area {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isValidTorriVariantSelector(VariantSelector selector) {
|
|
||||||
return selector == SIDE_VOID || selector == SIDE_WATER;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static RegionType.ConnectionType getConnectionType(Tile source, PathSide side, PathSide optionalSide) {
|
protected static RegionType.ConnectionType getConnectionType(Tile source, PathSide side, PathSide optionalSide) {
|
||||||
Optional<Tile> optionalTile = source.add(side.tileOffsetX, side.tileOffsetZ);
|
Optional<Tile> optionalTile = source.add(side.tileOffsetX, side.tileOffsetZ);
|
||||||
if (optionalSide != null) {
|
if (optionalSide != null) {
|
||||||
optionalTile = optionalTile.flatMap(t -> t.add(optionalSide.tileOffsetX, optionalSide.tileOffsetZ));
|
optionalTile = optionalTile.flatMap(t -> t.add(optionalSide.tileOffsetX, optionalSide.tileOffsetZ));
|
||||||
}
|
}
|
||||||
if (optionalTile.isEmpty()) {
|
if (optionalTile.isEmpty()) {
|
||||||
return Void;
|
return Water;
|
||||||
}
|
}
|
||||||
Tile tile = optionalTile.get();
|
Tile tile = optionalTile.get();
|
||||||
Region region = DynamicRegionSystem.INSTANCE.get(tile);
|
Region region = DynamicRegionSystem.INSTANCE.get(tile);
|
||||||
@@ -291,7 +269,7 @@ public class PathArea extends Region.Area {
|
|||||||
DynamicRegion.PathConnectResult result = dynamicRegion.shouldPathConnect(source, side.opposite(), optionalSide != null);
|
DynamicRegion.PathConnectResult result = dynamicRegion.shouldPathConnect(source, side.opposite(), optionalSide != null);
|
||||||
return switch (result) {
|
return switch (result) {
|
||||||
case ALWAYS -> Path;
|
case ALWAYS -> Path;
|
||||||
case NEVER -> Void;
|
case NEVER -> Water;
|
||||||
default -> region.getType().getConnectionType();
|
default -> region.getType().getConnectionType();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
+20
-4
@@ -21,10 +21,7 @@ package de.steamwar.bausystem.region.dynamic.path;
|
|||||||
|
|
||||||
import com.google.gson.JsonArray;
|
import com.google.gson.JsonArray;
|
||||||
import com.google.gson.stream.JsonWriter;
|
import com.google.gson.stream.JsonWriter;
|
||||||
import de.steamwar.bausystem.region.DynamicRegionSystem;
|
import de.steamwar.bausystem.region.*;
|
||||||
import de.steamwar.bausystem.region.RegionBackups;
|
|
||||||
import de.steamwar.bausystem.region.RegionHistory;
|
|
||||||
import de.steamwar.bausystem.region.RegionType;
|
|
||||||
import de.steamwar.bausystem.region.dynamic.*;
|
import de.steamwar.bausystem.region.dynamic.*;
|
||||||
import de.steamwar.sql.GameModeConfig;
|
import de.steamwar.sql.GameModeConfig;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@@ -123,6 +120,25 @@ public class PathRegion extends DynamicRegion {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
toriiSide = area.getToriiSide();
|
toriiSide = area.getToriiSide();
|
||||||
|
|
||||||
|
if (true) return;
|
||||||
|
// Push Torii State to adjacent Path if valid Torii region!
|
||||||
|
if (toriiSide != null) return;
|
||||||
|
for (Tile adjacent : tile.neighboursPlus().toList()) {
|
||||||
|
Region region = DynamicRegionSystem.INSTANCE.get(adjacent);
|
||||||
|
if (region instanceof PathRegion pathRegion) {
|
||||||
|
if (pathRegion.hasAdjacentToriiState()) continue;
|
||||||
|
pathRegion.toriiSide = pathRegion.area.getToriiSide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean hasAdjacentToriiState() {
|
||||||
|
for (Tile adjacent : tile.neighboursPlus().toList()) {
|
||||||
|
Region region = DynamicRegionSystem.INSTANCE.get(adjacent);
|
||||||
|
if (region instanceof PathRegion pathRegion && pathRegion.toriiSide != null) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user