diff --git a/Minecraft.Client/ArmorStandRenderer.cpp b/Minecraft.Client/ArmorStandRenderer.cpp index 7fdf75bc..96337d92 100644 --- a/Minecraft.Client/ArmorStandRenderer.cpp +++ b/Minecraft.Client/ArmorStandRenderer.cpp @@ -21,11 +21,9 @@ static const float DEG_TO_RAD = 3.14159265f / 180.0f; ResourceLocation ArmorStandRenderer::LOC_ARMOR_STAND = ResourceLocation(TN_MOB_ARMORSTAND); - ArmorStandRenderer::ArmorStandArmorLayer::ArmorStandArmorLayer(LivingEntityRenderer* renderer) : HumanoidArmorLayer(renderer) { - delete armorModel1; delete armorModel2; armorModel1 = new ArmorStandArmorModel(0.5f); @@ -46,21 +44,18 @@ ArmorStandRenderer::ArmorStandRenderer() armorLayer = new ArmorStandArmorLayer(this); ArmorStandModel* m = static_cast(getModel()); - - + + headLayer = m ? new CustomHeadLayer(m->head, this) : nullptr; } ArmorStandRenderer::~ArmorStandRenderer() {} - - ResourceLocation* ArmorStandRenderer::getTextureLocation(shared_ptr entity) { return &LOC_ARMOR_STAND; } - bool ArmorStandRenderer::shouldShowName(shared_ptr entity) { if (!entity) return false; @@ -85,7 +80,6 @@ void ArmorStandRenderer::setupRotations(shared_ptr mob, } } - void ArmorStandRenderer::render(shared_ptr entity, double x, double y, double z, float rot, float a) @@ -93,7 +87,6 @@ void ArmorStandRenderer::render(shared_ptr entity, LivingEntityRenderer::render(entity, x, y, z, rot, a); } - void ArmorStandRenderer::renderModel(shared_ptr mob, float wp, float ws, float bob, float headRotMinusBodyRot, @@ -120,6 +113,7 @@ void ArmorStandRenderer::renderModel(shared_ptr mob, ll.x * DEG_TO_RAD, ll.y * DEG_TO_RAD, ll.z * DEG_TO_RAD, rl.x * DEG_TO_RAD, rl.y * DEG_TO_RAD, rl.z * DEG_TO_RAD ); + if (armorLayer) { auto applyPose = [&](HumanoidModel* am) @@ -157,7 +151,7 @@ void ArmorStandRenderer::renderModel(shared_ptr mob, LivingEntityRenderer::renderModel(mob, wp, ws, bob, headRotMinusBodyRot, headRotx, scale); - + if (headLayer) { float fScale = 1.0f / 16.0f; @@ -171,39 +165,7 @@ void ArmorStandRenderer::renderModel(shared_ptr mob, void ArmorStandRenderer::additionalRendering(shared_ptr mob, float a) { - shared_ptr headGear = mob->getArmor(3); - if (!headGear) return; - - - if ((mob->getAnimOverrideBitmask() & (1 << HumanoidModel::eAnim_DontRenderArmour)) != 0) return; - - Item* item = headGear->getItem(); - if (!item) return; - - - if (dynamic_cast(item)) return; - - - if (item->id >= 256) return; - - ArmorStandModel* m = static_cast(getModel()); - if (!m || !m->head) return; - - glPushMatrix(); - m->head->translateTo(1.0f / 16.0f); - - if (Tile::tiles[headGear->id] != nullptr - && TileRenderer::canRender(Tile::tiles[headGear->id]->getRenderShape())) - { - float s = 10.0f / 16.0f; - glTranslatef(0.0f, -4.0f / 16.0f, 0.0f); - glRotatef(90.0f, 0.0f, 1.0f, 0.0f); - glScalef(s, -s, s); - } - - this->entityRenderDispatcher->itemInHandRenderer->renderItem(mob, headGear, 0); - - glPopMatrix(); + } @@ -217,59 +179,14 @@ int ArmorStandRenderer::prepareArmor(shared_ptr mob, int layer, fl Item* item = itemInstance->getItem(); if (!item) return -1; - - SkullItem* skullItem = dynamic_cast(item); - if (skullItem && layer == 0) - { - HumanoidModel* am = armorLayer->getArmorModel(layer); - if (!am) return -1; - - - am->head->visible = true; - if (am->hair) am->hair->visible = false; - am->body->visible = false; - am->arm0->visible = false; - am->arm1->visible = false; - am->leg0->visible = false; - am->leg1->visible = false; - - int skullType = itemInstance->getAuxValue() & 0xF; - switch (skullType) - { - case SkullTileEntity::TYPE_WITHER: - bindTexture(&PlayerRenderer::WITHER_SKELETON_LOCATION); - break; - case SkullTileEntity::TYPE_ZOMBIE: - bindTexture(&PlayerRenderer::ZOMBIE_LOCATION); - break; - case SkullTileEntity::TYPE_CREEPER: - bindTexture(&PlayerRenderer::CREEPER_LOCATION); - break; - case SkullTileEntity::TYPE_CHAR: - bindTexture(&PlayerRenderer::DEFAULT_LOCATION); - break; - case SkullTileEntity::TYPE_SKELETON: - default: - bindTexture(&PlayerRenderer::SKELETON_LOCATION); - break; - } - - setArmor(am); - am->attackTime = model->attackTime; - am->riding = model->riding; - am->young = mob->isBaby(); - return 1; - } - ArmorItem* armorItem = dynamic_cast(item); - if (!armorItem) return -1; + if (!armorItem) return -1; bindTexture(HumanoidMobRenderer::getArmorLocation(armorItem, layer)); HumanoidModel* am = armorLayer->getArmorModel(layer); if (!am) return -1; - am->head->visible = (layer == 0); if (am->hair) am->hair->visible = (layer == 0); am->body->visible = (layer == 1 || layer == 2); diff --git a/Minecraft.Client/CustomHeadLayer.cpp b/Minecraft.Client/CustomHeadLayer.cpp index 90dc3684..6422fa07 100644 --- a/Minecraft.Client/CustomHeadLayer.cpp +++ b/Minecraft.Client/CustomHeadLayer.cpp @@ -30,14 +30,12 @@ void CustomHeadLayer::render(shared_ptr mob, float headRot, float headRotX, float scale, bool useCompiled) { - shared_ptr helmet = mob->getArmor(3); if (!helmet) return; Item* item = helmet->getItem(); if (!item) return; - if (mob->instanceof(eTYPE_PLAYER)) { _SkinAdjustments adj; @@ -46,21 +44,19 @@ void CustomHeadLayer::render(shared_ptr mob, } bool isBaby = mob->isBaby(); - bool isSkull = (item->id == Tile::skull_Id); + // FIX: Riconosciamo correttamente lo SkullItem invece dell'ID del Blocco + bool isSkull = (dynamic_cast(item) != nullptr); glPushMatrix(); - if (isBaby) glTranslatef(0.0f, 0.2f, 0.0f); - headPart->translateTo(0.0625f); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); if (isSkull) { - glScalef(1.1875f, -1.1875f, -1.1875f); if (isBaby) @@ -84,7 +80,6 @@ void CustomHeadLayer::render(shared_ptr mob, } else if (item->id < 256) { - glTranslatef(0.0f, -0.25f, 0.0f); glRotatef(180.0f, 0.0f, 1.0f, 0.0f); glScalef(0.625f, -0.625f, -0.625f); @@ -94,7 +89,6 @@ void CustomHeadLayer::render(shared_ptr mob, glRotatef(90.0f, 0.0f, 1.0f, 0.0f); - Minecraft* mc = Minecraft::GetInstance(); if (mc) { diff --git a/Minecraft.Client/PlayerRenderer.cpp b/Minecraft.Client/PlayerRenderer.cpp index fd8ed380..b721371a 100644 --- a/Minecraft.Client/PlayerRenderer.cpp +++ b/Minecraft.Client/PlayerRenderer.cpp @@ -86,10 +86,8 @@ unsigned int PlayerRenderer::getNametagColour(int index) int PlayerRenderer::prepareArmor(shared_ptr _player, int layer, float a) { - // 4J - dynamic cast required because we aren't using templates/generics in our version shared_ptr player = dynamic_pointer_cast(_player); - // 4J-PB - need to disable rendering armour for some special skins (Daleks) unsigned int uiAnimOverrideBitmask=player->getAnimOverrideBitmask(); if(uiAnimOverrideBitmask&(1< _player, int layer, fl ArmorItem *armorItem = dynamic_cast(item); bindTexture(HumanoidMobRenderer::getArmorLocation(armorItem, layer)); - SkullItem* skullItem = dynamic_cast(item); HumanoidModel *armor = layer == 2 ? armorParts2 : armorParts1; armor->head->visible = layer == 0; @@ -143,53 +140,10 @@ int PlayerRenderer::prepareArmor(shared_ptr _player, int layer, fl return 1; } else if (dynamic_cast(item)) { - SkullItem* skullItem = dynamic_cast(item); - HumanoidModel* armor = armorParts3; - auto t = new SkeletonHeadModel(0, 0, 64, 64, 1); - //armor->head->_init(); - armor->head = t->head; - //armor->head->addHumanoidBox(-4, -8, -4, 8, 8, 8, 0.5); // Head - - armor->head->visible = layer == 0; - - armor->hair->visible = false; - armor->body->visible = false; - armor->arm0->visible = false; - armor->arm1->visible = false; - armor->leg0->visible = false; - armor->leg1->visible = false; - - switch (itemInstance->getAuxValue()) - { - case SkullTileEntity::TYPE_WITHER: - bindTexture(&WITHER_SKELETON_LOCATION); - break; - case SkullTileEntity::TYPE_ZOMBIE: - bindTexture(&ZOMBIE_LOCATION); - break; - case SkullTileEntity::TYPE_CREEPER: - bindTexture(&CREEPER_LOCATION); - break; - case SkullTileEntity::TYPE_CHAR: - { - bindTexture(&PlayerRenderer::DEFAULT_LOCATION); - break; - } - case SkullTileEntity::TYPE_SKELETON: - default: - bindTexture(&SKELETON_LOCATION); - break; - } - setArmor(armor); - if (armor != nullptr) armor->attackTime = model->attackTime; - if (armor != nullptr) armor->riding = model->riding; - if (armor != nullptr) armor->young = model->young; - - return 1; + return -1; } } return -1; - } void PlayerRenderer::prepareSecondPassArmor(shared_ptr _player, int layer, float a) diff --git a/Minecraft.Client/SkullTileRenderer.cpp b/Minecraft.Client/SkullTileRenderer.cpp index 170779db..3822e3af 100644 --- a/Minecraft.Client/SkullTileRenderer.cpp +++ b/Minecraft.Client/SkullTileRenderer.cpp @@ -48,31 +48,13 @@ void SkullTileRenderer::renderSkull(float x, float y, float z, int face, float r break; case SkullTileEntity::TYPE_ZOMBIE: bindTexture(&ZOMBIE_LOCATION); - //model = zombieModel; + model = skeletonModel; break; case SkullTileEntity::TYPE_CHAR: { Textures *textures = Minecraft::GetInstance()->textures; - - if (getHeight(&PlayerRenderer::DEFAULT_LOCATION) == 64) - { - model = new SkeletonHeadModel(0, 0, 64, 64); - } - //if (!extra.empty()) - //{ - // wstring url = "http://skins.minecraft.net/MinecraftSkins/" + StringUtil.stripColor(extra) + ".png"; - - // if (!instance->tileEntityRenderDispatcher->textures->hasHttpTexture(url)) - // { - // instance->tileEntityRenderDispatcher->textures->addHttpTexture(url, new MobSkinTextureProcessor()); - // } - - // bindTexture(url, "/mob/char.png"); - //} - //else - { - bindTexture(&PlayerRenderer::DEFAULT_LOCATION); - } + model = zombieModel; + bindTexture(&PlayerRenderer::DEFAULT_LOCATION); break; } case SkullTileEntity::TYPE_CREEPER: