Search in sources :

Example 36 with Color

use of org.terasology.nui.Color in project Terasology by MovingBlocks.

the class BlockMeshGeneratorSingleShape method generateChunkMesh.

@Override
public void generateChunkMesh(ChunkView view, ChunkMesh chunkMesh, int x, int y, int z) {
    final BlockAppearance blockAppearance = block.getPrimaryAppearance();
    if (!blockAppearance.hasAppearance()) {
        // perf: Skip mesh generation for blocks without appearance, e.g., air blocks.
        return;
    }
    Color colorCache = new Color();
    // Gather adjacent blocks
    Block[] adjacentBlocks = new Block[Side.allSides().size()];
    for (Side side : Side.allSides()) {
        Vector3ic offset = side.direction();
        Block blockToCheck = view.getBlock(x + offset.x(), y + offset.y(), z + offset.z());
        adjacentBlocks[side.ordinal()] = blockToCheck;
    }
    final ChunkMesh.RenderType renderType = getRenderType(block);
    final ChunkVertexFlag vertexFlag = getChunkVertexFlag(view, x, y, z, block);
    boolean isRendered = false;
    for (final Side side : Side.allSides()) {
        if (isSideVisibleForBlockTypes(adjacentBlocks[side.ordinal()], block, side)) {
            isRendered = true;
            BlockMeshPart blockMeshPart = blockAppearance.getPart(BlockPart.fromSide(side));
            // If the selfBlock isn't lowered, some more faces may have to be drawn
            if (block.isLiquid()) {
                final Block topBlock = adjacentBlocks[Side.TOP.ordinal()];
                // Draw horizontal sides if visible from below
                if (topBlock.isLiquid() && Side.horizontalSides().contains(side)) {
                    final Vector3ic offset = side.direction();
                    final Block adjacentAbove = view.getBlock(x + offset.x(), y + 1, z + offset.z());
                    final Block adjacent = adjacentBlocks[side.ordinal()];
                    if (adjacent.isLiquid() && !adjacentAbove.isLiquid()) {
                        blockMeshPart = block.getTopLiquidMesh(side);
                    }
                } else {
                    if (blockMeshPart != null) {
                        blockMeshPart = block.getLowLiquidMesh(side);
                    }
                }
            }
            if (blockMeshPart != null) {
                // TODO: Needs review since the new per-vertex flags introduce a lot of special scenarios - probably a per-side setting?
                ChunkVertexFlag sideVertexFlag = vertexFlag;
                if (block.isGrass() && side != Side.TOP && side != Side.BOTTOM) {
                    sideVertexFlag = ChunkVertexFlag.COLOR_MASK;
                }
                Colorc colorOffset = block.getColorOffset(BlockPart.fromSide(side));
                Colorc colorSource = block.getColorSource(BlockPart.fromSide(side)).calcColor(view, x, y, z);
                colorCache.setRed(colorSource.rf() * colorOffset.rf()).setGreen(colorSource.gf() * colorOffset.gf()).setBlue(colorSource.bf() * colorOffset.bf()).setAlpha(colorSource.af() * colorOffset.af());
                blockMeshPart.appendTo(chunkMesh, view, x, y, z, renderType, colorCache, sideVertexFlag);
            }
        }
    }
    if (isRendered && blockAppearance.getPart(BlockPart.CENTER) != null) {
        Colorc colorOffset = block.getColorOffset(BlockPart.CENTER);
        Colorc colorSource = block.getColorSource(BlockPart.CENTER).calcColor(view, x, y, z);
        colorCache.setRed(colorSource.rf() * colorOffset.rf()).setGreen(colorSource.gf() * colorOffset.gf()).setBlue(colorSource.bf() * colorOffset.bf()).setAlpha(colorSource.af() * colorOffset.af());
        blockAppearance.getPart(BlockPart.CENTER).appendTo(chunkMesh, view, x, y, z, renderType, colorCache, vertexFlag);
    }
}
Also used : Side(org.terasology.engine.math.Side) Colorc(org.terasology.nui.Colorc) BlockAppearance(org.terasology.engine.world.block.BlockAppearance) Vector3ic(org.joml.Vector3ic) Color(org.terasology.nui.Color) Block(org.terasology.engine.world.block.Block) BlockMeshPart(org.terasology.engine.world.block.shapes.BlockMeshPart)

Example 37 with Color

use of org.terasology.nui.Color in project Terasology by MovingBlocks.

the class DocumentRenderer method drawDocumentInRegion.

public static void drawDocumentInRegion(DocumentData documentData, Canvas canvas, Font defaultFont, Color defaultColor, Vector2i size, ParagraphRenderable.HyperlinkRegister register) {
    DefaultDocumentRenderStyle defaultDocumentRenderStyle = new DefaultDocumentRenderStyle(defaultFont, defaultColor);
    DocumentRenderStyle documentRenderStyle = getDocumentRenderStyle(defaultDocumentRenderStyle, documentData);
    int documentWidth = size.x;
    int documentMarginLeft = documentRenderStyle.getDocumentMarginLeft().getValue(documentWidth);
    int documentMarginRight = documentRenderStyle.getDocumentMarginRight().getValue(documentWidth);
    int documentMarginTop = documentRenderStyle.getDocumentMarginTop().getValue(documentWidth);
    Color backgroundColor = documentRenderStyle.getBackgroundColor();
    if (backgroundColor != null) {
        canvas.drawFilledRectangle(canvas.getRegion(), backgroundColor);
    }
    Collection<ParagraphData> paragraphs = documentData.getParagraphs();
    ContainerFlowContainerRenderSpace renderSpace = new ContainerFlowContainerRenderSpace(documentWidth);
    renderParagraphs(canvas, register, documentRenderStyle, documentMarginLeft, documentMarginTop, documentMarginLeft, documentMarginRight, paragraphs, renderSpace);
}
Also used : FallbackDocumentRenderStyle(org.terasology.engine.rendering.nui.widgets.browser.ui.style.FallbackDocumentRenderStyle) DefaultDocumentRenderStyle(org.terasology.engine.rendering.nui.widgets.browser.ui.style.DefaultDocumentRenderStyle) DocumentRenderStyle(org.terasology.engine.rendering.nui.widgets.browser.ui.style.DocumentRenderStyle) Color(org.terasology.nui.Color) ParagraphData(org.terasology.engine.rendering.nui.widgets.browser.data.ParagraphData) DefaultDocumentRenderStyle(org.terasology.engine.rendering.nui.widgets.browser.ui.style.DefaultDocumentRenderStyle)

Example 38 with Color

use of org.terasology.nui.Color in project Terasology by MovingBlocks.

the class BlockBuilder method constructCustomBlock.

@Override
public Block constructCustomBlock(String defaultName, BlockShape shape, Rotation rotation, SectionDefinitionData section, BlockUri uri, BlockFamily blockFamily) {
    Block block = createRawBlock(defaultName, section);
    block.setRotation(rotation);
    block.setPrimaryAppearance(createAppearance(shape, section.getBlockTiles(), rotation));
    setBlockFullSides(block, shape, rotation);
    block.setCollision(shape.getCollisionOffset(rotation), shape.getCollisionShape(rotation));
    for (BlockPart part : BlockPart.values()) {
        block.setColorSource(part, section.getColorSources().get(part));
        block.setColorOffset(part, new Color().set(section.getColorOffsets().get(part)));
    }
    block.setUri(uri);
    block.setBlockFamily(blockFamily);
    // Lowered mesh for liquids
    if (block.isLiquid()) {
        applyLiquidShapes(block, section.getBlockTiles());
    }
    return block;
}
Also used : BlockPart(org.terasology.engine.world.block.BlockPart) Color(org.terasology.nui.Color) Block(org.terasology.engine.world.block.Block)

Example 39 with Color

use of org.terasology.nui.Color in project Terasology by MovingBlocks.

the class FieldFacetLayer method render.

@Override
public void render(BufferedImage img, Region region) {
    FieldFacet2D facet = region.getFacet(clazz);
    int width = img.getWidth();
    int height = img.getHeight();
    ColorModel colorModel = img.getColorModel();
    ColorBlender blender = ColorBlenders.forColorModel(ColorModels.RGBA, colorModel);
    DataBufferInt dataBuffer = (DataBufferInt) img.getRaster().getDataBuffer();
    for (int z = 0; z < height; z++) {
        for (int x = 0; x < width; x++) {
            Color col = getColor(facet, x, z);
            int src = col.rgba();
            int dst = dataBuffer.getElem(z * width + x);
            int mix = blender.add(src, dst);
            dataBuffer.setElem(z * width + x, mix);
        }
    }
}
Also used : FieldFacet2D(org.terasology.engine.world.generation.facets.base.FieldFacet2D) ColorBlender(org.terasology.engine.world.viewer.color.ColorBlender) ColorModel(java.awt.image.ColorModel) Color(org.terasology.nui.Color) DataBufferInt(java.awt.image.DataBufferInt)

Aggregations

Color (org.terasology.nui.Color)39 Test (org.junit.jupiter.api.Test)9 Vector3f (org.joml.Vector3f)5 ByteBuffer (java.nio.ByteBuffer)3 Mesh (org.terasology.engine.rendering.assets.mesh.Mesh)3 ResourceUrn (org.terasology.gestalt.assets.ResourceUrn)3 Colorc (org.terasology.nui.Colorc)3 ColorModel (java.awt.image.ColorModel)2 DataBufferInt (java.awt.image.DataBufferInt)2 Vector2f (org.joml.Vector2f)2 Vector3fc (org.joml.Vector3fc)2 Vector4f (org.joml.Vector4f)2 Test (org.junit.Test)2 ColorConstraint (org.terasology.engine.config.flexible.constraints.ColorConstraint)2 EntityRef (org.terasology.engine.entitySystem.entity.EntityRef)2 StandardMeshData (org.terasology.engine.rendering.assets.mesh.StandardMeshData)2 VertexResource (org.terasology.engine.rendering.assets.mesh.resource.VertexResource)2 VertexResourceBuilder (org.terasology.engine.rendering.assets.mesh.resource.VertexResourceBuilder)2 ParagraphRenderStyle (org.terasology.engine.rendering.nui.widgets.browser.ui.style.ParagraphRenderStyle)2 FastRandom (org.terasology.engine.utilities.random.FastRandom)2