Created
December 20, 2014 19:45
-
-
Save byteandahalf/3dd3ee1c307175aeace3 to your computer and use it in GitHub Desktop.
Code for rendering Redstone dust in Minecraft Pocket Edition
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} |
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
GG