aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/TileEntityRenderDispatcher.cpp
diff options
context:
space:
mode:
authordaoge <3523206925@qq.com>2026-03-03 03:04:10 +0800
committerGitHub <noreply@github.com>2026-03-03 03:04:10 +0800
commitb3feddfef372618c8a9d7a0abcaf18cfad866c18 (patch)
tree267761c3bb39241ba5c347bfbe2254d06686e287 /Minecraft.Client/TileEntityRenderDispatcher.cpp
parent84c31a2331f7a0ec85b9d438992e244f60e5020f (diff)
feat: TU19 (Dec 2014) Features & Content (#155)
* try to resolve merge conflict * feat: TU19 (Dec 2014) Features & Content (#32) * December 2014 files * Working release build * Fix compilation issues * Add sound to Windows64Media * Add DLC content and force Tutorial DLC * Revert "Add DLC content and force Tutorial DLC" This reverts commit 97a43994725008e35fceb984d5549df9c8cea470. * Disable broken light packing * Disable breakpoint during DLC texture map load Allows DLC loading but the DLC textures are still broken * Fix post build not working * ... * fix vs2022 build * fix cmake build --------- Co-authored-by: Loki <lokirautio@gmail.com>
Diffstat (limited to 'Minecraft.Client/TileEntityRenderDispatcher.cpp')
-rw-r--r--Minecraft.Client/TileEntityRenderDispatcher.cpp88
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()