BlockShape.rotateFromNorth and rotateFromSouth

This commit is contained in:
DBotThePony 2023-01-30 15:52:59 +07:00
parent 25630a7924
commit 643ca83851
Signed by: DBot
GPG Key ID: DCC23B5715498507
23 changed files with 82 additions and 63 deletions

View File

@ -5,6 +5,7 @@ import net.minecraft.core.Direction;
import net.minecraft.world.phys.shapes.BooleanOp;
import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape;
import ru.dbotthepony.mc.otm.core.math.BlockRotation;
import javax.annotation.ParametersAreNonnullByDefault;
@ -47,7 +48,7 @@ public record BlockShape(SimpleCuboid ...shapes) {
return new BlockShape(list);
}
public BlockShape rotate(Direction dir) {
public BlockShape rotateFromSouth(Direction dir) {
if (dir == Direction.SOUTH)
return this;
@ -69,7 +70,7 @@ public record BlockShape(SimpleCuboid ...shapes) {
return this;
}
public BlockShape rotateInv(Direction dir) {
public BlockShape rotateFromNorth(Direction dir) {
if (dir == Direction.SOUTH)
return rotateAroundY(Math.PI);
@ -91,6 +92,24 @@ public record BlockShape(SimpleCuboid ...shapes) {
return this;
}
public BlockShape rotateFromNorth(BlockRotation dir) {
var result = rotateFromNorth(dir.getFront());
if (dir.getTop() != Direction.DOWN && dir.getTop() != Direction.UP)
result = result.rotateFromNorth(dir.getTop());
return result;
}
public BlockShape rotateFromSouth(BlockRotation dir) {
var result = rotateFromSouth(dir.getFront());
if (dir.getTop() != Direction.DOWN && dir.getTop() != Direction.UP)
result = result.rotateFromSouth(dir.getTop());
return result;
}
public VoxelShape computeShape() {
VoxelShape final_shape = shapes[0].getShape();

View File

@ -18,7 +18,7 @@ class EngineBlock : RotatableMatteryBlock(Properties.of(Material.METAL, DyeColor
}
private val shapes = getShapeForEachState {
BlockShapes.ENGINE.rotateInv(it[rotationProperty].front).computeShape()
BlockShapes.ENGINE.rotateFromNorth(it[rotationProperty].front).computeShape()
}
override fun getShape(

View File

@ -23,7 +23,7 @@ class HoloSignBlock : RotatableMatteryBlock(), EntityBlock {
}
private val shapes = getShapeForEachState {
BlockShapes.HOLO_SIGN.rotateInv(it[rotationProperty].front).computeShape()
BlockShapes.HOLO_SIGN.rotateFromNorth(it[rotationProperty]).computeShape()
}
override fun getShape(

View File

@ -76,9 +76,9 @@ class MatterBottlerBlock : RotatableMatteryBlock(), EntityBlock {
def,
def,
def,
BlockShapes.MATTER_BOTTLER.rotate(Direction.NORTH).computeShape(),
BlockShapes.MATTER_BOTTLER.rotate(Direction.WEST).computeShape(),
BlockShapes.MATTER_BOTTLER.rotate(Direction.EAST).computeShape()
BlockShapes.MATTER_BOTTLER.rotateFromSouth(Direction.NORTH).computeShape(),
BlockShapes.MATTER_BOTTLER.rotateFromSouth(Direction.WEST).computeShape(),
BlockShapes.MATTER_BOTTLER.rotateFromSouth(Direction.EAST).computeShape()
)
}
}

View File

@ -55,9 +55,9 @@ class MatterCapacitorBankBlock : RotatableMatteryBlock(), EntityBlock {
def,
def,
def,
BlockShapes.MATTER_CAPACITOR_BANK.rotate(Direction.NORTH).computeShape(),
BlockShapes.MATTER_CAPACITOR_BANK.rotate(Direction.WEST).computeShape(),
BlockShapes.MATTER_CAPACITOR_BANK.rotate(Direction.EAST).computeShape()
BlockShapes.MATTER_CAPACITOR_BANK.rotateFromSouth(Direction.NORTH).computeShape(),
BlockShapes.MATTER_CAPACITOR_BANK.rotateFromSouth(Direction.WEST).computeShape(),
BlockShapes.MATTER_CAPACITOR_BANK.rotateFromSouth(Direction.EAST).computeShape()
)
}
}

View File

@ -61,9 +61,9 @@ class MatterDecomposerBlock : RotatableMatteryBlock(), EntityBlock {
def,
def,
def,
BlockShapes.MATTER_DECOMPOSER.rotate(Direction.NORTH).computeShape(),
BlockShapes.MATTER_DECOMPOSER.rotate(Direction.WEST).computeShape(),
BlockShapes.MATTER_DECOMPOSER.rotate(Direction.EAST).computeShape()
BlockShapes.MATTER_DECOMPOSER.rotateFromSouth(Direction.NORTH).computeShape(),
BlockShapes.MATTER_DECOMPOSER.rotateFromSouth(Direction.WEST).computeShape(),
BlockShapes.MATTER_DECOMPOSER.rotateFromSouth(Direction.EAST).computeShape()
)
}
}

View File

@ -60,9 +60,9 @@ class MatterRecyclerBlock : RotatableMatteryBlock(), EntityBlock {
def,
def,
def,
BlockShapes.MATTER_RECYCLER.rotate(Direction.NORTH).computeShape(),
BlockShapes.MATTER_RECYCLER.rotate(Direction.WEST).computeShape(),
BlockShapes.MATTER_RECYCLER.rotate(Direction.EAST).computeShape()
BlockShapes.MATTER_RECYCLER.rotateFromSouth(Direction.NORTH).computeShape(),
BlockShapes.MATTER_RECYCLER.rotateFromSouth(Direction.WEST).computeShape(),
BlockShapes.MATTER_RECYCLER.rotateFromSouth(Direction.EAST).computeShape()
)
}
}

View File

@ -60,9 +60,9 @@ class MatterReplicatorBlock : RotatableMatteryBlock(), EntityBlock {
def,
def,
def,
BlockShapes.MATTER_REPLICATOR.rotate(Direction.NORTH).computeShape(),
BlockShapes.MATTER_REPLICATOR.rotate(Direction.WEST).computeShape(),
BlockShapes.MATTER_REPLICATOR.rotate(Direction.EAST).computeShape()
BlockShapes.MATTER_REPLICATOR.rotateFromSouth(Direction.NORTH).computeShape(),
BlockShapes.MATTER_REPLICATOR.rotateFromSouth(Direction.WEST).computeShape(),
BlockShapes.MATTER_REPLICATOR.rotateFromSouth(Direction.EAST).computeShape()
)
}
}

View File

@ -60,9 +60,9 @@ class MatterScannerBlock : RotatableMatteryBlock(), EntityBlock {
def,
def,
def,
BlockShapes.MATTER_SCANNER.rotate(Direction.NORTH).computeShape(),
BlockShapes.MATTER_SCANNER.rotate(Direction.WEST).computeShape(),
BlockShapes.MATTER_SCANNER.rotate(Direction.EAST).computeShape()
BlockShapes.MATTER_SCANNER.rotateFromSouth(Direction.NORTH).computeShape(),
BlockShapes.MATTER_SCANNER.rotateFromSouth(Direction.WEST).computeShape(),
BlockShapes.MATTER_SCANNER.rotateFromSouth(Direction.EAST).computeShape()
)
}
}

View File

@ -87,9 +87,9 @@ class PatternStorageBlock : RotatableMatteryBlock(), EntityBlock {
def,
def,
def,
BlockShapes.PATTERN_STORAGE.rotate(Direction.NORTH).computeShape(),
BlockShapes.PATTERN_STORAGE.rotate(Direction.WEST).computeShape(),
BlockShapes.PATTERN_STORAGE.rotate(Direction.EAST).computeShape()
BlockShapes.PATTERN_STORAGE.rotateFromSouth(Direction.NORTH).computeShape(),
BlockShapes.PATTERN_STORAGE.rotateFromSouth(Direction.WEST).computeShape(),
BlockShapes.PATTERN_STORAGE.rotateFromSouth(Direction.EAST).computeShape()
)
}
}

View File

@ -65,9 +65,9 @@ class DriveRackBlock : RotatableMatteryBlock(), EntityBlock {
def,
def,
def,
BlockShapes.DRIVE_RACK.rotate(Direction.NORTH).computeShape(),
BlockShapes.DRIVE_RACK.rotate(Direction.WEST).computeShape(),
BlockShapes.DRIVE_RACK.rotate(Direction.EAST).computeShape()
BlockShapes.DRIVE_RACK.rotateFromSouth(Direction.NORTH).computeShape(),
BlockShapes.DRIVE_RACK.rotateFromSouth(Direction.WEST).computeShape(),
BlockShapes.DRIVE_RACK.rotateFromSouth(Direction.EAST).computeShape()
)
}
}

View File

@ -84,9 +84,9 @@ class DriveViewerBlock : RotatableMatteryBlock(), EntityBlock {
def,
def,
def,
BlockShapes.DRIVE_VIEWER.rotate(Direction.NORTH).computeShape(),
BlockShapes.DRIVE_VIEWER.rotate(Direction.WEST).computeShape(),
BlockShapes.DRIVE_VIEWER.rotate(Direction.EAST).computeShape()
BlockShapes.DRIVE_VIEWER.rotateFromSouth(Direction.NORTH).computeShape(),
BlockShapes.DRIVE_VIEWER.rotateFromSouth(Direction.WEST).computeShape(),
BlockShapes.DRIVE_VIEWER.rotateFromSouth(Direction.EAST).computeShape()
)
}
}

View File

@ -65,9 +65,9 @@ class ItemMonitorBlock : RotatableMatteryBlock(), EntityBlock {
def,
def,
def,
BlockShapes.ITEM_MONITOR.rotate(Direction.NORTH).computeShape(),
BlockShapes.ITEM_MONITOR.rotate(Direction.WEST).computeShape(),
BlockShapes.ITEM_MONITOR.rotate(Direction.EAST).computeShape()
BlockShapes.ITEM_MONITOR.rotateFromSouth(Direction.NORTH).computeShape(),
BlockShapes.ITEM_MONITOR.rotateFromSouth(Direction.WEST).computeShape(),
BlockShapes.ITEM_MONITOR.rotateFromSouth(Direction.EAST).computeShape()
)
}
}

View File

@ -98,7 +98,7 @@ class StorageBusBlock : RotatableMatteryBlock(), EntityBlock {
finalShape = Shapes.joinUnoptimized(finalShape, shapes[i], BooleanOp.OR)
}
finalShape = Shapes.joinUnoptimized(finalShape, BlockShapes.STORAGE_BUS.rotateInv(it.facingTwo).computeShape(), BooleanOp.OR)
finalShape = Shapes.joinUnoptimized(finalShape, BlockShapes.STORAGE_BUS.rotateFromNorth(it.facingTwo).computeShape(), BooleanOp.OR)
return@getShapeForEachState finalShape
}

View File

@ -99,7 +99,7 @@ class StorageImporterBlock : RotatableMatteryBlock(), EntityBlock {
finalShape = Shapes.joinUnoptimized(finalShape, shapes[i], BooleanOp.OR)
}
finalShape = Shapes.joinUnoptimized(finalShape, BlockShapes.STORAGE_IMPORTER.rotateInv(it.facingTwo).computeShape(), BooleanOp.OR)
finalShape = Shapes.joinUnoptimized(finalShape, BlockShapes.STORAGE_IMPORTER.rotateFromNorth(it.facingTwo).computeShape(), BooleanOp.OR)
return@getShapeForEachState finalShape
}
@ -203,7 +203,7 @@ class StorageExporterBlock : RotatableMatteryBlock(), EntityBlock {
finalShape = Shapes.joinUnoptimized(finalShape, shapes[i], BooleanOp.OR)
}
finalShape = Shapes.joinUnoptimized(finalShape, BlockShapes.STORAGE_EXPORTER.rotateInv(it.facingTwo).computeShape(), BooleanOp.OR)
finalShape = Shapes.joinUnoptimized(finalShape, BlockShapes.STORAGE_EXPORTER.rotateFromNorth(it.facingTwo).computeShape(), BooleanOp.OR)
return@getShapeForEachState finalShape
}

View File

@ -68,9 +68,9 @@ class StoragePowerSupplierBlock : RotatableMatteryBlock(), EntityBlock {
def,
def,
def,
BlockShapes.STORAGE_POWER_SUPPLIER.rotate(Direction.NORTH).computeShape(),
BlockShapes.STORAGE_POWER_SUPPLIER.rotate(Direction.WEST).computeShape(),
BlockShapes.STORAGE_POWER_SUPPLIER.rotate(Direction.EAST).computeShape()
BlockShapes.STORAGE_POWER_SUPPLIER.rotateFromSouth(Direction.NORTH).computeShape(),
BlockShapes.STORAGE_POWER_SUPPLIER.rotateFromSouth(Direction.WEST).computeShape(),
BlockShapes.STORAGE_POWER_SUPPLIER.rotateFromSouth(Direction.EAST).computeShape()
)
}
}

View File

@ -107,9 +107,9 @@ class BatteryBankBlock : RotatableMatteryBlock(), EntityBlock {
def,
def,
def,
BlockShapes.BATTERY_BANK.rotate(Direction.NORTH).computeShape(),
BlockShapes.BATTERY_BANK.rotate(Direction.WEST).computeShape(),
BlockShapes.BATTERY_BANK.rotate(Direction.EAST).computeShape()
BlockShapes.BATTERY_BANK.rotateFromSouth(Direction.NORTH).computeShape(),
BlockShapes.BATTERY_BANK.rotateFromSouth(Direction.WEST).computeShape(),
BlockShapes.BATTERY_BANK.rotateFromSouth(Direction.EAST).computeShape()
)
}
}

View File

@ -111,9 +111,9 @@ class ChemicalGeneratorBlock : RotatableMatteryBlock(), EntityBlock {
def,
def,
def,
BlockShapes.CHEMICAL_GENERATOR.rotate(Direction.NORTH).computeShape(),
BlockShapes.CHEMICAL_GENERATOR.rotate(Direction.WEST).computeShape(),
BlockShapes.CHEMICAL_GENERATOR.rotate(Direction.EAST).computeShape()
BlockShapes.CHEMICAL_GENERATOR.rotateFromSouth(Direction.NORTH).computeShape(),
BlockShapes.CHEMICAL_GENERATOR.rotateFromSouth(Direction.WEST).computeShape(),
BlockShapes.CHEMICAL_GENERATOR.rotateFromSouth(Direction.EAST).computeShape()
)
}
}

View File

@ -97,7 +97,7 @@ class EnergyCounterBlock : MatteryBlock(), EntityBlock {
}
if (input === Direction.UP || input === Direction.DOWN) {
shape = shape.rotateInv(iface)
shape = shape.rotateFromNorth(iface)
} else if (input === Direction.EAST || input === Direction.WEST) {
when (iface) {
Direction.DOWN -> shape = shape.rotateAroundX(Math.PI / 2)

View File

@ -52,12 +52,12 @@ class EnergyServoBlock : RotatableMatteryBlock(Properties.of(Material.METAL, Mat
val def = BlockShapes.ENERGY_SERVO.computeShape()
SHAPES = arrayOf(
def,
def,
def,
BlockShapes.ENERGY_SERVO.rotate(Direction.NORTH).computeShape(),
BlockShapes.ENERGY_SERVO.rotate(Direction.WEST).computeShape(),
BlockShapes.ENERGY_SERVO.rotate(Direction.EAST).computeShape()
def,
def,
def,
BlockShapes.ENERGY_SERVO.rotateFromSouth(Direction.NORTH).computeShape(),
BlockShapes.ENERGY_SERVO.rotateFromSouth(Direction.WEST).computeShape(),
BlockShapes.ENERGY_SERVO.rotateFromSouth(Direction.EAST).computeShape()
)
}
}

View File

@ -149,9 +149,9 @@ class BlockGravitationStabilizer : RotatableMatteryBlock(props), EntityBlock {
BlockShapes.GRAVITATION_STABILIZER.rotateAroundX(PI / 2).computeShape(),
BlockShapes.GRAVITATION_STABILIZER.rotateAroundX(-PI / 2).computeShape(),
BlockShapes.GRAVITATION_STABILIZER.computeShape(),
BlockShapes.GRAVITATION_STABILIZER.rotate(Direction.NORTH).computeShape(),
BlockShapes.GRAVITATION_STABILIZER.rotate(Direction.WEST).computeShape(),
BlockShapes.GRAVITATION_STABILIZER.rotate(Direction.EAST).computeShape()
BlockShapes.GRAVITATION_STABILIZER.rotateFromSouth(Direction.NORTH).computeShape(),
BlockShapes.GRAVITATION_STABILIZER.rotateFromSouth(Direction.WEST).computeShape(),
BlockShapes.GRAVITATION_STABILIZER.rotateFromSouth(Direction.EAST).computeShape()
)
fun getBoundingBlock(level: Level, blockState: BlockState, blockPos: BlockPos): BlockState {
@ -220,9 +220,9 @@ class BlockGravitationStabilizerLens : RotatableMatteryBlock(props) {
BlockShapes.GRAVITATION_STABILIZER_LENS.rotateAroundX(PI / 2).computeShape(),
BlockShapes.GRAVITATION_STABILIZER_LENS.rotateAroundX(-PI / 2).computeShape(),
BlockShapes.GRAVITATION_STABILIZER_LENS.computeShape(),
BlockShapes.GRAVITATION_STABILIZER_LENS.rotate(Direction.NORTH).computeShape(),
BlockShapes.GRAVITATION_STABILIZER_LENS.rotate(Direction.WEST).computeShape(),
BlockShapes.GRAVITATION_STABILIZER_LENS.rotate(Direction.EAST).computeShape()
BlockShapes.GRAVITATION_STABILIZER_LENS.rotateFromSouth(Direction.NORTH).computeShape(),
BlockShapes.GRAVITATION_STABILIZER_LENS.rotateFromSouth(Direction.WEST).computeShape(),
BlockShapes.GRAVITATION_STABILIZER_LENS.rotateFromSouth(Direction.EAST).computeShape()
)
}
}

View File

@ -93,7 +93,7 @@ class PhantomAttractorBlock : RotatableMatteryBlock(Properties.of(Material.METAL
DoubleBlockHalf.LOWER -> BlockShapes.PHANTOM_ATTRACTOR_BOTTOM
}
shape.rotate(it.facingOne).computeShape()
shape.rotateFromSouth(it.facingOne).computeShape()
}
}

View File

@ -74,9 +74,9 @@ class PlatePressBlock(properties: Properties = DEFAULT_PROPERTIES) : RotatableMa
def,
def,
def,
BlockShapes.PLATE_PRESS_IDLE.rotate(Direction.NORTH).computeShape(),
BlockShapes.PLATE_PRESS_IDLE.rotate(Direction.WEST).computeShape(),
BlockShapes.PLATE_PRESS_IDLE.rotate(Direction.EAST).computeShape()
BlockShapes.PLATE_PRESS_IDLE.rotateFromSouth(Direction.NORTH).computeShape(),
BlockShapes.PLATE_PRESS_IDLE.rotateFromSouth(Direction.WEST).computeShape(),
BlockShapes.PLATE_PRESS_IDLE.rotateFromSouth(Direction.EAST).computeShape()
)
}
}