the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 166 lines 5.1 kB view raw
1#include "stdafx.h" 2#include "TileEntityRenderDispatcher.h" 3#include "TileEntityRenderer.h" 4#include "..\Minecraft.World\net.minecraft.world.level.tile.entity.h" 5#include "..\Minecraft.World\net.minecraft.world.entity.player.h" 6#include "..\Minecraft.World\net.minecraft.world.level.h" 7#include "..\Minecraft.World\PistonPieceEntity.h" 8#include "SignRenderer.h" 9#include "MobSpawnerRenderer.h" 10#include "PistonPieceRenderer.h" 11#include "ChestRenderer.h" 12#include "EnchantTableRenderer.h" 13#include "TheEndPortalRenderer.h" 14#include "SkullTileRenderer.h" 15#include "EnderChestRenderer.h" 16#include "BeaconRenderer.h" 17 18TileEntityRenderDispatcher *TileEntityRenderDispatcher::instance = NULL; 19double TileEntityRenderDispatcher::xOff = 0; 20double TileEntityRenderDispatcher::yOff = 0; 21double TileEntityRenderDispatcher::zOff = 0; 22 23void TileEntityRenderDispatcher::staticCtor() 24{ 25 instance = new TileEntityRenderDispatcher(); 26} 27 28TileEntityRenderDispatcher::TileEntityRenderDispatcher() 29{ 30 // 4J -a dded 31 font = NULL; 32 textures = NULL; 33 level = NULL; 34 cameraEntity = nullptr; 35 playerRotY = 0.0f; 36 playerRotX = 0.0f;; 37 xPlayer = yPlayer = zPlayer = 0; 38 39 glEnable(GL_LIGHTING); 40 renderers[eTYPE_SIGNTILEENTITY] = new SignRenderer(); 41 renderers[eTYPE_MOBSPAWNERTILEENTITY] = new MobSpawnerRenderer(); 42 renderers[eTYPE_PISTONPIECEENTITY] = new PistonPieceRenderer(); 43 renderers[eTYPE_CHESTTILEENTITY] = new ChestRenderer(); 44 renderers[eTYPE_ENDERCHESTTILEENTITY] = new EnderChestRenderer(); 45 renderers[eTYPE_ENCHANTMENTTABLEENTITY] = new EnchantTableRenderer(); 46 renderers[eTYPE_THEENDPORTALTILEENTITY] = new TheEndPortalRenderer(); 47 renderers[eTYPE_SKULLTILEENTITY] = new SkullTileRenderer(); 48 renderers[eTYPE_FURNACETILEENTITY] = NULL; 49 renderers[eTYPE_BEACONTILEENTITY] = new BeaconRenderer(); 50 glDisable(GL_LIGHTING); 51 52 AUTO_VAR(itEnd, renderers.end()); 53 for( classToTileRendererMap::iterator it = renderers.begin(); it != itEnd; it++ ) 54 { 55 if(it->second) it->second->init(this); 56 } 57} 58 59TileEntityRenderer *TileEntityRenderDispatcher::getRenderer(eINSTANCEOF e) 60{ 61 TileEntityRenderer *r = NULL; 62 //TileEntityRenderer *r = renderers[e]; 63 AUTO_VAR(it, renderers.find( e )); // 4J Stu - The .at and [] accessors insert elements if they don't exist 64 65 if( it == renderers.end() ) 66 { 67 return NULL; 68 } 69 70/* 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 71 if (it == renderers.end() && e != TileEntity::_class) 72 { 73 r = getRenderer(dynamic_cast<TileEntity::Class *>( e->getSuperclass() )); 74 // 4J - added condition here to only add if a valid renderer found 75 if( r ) renderers.insert( classToTileRendererMap::value_type( e, r ) ); 76 //assert(false); 77 } 78 else if(it != renderers.end() && e != TileEntity::_class) 79 r = (*it).second; 80 */ 81 82 return it->second; 83} 84 85bool TileEntityRenderDispatcher::hasRenderer(shared_ptr<TileEntity> e) 86{ 87 return getRenderer(e) != NULL; 88} 89 90TileEntityRenderer *TileEntityRenderDispatcher::getRenderer(shared_ptr<TileEntity> e) 91{ 92 if (e == NULL) return NULL; 93 return getRenderer(e->GetType()); 94} 95 96void TileEntityRenderDispatcher::prepare(Level *level, Textures *textures, Font *font, shared_ptr<LivingEntity> player, float a) 97{ 98 if( this->level != level ) 99 { 100 setLevel( level ); 101 } 102 this->textures = textures; 103 cameraEntity = player; 104 this->font = font; 105 106 playerRotY = player->yRotO + (player->yRot - player->yRotO) * a; 107 playerRotX = player->xRotO + (player->xRot - player->xRotO) * a; 108 109 xPlayer = player->xOld + (player->x - player->xOld) * a; 110 yPlayer = player->yOld + (player->y - player->yOld) * a; 111 zPlayer = player->zOld + (player->z - player->zOld) * a; 112} 113 114void TileEntityRenderDispatcher::render(shared_ptr<TileEntity> e, float a, bool setColor/*=true*/) 115{ 116 if (e->distanceToSqr(xPlayer, yPlayer, zPlayer) < e->getViewDistance()) 117 { 118 // 4J - changes brought forward from 1.8.2 119 if (SharedConstants::TEXTURE_LIGHTING) 120 { 121 int col = level->getLightColor(e->x, e->y, e->z, 0); 122 int u = col % 65536; 123 int v = col / 65536; 124 glMultiTexCoord2f(GL_TEXTURE1, u / 1.0f, v / 1.0f); 125 glColor4f(1, 1, 1, 1); 126 } 127 else 128 { 129 float br = level->getBrightness(e->x, e->y, e->z); 130 glColor4f(br, br, br, 1); 131 } 132 render(e, e->x - xOff, e->y - yOff, e->z - zOff, a, setColor); 133 } 134} 135 136void TileEntityRenderDispatcher::render(shared_ptr<TileEntity> entity, double x, double y, double z, float a, bool setColor/*=true*/, float alpha, bool useCompiled) 137{ 138 TileEntityRenderer *renderer = getRenderer(entity); 139 if (renderer != NULL) 140 { 141 renderer->render(entity, x, y, z, a, setColor, alpha, useCompiled); 142 } 143} 144 145void TileEntityRenderDispatcher::setLevel(Level *level) 146{ 147 this->level = level; 148 149 for( AUTO_VAR(it, renderers.begin()); it != renderers.end(); it++ ) 150 { 151 if(it->second) it->second->onNewLevel(level); 152 } 153} 154 155double TileEntityRenderDispatcher::distanceToSqr(double x, double y, double z) 156{ 157 double xd = x - xPlayer; 158 double yd = y - yPlayer; 159 double zd = z - zPlayer; 160 return xd * xd + yd * yd + zd * zd; 161} 162 163Font *TileEntityRenderDispatcher::getFont() 164{ 165 return font; 166}