diff options
| author | daoge <3523206925@qq.com> | 2026-03-03 03:04:10 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-03 03:04:10 +0800 |
| commit | b3feddfef372618c8a9d7a0abcaf18cfad866c18 (patch) | |
| tree | 267761c3bb39241ba5c347bfbe2254d06686e287 /Minecraft.Client/PlayerRenderer.cpp | |
| parent | 84c31a2331f7a0ec85b9d438992e244f60e5020f (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/PlayerRenderer.cpp')
| -rw-r--r-- | Minecraft.Client/PlayerRenderer.cpp | 193 |
1 files changed, 83 insertions, 110 deletions
diff --git a/Minecraft.Client/PlayerRenderer.cpp b/Minecraft.Client/PlayerRenderer.cpp index c332b41c..7d135c2b 100644 --- a/Minecraft.Client/PlayerRenderer.cpp +++ b/Minecraft.Client/PlayerRenderer.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "PlayerRenderer.h" #include "SkullTileRenderer.h" +#include "HumanoidMobRenderer.h" #include "HumanoidModel.h" #include "ModelPart.h" #include "LocalPlayer.h" @@ -27,9 +28,9 @@ const unsigned int PlayerRenderer::s_nametagColors[MINECRAFT_NET_MAX_PLAYERS] = #endif }; -const wstring PlayerRenderer::MATERIAL_NAMES[5] = { L"cloth", L"chain", L"iron", L"diamond", L"gold" }; +ResourceLocation PlayerRenderer::DEFAULT_LOCATION = ResourceLocation(TN_MOB_CHAR); -PlayerRenderer::PlayerRenderer() : MobRenderer( new HumanoidModel(0), 0.5f ) +PlayerRenderer::PlayerRenderer() : LivingEntityRenderer( new HumanoidModel(0), 0.5f ) { humanoidModel = (HumanoidModel *) model; @@ -46,7 +47,7 @@ unsigned int PlayerRenderer::getNametagColour(int index) return 0xFF000000; } -int PlayerRenderer::prepareArmor(shared_ptr<Mob> _player, int layer, float a) +int PlayerRenderer::prepareArmor(shared_ptr<LivingEntity> _player, int layer, float a) { // 4J - dynamic cast required because we aren't using templates/generics in our version shared_ptr<Player> player = dynamic_pointer_cast<Player>(_player); @@ -65,7 +66,7 @@ int PlayerRenderer::prepareArmor(shared_ptr<Mob> _player, int layer, float a) if (dynamic_cast<ArmorItem *>(item)) { ArmorItem *armorItem = dynamic_cast<ArmorItem *>(item); - bindTexture(L"armor/" + MATERIAL_NAMES[armorItem->modelIndex] + L"_" + _toString<int>(layer == 2 ? 2 : 1) + L".png"); + bindTexture(HumanoidMobRenderer::getArmorLocation(armorItem, layer)); HumanoidModel *armor = layer == 2 ? armorParts2 : armorParts1; @@ -108,7 +109,7 @@ int PlayerRenderer::prepareArmor(shared_ptr<Mob> _player, int layer, float a) } -void PlayerRenderer::prepareSecondPassArmor(shared_ptr<Mob> _player, int layer, float a) +void PlayerRenderer::prepareSecondPassArmor(shared_ptr<LivingEntity> _player, int layer, float a) { // 4J - dynamic cast required because we aren't using templates/generics in our version shared_ptr<Player> player = dynamic_pointer_cast<Player>(_player); @@ -119,7 +120,7 @@ void PlayerRenderer::prepareSecondPassArmor(shared_ptr<Mob> _player, int layer, if (dynamic_cast<ArmorItem *>(item)) { ArmorItem *armorItem = dynamic_cast<ArmorItem *>(item); - bindTexture(L"armor/" + MATERIAL_NAMES[armorItem->modelIndex] + L"_" + _toString<int>(layer == 2 ? 2 : 1) + L"_b.png"); + bindTexture(HumanoidMobRenderer::getArmorLocation((ArmorItem *)item, layer, true)); float brightness = SharedConstants::TEXTURE_LIGHTING ? 1 : player->getBrightness(a); glColor3f(brightness, brightness, brightness); @@ -169,7 +170,7 @@ void PlayerRenderer::render(shared_ptr<Entity> _mob, double x, double y, double armorParts1->sneaking = armorParts2->sneaking = humanoidModel->sneaking = mob->isSneaking(); double yp = y - mob->heightOffset; - if (mob->isSneaking() && (dynamic_pointer_cast<LocalPlayer>(mob) == NULL)) + if (mob->isSneaking() && !mob->instanceof(eTYPE_LOCALPLAYER)) { yp -= 2 / 16.0f; } @@ -210,7 +211,7 @@ void PlayerRenderer::render(shared_ptr<Entity> _mob, double x, double y, double } } - MobRenderer::render(mob, x, yp, z, rot, a); + LivingEntityRenderer::render(mob, x, yp, z, rot, a); // turn them off again if(pAdditionalModelParts && pAdditionalModelParts->size()!=0) @@ -228,97 +229,13 @@ void PlayerRenderer::render(shared_ptr<Entity> _mob, double x, double y, double } -void PlayerRenderer::renderName(shared_ptr<Mob> _mob, double x, double y, double z) +void PlayerRenderer::additionalRendering(shared_ptr<LivingEntity> _mob, float a) { - // 4J - dynamic cast required because we aren't using templates/generics in our version - shared_ptr<Player> mob = dynamic_pointer_cast<Player>(_mob); - - if (Minecraft::renderNames() && mob != entityRenderDispatcher->cameraEntity - && !mob->isInvisibleTo(Minecraft::GetInstance()->player) ) // 4J-JEV: Todo, move to LivingEntityRenderer. - { - float size = 1.60f; - float s = 1 / 60.0f * size; - double dist = mob->distanceToSqr(entityRenderDispatcher->cameraEntity); - - float maxDist = mob->isSneaking() ? 32.0f : 64.0f; - - if (dist < maxDist * maxDist) - { - // Truncate display names longer than 16 char - wstring msg = mob->getDisplayName(); - if (msg.length() > 16) - { - msg.resize(16); - msg += L"..."; - } - - if (mob->isSneaking()) - { - if ( app.GetGameSettings(eGameSetting_DisplayHUD)==0 ) - { - // 4J-PB - turn off gamertag render - return; - } - - if(app.GetGameHostOption(eGameHostOption_Gamertags)==0) - { - // turn off gamertags if the host has set them off - return; - } - - Font *font = getFont(); - glPushMatrix(); - glTranslatef((float) x + 0, (float) y + 2.3f, (float) z); - glNormal3f(0, 1, 0); - - glRotatef(-this->entityRenderDispatcher->playerRotY, 0, 1, 0); - glRotatef(this->entityRenderDispatcher->playerRotX, 1, 0, 0); - - glScalef(-s, -s, s); - glDisable(GL_LIGHTING); - - glTranslatef(0, (float) 0.25f / s, 0); - glDepthMask(false); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - Tesselator *t = Tesselator::getInstance(); - - glDisable(GL_TEXTURE_2D); - t->begin(); - int w = font->width(msg) / 2; - t->color(0.0f, 0.0f, 0.0f, 0.25f); - t->vertex((float)(-w - 1), (float)( -1), (float)( 0)); - t->vertex((float)(-w - 1), (float)( +8), (float)( 0)); - t->vertex((float)(+w + 1), (float)( +8), (float)( 0)); - t->vertex((float)(+w + 1), (float)( -1), (float)( 0)); - t->end(); - glEnable(GL_TEXTURE_2D); - glDepthMask(true); - font->draw(msg, -font->width(msg) / 2, 0, 0x20ffffff); - glEnable(GL_LIGHTING); - glDisable(GL_BLEND); - glColor4f(1, 1, 1, 1); - glPopMatrix(); - } - else - { - if (mob->isSleeping()) - { - renderNameTag(mob, msg, x, y - 1.5f, z, 64, s_nametagColors[mob->getPlayerIndex()]); - } - else - { - renderNameTag(mob, msg, x, y, z, 64, s_nametagColors[mob->getPlayerIndex()]); - } - } - } - } + float brightness = SharedConstants::TEXTURE_LIGHTING ? 1 : _mob->getBrightness(a); + glColor3f(brightness, brightness, brightness); -} - -void PlayerRenderer::additionalRendering(shared_ptr<Mob> _mob, float a) -{ - MobRenderer::additionalRendering(_mob,a); + LivingEntityRenderer::additionalRendering(_mob,a); + LivingEntityRenderer::renderArrows(_mob, a); // 4J - dynamic cast required because we aren't using templates/generics in our version shared_ptr<Player> mob = dynamic_pointer_cast<Player>(_mob); @@ -344,7 +261,7 @@ void PlayerRenderer::additionalRendering(shared_ptr<Mob> _mob, float a) glScalef(s, -s, s); } - this->entityRenderDispatcher->itemInHandRenderer->renderItem(mob, headGear, 0); + entityRenderDispatcher->itemInHandRenderer->renderItem(mob, headGear, 0); } else if (headGear->getItem()->id == Item::skull_Id) { @@ -384,9 +301,12 @@ void PlayerRenderer::additionalRendering(shared_ptr<Mob> _mob, float a) glPopMatrix(); } } -//4J-PB -// if (bindTexture(mob->cloakTexture, L"" )) - if (bindTexture(mob->customTextureUrl2, L"" ) && !mob->isInvisible()) + + // 4J: removed + /*boolean loaded = mob->getCloakTexture()->isLoaded(); + boolean b1 = !mob->isInvisible(); + boolean b2 = !mob->isCapeHidden();*/ + if (bindTexture(mob->customTextureUrl2, L"") && !mob->isInvisible()) { glPushMatrix(); glTranslatef(0, 0, 2 / 16.0f); @@ -427,7 +347,6 @@ void PlayerRenderer::additionalRendering(shared_ptr<Mob> _mob, float a) glPopMatrix(); } - shared_ptr<ItemInstance> item = mob->inventory->getSelected(); if (item != NULL) @@ -454,7 +373,7 @@ void PlayerRenderer::additionalRendering(shared_ptr<Mob> _mob, float a) s *= 0.75f; glRotatef(20, 1, 0, 0); glRotatef(45, 0, 1, 0); - glScalef(s, -s, s); + glScalef(-s, -s, s); } else if (item->id == Item::bow->id) { @@ -513,15 +432,49 @@ void PlayerRenderer::additionalRendering(shared_ptr<Mob> _mob, float a) } else { + int col = item->getItem()->getColor(item, 0); + float red = ((col >> 16) & 0xff) / 255.0f; + float g = ((col >> 8) & 0xff) / 255.0f; + float b = ((col) & 0xff) / 255.0f; + + glColor4f(red, g, b, 1); this->entityRenderDispatcher->itemInHandRenderer->renderItem(mob, item, 0); } glPopMatrix(); + } +} + +void PlayerRenderer::renderNameTags(shared_ptr<LivingEntity> player, double x, double y, double z, wstring msg, float scale, double dist) +{ +#if 0 + if (dist < 10 * 10) + { + Scoreboard *scoreboard = player->getScoreboard(); + Objective *objective = scoreboard->getDisplayObjective(Scoreboard::DISPLAY_SLOT_BELOW_NAME); + + if (objective != NULL) + { + Score *score = scoreboard->getPlayerScore(player->getAName(), objective); + + if (player->isSleeping()) + { + renderNameTag(player, score->getScore() + " " + objective->getDisplayName(), x, y - 1.5f, z, 64); + } + else + { + renderNameTag(player, score->getScore() + " " + objective->getDisplayName(), x, y, z, 64); + } + + y += getFont()->lineHeight * 1.15f * scale; + } } +#endif + LivingEntityRenderer::renderNameTags(player, x, y, z, msg, scale, dist); } -void PlayerRenderer::scale(shared_ptr<Mob> player, float a) +void PlayerRenderer::scale(shared_ptr<LivingEntity> player, float a) { float s = 15 / 16.0f; glScalef(s, s, s); @@ -529,10 +482,13 @@ void PlayerRenderer::scale(shared_ptr<Mob> player, float a) void PlayerRenderer::renderHand() { + float brightness = 1; + glColor3f(brightness, brightness, brightness); + humanoidModel->m_uiAnimOverrideBitmask = Minecraft::GetInstance()->player->getAnimOverrideBitmask(); armorParts1->eating = armorParts2->eating = humanoidModel->eating = humanoidModel->idle = false; humanoidModel->attackTime = 0; - humanoidModel->setupAnim(0, 0, 0, 0, 0, 1 / 16.0f); + humanoidModel->setupAnim(0, 0, 0, 0, 0, 1 / 16.0f, Minecraft::GetInstance()->player); // 4J-PB - does this skin have its arm0 disabled? (Dalek, etc) if((humanoidModel->m_uiAnimOverrideBitmask&(1<<HumanoidModel::eAnim_DisableRenderArm0))==0) { @@ -540,23 +496,27 @@ void PlayerRenderer::renderHand() } } -void PlayerRenderer::setupPosition(shared_ptr<Mob> _mob, double x, double y, double z) +void PlayerRenderer::setupPosition(shared_ptr<LivingEntity> _mob, double x, double y, double z) { // 4J - dynamic cast required because we aren't using templates/generics in our version shared_ptr<Player> mob = dynamic_pointer_cast<Player>(_mob); if (mob->isAlive() && mob->isSleeping()) { - MobRenderer::setupPosition(mob, x + mob->bedOffsetX, y + mob->bedOffsetY, z + mob->bedOffsetZ); + LivingEntityRenderer::setupPosition(mob, x + mob->bedOffsetX, y + mob->bedOffsetY, z + mob->bedOffsetZ); } else { - MobRenderer::setupPosition(mob, x, y, z); + if(mob->isRiding() && (mob->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_SmallModel))!=0) + { + y += 0.5f; + } + LivingEntityRenderer::setupPosition(mob, x, y, z); } } -void PlayerRenderer::setupRotations(shared_ptr<Mob> _mob, float bob, float bodyRot, float a) +void PlayerRenderer::setupRotations(shared_ptr<LivingEntity> _mob, float bob, float bodyRot, float a) { // 4J - dynamic cast required because we aren't using templates/generics in our version shared_ptr<Player> mob = dynamic_pointer_cast<Player>(_mob); @@ -569,7 +529,7 @@ void PlayerRenderer::setupRotations(shared_ptr<Mob> _mob, float bob, float bodyR } else { - MobRenderer::setupRotations(mob, bob, bodyRot, a); + LivingEntityRenderer::setupRotations(mob, bob, bodyRot, a); } } @@ -583,3 +543,16 @@ void PlayerRenderer::renderShadow(shared_ptr<Entity> e, double x, double y, doub } EntityRenderer::renderShadow(e,x,y,z,pow,a); } + +// 4J Added override +void PlayerRenderer::bindTexture(shared_ptr<Entity> entity) +{ + shared_ptr<Player> player = dynamic_pointer_cast<Player>(entity); + bindTexture(player->customTextureUrl, player->getTexture()); +} + +ResourceLocation *PlayerRenderer::getTextureLocation(shared_ptr<Entity> entity) +{ + shared_ptr<Player> player = dynamic_pointer_cast<Player>(entity); + return new ResourceLocation((_TEXTURE_NAME)player->getTexture()); +}
\ No newline at end of file |
