Skip to content

Instantly share code, notes, and snippets.

@byteandahalf
Created December 20, 2014 19:45
Show Gist options
  • Save byteandahalf/3dd3ee1c307175aeace3 to your computer and use it in GitHub Desktop.
Save byteandahalf/3dd3ee1c307175aeace3 to your computer and use it in GitHub Desktop.
Code for rendering Redstone dust in Minecraft Pocket Edition
bool TileTessellator::tessellateRedstoneTileInWorld(RedstoneTile* tile, int x, int y, int z, TilePos const& pos, TileSource* tilesource) {
Tessellator* tessellator = tessellator_inst;
int data = (int) tilesource->getData(x, y, z);
// implement my own Texture system because of issues with MCPE's normal TextureUVCoordinateSet
RendererTexture* cross = new RendererTexture(0.0625F, 0.0937F, 0.5F, 0.5625F, 16, 16); // Cross texture
RendererTexture* line = new RendererTexture(0.125F, 0.1562F, 0.5F, 0.5625F, 16, 16); // line texture
RendererTexture* cross_overlay = new RendererTexture(0.0938F, 0.125F, 0.5F, 0.5625F, 16, 16); // cross overlay
RendererTexture* line_overlay = new RendererTexture(0.1563F, 0.1875F, 0.5F, 0.5625F, 16, 16); // line overlay
float var11 = (float) data / 15.0;
float var12 = var11 * 0.6 + 0.4;
if(data == 0) var12 = 0.3;
float var13 = var11 * var11 * 0.7 - 0.5;
float var14 = var11 * var11 * 0.6 - 0.7;
if(var13 < 0.0) var13 = 0.0;
if(var14 < 0.0) var14 = 0.0;
tessellator->color(var12, var13, var14, 1.0);
float var15 = 0.015625;
float var17 = 0.015625;
bool var19 = tile->canRedstoneConnectTo(tilesource, x - 1, y, z) || !Tile::solid[tilesource->getTile(x - 1, y, z).id] && tile->canRedstoneConnectTo(tilesource, x - 1, y - 1, z);
bool var20 = tile->canRedstoneConnectTo(tilesource, x + 1, y, z) || !Tile::solid[tilesource->getTile(x + 1, y, z).id] && tile->canRedstoneConnectTo(tilesource, x + 1, y - 1, z);
bool var21 = tile->canRedstoneConnectTo(tilesource, x, y, z - 1) || !Tile::solid[tilesource->getTile(x, y, z - 1).id] && tile->canRedstoneConnectTo(tilesource, x, y - 1, z - 1);
bool var22 = tile->canRedstoneConnectTo(tilesource, x, y, z + 1) || !Tile::solid[tilesource->getTile(x, y, z + 1).id] && tile->canRedstoneConnectTo(tilesource, x, y - 1, z + 1);
if(!Tile::solid[tilesource->getTile(x, y + 1, z).id]) {
if(Tile::solid[tilesource->getTile(x - 1, y, z).id] && tile->canRedstoneConnectTo(tilesource, x - 1, y + 1, z)) var19 = true;
if(Tile::solid[tilesource->getTile(x + 1, y, z).id] && tile->canRedstoneConnectTo(tilesource, x + 1, y + 1, z)) var20 = true;
if(Tile::solid[tilesource->getTile(x, y, z - 1).id] && tile->canRedstoneConnectTo(tilesource, x, y + 1, z - 1)) var21 = true;
if(Tile::solid[tilesource->getTile(x, y, z + 1).id] && tile->canRedstoneConnectTo(tilesource, x, y + 1, z + 1)) var22 = true;
}
float var23 = (float) (x + 0);
float var24 = (float) (x + 1);
float var25 = (float) (z + 0);
float var26 = (float) (z + 1);
int var27 = 0;
if((var19 || var20) && !var21 && !var22) var27 = 1;
if((var21 || var22) && !var20 && !var19) var27 = 2;
if(var27 == 0) {
int var28 = 0;
int var29 = 0;
int var30 = 16;
int var31 = 16;
bool var32 = true;
if(!var19) var23 += 0.3125;
if(!var19) var28 += 5;
if(!var20) var24 -= 0.3125;
if(!var20) var30 -= 5;
if(!var21) var25 += 0.3125;
if(!var21) var29 += 5;
if(!var22) var26 -= 0.3125;
if(!var22) var31 -= 5;
// Render a cross
tessellator->vertexUV(var24, y + 0.015625, var26, cross->getInterpolatedU(var30), cross->getInterpolatedV(var31));
tessellator->vertexUV(var24, y + 0.015625, var25, cross->getInterpolatedU(var30), cross->getInterpolatedV(var29));
tessellator->vertexUV(var23, y + 0.015625, var25, cross->getInterpolatedU(var28), cross->getInterpolatedV(var29));
tessellator->vertexUV(var23, y + 0.015625, var26, cross->getInterpolatedU(var28), cross->getInterpolatedV(var31));
tessellator->color(1.0, 1.0, 1.0, 1.0);
tessellator->vertexUV(var24, y + 0.015625, var26, cross_overlay->getInterpolatedU(var30), cross_overlay->getInterpolatedV(var31));
tessellator->vertexUV(var24, y + 0.015625, var25, cross_overlay->getInterpolatedU(var30), cross_overlay->getInterpolatedV(var29));
tessellator->vertexUV(var23, y + 0.015625, var25, cross_overlay->getInterpolatedU(var28), cross_overlay->getInterpolatedV(var29));
tessellator->vertexUV(var23, y + 0.015625, var26, cross_overlay->getInterpolatedU(var28), cross_overlay->getInterpolatedV(var31));
}
else if(var27 == 1)
{
// Render a line facing x-x
tessellator->vertexUV(var24, y + 0.015625, var26, line->maxU, line->maxV);
tessellator->vertexUV(var24, y + 0.015625, var25, line->maxU, line->minV);
tessellator->vertexUV(var23, y + 0.015625, var25, line->minU, line->minV);
tessellator->vertexUV(var23, y + 0.015625, var26, line->minU, line->maxV);
tessellator->color(1.0, 1.0, 1.0, 1.0);
tessellator->vertexUV(var24, y + 0.015625, var26, line_overlay->maxU, line_overlay->maxV);
tessellator->vertexUV(var24, y + 0.015625, var25, line_overlay->maxU, line_overlay->minV);
tessellator->vertexUV(var23, y + 0.015625, var25, line_overlay->minU, line_overlay->minV);
tessellator->vertexUV(var23, y + 0.015625, var26, line_overlay->minU, line_overlay->maxV);
}
else
{
// Render a line facing z-z
tessellator->vertexUV(var24, y + 0.015625, var26, line->maxU, line->maxV);
tessellator->vertexUV(var24, y + 0.015625, var25, line->minU, line->maxV);
tessellator->vertexUV(var23, y + 0.015625, var25, line->minU, line->minV);
tessellator->vertexUV(var23, y + 0.015625, var26, line->maxU, line->minV);
tessellator->color(1.0, 1.0, 1.0, 1.0);
tessellator->vertexUV(var24, y + 0.015625, var26, line_overlay->maxU, line_overlay->maxV);
tessellator->vertexUV(var24, y + 0.015625, var25, line_overlay->minU, line_overlay->maxV);
tessellator->vertexUV(var23, y + 0.015625, var25, line_overlay->minU, line_overlay->minV);
tessellator->vertexUV(var23, y + 0.015625, var26, line_overlay->maxU, line_overlay->minV);
}
if(!Tile::solid[tilesource->getTile(x, y + 1, z).id])
{
// This section is for rendering wall redstone line
float var33 = 0.021875;
if(Tile::solid[tilesource->getTile(x - 1, y, z).id] && tilesource->getTile(x - 1, y + 1, z).id == 55)
{
tessellator->color(var12, var13, var14, 0.0);
tessellator->vertexUV(x + 0.015625, ((float)(y + 1) + 0.021875), (z + 1), line->maxU, line->minV);
tessellator->vertexUV(x + 0.015625, (y + 0), (z + 1), line->minU, line->minV);
tessellator->vertexUV(x + 0.015625, (y + 0), (z + 0), line->minU, line->maxV);
tessellator->vertexUV(x + 0.015625, ((float)(y + 1) + 0.021875), (z + 0), line->maxU, line->maxV);
tessellator->color(1.0, 1.0, 1.0, 0.0);
tessellator->vertexUV(x + 0.015625, ((float)(y + 1) + 0.021875), (z + 1), line_overlay->maxU, line_overlay->minV);
tessellator->vertexUV(x + 0.015625, (y + 0), (z + 1), line_overlay->minU, line_overlay->minV);
tessellator->vertexUV(x + 0.015625, (y + 0), (z + 0), line_overlay->minU, line_overlay->maxV);
tessellator->vertexUV(x + 0.015625, ((float)(y + 1) + 0.021875), (z + 0), line_overlay->maxU, line_overlay->maxV);
}
if(Tile::solid[tilesource->getTile(x + 1, y, z).id] && tilesource->getTile(x + 1, y + 1, z).id == 55)
{
tessellator->color(var12, var13, var14, 0.0);
tessellator->vertexUV((x + 1) - 0.015625, (y + 0), (z + 1), line->minU, line->maxV);
tessellator->vertexUV((x + 1) - 0.015625, ((float)(y + 1) + 0.021875), (z + 1), line->maxU, line->maxV);
tessellator->vertexUV((x + 1) - 0.015625, ((float)(y + 1) + 0.021875), (z + 0), line->maxU, line->minV);
tessellator->vertexUV((x + 1) - 0.015625, (y + 0), (z + 0), line->minU, line->minV);
tessellator->color(1.0, 1.0, 1.0, 0.0);
tessellator->vertexUV((x + 1) - 0.015625, (y + 0), (z + 1), line_overlay->minU, line_overlay->maxV);
tessellator->vertexUV((x + 1) - 0.015625, ((float)(y + 1) + 0.021875), (z + 1), line_overlay->maxU, line_overlay->maxV);
tessellator->vertexUV((x + 1) - 0.015625, ((float)(y + 1) + 0.021875), (z + 0), line_overlay->maxU, line_overlay->minV);
tessellator->vertexUV((x + 1) - 0.015625, (y + 0), (z + 0), line_overlay->minU, line_overlay->minV);
}
if(Tile::solid[tilesource->getTile(x, y, z - 1).id] && tilesource->getTile(x, y + 1, z - 1).id == 55)
{
tessellator->color(var12, var13, var14, 0.0);
tessellator->vertexUV((x + 1), (y + 0), z + 0.015625, line->minU, line->maxV);
tessellator->vertexUV((x + 1), ((float)(y + 1) + 0.021875), z + 0.015625, line->maxU, line->maxV);
tessellator->vertexUV((x + 0), ((float)(y + 1) + 0.021875), z + 0.015625, line->maxU, line->minV);
tessellator->vertexUV((x + 0), (y + 0), z + 0.015625, line->minU, line->minV);
tessellator->color(1.0, 1.0, 1.0, 0.0);
tessellator->vertexUV((x + 1), (y + 0), z + 0.015625, line_overlay->minU, line_overlay->maxV);
tessellator->vertexUV((x + 1), ((float)(y + 1) + 0.021875), z + 0.015625, line_overlay->maxU, line_overlay->maxV);
tessellator->vertexUV((x + 0), ((float)(y + 1) + 0.021875), z + 0.015625, line_overlay->maxU, line_overlay->minV);
tessellator->vertexUV((x + 0), (y + 0), z + 0.015625, line_overlay->minU, line_overlay->minV);
}
if(Tile::solid[tilesource->getTile(x, y, z + 1).id] && tilesource->getTile(x, y + 1, z + 1).id == 55)
{
tessellator->color(var12, var13, var14, 0.0);
tessellator->vertexUV((x + 1), ((float)(y + 1) + 0.021875), (z + 1) - 0.015625, line->maxU, line->minV);
tessellator->vertexUV((x + 1), (y + 0), (z + 1) - 0.015625, line->minU, line->minV);
tessellator->vertexUV((x + 0), (y + 0), (z + 1) - 0.015625, line->minU, line->maxV);
tessellator->vertexUV((x + 0), ((float)(y + 1) + 0.021875), (z + 1) - 0.015625, line->maxU, line->maxV);
tessellator->color(1.0, 1.0, 1.0, 0.0);
tessellator->vertexUV((x + 1), ((float)(y + 1) + 0.021875), (z + 1) - 0.015625, line_overlay->maxU, line_overlay->minV);
tessellator->vertexUV((x + 1), (y + 0), (z + 1) - 0.015625, line_overlay->minU, line_overlay->minV);
tessellator->vertexUV((x + 0), (y + 0), (z + 1) - 0.015625, line_overlay->minU, line_overlay->maxV);
tessellator->vertexUV((x + 0), ((float)(y + 1) + 0.021875), (z + 1) - 0.015625, line_overlay->maxU, line_overlay->maxV);
}
}
return true;
}
@DanHerePE
Copy link

GG

@1156276519
Copy link

How do i progam on this site to mush stuff

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment