Search in sources :

Example 11 with Color

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

the class IconMeshFactory method addPixel.

private static void addPixel(StandardMeshData mesh, Vector2fc position, float size, Color c) {
    Vector3f pos = new Vector3f();
    Vector3f norm = new Vector3f();
    final float sizeHalf = size / 2;
    int firstIndex = mesh.position.getPosition();
    // top
    mesh.position.put(pos.set(position, 0.0f).add(-sizeHalf, sizeHalf, sizeHalf));
    mesh.position.put(pos.set(position, 0.0f).add(sizeHalf, sizeHalf, sizeHalf));
    mesh.position.put(pos.set(position, 0.0f).add(sizeHalf, sizeHalf, -sizeHalf));
    mesh.position.put(pos.set(position, 0.0f).add(-sizeHalf, sizeHalf, -sizeHalf));
    for (int i = 0; i < 4; i++) {
        mesh.normal.put(norm.set(0, 1.0f, 0));
        mesh.color0.put(c);
    }
    // left
    mesh.position.put(pos.set(position, 0.0f).add(-sizeHalf, -sizeHalf, -sizeHalf));
    mesh.position.put(pos.set(position, 0.0f).add(-sizeHalf, -sizeHalf, sizeHalf));
    mesh.position.put(pos.set(position, 0.0f).add(-sizeHalf, sizeHalf, sizeHalf));
    mesh.position.put(pos.set(position, 0.0f).add(-sizeHalf, sizeHalf, -sizeHalf));
    for (int i = 0; i < 4; i++) {
        mesh.normal.put(norm.set(-1.0f, 0, 0));
        mesh.color0.put(c);
    }
    // right
    mesh.position.put(pos.set(position, 0.0f).add(sizeHalf, sizeHalf, -sizeHalf));
    mesh.position.put(pos.set(position, 0.0f).add(sizeHalf, sizeHalf, sizeHalf));
    mesh.position.put(pos.set(position, 0.0f).add(sizeHalf, -sizeHalf, sizeHalf));
    mesh.position.put(pos.set(position, 0.0f).add(sizeHalf, -sizeHalf, -sizeHalf));
    for (int i = 0; i < 4; i++) {
        mesh.normal.put(norm.set(1.0f, 0, 0));
        mesh.color0.put(c);
    }
    // darkern for sides facing left, right and bottom
    Color cd = new Color(c.rf() * 0.6f, c.gf() * 0.6f, c.bf() * 0.6f, c.af());
    // back
    mesh.position.put(pos.set(position, 0.0f).add(-sizeHalf, sizeHalf, -sizeHalf));
    mesh.position.put(pos.set(position, 0.0f).add(sizeHalf, sizeHalf, -sizeHalf));
    mesh.position.put(pos.set(position, 0.0f).add(sizeHalf, -sizeHalf, -sizeHalf));
    mesh.position.put(pos.set(position, 0.0f).add(-sizeHalf, -sizeHalf, -sizeHalf));
    for (int i = 0; i < 4; i++) {
        mesh.normal.put(norm.set(0, 0, -1.0f));
        mesh.color0.put(cd);
    }
    // front
    mesh.position.put(pos.set(position, 0.0f).add(-sizeHalf, -sizeHalf, sizeHalf));
    mesh.position.put(pos.set(position, 0.0f).add(sizeHalf, -sizeHalf, sizeHalf));
    mesh.position.put(pos.set(position, 0.0f).add(sizeHalf, sizeHalf, sizeHalf));
    mesh.position.put(pos.set(position, 0.0f).add(-sizeHalf, sizeHalf, sizeHalf));
    for (int i = 0; i < 4; i++) {
        mesh.normal.put(norm.set(0, 0, 1.0f));
        mesh.color0.put(cd);
    }
    // bottom
    mesh.position.put(pos.set(position, 0.0f).add(-sizeHalf, -sizeHalf, -sizeHalf));
    mesh.position.put(pos.set(position, 0.0f).add(sizeHalf, -sizeHalf, -sizeHalf));
    mesh.position.put(pos.set(position, 0.0f).add(sizeHalf, -sizeHalf, sizeHalf));
    mesh.position.put(pos.set(position, 0.0f).add(-sizeHalf, -sizeHalf, sizeHalf));
    for (int i = 0; i < 4; i++) {
        mesh.normal.put(norm.set(0, -1, 0f));
        mesh.color0.put(cd);
    }
    int lastIndex = mesh.position.getPosition();
    for (int i = firstIndex; i < lastIndex - 2; i += 4) {
        mesh.indices.put(i);
        mesh.indices.put(i + 1);
        mesh.indices.put(i + 2);
        mesh.indices.put(i + 2);
        mesh.indices.put(i + 3);
        mesh.indices.put(i);
    }
}
Also used : Vector3f(org.joml.Vector3f) Color(org.terasology.nui.Color)

Example 12 with Color

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

the class IconMeshFactory method generateIconMeshData.

public static MeshData generateIconMeshData(TextureRegion tex, int alphaLimit, boolean withContour, Vector4f colorContour) {
    ByteBuffer buffer = tex.getTexture().getData().getBuffers()[0];
    Rectanglei pixelRegion = tex.getPixelRegion();
    int posX = pixelRegion.minX;
    int posY = pixelRegion.minY;
    int stride = tex.getTexture().getWidth() * 4;
    float textureSize = Math.max(tex.getWidth(), tex.getHeight());
    StandardMeshData mesh = new StandardMeshData();
    Vector2f pos = new Vector2f();
    Color color = new Color();
    for (int y = 0; y < tex.getHeight(); y++) {
        for (int x = 0; x < tex.getWidth(); x++) {
            int r = buffer.get((posY + y) * stride + (posX + x) * 4) & 255;
            int g = buffer.get((posY + y) * stride + (posX + x) * 4 + 1) & 255;
            int b = buffer.get((posY + y) * stride + (posX + x) * 4 + 2) & 255;
            int a = buffer.get((posY + y) * stride + (posX + x) * 4 + 3) & 255;
            if (a > alphaLimit) {
                color.setRed(r).setGreen(g).setBlue(b).setAlpha(a);
                pos.set(2f / textureSize * x - 1f, 2f / textureSize * (tex.getHeight() - y - 1) - 1f);
                addPixel(mesh, pos, 2f / textureSize, color);
                if (withContour) {
                    int newX = 0;
                    int newY = 0;
                    int newA = 0;
                    for (int i = 0; i < 4; i++) {
                        newA = alphaLimit + 1;
                        switch(i) {
                            case 0:
                                // check left
                                if (x > 0) {
                                    newX = x - 1;
                                    newY = y;
                                    newA = buffer.get((posY + newY) * stride + (posX + newX) * 4 + 3) & 255;
                                }
                                break;
                            case 1:
                                // check top
                                if (y > 0) {
                                    newX = x;
                                    newY = y - 1;
                                    newA = buffer.get((posY + newY) * stride + (posX + newX) * 4 + 3) & 255;
                                }
                                break;
                            case 2:
                                // check right
                                if (x < 16) {
                                    newX = x + 1;
                                    newY = y;
                                    newA = buffer.get((posY + newY) * stride + (posX + newX) * 4 + 3) & 255;
                                }
                                break;
                            case 3:
                                // check bottom
                                if (y < 16) {
                                    newX = x;
                                    newY = y + 1;
                                    newA = buffer.get((posY + newY) * stride + (posX + newX) * 4 + 3) & 255;
                                }
                                break;
                            default:
                                break;
                        }
                        if (newA < alphaLimit) {
                            color.setRed(colorContour.x).setGreen(colorContour.y).setBlue(colorContour.z).setAlpha(colorContour.w);
                            addPixel(mesh, pos.set(2f * 0.0625f * newX - 0.5f, 0.125f * (15 - newY) - 1f), 0.125f, color);
                        }
                    }
                }
            }
        }
    }
    return mesh;
}
Also used : StandardMeshData(org.terasology.engine.rendering.assets.mesh.StandardMeshData) Vector2f(org.joml.Vector2f) Color(org.terasology.nui.Color) Rectanglei(org.terasology.joml.geom.Rectanglei) ByteBuffer(java.nio.ByteBuffer)

Example 13 with Color

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

the class GLTFAttributeMapping method readColor4FBuffer.

public static void readColor4FBuffer(byte[] buffer, GLTFAccessor accessor, GLTFBufferView bufferView, VertexAttributeBinding<Colorc, Color> mapping) {
    if (accessor.getComponentType() != GLTFComponentType.FLOAT) {
        return;
    }
    ByteBuffer byteBuffer = ByteBuffer.wrap(buffer, bufferView.getByteOffset() + accessor.getByteOffset(), bufferView.getByteLength() - accessor.getByteOffset());
    byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
    int gap = 0;
    if (bufferView.getByteStride() > 0) {
        gap = bufferView.getByteStride() - accessor.getComponentType().getByteLength() * accessor.getType().getDimension();
    }
    Vector4f value = new Vector4f();
    Color c = new Color();
    if (byteBuffer.position() < byteBuffer.limit()) {
        for (int i = 0; i < accessor.getType().getDimension(); i++) {
            value.setComponent(i, byteBuffer.getFloat());
        }
        c.set(value);
        mapping.put(c);
    }
    while (byteBuffer.position() < byteBuffer.limit() - gap) {
        byteBuffer.position(byteBuffer.position() + gap);
        for (int i = 0; i < accessor.getType().getDimension(); i++) {
            value.setComponent(i, byteBuffer.getFloat());
        }
        c.set(value);
        mapping.put(c);
    }
}
Also used : Vector4f(org.joml.Vector4f) Color(org.terasology.nui.Color) ByteBuffer(java.nio.ByteBuffer)

Example 14 with Color

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

the class ServerConnectionHandler method receivedConnect.

private void receivedConnect(NetData.JoinMessage message) {
    logger.info("Received Start Join");
    NetClient client = new NetClient(channelHandlerContext.channel(), networkSystem, identity);
    client.setPreferredName(message.getName());
    client.setColor(new Color(message.getColor().getRgba()));
    client.setViewDistanceMode(ViewDistance.forIndex(message.getViewDistanceLevel()));
    channelHandlerContext.pipeline().remove(this);
    serverHandler.connectionComplete(client);
}
Also used : Color(org.terasology.nui.Color)

Example 15 with Color

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

the class BlockSelectionRenderer method initialize.

private void initialize() {
    StandardMeshData overlayMeshData = new StandardMeshData();
    buildBlockMesh(overlayMeshData, 1.0f, textureRegion, Color.white);
    overlayMesh = Assets.generateAsset(overlayMeshData, Mesh.class);
    StandardMeshData overlayMeshData2 = new StandardMeshData();
    buildBlockMesh(overlayMeshData2, 1.0f, textureRegion, new Color(1.0f, 1.0f, 1.0f, .2f));
    overlayMesh2 = Assets.generateAsset(overlayMeshData2, Mesh.class);
    blockSelectionMat = Assets.getMaterial("engine:prog.blockSelection").get();
}
Also used : StandardMeshData(org.terasology.engine.rendering.assets.mesh.StandardMeshData) Color(org.terasology.nui.Color) Mesh(org.terasology.engine.rendering.assets.mesh.Mesh)

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