@@ -1297,113 +1297,129 @@ bool TileRenderer::tesselateFireInWorld(Tile* tile, const TilePos& pos)
12971297bool TileRenderer::tesselateBedInWorld (Tile* tile, const TilePos& pos)
12981298{
12991299 Tesselator& t = Tesselator::instance;
1300- int var6 = m_pLevelSource->getData (pos);
1301- int var7 = BedTile::getDirectionFromData (var6);
1302- bool var8 = BedTile::isHead (var6);
1303- float var9 = 0 .5F ;
1304- float var10 = 1 .0F ;
1305- float var11 = 0 .8F ;
1306- float var12 = 0 .6F ;
1307- float fLightHere = tile->getBrightness (m_pLevelSource, pos);
1308- t.color (var9 * fLightHere , var9 * fLightHere , var9 * fLightHere );
1309- int hiddenFace = Tile::wood->m_TextureFrame ;
1310- int var27 = (hiddenFace & 15 ) << 4 ;
1311- int var28 = hiddenFace & 240 ;
1312- float var29 = ((float )var27 / 256 .0F );
1313- float var31 = ((var27 + 16 ) - 0.01 ) / 256.0 ;
1314- float var33 = ((float )var28 / 256 .0F );
1315- float var35 = ((var28 + 16 ) - 0.01 ) / 256.0 ;
1316- real var37 = pos.x + tile->m_aabb .min .x ;
1317- real var39 = pos.x + tile->m_aabb .max .x ;
1318- real var41 = pos.y + tile->m_aabb .min .y + 0.1875 ;
1319- real var43 = pos.z + tile->m_aabb .min .z ;
1320- real var45 = pos.z + tile->m_aabb .max .z ;
1321- bool z9 = m_textureOverride >= 0 ;
1322- if (!z9) {
1323- t.vertexUV (var37, var41, var45, var29, var35);
1324- t.vertexUV (var37, var41, var43, var29, var33);
1325- t.vertexUV (var39, var41, var43, var31, var33);
1326- t.vertexUV (var39, var41, var45, var31, var35);
1327- }
1328-
1329- float var64 = tile->getBrightness (m_pLevelSource, pos.above ());
1330- t.color (var10 * var64, var10 * var64, var10 * var64);
1331- var27 = tile->getTexture (m_pLevelSource, pos, Facing::UP );
1332- var28 = (var27 & 15 ) << 4 ;
1333- int var67 = var27 & 240 ;
1334- hiddenFace = BedTile::hiddenFace[var7];
1335- if (var8) {
1336- hiddenFace = BedTile::hiddenFace[BedTile::hiddenFaceIndex[var7]];
1300+
1301+ int data = m_pLevelSource->getData (pos);
1302+ Facing::Name direction = BedTile::getDirectionFromData (data);
1303+ bool isHeadPart = BedTile::isHead (data);
1304+
1305+ const float topColor = 0 .5F ;
1306+ const float sideColor = 0 .8F ;
1307+ const float bottomColor = 0 .6F ;
1308+
1309+ float brightnessHere = tile->getBrightness (m_pLevelSource, pos);
1310+
1311+ t.color (topColor * brightnessHere, topColor * brightnessHere, topColor * brightnessHere);
1312+
1313+ int woodTexture = Tile::wood->m_TextureFrame ;
1314+ int textureU = (woodTexture & 15 ) << 4 ;
1315+ int textureV = woodTexture & 240 ;
1316+
1317+ const float uMin = static_cast <float >(textureU) / 256 .0F ;
1318+ const float uMax = (textureU + 16 - 0 .01F ) / 256 .0F ;
1319+ const float vMin = static_cast <float >(textureV) / 256 .0F ;
1320+ const float vMax = (textureV + 16 - 0 .01F ) / 256 .0F ;
1321+
1322+ float xMin = pos.x + tile->m_aabb .min .x ;
1323+ float xMax = pos.x + tile->m_aabb .max .x ;
1324+ float yTop = pos.y + tile->m_aabb .min .y + 0 .1875F ;
1325+ float zMin = pos.z + tile->m_aabb .min .z ;
1326+ float zMax = pos.z + tile->m_aabb .max .z ;
1327+
1328+ bool hasTextureOverride = m_textureOverride >= 0 ;
1329+
1330+ if (!hasTextureOverride)
1331+ {
1332+ t.vertexUV (xMin, yTop, zMax, uMin, vMax);
1333+ t.vertexUV (xMin, yTop, zMin, uMin, vMin);
1334+ t.vertexUV (xMax, yTop, zMin, uMax, vMin);
1335+ t.vertexUV (xMax, yTop, zMax, uMax, vMax);
13371336 }
13381337
1338+ float brightnessAbove = tile->getBrightness (m_pLevelSource, pos.above ());
1339+ t.color (brightnessAbove, brightnessAbove, brightnessAbove);
1340+
1341+ int topTexture = tile->getTexture (m_pLevelSource, pos, Facing::UP );
1342+ int topU = (topTexture & 15 ) << 4 ;
1343+ int topV = topTexture & 240 ;
1344+
1345+ int hiddenFace = BedTile::hiddenFace[direction];
1346+ if (isHeadPart)
1347+ hiddenFace = BedTile::hiddenFace[BedTile::hiddenFaceIndex[direction]];
1348+
13391349 Facing::Name flippedFace = Facing::WEST ;
1340- uint8_t upRot = 2 ;
1341- switch (var7) {
1342- case 0 :
1350+ int upRotation = 2 ;
1351+
1352+ switch (direction)
1353+ {
1354+ case Facing::DOWN :
13431355 flippedFace = Facing::EAST ;
1344- upRot = 1 ;
1356+ upRotation = 1 ;
13451357 break ;
1346- case 1 :
1358+ case Facing:: UP :
13471359 flippedFace = Facing::SOUTH ;
1348- upRot = 3 ;
1349- case 2 :
1350- default :
1360+ upRotation = 3 ;
13511361 break ;
1352- case 3 :
1362+ case Facing::NORTH :
1363+ break ;
1364+ case Facing::SOUTH :
13531365 flippedFace = Facing::NORTH ;
1354- upRot = 0 ;
1366+ upRotation = 0 ;
1367+ break ;
13551368 }
13561369
1357- bool bDrewAnything = false ;
1370+ bool drewAnything = false ;
13581371
13591372 for (Facing::Name face : Facing::ALL )
13601373 {
1361- if (hiddenFace == face || face == Facing::DOWN ) continue ;
1374+ if (hiddenFace == face || face == Facing::DOWN )
1375+ continue ;
13621376
13631377 TilePos neighborPos = pos.relative (face);
13641378
13651379 if (!m_bDisableCulling && !tile->shouldRenderFace (m_pLevelSource, neighborPos, face))
13661380 continue ;
13671381
1368- bDrewAnything = true ;
1382+ drewAnything = true ;
13691383
1370- float light = tile->getBrightness (m_pLevelSource, neighborPos);
1384+ float faceBrightness = tile->getBrightness (m_pLevelSource, neighborPos);
13711385
1372- switch (face) {
1386+ switch (face)
1387+ {
13731388 case Facing::UP :
13741389 if (tile->m_aabb .max .y != 1 .0f && !tile->m_pMaterial ->isLiquid ())
1375- light = fLightHere ;
1390+ faceBrightness = brightnessHere ;
13761391 break ;
13771392 case Facing::NORTH :
13781393 if (tile->m_aabb .min .z > 0 .0f )
1379- light = fLightHere ;
1394+ faceBrightness = brightnessHere ;
13801395 break ;
13811396 case Facing::SOUTH :
13821397 if (tile->m_aabb .max .z < 1 .0f )
1383- light = fLightHere ;
1398+ faceBrightness = brightnessHere ;
13841399 break ;
13851400 case Facing::WEST :
13861401 if (tile->m_aabb .min .x > 0 .0f )
1387- light = fLightHere ;
1402+ faceBrightness = brightnessHere ;
13881403 break ;
13891404 case Facing::EAST :
13901405 if (tile->m_aabb .max .x < 1 .0f )
1391- light = fLightHere ;
1406+ faceBrightness = brightnessHere ;
13921407 break ;
13931408 default :
13941409 break ;
13951410 }
13961411
1397- int texture = tile->getTexture (m_pLevelSource, pos, face);
1412+ int faceTexture = tile->getTexture (m_pLevelSource, pos, face);
1413+ if (flippedFace == face)
1414+ faceTexture = -faceTexture;
13981415
1399- if (flippedFace == face) texture = -texture;
1400- float red, grn, blue;
1401- computeColor (tile->getColor (m_pLevelSource, pos, face, texture), red, grn, blue, Facing::LIGHT [face] * light);
1416+ float red, green, blue;
1417+ computeColor (tile->getColor (m_pLevelSource, pos, face, faceTexture), red, green, blue, Facing::LIGHT [face] * faceBrightness);
14021418
1403- renderFace (tile, pos, texture , face, red, grn , blue, face == Facing::UP ? upRot : 0 );
1419+ renderFace (tile, pos, faceTexture , face, red, green , blue, face == Facing::UP ? upRotation : 0 );
14041420 }
14051421
1406- return bDrewAnything ;
1422+ return drewAnything ;
14071423}
14081424
14091425bool TileRenderer::tesselateDustInWorld (Tile* tile, const TilePos& pos)
0 commit comments