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);
}
}
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;
}
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);
}
}
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);
}
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();
}
Aggregations