the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 187 lines 5.8 kB view raw
1#include "stdafx.h" 2#include "ItemRenderer.h" 3#include "tileRenderer.h" 4#include "entityRenderDispatcher.h" 5//#include "ItemFrame" 6#include "ItemFrameRenderer.h" 7#include "TextureAtlas.h" 8 9#include "..\Minecraft.World\JavaMath.h" 10#include "..\Minecraft.World\net.minecraft.world.entity.Item.h" 11#include "..\Minecraft.World\net.minecraft.world.Item.h" 12#include "..\Minecraft.World\net.minecraft.world.Item.alchemy.h" 13#include "..\Minecraft.World\net.minecraft.world.level.tile.h" 14#include "..\Minecraft.World\StringHelpers.h" 15#include "Minecraft.h" 16#include "..\Minecraft.World\Item.h" 17#include "..\Minecraft.World\net.minecraft.world.h" 18#include "..\Minecraft.World\net.minecraft.h" 19#include "CompassTexture.h" 20#include "Minimap.h" 21 22ResourceLocation ItemFrameRenderer::MAP_BACKGROUND_LOCATION = ResourceLocation(TN_MISC_MAPBG); 23 24void ItemFrameRenderer::registerTerrainTextures(IconRegister *iconRegister) 25{ 26 backTexture = iconRegister->registerIcon(L"itemframe_back"); 27} 28 29void ItemFrameRenderer::render(shared_ptr<Entity> _itemframe, double x, double y, double z, float rot, float a) 30{ 31 // 4J - original version used generics and thus had an input parameter of type EnderCrystal rather than shared_ptr<Entity> we have here - 32 // do some casting around instead 33 shared_ptr<ItemFrame> itemFrame = dynamic_pointer_cast<ItemFrame>(_itemframe); 34 35 glPushMatrix(); 36 float xOffs = (float) (itemFrame->x - x) - 0.5f; 37 float yOffs = (float) (itemFrame->y - y) - 0.5f; 38 float zOffs = (float) (itemFrame->z - z) - 0.5f; 39 40 int xt = itemFrame->xTile + Direction::STEP_X[itemFrame->dir]; 41 int yt = itemFrame->yTile; 42 int zt = itemFrame->zTile + Direction::STEP_Z[itemFrame->dir]; 43 44 glTranslatef((float) xt - xOffs, (float) yt - yOffs, (float) zt - zOffs); 45 46 drawFrame(itemFrame); 47 drawItem(itemFrame); 48 49 glPopMatrix(); 50} 51 52 53void ItemFrameRenderer::drawFrame(shared_ptr<ItemFrame> itemFrame) 54{ 55 Minecraft *pMinecraft=Minecraft::GetInstance(); 56 57 glPushMatrix(); 58 entityRenderDispatcher->textures->bindTexture(&TextureAtlas::LOCATION_BLOCKS); 59 glRotatef(itemFrame->yRot, 0, 1, 0); 60 61 Tile *wood = Tile::wood; 62 float depth = 1.0f / 16.0f; 63 float width = 12.0f / 16.0f; 64 float widthHalf = width / 2.0f; 65 66 // Back 67 glPushMatrix(); 68 69 tileRenderer->setFixedShape(0, 0.5f - widthHalf + 1.0f / 16.0f, 0.5f - widthHalf + 1.0f / 16.0f, depth * .5f, 0.5f + widthHalf - 1.0f / 16.0f, 0.5f + widthHalf - 1.0f / 16.0f); 70 tileRenderer->setFixedTexture(backTexture); 71 tileRenderer->renderTile(wood, 0, 1); 72 tileRenderer->clearFixedTexture(); 73 tileRenderer->clearFixedShape(); 74 glPopMatrix(); 75 76 tileRenderer->setFixedTexture(Tile::wood->getTexture(Facing::UP, TreeTile::BIRCH_TRUNK)); 77 78 // Bottom 79 glPushMatrix(); 80 tileRenderer->setFixedShape(0, 0.5f - widthHalf, 0.5f - widthHalf, depth + 0.0001f, depth + 0.5f - widthHalf, 0.5f + widthHalf); 81 tileRenderer->renderTile(wood, 0, 1); 82 glPopMatrix(); 83 84 // Top 85 glPushMatrix(); 86 tileRenderer->setFixedShape(0, 0.5f + widthHalf - depth, 0.5f - widthHalf, depth + 0.0001f, 0.5f + widthHalf, 0.5f + widthHalf); 87 tileRenderer->renderTile(wood, 0, 1); 88 glPopMatrix(); 89 90 // Right 91 glPushMatrix(); 92 tileRenderer->setFixedShape(0, 0.5f - widthHalf, 0.5f - widthHalf, depth, 0.5f + widthHalf, depth + 0.5f - widthHalf); 93 tileRenderer->renderTile(wood, 0, 1); 94 glPopMatrix(); 95 96 // Left 97 glPushMatrix(); 98 tileRenderer->setFixedShape(0, 0.5f - widthHalf, 0.5f + widthHalf - depth, depth, 0.5f + widthHalf, 0.5f + widthHalf); 99 tileRenderer->renderTile(wood, 0, 1); 100 glPopMatrix(); 101 102 tileRenderer->clearFixedShape(); 103 tileRenderer->clearFixedTexture(); 104 105 glPopMatrix(); 106} 107 108void ItemFrameRenderer::drawItem(shared_ptr<ItemFrame> entity) 109{ 110 Minecraft *pMinecraft=Minecraft::GetInstance(); 111 112 shared_ptr<ItemInstance> instance = entity->getItem(); 113 if (instance == NULL) return; 114 115 shared_ptr<ItemEntity> itemEntity = shared_ptr<ItemEntity>(new ItemEntity(entity->level, 0, 0, 0, instance)); 116 itemEntity->getItem()->count = 1; 117 itemEntity->bobOffs = 0; 118 119 glPushMatrix(); 120 121 glTranslatef((-7.25f / 16.0f) * Direction::STEP_X[entity->dir], -0.18f, (-7.25f / 16.0f) * Direction::STEP_Z[entity->dir]); 122 glRotatef(180 + entity->yRot, 0, 1, 0); 123 glRotatef(-90 * entity->getRotation(), 0, 0, 1); 124 125 switch (entity->getRotation()) 126 { 127 case 1: 128 glTranslatef(-0.16f, -0.16f, 0); 129 break; 130 case 2: 131 glTranslatef(0, -0.32f, 0); 132 break; 133 case 3: 134 glTranslatef(0.16f, -0.16f, 0); 135 break; 136 } 137 138 if (itemEntity->getItem()->getItem() == Item::map) 139 { 140 entityRenderDispatcher->textures->bindTexture(&MAP_BACKGROUND_LOCATION); 141 Tesselator *t = Tesselator::getInstance(); 142 143 glRotatef(180, 0, 1, 0); 144 glRotatef(180, 0, 0, 1); 145 glScalef(1.0f / 256.0f, 1.0f / 256.0f, 1.0f / 256.0f); 146 glTranslatef(-65, -107, -3); 147 glNormal3f(0, 0, -1); 148 t->begin(); 149 int vo = 7; 150 t->vertexUV(0 - vo, 128 + vo, 0, 0, 1); 151 t->vertexUV(128 + vo, 128 + vo, 0, 1, 1); 152 t->vertexUV(128 + vo, 0 - vo, 0, 1, 0); 153 t->vertexUV(0 - vo, 0 - vo, 0, 0, 0); 154 t->end(); 155 156 shared_ptr<MapItemSavedData> data = Item::map->getSavedData(itemEntity->getItem(), entity->level); 157 if (data != NULL) 158 { 159 entityRenderDispatcher->itemInHandRenderer->minimap->render(nullptr, entityRenderDispatcher->textures, data, entity->entityId); 160 } 161 } 162 else 163 { 164 if (itemEntity->getItem()->getItem() == Item::compass) 165 { 166 CompassTexture *ct = CompassTexture::instance; 167 double compassRot = ct->rot; 168 double compassRotA = ct->rota; 169 ct->rot = 0; 170 ct->rota = 0; 171 ct->updateFromPosition(entity->level, entity->x, entity->z, Mth::wrapDegrees( (float)(180 + entity->dir * 90) ), false, true); 172 ct->rot = compassRot; 173 ct->rota = compassRotA; 174 } 175 176 EntityRenderDispatcher::instance->render(itemEntity, 0, 0, 0, 0, 0, true); 177 178 if (itemEntity->getItem()->getItem() == Item::compass) 179 { 180 CompassTexture *ct = CompassTexture::instance; 181 ct->cycleFrames(); 182 } 183 } 184 185 glPopMatrix(); 186} 187