the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
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}