Search in sources :

Example 11 with Side

use of org.terasology.math.Side in project Terasology by MovingBlocks.

the class NeighbourBlockFamilyUpdateSystem method processUpdateForBlockLocation.

private void processUpdateForBlockLocation(Vector3i blockLocation) {
    for (Side side : Side.values()) {
        Vector3i neighborLocation = new Vector3i(blockLocation);
        neighborLocation.add(side.getVector3i());
        if (worldProvider.isBlockRelevant(neighborLocation)) {
            Block neighborBlock = worldProvider.getBlock(neighborLocation);
            final BlockFamily blockFamily = neighborBlock.getBlockFamily();
            if (blockFamily instanceof UpdatesWithNeighboursFamily) {
                UpdatesWithNeighboursFamily neighboursFamily = (UpdatesWithNeighboursFamily) blockFamily;
                Block neighborBlockAfterUpdate = neighboursFamily.getBlockForNeighborUpdate(worldProvider, blockEntityRegistry, neighborLocation, neighborBlock);
                if (neighborBlock != neighborBlockAfterUpdate) {
                    worldProvider.setBlock(neighborLocation, neighborBlockAfterUpdate);
                }
            }
        }
    }
}
Also used : Side(org.terasology.math.Side) UpdatesWithNeighboursFamily(org.terasology.world.block.family.UpdatesWithNeighboursFamily) Vector3i(org.terasology.math.geom.Vector3i) Block(org.terasology.world.block.Block) OnChangedBlock(org.terasology.world.OnChangedBlock) BlockFamily(org.terasology.world.block.family.BlockFamily)

Example 12 with Side

use of org.terasology.math.Side in project Terasology by MovingBlocks.

the class HorizontalBlockFamilyFactory method createBlockFamily.

@Override
public BlockFamily createBlockFamily(BlockFamilyDefinition definition, BlockShape shape, BlockBuilderHelper blockBuilder) {
    if (!definition.isFreeform()) {
        throw new IllegalStateException("A shape cannot be provided when creating a family for a non-freeform block family definition");
    }
    Map<Side, Block> blockMap = Maps.newHashMap();
    for (Rotation rot : Rotation.horizontalRotations()) {
        Side side = rot.rotate(Side.FRONT);
        blockMap.put(side, blockBuilder.constructTransformedBlock(definition, shape, side.toString().toLowerCase(Locale.ENGLISH), rot));
    }
    BlockUri uri;
    if (CUBE_SHAPE_URN.equals(shape.getUrn())) {
        uri = new BlockUri(definition.getUrn());
    } else {
        uri = new BlockUri(definition.getUrn(), shape.getUrn());
    }
    return new HorizontalBlockFamily(uri, getArchetypeSide(), blockMap, definition.getCategories());
}
Also used : Side(org.terasology.math.Side) BlockUri(org.terasology.world.block.BlockUri) Block(org.terasology.world.block.Block) Rotation(org.terasology.math.Rotation)

Example 13 with Side

use of org.terasology.math.Side in project Terasology by MovingBlocks.

the class UpdatesWithNeighboursFamilyFactory method getRotationToAchieve.

private Rotation getRotationToAchieve(byte source, byte target) {
    Collection<Side> originalSides = SideBitFlag.getSides(source);
    Iterable<Rotation> rotations = horizontalOnly ? Rotation.horizontalRotations() : Rotation.values();
    for (Rotation rot : rotations) {
        Set<Side> transformedSides = Sets.newHashSet();
        transformedSides.addAll(originalSides.stream().map(rot::rotate).collect(Collectors.toList()));
        byte transformedSide = SideBitFlag.getSides(transformedSides);
        if (transformedSide == target) {
            return rot;
        }
    }
    return null;
}
Also used : Side(org.terasology.math.Side) Rotation(org.terasology.math.Rotation)

Example 14 with Side

use of org.terasology.math.Side in project Terasology by MovingBlocks.

the class BlockBuilder method applyLoweredShape.

private void applyLoweredShape(Block block, BlockShape shape, Map<BlockPart, BlockTile> tiles) {
    for (Side side : Side.values()) {
        BlockPart part = BlockPart.fromSide(side);
        BlockTile blockTile = tiles.get(part);
        if (blockTile != null) {
            BlockMeshPart meshPart = shape.getMeshPart(part).rotate(Rotation.none().getQuat4f()).mapTexCoords(worldAtlas.getTexCoords(blockTile, true), worldAtlas.getRelativeTileSize());
            block.setLoweredLiquidMesh(part.getSide(), meshPart);
        }
    }
}
Also used : Side(org.terasology.math.Side) BlockPart(org.terasology.world.block.BlockPart) BlockTile(org.terasology.world.block.tiles.BlockTile) BlockMeshPart(org.terasology.world.block.shapes.BlockMeshPart)

Example 15 with Side

use of org.terasology.math.Side in project Terasology by MovingBlocks.

the class BlockBuilder method setBlockFullSides.

private void setBlockFullSides(Block block, BlockShape shape, Rotation rot) {
    for (Side side : Side.values()) {
        BlockPart targetPart = BlockPart.fromSide(rot.rotate(side));
        block.setFullSide(targetPart.getSide(), shape.isBlockingSide(side));
    }
}
Also used : Side(org.terasology.math.Side) BlockPart(org.terasology.world.block.BlockPart)

Aggregations

Side (org.terasology.math.Side)18 Block (org.terasology.world.block.Block)11 Vector3i (org.terasology.math.geom.Vector3i)9 PlaySoundEvent (org.terasology.audio.events.PlaySoundEvent)4 ReceiveEvent (org.terasology.entitySystem.event.ReceiveEvent)4 Rotation (org.terasology.math.Rotation)4 EntityRef (org.terasology.entitySystem.entity.EntityRef)3 BlockPart (org.terasology.world.block.BlockPart)3 BlockUri (org.terasology.world.block.BlockUri)3 BlockRegionComponent (org.terasology.world.block.regions.BlockRegionComponent)3 BlockComponent (org.terasology.world.block.BlockComponent)2 PlaceBlocks (org.terasology.world.block.entity.placement.PlaceBlocks)2 BlockFamily (org.terasology.world.block.family.BlockFamily)2 Chunk (org.terasology.world.chunks.Chunk)2 TIntArrayList (gnu.trove.list.array.TIntArrayList)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 LocationComponent (org.terasology.logic.location.LocationComponent)1 Vector3f (org.terasology.math.geom.Vector3f)1 Vector4f (org.terasology.math.geom.Vector4f)1