diff options
| author | Loki Rautio <lokirautio@gmail.com> | 2026-03-04 03:56:03 -0600 |
|---|---|---|
| committer | Loki Rautio <lokirautio@gmail.com> | 2026-03-04 03:56:03 -0600 |
| commit | 42aec6dac53dffa6afe072560a7e1d4986112538 (patch) | |
| tree | 0836426857391df1b6a83f6368a183f83ec9b104 /Minecraft.Client/TileEntityRenderDispatcher.cpp | |
| parent | c9d58eeac7c72f0b3038e084667b4d89a6249fce (diff) | |
| parent | ef9b6fd500dfabd9463267b0dd9e29577eea8a2b (diff) | |
Merge branch 'main' into pr/win64-world-saves
# Conflicts:
# Minecraft.Client/MinecraftServer.cpp
# README.md
Diffstat (limited to 'Minecraft.Client/TileEntityRenderDispatcher.cpp')
| -rw-r--r-- | Minecraft.Client/TileEntityRenderDispatcher.cpp | 88 |
1 files changed, 45 insertions, 43 deletions
diff --git a/Minecraft.Client/TileEntityRenderDispatcher.cpp b/Minecraft.Client/TileEntityRenderDispatcher.cpp index 1708d215..f9ecfea4 100644 --- a/Minecraft.Client/TileEntityRenderDispatcher.cpp +++ b/Minecraft.Client/TileEntityRenderDispatcher.cpp @@ -13,6 +13,7 @@ #include "TheEndPortalRenderer.h" #include "SkullTileRenderer.h" #include "EnderChestRenderer.h" +#include "BeaconRenderer.h" TileEntityRenderDispatcher *TileEntityRenderDispatcher::instance = NULL; double TileEntityRenderDispatcher::xOff = 0; @@ -28,12 +29,12 @@ TileEntityRenderDispatcher::TileEntityRenderDispatcher() { // 4J -a dded font = NULL; - textures = NULL; - level = NULL; - cameraEntity = nullptr; - playerRotY = 0.0f; - playerRotX = 0.0f;; - xPlayer = yPlayer = zPlayer = 0; + textures = NULL; + level = NULL; + cameraEntity = nullptr; + playerRotY = 0.0f; + playerRotX = 0.0f;; + xPlayer = yPlayer = zPlayer = 0; glEnable(GL_LIGHTING); renderers[eTYPE_SIGNTILEENTITY] = new SignRenderer(); @@ -45,19 +46,20 @@ TileEntityRenderDispatcher::TileEntityRenderDispatcher() renderers[eTYPE_THEENDPORTALTILEENTITY] = new TheEndPortalRenderer(); renderers[eTYPE_SKULLTILEENTITY] = new SkullTileRenderer(); renderers[eTYPE_FURNACETILEENTITY] = NULL; + renderers[eTYPE_BEACONTILEENTITY] = new BeaconRenderer(); glDisable(GL_LIGHTING); AUTO_VAR(itEnd, renderers.end()); for( classToTileRendererMap::iterator it = renderers.begin(); it != itEnd; it++ ) { if(it->second) it->second->init(this); - } + } } TileEntityRenderer *TileEntityRenderDispatcher::getRenderer(eINSTANCEOF e) { TileEntityRenderer *r = NULL; - //TileEntityRenderer *r = renderers[e]; + //TileEntityRenderer *r = renderers[e]; AUTO_VAR(it, renderers.find( e )); // 4J Stu - The .at and [] accessors insert elements if they don't exist if( it == renderers.end() ) @@ -66,13 +68,13 @@ TileEntityRenderer *TileEntityRenderDispatcher::getRenderer(eINSTANCEOF e) } /* 4J - not doing this hierarchical search anymore. We need to explicitly add renderers for any eINSTANCEOF type that we want to be able to render - if (it == renderers.end() && e != TileEntity::_class) + if (it == renderers.end() && e != TileEntity::_class) { - r = getRenderer(dynamic_cast<TileEntity::Class *>( e->getSuperclass() )); + r = getRenderer(dynamic_cast<TileEntity::Class *>( e->getSuperclass() )); // 4J - added condition here to only add if a valid renderer found if( r ) renderers.insert( classToTileRendererMap::value_type( e, r ) ); //assert(false); - } + } else if(it != renderers.end() && e != TileEntity::_class) r = (*it).second; */ @@ -87,57 +89,57 @@ bool TileEntityRenderDispatcher::hasRenderer(shared_ptr<TileEntity> e) TileEntityRenderer *TileEntityRenderDispatcher::getRenderer(shared_ptr<TileEntity> e) { - if (e == NULL) return NULL; - return getRenderer(e->GetType()); + if (e == NULL) return NULL; + return getRenderer(e->GetType()); } -void TileEntityRenderDispatcher::prepare(Level *level, Textures *textures, Font *font, shared_ptr<Mob> player, float a) +void TileEntityRenderDispatcher::prepare(Level *level, Textures *textures, Font *font, shared_ptr<LivingEntity> player, float a) { if( this->level != level ) { setLevel( level ); } - this->textures = textures; - this->cameraEntity = player; - this->font = font; + this->textures = textures; + cameraEntity = player; + this->font = font; - playerRotY = player->yRotO + (player->yRot - player->yRotO) * a; - playerRotX = player->xRotO + (player->xRot - player->xRotO) * a; + playerRotY = player->yRotO + (player->yRot - player->yRotO) * a; + playerRotX = player->xRotO + (player->xRot - player->xRotO) * a; - xPlayer = player->xOld + (player->x - player->xOld) * a; - yPlayer = player->yOld + (player->y - player->yOld) * a; - zPlayer = player->zOld + (player->z - player->zOld) * a; + xPlayer = player->xOld + (player->x - player->xOld) * a; + yPlayer = player->yOld + (player->y - player->yOld) * a; + zPlayer = player->zOld + (player->z - player->zOld) * a; } void TileEntityRenderDispatcher::render(shared_ptr<TileEntity> e, float a, bool setColor/*=true*/) { - if (e->distanceToSqr(xPlayer, yPlayer, zPlayer) < 64 * 64) + if (e->distanceToSqr(xPlayer, yPlayer, zPlayer) < e->getViewDistance()) { // 4J - changes brought forward from 1.8.2 - if (SharedConstants::TEXTURE_LIGHTING) + if (SharedConstants::TEXTURE_LIGHTING) { - int col = level->getLightColor(e->x, e->y, e->z, 0); - int u = col % 65536; - int v = col / 65536; - glMultiTexCoord2f(GL_TEXTURE1, u / 1.0f, v / 1.0f); - glColor4f(1, 1, 1, 1); - } + int col = level->getLightColor(e->x, e->y, e->z, 0); + int u = col % 65536; + int v = col / 65536; + glMultiTexCoord2f(GL_TEXTURE1, u / 1.0f, v / 1.0f); + glColor4f(1, 1, 1, 1); + } else { - float br = level->getBrightness(e->x, e->y, e->z); - glColor4f(br, br, br, 1); - } - render(e, e->x - xOff, e->y - yOff, e->z - zOff, a, setColor); - } + float br = level->getBrightness(e->x, e->y, e->z); + glColor4f(br, br, br, 1); + } + render(e, e->x - xOff, e->y - yOff, e->z - zOff, a, setColor); + } } void TileEntityRenderDispatcher::render(shared_ptr<TileEntity> entity, double x, double y, double z, float a, bool setColor/*=true*/, float alpha, bool useCompiled) { - TileEntityRenderer *renderer = getRenderer(entity); - if (renderer != NULL) + TileEntityRenderer *renderer = getRenderer(entity); + if (renderer != NULL) { - renderer->render(entity, x, y, z, a, setColor, alpha, useCompiled); - } + renderer->render(entity, x, y, z, a, setColor, alpha, useCompiled); + } } void TileEntityRenderDispatcher::setLevel(Level *level) @@ -152,10 +154,10 @@ void TileEntityRenderDispatcher::setLevel(Level *level) double TileEntityRenderDispatcher::distanceToSqr(double x, double y, double z) { - double xd = x - xPlayer; - double yd = y - yPlayer; - double zd = z - zPlayer; - return xd * xd + yd * yd + zd * zd; + double xd = x - xPlayer; + double yd = y - yPlayer; + double zd = z - zPlayer; + return xd * xd + yd * yd + zd * zd; } Font *TileEntityRenderDispatcher::getFont() |
