diff --git a/Minecraft.Client/Common/App_enums.h b/Minecraft.Client/Common/App_enums.h index 8800f8e3..f8e8b72b 100644 --- a/Minecraft.Client/Common/App_enums.h +++ b/Minecraft.Client/Common/App_enums.h @@ -508,38 +508,10 @@ enum eMinecraftColour eTextColor_EnchantDisabled, eTextColor_RenamedItemTitle, - //eHTMLColor_0 = 0x000000, //r:0 , g: 0, b: 0, i: 0 - //eHTMLColor_1 = 0x0000aa, //r:0 , g: 0, b: aa, i: 1 // blue, quite dark - //eHTMLColor_2 = 0x109e10, // Changed by request of Dave //0x00aa00, //r:0 , g: aa, b: 0, i: 2 // green - //eHTMLColor_3 = 0x109e9e, // Changed by request of Dave //0x00aaaa, //r:0 , g: aa, b: aa, i: 3 // cyan - //eHTMLColor_4 = 0xaa0000, //r:aa , g: 0, b: 0, i: 4 // red - //eHTMLColor_5 = 0xaa00aa, //r:aa , g: 0, b: aa, i: 5 // purple - //eHTMLColor_6 = 0xffaa00, //r:ff , g: aa, b: 0, i: 6 // orange - //eHTMLColor_7 = 0xaaaaaa, //r:aa , g: aa, b: aa, i: 7 // light gray - //eHTMLColor_8 = 0x555555, //r:55 , g: 55, b: 55, i: 8 // gray - //eHTMLColor_9 = 0x5555ff, //r:55 , g: 55, b: ff, i: 9 // blue - //eHTMLColor_a = 0x55ff55, //r:55 , g: ff, b: 55, i: a // green - //eHTMLColor_b = 0x55ffff, //r:55 , g: ff, b: ff, i: b // cyan - //eHTMLColor_c = 0xff5555, //r:ff , g: 55, b: 55, i: c // red pink - //eHTMLColor_d = 0xff55ff, //r:ff , g: 55, b: ff, i: d // bright pink - //eHTMLColor_e = 0xffff55, //r:ff , g: ff, b: 55, i: e // yellow - //eHTMLColor_f = 0xffffff, //r:ff , g: ff, b: ff, i: f - //eHTMLColor_0_dark = 0x000000, //r:0 , g: 0, b: 0, i: 10 - //eHTMLColor_1_dark = 0x00002a, //r:0 , g: 0, b: 2a, i: 11 - //eHTMLColor_2_dark = 0x002a00, //r:0 , g: 2a, b: 0, i: 12 - //eHTMLColor_3_dark = 0x002a2a, //r:0 , g: 2a, b: 2a, i: 13 - //eHTMLColor_4_dark = 0x2a0000, //r:2a , g: 0, b: 0, i: 14 - //eHTMLColor_5_dark = 0x2a002a, //r:2a , g: 0, b: 2a, i: 15 - //eHTMLColor_6_dark = 0x2a2a00, //r:2a , g: 2a, b: 0, i: 16 - //eHTMLColor_7_dark = 0x2a2a2a, //r:2a , g: 2a, b: 2a, i: 17 // dark gray - //eHTMLColor_8_dark = 0x151515, //r:15 , g: 15, b: 15, i: 18 - //eHTMLColor_9_dark = 0x15153f, //r:15 , g: 15, b: 3f, i: 19 - //eHTMLColor_a_dark = 0x153f15, //r:15 , g: 3f, b: 15, i: 1a - //eHTMLColor_b_dark = 0x153f3f, //r:15 , g: 3f, b: 3f, i: 1b - //eHTMLColor_c_dark = 0x3f1515, //r:3f , g: 15, b: 15, i: 1c // brown - //eHTMLColor_d_dark = 0x3f153f, //r:3f , g: 15, b: 3f, i: 1d - //eHTMLColor_e_dark = 0x3f3f15, //r:3f , g: 3f, b: 15, i: 1e - //eHTMLColor_f_dark = 0x3f3f3f, //r:3f , g: 3f, b: 3f, i: 1f + // TU30 + eMinecraftColour_BlockLight_OverworldDimension, + eMinecraftColour_BlockLight_HellDimension, + eMinecraftColour_BlockLight_EndDimension, eMinecraftColour_COUNT, }; diff --git a/Minecraft.Client/Common/Colours/ColourTable.cpp b/Minecraft.Client/Common/Colours/ColourTable.cpp index ad627de2..d5ec416a 100644 --- a/Minecraft.Client/Common/Colours/ColourTable.cpp +++ b/Minecraft.Client/Common/Colours/ColourTable.cpp @@ -315,10 +315,16 @@ const wchar_t* ColourTable::ColourTableElements[eMinecraftColour_COUNT] = L"HTMLColor_T3", L"HTMLColor_Black", L"HTMLColor_White", + L"Color_EnchantText", L"Color_EnchantTextFocus", L"Color_EnchantTextDisabled", L"Color_RenamedItemTitle", + + // TU30 + L"BlockLight_OverworldDimension", + L"BlockLight_HellDimension", + L"BlockLight_EndDimension", }; void ColourTable::staticCtor() diff --git a/Minecraft.Client/Common/res/TitleUpdate/res/colours.xml b/Minecraft.Client/Common/res/TitleUpdate/res/colours.xml index 6c45b660..4eb5a5f4 100644 --- a/Minecraft.Client/Common/res/TitleUpdate/res/colours.xml +++ b/Minecraft.Client/Common/res/TitleUpdate/res/colours.xml @@ -296,4 +296,9 @@ if __name__=="__main__": notecolors() + + + + + \ No newline at end of file diff --git a/Minecraft.Client/GameRenderer.cpp b/Minecraft.Client/GameRenderer.cpp index 15a4362f..2d26b6ca 100644 --- a/Minecraft.Client/GameRenderer.cpp +++ b/Minecraft.Client/GameRenderer.cpp @@ -876,17 +876,29 @@ void GameRenderer::updateLightTexture(float a) Level *level = player->level; + int dimColor = level->dimension->getBlockLightColour(); + float dimB = (float)((dimColor >> 16) & 0xFF) / 255.0f; + float dimG = (float)((dimColor >> 8) & 0xFF) / 255.0f; + float dimR = (float)(dimColor & 0xFF) / 255.0f; + const float skyDarken1 = level->getSkyDarken(1.0f); -#ifdef __AVX__ - const float darken = skyDarken1 * 0.95f + 0.05f; - const float blockMult = (blr * 0.1f + 1.5f); const float skyWeight = skyDarken1 * 0.65f + 0.35f; + const float darken = skyDarken1 * 0.95f + 0.05f; + +#ifdef __AVX__ + const float blockMult = (blr * 0.1f + 1.5f); const __m256 vDarken = _mm256_set1_ps(darken); const __m256 vSkyWeight = _mm256_set1_ps(skyWeight); const __m256 vBlockMult = _mm256_set1_ps(blockMult); + + const __m256 vDimR = _mm256_set1_ps(dimR); + const __m256 vDimG = _mm256_set1_ps(dimG); + const __m256 vDimB = _mm256_set1_ps(dimB); + const bool skyFlash = level->skyFlashTime < 0; const bool isEnd = level->dimension->id == 1; + const bool hasNV = player->hasEffect(MobEffect::nightVision); const float nvScale = hasNV ? getNightVisionScale(player, a) : 0.0f; const __m256 vNVScale = _mm256_set1_ps(nvScale); @@ -909,9 +921,13 @@ void GameRenderer::updateLightTexture(float a) __m256 vGs = vRs; __m256 vBs = vSky; - __m256 vRb = vBlock; - __m256 vGb = _mm256_mul_ps(vBlock, _mm256_add_ps(_mm256_mul_ps(_mm256_add_ps(_mm256_mul_ps(vBlock, _mm256_set1_ps(0.6f)), _mm256_set1_ps(0.4f)), _mm256_set1_ps(0.6f)), _mm256_set1_ps(0.4f))); - __m256 vBb = _mm256_mul_ps(vBlock, _mm256_add_ps(_mm256_mul_ps(_mm256_mul_ps(vBlock, vBlock), _mm256_set1_ps(0.6f)), _mm256_set1_ps(0.4f))); + __m256 vRb_base = vBlock; + __m256 vGb_base = _mm256_mul_ps(vBlock, _mm256_add_ps(_mm256_mul_ps(_mm256_add_ps(_mm256_mul_ps(vBlock, _mm256_set1_ps(0.6f)), _mm256_set1_ps(0.4f)), _mm256_set1_ps(0.6f)), _mm256_set1_ps(0.4f))); + __m256 vBb_base = _mm256_mul_ps(vBlock, _mm256_add_ps(_mm256_mul_ps(_mm256_mul_ps(vBlock, vBlock), _mm256_set1_ps(0.6f)), _mm256_set1_ps(0.4f))); + + __m256 vRb = _mm256_mul_ps(vRb_base, vDimR); + __m256 vGb = _mm256_mul_ps(vGb_base, vDimG); + __m256 vBb = _mm256_mul_ps(vBb_base, vDimB); __m256 vR = _mm256_add_ps(vRs, vRb); __m256 vG = _mm256_add_ps(vGs, vGb); @@ -921,23 +937,24 @@ void GameRenderer::updateLightTexture(float a) vG = _mm256_add_ps(_mm256_mul_ps(vG, v096), v003); vB = _mm256_add_ps(_mm256_mul_ps(vB, v096), v003); - if (darkenWorldAmount > 0) { + if (darkenWorldAmount > 0) + { vR = _mm256_add_ps(_mm256_mul_ps(vR, vOneMinusAmount), _mm256_mul_ps(_mm256_mul_ps(vR, _mm256_set1_ps(0.7f)), vAmount)); vG = _mm256_add_ps(_mm256_mul_ps(vG, vOneMinusAmount), _mm256_mul_ps(_mm256_mul_ps(vG, _mm256_set1_ps(0.6f)), vAmount)); vB = _mm256_add_ps(_mm256_mul_ps(vB, vOneMinusAmount), _mm256_mul_ps(_mm256_mul_ps(vB, _mm256_set1_ps(0.6f)), vAmount)); } - if (isEnd) { + if (isEnd) + { vR = _mm256_add_ps(_mm256_set1_ps(0.22f), _mm256_mul_ps(vRb, _mm256_set1_ps(0.75f))); vG = _mm256_add_ps(_mm256_set1_ps(0.28f), _mm256_mul_ps(vGb, _mm256_set1_ps(0.75f))); vB = _mm256_add_ps(_mm256_set1_ps(0.25f), _mm256_mul_ps(vBb, _mm256_set1_ps(0.75f))); } - if (hasNV) { - __m256 vInvR = _mm256_rcp_ps(vR); - __m256 vInvG = _mm256_rcp_ps(vG); - __m256 vInvB = _mm256_rcp_ps(vB); - __m256 vDist = _mm256_min_ps(vInvR, _mm256_min_ps(vInvG, vInvB)); + if (hasNV) + { + __m256 vMaxRGB = _mm256_max_ps(vR, _mm256_max_ps(vG, vB)); + __m256 vDist = _mm256_rcp_ps(vMaxRGB); vR = _mm256_add_ps(_mm256_mul_ps(vR, _mm256_sub_ps(vOne, vNVScale)), _mm256_mul_ps(_mm256_mul_ps(vR, vDist), vNVScale)); vG = _mm256_add_ps(_mm256_mul_ps(vG, _mm256_sub_ps(vOne, vNVScale)), _mm256_mul_ps(_mm256_mul_ps(vG, vDist), vNVScale)); @@ -970,22 +987,19 @@ void GameRenderer::updateLightTexture(float a) #else for (int i = 0; i < 256; i++) { - const float darken = skyDarken1 * 0.95f + 0.05f; float sky = level->dimension->brightnessRamp[i / 16] * darken; const float block = level->dimension->brightnessRamp[i % 16] * (blr * 0.1f + 1.5f); if (level->skyFlashTime < 0) - { sky = level->dimension->brightnessRamp[i / 16]; - } - const float rs = sky * (skyDarken1 * 0.65f + 0.35f); - const float gs = sky * (skyDarken1 * 0.65f + 0.35f); + const float rs = sky * skyWeight; + const float gs = sky * skyWeight; const float bs = sky; - const float rb = block; - const float gb = block * ((block * 0.6f + 0.4f) * 0.6f + 0.4f); - const float bb = block * ((block * block) * 0.6f + 0.4f); + const float rb = block * dimR; + const float gb = (block * ((block * 0.6f + 0.4f) * 0.6f + 0.4f)) * dimG; + const float bb = (block * ((block * block) * 0.6f + 0.4f)) * dimB; float _r = (rs + rb); float _g = (gs + gb); @@ -1013,28 +1027,15 @@ void GameRenderer::updateLightTexture(float a) if (player->hasEffect(MobEffect::nightVision)) { const float scale = getNightVisionScale(player, a); - float dist = 1.0f / _r; - if (dist > (1.0f / _g)) - dist = (1.0f / _g); - if (dist > (1.0f / _b)) - dist = (1.0f / _b); + float dist = 1.0f / fmax(_r, fmax(_g, _b)); _r = _r * (1.0f - scale) + (_r * dist) * scale; _g = _g * (1.0f - scale) + (_g * dist) * scale; _b = _b * (1.0f - scale) + (_b * dist) * scale; } - if (_r > 1.0f) - _r = 1.0f; - if (_r < 0.0f) - _r = 0.0f; - if (_g > 1.0f) - _g = 1.0f; - if (_g < 0.0f) - _g = 0.0f; - if (_b > 1.0f) - _b = 1.0f; - if (_b < 0.0f) - _b = 0.0f; + _r = fmin(1.0f, fmax(0.0f, _r)); + _g = fmin(1.0f, fmax(0.0f, _g)); + _b = fmin(1.0f, fmax(0.0f, _b)); constexpr int alpha = 255; const int r = static_cast(_r * 255); @@ -2056,12 +2057,12 @@ void GameRenderer::setupClearColor(float a) float whiteness = 1.0f / (4 - mc->options->viewDistance); whiteness = 1.0f - static_cast(pow(static_cast(whiteness), 0.25)); - Vec3 *skyColor = level->getSkyColor(mc->cameraTargetPlayer, a); + Vec3 *skyColor = level->getSkyColor(player, a); float sr = static_cast(skyColor->x); float sg = static_cast(skyColor->y); float sb = static_cast(skyColor->z); - Vec3 *fogColor = level->getFogColor(a); + Vec3 *fogColor = level->getFogColor(player, a); fr = static_cast(fogColor->x); fg = static_cast(fogColor->y); fb = static_cast(fogColor->z); @@ -2070,8 +2071,8 @@ void GameRenderer::setupClearColor(float a) { Vec3 *sunAngle = Mth::sin(level->getSunAngle(a)) > 0 ? Vec3::newTemp(-1, 0, 0) : Vec3::newTemp(1, 0, 0); float d = static_cast(player->getViewVector(a)->dot(sunAngle)); - if (d < 0) d = 0; - if (d > 0) + d = fmaxf(0.0f, d); + if (d > 0.0f) { float *c = level->dimension->getSunriseColor(level->getTimeOfDay(a), a); if (c != nullptr) @@ -2152,24 +2153,12 @@ void GameRenderer::setupClearColor(float a) if (player->hasEffect(MobEffect::blindness)) { int duration = player->getEffect(MobEffect::blindness)->getDuration(); - if (duration < 20) - { - yy = yy * (1.0f - static_cast(duration) / 20.0f); - } - else - { - yy = 0.0; - } + yy *= (duration < 20) ? (1.0f - static_cast(duration) / 20.0f) : 0.0; } - if (yy < 1.0) - { - if (yy < 0.0) yy = 0.0; - yy = yy * yy; - fr *= yy; - fg *= yy; - fb *= yy; - } + yy = fmax(0.0, fmin(1.0, yy)); + double yy2 = yy * yy; + fr *= yy2; fg *= yy2; fb *= yy2; if (darkenWorldAmount > 0) { @@ -2183,19 +2172,9 @@ void GameRenderer::setupClearColor(float a) { float scale = getNightVisionScale(mc->player, a); { - float dist = FLT_MAX; // MGH - changed this to avoid divide by zero - if ( (fr > 0) && (dist > (1.0f / fr)) ) - { - dist = (1.0f / fr); - } - if ( (fg > 0) && (dist > (1.0f / fg)) ) - { - dist = (1.0f / fg); - } - if ( (fb > 0) && (dist > (1.0f / fb)) ) - { - dist = (1.0f / fb); - } + float maxCol = fmaxf(fr, fmaxf(fg, fb)); + float dist = (maxCol > 0.0f) ? (1.0f / maxCol) : 1.0f; + fr = fr * (1.0f - scale) + (fr * dist) * scale; fg = fg * (1.0f - scale) + (fg * dist) * scale; fb = fb * (1.0f - scale) + (fb * dist) * scale; diff --git a/Minecraft.World/Biome.cpp b/Minecraft.World/Biome.cpp index 43c83ff5..0218bfeb 100644 --- a/Minecraft.World/Biome.cpp +++ b/Minecraft.World/Biome.cpp @@ -309,4 +309,32 @@ int Biome::getFolageColor() int Biome::getWaterColor() { return Minecraft::GetInstance()->getColourTable()->getColor( m_waterColor ); +} + +// TU25 +Vec3 *Biome::getFogColor(float td, float a) const +{ + float br = Mth::cos(td * PI * 2) * 2 + 0.5f; + if (br < 0.0f) br = 0.0f; + if (br > 1.0f) br = 1.0f; + + unsigned int baseFogColour = Minecraft::GetInstance()->getColourTable()->getColor( eMinecraftColour_Default_Fog_Colour ); + float r = ((baseFogColour >> 16) & 0xff) / 255.0f; + float g = ((baseFogColour >> 8) & 0xff) / 255.0f; + float b = ((baseFogColour) & 0xff) / 255.0f; + r *= br * 0.94f + 0.06f; + g *= br * 0.94f + 0.06f; + b *= br * 0.91f + 0.09f; + + return Vec3::newTemp(r, g, b); +} + +bool Biome::isNatural() +{ + return true; +} + +bool Biome::isFoggy() +{ + return false; } \ No newline at end of file diff --git a/Minecraft.World/Biome.h b/Minecraft.World/Biome.h index d87bd36a..03320559 100644 --- a/Minecraft.World/Biome.h +++ b/Minecraft.World/Biome.h @@ -150,4 +150,8 @@ public: virtual int getGrassColor(); virtual int getFolageColor(); virtual int getWaterColor(); // 4J Added + //TU25 + virtual Vec3 *getFogColor(float td, float a) const; + virtual bool isNatural(); + virtual bool isFoggy(); }; \ No newline at end of file diff --git a/Minecraft.World/Dimension.cpp b/Minecraft.World/Dimension.cpp index b7a2ea7c..63ed7cda 100644 --- a/Minecraft.World/Dimension.cpp +++ b/Minecraft.World/Dimension.cpp @@ -164,23 +164,6 @@ float *Dimension::getSunriseColor(float td, float a) return nullptr; } -Vec3 *Dimension::getFogColor(float td, float a) const -{ - float br = Mth::cos(td * PI * 2) * 2 + 0.5f; - if (br < 0.0f) br = 0.0f; - if (br > 1.0f) br = 1.0f; - - unsigned int baseFogColour = Minecraft::GetInstance()->getColourTable()->getColor( eMinecraftColour_Default_Fog_Colour ); - float r = ((baseFogColour >> 16) & 0xff) / 255.0f; - float g = ((baseFogColour >> 8) & 0xff) / 255.0f; - float b = ((baseFogColour) & 0xff) / 255.0f; - r *= br * 0.94f + 0.06f; - g *= br * 0.94f + 0.06f; - b *= br * 0.91f + 0.09f; - - return Vec3::newTemp(r, g, b); -} - bool Dimension::mayRespawn() const { return true; @@ -248,3 +231,9 @@ int Dimension::getXZSize() { return level->getLevelData()->getXZSize(); } + +// TU25 +int Dimension::getBlockLightColour() +{ + return Minecraft::GetInstance()->getColourTable()->getColor( eMinecraftColour_BlockLight_OverworldDimension ); +} \ No newline at end of file diff --git a/Minecraft.World/Dimension.h b/Minecraft.World/Dimension.h index ca040e21..76931270 100644 --- a/Minecraft.World/Dimension.h +++ b/Minecraft.World/Dimension.h @@ -42,13 +42,10 @@ public: virtual int getMoonPhase(int64_t time) const; virtual bool isNaturalDimension(); private: - static const int fogColor = 0xc0d8ff; - float sunriseCol[4]; public: virtual float *getSunriseColor(float td, float a); - virtual Vec3 *getFogColor(float td, float a) const; virtual bool mayRespawn() const; static Dimension *getNew(int id); virtual float getCloudHeight(); @@ -62,4 +59,5 @@ public: // 4J Added virtual int getXZSize(); + virtual int getBlockLightColour(); // TU25 }; diff --git a/Minecraft.World/HellBiome.cpp b/Minecraft.World/HellBiome.cpp index 865b21d7..c315e01d 100644 --- a/Minecraft.World/HellBiome.cpp +++ b/Minecraft.World/HellBiome.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "net.minecraft.world.entity.monster.h" #include "HellBiome.h" +#include "..\Minecraft.Client\Minecraft.h" HellBiome::HellBiome(int id) : Biome(id) { @@ -11,8 +12,36 @@ HellBiome::HellBiome(int id) : Biome(id) waterFriendlies.clear(); ambientFriendlies.clear(); - enemies.push_back(new MobSpawnerData(eTYPE_GHAST, 50, 4, 4)); - enemies.push_back(new MobSpawnerData(eTYPE_PIGZOMBIE, 100, 4, 4)); - enemies.push_back(new MobSpawnerData(eTYPE_LAVASLIME, 1, 4, 4)); + enemies.push_back(new MobSpawnerData(eTYPE_GHAST, 100, 4, 4)); + enemies.push_back(new MobSpawnerData(eTYPE_PIGZOMBIE, 200, 4, 4)); + enemies.push_back(new MobSpawnerData(eTYPE_LAVASLIME, 2, 4, 4)); enemies.push_back(new MobSpawnerData(eTYPE_SKELETON, 1, 4, 4)); +} + +Vec3 *HellBiome::getFogColor(float td, float a) const +{ + int colour = Minecraft::GetInstance()->getColourTable()->getColor( eMinecraftColour_Nether_Fog_Colour ); + BYTE redComponent = ((colour>>16)&0xFF); + BYTE greenComponent = ((colour>>8)&0xFF); + BYTE blueComponent = ((colour)&0xFF); + + float rr = static_cast(redComponent)/256;//0.2f; + float gg = static_cast(greenComponent)/256;//0.03f; + float bb = static_cast(blueComponent)/256;//0.03f; + return Vec3::newTemp(rr, gg, bb); +} + +int HellBiome::getSkyColor(float temp) +{ + return 0; +} + +bool HellBiome::isNatural() +{ + return false; +} + +bool HellBiome::isFoggy() +{ + return true; } \ No newline at end of file diff --git a/Minecraft.World/HellBiome.h b/Minecraft.World/HellBiome.h index ed51de83..a796420f 100644 --- a/Minecraft.World/HellBiome.h +++ b/Minecraft.World/HellBiome.h @@ -5,4 +5,9 @@ class HellBiome : public Biome { public: HellBiome(int id); + //TU25 + virtual Vec3 *getFogColor(float td, float a) const; + virtual int getSkyColor(float temp); + virtual bool isNatural(); + virtual bool isFoggy(); }; \ No newline at end of file diff --git a/Minecraft.World/HellDimension.cpp b/Minecraft.World/HellDimension.cpp index a8b70d03..0152e113 100644 --- a/Minecraft.World/HellDimension.cpp +++ b/Minecraft.World/HellDimension.cpp @@ -16,19 +16,6 @@ void HellDimension::init() id = -1; } -Vec3 *HellDimension::getFogColor(float td, float a) const -{ - int colour = Minecraft::GetInstance()->getColourTable()->getColor( eMinecraftColour_Nether_Fog_Colour ); - BYTE redComponent = ((colour>>16)&0xFF); - BYTE greenComponent = ((colour>>8)&0xFF); - BYTE blueComponent = ((colour)&0xFF); - - float rr = static_cast(redComponent)/256;//0.2f; - float gg = static_cast(greenComponent)/256;//0.03f; - float bb = static_cast(blueComponent)/256;//0.03f; - return Vec3::newTemp(rr, gg, bb); -} - void HellDimension::updateLightRamp() { float ambientLight = 0.10f; @@ -87,3 +74,9 @@ int HellDimension::getXZSize() { return ceil(static_cast(level->getLevelData()->getXZSize()) / level->getLevelData()->getHellScale()); } + +// TU25 +int HellDimension::getBlockLightColour() +{ + return Minecraft::GetInstance()->getColourTable()->getColor( eMinecraftColour_BlockLight_HellDimension ); +} \ No newline at end of file diff --git a/Minecraft.World/HellDimension.h b/Minecraft.World/HellDimension.h index fa95d9b2..7ac537a9 100644 --- a/Minecraft.World/HellDimension.h +++ b/Minecraft.World/HellDimension.h @@ -5,7 +5,6 @@ class HellDimension : public Dimension { public: virtual void init(); - virtual Vec3 *getFogColor(float td, float a) const; protected: virtual void updateLightRamp(); @@ -20,4 +19,5 @@ public: // 4J Added virtual int getXZSize(); + virtual int getBlockLightColour(); // TU25 }; diff --git a/Minecraft.World/Level.cpp b/Minecraft.World/Level.cpp index d5936ef8..10f175be 100644 --- a/Minecraft.World/Level.cpp +++ b/Minecraft.World/Level.cpp @@ -945,7 +945,7 @@ bool Level::setTileAndData(int x, int y, int z, int tile, int data, int updateFl if (!dimension->hasCeiling) checkLight(LightLayer::Sky, x, y, z); - checkLight(LightLayer::Block, x, y, z); + checkLight(LightLayer::Block, x, y, z); PIXEndNamedEvent(); PIXEndNamedEvent(); @@ -2165,11 +2165,14 @@ Vec3 *Level::getCloudColor(float a) return Vec3::newTemp(r, g, b); } - -Vec3 *Level::getFogColor(float a) +Vec3 *Level::getFogColor(shared_ptr source, float a) { + int x = Mth::floor(source->x); + int z = Mth::floor(source->z); + Biome *biome = getBiome(x, z); + float td = getTimeOfDay(a); - return dimension->getFogColor(td, a); + return biome->getFogColor(td, a); } diff --git a/Minecraft.World/Level.h b/Minecraft.World/Level.h index 593b3483..97a0c56d 100644 --- a/Minecraft.World/Level.h +++ b/Minecraft.World/Level.h @@ -328,7 +328,7 @@ public: float getMoonBrightness(); float getSunAngle(float a); Vec3 *getCloudColor(float a); - Vec3 *getFogColor(float a); + Vec3 *getFogColor(shared_ptr source, float a); int getTopRainBlock(int x, int z); int getTopSolidBlock(int x, int z); bool biomeHasRain(int x, int z); // 4J added diff --git a/Minecraft.World/TheEndBiome.cpp b/Minecraft.World/TheEndBiome.cpp index 0dc22150..e8c22525 100644 --- a/Minecraft.World/TheEndBiome.cpp +++ b/Minecraft.World/TheEndBiome.cpp @@ -3,6 +3,7 @@ #include "TheEndBiomeDecorator.h" #include "net.minecraft.world.entity.monster.h" #include "net.minecraft.world.level.tile.h" +#include "..\Minecraft.Client\Minecraft.h" TheEndBiome::TheEndBiome(int id) : Biome(id) { @@ -20,8 +21,29 @@ TheEndBiome::TheEndBiome(int id) : Biome(id) decorator = new TheEndBiomeDecorator(this); } -// 4J Stu - Don't need override -//int TheEndBiome::getSkyColor(float temp) -//{ -// return 0x000000; -//} \ No newline at end of file +Vec3 *TheEndBiome::getFogColor(float td, float a) const +{ + int fogColor = Minecraft::GetInstance()->getColourTable()->getColor( eMinecraftColour_End_Fog_Colour ); //0xa080a0; + float br = Mth::cos(td * PI * 2) * 2 + 0.5f; + if (br < 0.0f) br = 0.0f; + if (br > 1.0f) br = 1.0f; + + float r = ((fogColor >> 16) & 0xff) / 255.0f; + float g = ((fogColor >> 8) & 0xff) / 255.0f; + float b = ((fogColor) & 0xff) / 255.0f; + r *= br * 0.0f + 0.15f; + g *= br * 0.0f + 0.15f; + b *= br * 0.0f + 0.15f; + + return Vec3::newTemp(r, g, b); +} + +bool TheEndBiome::isNatural() +{ + return false; +} + +bool TheEndBiome::isFoggy() +{ + return true; +} \ No newline at end of file diff --git a/Minecraft.World/TheEndBiome.h b/Minecraft.World/TheEndBiome.h index b3698511..33291b24 100644 --- a/Minecraft.World/TheEndBiome.h +++ b/Minecraft.World/TheEndBiome.h @@ -5,7 +5,8 @@ class TheEndBiome : public Biome { public: TheEndBiome(int id); - - // 4J Stu - Don't need override - //virtual int getSkyColor(float temp); + //TU25 + virtual Vec3 *getFogColor(float td, float a) const; + virtual bool isNatural(); + virtual bool isFoggy(); }; \ No newline at end of file diff --git a/Minecraft.World/TheEndDimension.cpp b/Minecraft.World/TheEndDimension.cpp index 7f26d0e8..02234bf1 100644 --- a/Minecraft.World/TheEndDimension.cpp +++ b/Minecraft.World/TheEndDimension.cpp @@ -29,23 +29,6 @@ float *TheEndDimension::getSunriseColor(float td, float a) return nullptr; } -Vec3 *TheEndDimension::getFogColor(float td, float a) const -{ - int fogColor = Minecraft::GetInstance()->getColourTable()->getColor( eMinecraftColour_End_Fog_Colour ); //0xa080a0; - float br = Mth::cos(td * PI * 2) * 2 + 0.5f; - if (br < 0.0f) br = 0.0f; - if (br > 1.0f) br = 1.0f; - - float r = ((fogColor >> 16) & 0xff) / 255.0f; - float g = ((fogColor >> 8) & 0xff) / 255.0f; - float b = ((fogColor) & 0xff) / 255.0f; - r *= br * 0.0f + 0.15f; - g *= br * 0.0f + 0.15f; - b *= br * 0.0f + 0.15f; - - return Vec3::newTemp(r, g, b); -} - bool TheEndDimension::hasGround() { return false; @@ -88,4 +71,10 @@ bool TheEndDimension::isFoggyAt(int x, int z) int TheEndDimension::getSpawnYPosition() { return 50; +} + +// TU25 +int TheEndDimension::getBlockLightColour() +{ + return Minecraft::GetInstance()->getColourTable()->getColor( eMinecraftColour_BlockLight_EndDimension ); } \ No newline at end of file diff --git a/Minecraft.World/TheEndDimension.h b/Minecraft.World/TheEndDimension.h index 268be6f6..04005495 100644 --- a/Minecraft.World/TheEndDimension.h +++ b/Minecraft.World/TheEndDimension.h @@ -8,7 +8,6 @@ public: virtual ChunkSource *createRandomLevelSource() const; virtual float getTimeOfDay(int64_t time, float a) const; virtual float *getSunriseColor(float td, float a); - virtual Vec3 *getFogColor(float td, float a) const; virtual bool hasGround(); virtual bool mayRespawn() const; virtual bool isNaturalDimension(); @@ -17,4 +16,5 @@ public: virtual Pos *getSpawnPos(); virtual int getSpawnYPosition(); virtual bool isFoggyAt(int x, int z); + virtual int getBlockLightColour(); // TU25 };