mirror of
https://github.com/celisej567/mcpe.git
synced 2025-12-31 17:49:17 +03:00
* macOS Support & Cleanup * Fix malformed comments in build-wasm.bat * Emscripten Fixes * * Add shebang to the grabsounds.py script Since it was changed from rw- to rwx, I'll add the shebang so that it actually runs properly. * * Re-add the patch_data and readme files. * * Remove sound data. * Fix some more things. * Think it's ready to pull now... --------- Co-authored-by: BrentDaMage <BrentDaMage@users.noreply.github.com> Co-authored-by: iProgramInCpp <iprogramincpp@gmail.com>
186 lines
4.4 KiB
C++
186 lines
4.4 KiB
C++
/********************************************************************
|
|
Minecraft: Pocket Edition - Decompilation Project
|
|
Copyright (C) 2023 iProgramInCpp
|
|
|
|
The following code is licensed under the BSD 1 clause license.
|
|
SPDX-License-Identifier: BSD-1-Clause
|
|
********************************************************************/
|
|
|
|
#include "LightUpdate.hpp"
|
|
#include "world/level/Level.hpp"
|
|
|
|
void LightUpdate::update(Level* pLevel)
|
|
{
|
|
int newBr, oldBr, newBrN, x2, x6, x7, x14, x13, x10, v24, x21, x17_1, v27, x9, x10_1, x8, x7_1, x3, x4, x1, x20;
|
|
int x19, x18, x17, x16, x5, x1_1;
|
|
bool x11;
|
|
|
|
if ((m_z2 - m_z1 + 1) * (m_x2 + 1 - m_x1 + (m_y2 - m_y1) * (m_x2 + 1 - m_x1)) > 32768)
|
|
return;
|
|
|
|
if (m_x2 < m_x1)
|
|
return;
|
|
|
|
x1 = m_x1 + 1;
|
|
for (int i = m_x1 - 1; ; ++i)
|
|
{
|
|
x2 = x1 - 1;
|
|
if (m_z2 < m_z1)
|
|
{
|
|
x1_1 = x1;
|
|
goto LABEL_53;
|
|
}
|
|
x1_1 = x1;
|
|
x3 = m_z1 + 1;
|
|
x4 = m_z1 - 1;
|
|
do
|
|
{
|
|
x6 = x3 - 1;
|
|
if (!pLevel->hasChunksAt(x2, 0, x3 - 1, 1)
|
|
|| pLevel->getChunk(x2 >> 4, x6 >> 4)->isEmpty())
|
|
{
|
|
x5 = x3;
|
|
}
|
|
else
|
|
{
|
|
if (m_y1 < 0) m_y1 = 0;
|
|
if (m_y2 > 127) m_y2 = 127;
|
|
|
|
if (m_y1 <= m_y2)
|
|
{
|
|
x7 = m_y1 + 1;
|
|
x8 = m_y1 - 1;
|
|
x5 = x3;
|
|
while (1)
|
|
{
|
|
oldBr = pLevel->getBrightness(*this->m_lightLayer, x2, x7 - 1, x6);
|
|
x13 = pLevel->getTile(x2, x7 - 1, x6);
|
|
x14 = Tile::lightBlock[x13];
|
|
if (!x14)
|
|
x14 = 1;
|
|
if (m_lightLayer == &LightLayer::Sky)
|
|
break;
|
|
if (m_lightLayer != &LightLayer::Block)
|
|
goto LABEL_30;
|
|
x10 = Tile::lightEmission[x13];
|
|
x11 = x10 == 0;
|
|
LABEL_31:
|
|
if (x14 > 14)
|
|
v24 = x11;
|
|
else
|
|
v24 = 0;
|
|
if (!v24)
|
|
{
|
|
LABEL_35:
|
|
x10_1 = x10;
|
|
x16 = pLevel->getBrightness(*m_lightLayer, i, x7 - 1, x6);
|
|
x17 = pLevel->getBrightness(*m_lightLayer, x1, x7 - 1, x6);
|
|
x7_1 = x7;
|
|
x18 = pLevel->getBrightness(*m_lightLayer, x2, x8, x6);
|
|
x19 = pLevel->getBrightness(*m_lightLayer, x2, x7, x6);
|
|
x20 = pLevel->getBrightness(*m_lightLayer, x2, x7 - 1, x4);
|
|
x21 = pLevel->getBrightness(*m_lightLayer, x2, x7 - 1, x3);
|
|
x17_1 = x17;
|
|
if (x17 < x16)
|
|
x17_1 = x16;
|
|
if (x17_1 < x18)
|
|
x17_1 = x18;
|
|
if (x17_1 < x19)
|
|
x17_1 = x19;
|
|
if (x17_1 < x20)
|
|
x17_1 = x20;
|
|
if (x17_1 < x21)
|
|
v27 = x21 - x14;
|
|
else
|
|
v27 = x17_1 - x14;
|
|
newBr = v27;
|
|
if (newBr < 0)
|
|
newBr = 0;
|
|
if (newBr < x10_1)
|
|
newBr = x10_1;
|
|
goto LABEL_18;
|
|
}
|
|
newBr = 0;
|
|
x7_1 = x7;
|
|
LABEL_18:
|
|
if (newBr != oldBr)
|
|
{
|
|
pLevel->setBrightness(*m_lightLayer, x2, x7 - 1, x6, newBr);
|
|
newBrN = newBr - 1;
|
|
if (newBrN < 0)
|
|
newBrN = 0;
|
|
pLevel->updateLightIfOtherThan(*m_lightLayer, i, x7 - 1, x6, newBrN);
|
|
pLevel->updateLightIfOtherThan(*m_lightLayer, x2, x8, x6, newBrN);
|
|
pLevel->updateLightIfOtherThan(*m_lightLayer, x2, x7 - 1, x4, newBrN);
|
|
if (m_x2 <= x1)
|
|
pLevel->updateLightIfOtherThan(*m_lightLayer, x1, x7 - 1, x6, newBrN);
|
|
if (m_y2 <= x7)
|
|
pLevel->updateLightIfOtherThan(*m_lightLayer, x2, x7, x6, newBrN);
|
|
if (m_z2 <= x3)
|
|
pLevel->updateLightIfOtherThan(*m_lightLayer, x2, x7 - 1, x3, newBrN);
|
|
}
|
|
++x7;
|
|
++x8;
|
|
if (m_y2 < x7_1)
|
|
goto LABEL_8;
|
|
}
|
|
x9 = pLevel->isSkyLit(x2, x7 - 1, x6);
|
|
x10 = 15;
|
|
if (x9)
|
|
goto LABEL_35;
|
|
LABEL_30:
|
|
x11 = 1;
|
|
x10 = 0;
|
|
goto LABEL_31;
|
|
}
|
|
x5 = x3;
|
|
}
|
|
LABEL_8:
|
|
++x3;
|
|
++x4;
|
|
} while (x5 <= m_z2);
|
|
LABEL_53:
|
|
++x1;
|
|
if (x1_1 > m_x2)
|
|
break;
|
|
}
|
|
}
|
|
|
|
bool LightUpdate::expandToContain(int x1, int y1, int z1, int x2, int y2, int z2)
|
|
{
|
|
if (m_x1 <= x1 &&
|
|
m_y1 <= y1 &&
|
|
m_z1 <= z1 &&
|
|
m_x2 >= x2 &&
|
|
m_y2 >= y2 &&
|
|
m_z2 >= z2)
|
|
return true;
|
|
|
|
if (x1 < m_x1 - 1) return false;
|
|
if (y1 < m_y1 - 1) return false;
|
|
if (z1 < m_z1 - 1) return false;
|
|
if (x2 > m_x2 + 1) return false;
|
|
if (y2 > m_y2 + 1) return false;
|
|
if (z2 > m_z2 + 1) return false;
|
|
|
|
if (y1 >= m_y1) y1 = m_y1;
|
|
if (x1 >= m_x1) x1 = m_x1;
|
|
if (y2 < m_y2) y2 = m_y2;
|
|
if (z1 >= m_z1) z1 = m_z1;
|
|
if (x2 < m_x2) x2 = m_x2;
|
|
if (z2 < m_z2) z2 = m_z2;
|
|
|
|
// If trying to add more than 2 tiles, we can't do that
|
|
if ((z2 - z1) * (x2 - x1) * (y2 - y1) - (m_z2 - m_z1) * (m_x2 - m_x1) * (m_y2 - m_y1) > 2)
|
|
return false;
|
|
|
|
m_x1 = x1;
|
|
m_y1 = y1;
|
|
m_x2 = x2;
|
|
m_y2 = y2;
|
|
m_z1 = z1;
|
|
m_z2 = z2;
|
|
|
|
return true;
|
|
}
|