diff --git a/Minecraft.Client/LivingEntityRenderer.cpp b/Minecraft.Client/LivingEntityRenderer.cpp index 9e646c04a..c4161c0ab 100644 --- a/Minecraft.Client/LivingEntityRenderer.cpp +++ b/Minecraft.Client/LivingEntityRenderer.cpp @@ -24,6 +24,7 @@ LivingEntityRenderer::LivingEntityRenderer(Model *model, float shadow, bool isPl shadowRadius = shadow; armor = nullptr; + resModel = model; } void LivingEntityRenderer::setArmor(Model *armor) @@ -31,6 +32,11 @@ void LivingEntityRenderer::setArmor(Model *armor) this->armor = armor; } +void LivingEntityRenderer::setPlayerModelType(Model *humanoidModel) +{ + resModel = humanoidModel; +} + float LivingEntityRenderer::rotlerp(float from, float to, float a) { float diff = to - from; @@ -49,8 +55,6 @@ void LivingEntityRenderer::render(shared_ptr _mob, double x, double y, d } shared_ptr mob = dynamic_pointer_cast(_mob); - shared_ptr player = dynamic_pointer_cast(_mob); - Model *resModel; if (mob == nullptr) { @@ -60,10 +64,6 @@ void LivingEntityRenderer::render(shared_ptr _mob, double x, double y, d glPushMatrix(); glDisable(GL_CULL_FACE); - if (player != nullptr && modelWide != nullptr && (player->getCustomSkin() == 18 || player->getAnimOverrideBitmask()&(1<getCustomSkin() >= 8 && player->getCustomSkin() <= 17) || player->getAnimOverrideBitmask()&(1<attackTime = getAttackAnim(mob, a); if (armor != nullptr) armor->attackTime = resModel->attackTime; resModel->riding = mob->isRiding(); @@ -254,13 +254,6 @@ void LivingEntityRenderer::render(shared_ptr _mob, double x, double y, d void LivingEntityRenderer::renderModel(shared_ptr mob, float wp, float ws, float bob, float headRotMinusBodyRot, float headRotx, float scale) { - shared_ptr player = dynamic_pointer_cast(mob); - Model *resModel; - - if (player != nullptr && modelWide != nullptr && (player->getCustomSkin() == 18 || player->getAnimOverrideBitmask()&(1<getCustomSkin() >= 8 && player->getCustomSkin() <= 17) || player->getAnimOverrideBitmask()&(1<isInvisible()) { @@ -332,13 +325,6 @@ void LivingEntityRenderer::additionalRendering(shared_ptr mob, flo void LivingEntityRenderer::renderArrows(shared_ptr mob, float a) { - shared_ptr player = dynamic_pointer_cast(mob); - Model *resModel; - - if (player != nullptr && modelWide != nullptr && (player->getCustomSkin() == 18 || player->getAnimOverrideBitmask()&(1<getCustomSkin() >= 8 && player->getCustomSkin() <= 17) || player->getAnimOverrideBitmask()&(1<getArrowCount(); if (arrowCount > 0) diff --git a/Minecraft.Client/LivingEntityRenderer.h b/Minecraft.Client/LivingEntityRenderer.h index 30cd758eb..5c564e374 100644 --- a/Minecraft.Client/LivingEntityRenderer.h +++ b/Minecraft.Client/LivingEntityRenderer.h @@ -17,11 +17,13 @@ class LivingEntityRenderer : public EntityRenderer protected: //Model *model; // 4J Stu - This shadows the one in EntityRenderer Model *armor; + Model *resModel; public: LivingEntityRenderer(Model *model, float shadow, bool isPlayer = false); virtual void render(shared_ptr mob, double x, double y, double z, float rot, float a); virtual void setArmor(Model *armor); + virtual void setPlayerModelType(Model *humanoidModel); private: float rotlerp(float from, float to, float a); diff --git a/Minecraft.Client/PlayerRenderer.cpp b/Minecraft.Client/PlayerRenderer.cpp index c560ac16f..a9ff00fcb 100644 --- a/Minecraft.Client/PlayerRenderer.cpp +++ b/Minecraft.Client/PlayerRenderer.cpp @@ -65,6 +65,13 @@ PlayerRenderer::PlayerRenderer() : LivingEntityRenderer( new HumanoidModel(0), 0 armorParts2 = new HumanoidModel(0.5f, true); } +void PlayerRenderer::setModelType(shared_ptr player) +{ + if (Player::GetModelTypeFromTextureId(player->getCustomSkin()) == 1 || Player::GetModelTypeFromAnimBitmask(player->getAnimOverrideBitmask()) == 1) resModel = humanoidModelWide; + else if (Player::GetModelTypeFromTextureId(player->getCustomSkin()) == 2 || Player::GetModelTypeFromAnimBitmask(player->getAnimOverrideBitmask()) == 2) resModel = humanoidModelSlim; + else resModel = humanoidModel; +} + unsigned int PlayerRenderer::getNametagColour(int index) { if( index >= 0 && index < MINECRAFT_NET_MAX_PLAYERS) @@ -76,11 +83,7 @@ int PlayerRenderer::prepareArmor(shared_ptr _player, int layer, fl { // 4J - dynamic cast required because we aren't using templates/generics in our version shared_ptr player = dynamic_pointer_cast(_player); - HumanoidModel *resModel; - - if (humanoidModelWide != nullptr && (player->getCustomSkin() == 18 || player->getAnimOverrideBitmask()&(1<getCustomSkin() >= 8 && player->getCustomSkin() <= 17) || player->getAnimOverrideBitmask()&(1<getAnimOverrideBitmask(); @@ -175,14 +178,12 @@ void PlayerRenderer::render(shared_ptr _mob, double x, double y, double // 4J - dynamic cast required because we aren't using templates/generics in our version shared_ptr mob = dynamic_pointer_cast(_mob); - HumanoidModel *resModel; if(mob == nullptr) return; if(mob->hasInvisiblePrivilege()) return; - if (humanoidModelWide != nullptr && (mob->getCustomSkin() == 18 || mob->getAnimOverrideBitmask()&(1<getCustomSkin() >= 8 && mob->getCustomSkin() <= 17) || mob->getAnimOverrideBitmask()&(1< item = mob->inventory->getSelected(); @@ -316,11 +317,7 @@ void PlayerRenderer::additionalRendering(shared_ptr _mob, float a) // 4J - dynamic cast required because we aren't using templates/generics in our version shared_ptr mob = dynamic_pointer_cast(_mob); - HumanoidModel *resModel; - - if (mob != nullptr && humanoidModelWide != nullptr && (mob->getCustomSkin() == 18 || mob->getAnimOverrideBitmask()&(1<getCustomSkin() >= 8 && mob->getCustomSkin() <= 17) || mob->getAnimOverrideBitmask()&(1< headGear = mob->inventory->getArmor(3); if (headGear != nullptr) @@ -565,11 +562,7 @@ void PlayerRenderer::scale(shared_ptr player, float a) void PlayerRenderer::renderHand() { shared_ptr player = dynamic_pointer_cast(Minecraft::GetInstance()->player); - HumanoidModel *resModel; - - if (player != nullptr && humanoidModelWide != nullptr && (player->getCustomSkin() == 18 || player->getAnimOverrideBitmask()&(1<getCustomSkin() >= 8 && player->getCustomSkin() <= 17) || player->getAnimOverrideBitmask()&(1< player); virtual int prepareArmor(shared_ptr _player, int layer, float a); virtual void prepareSecondPassArmor(shared_ptr mob, int layer, float a); diff --git a/Minecraft.World/Player.cpp b/Minecraft.World/Player.cpp index eb29a861d..2290a5e0e 100644 --- a/Minecraft.World/Player.cpp +++ b/Minecraft.World/Player.cpp @@ -3214,7 +3214,9 @@ int Player::GetModelTypeFromAnimBitmask(unsigned int uiAnimOverrideBitmask) int Player::GetModelTypeFromTextureId(int textureId) { - if (textureId > 44 && textureId < 54) return 2; + if (textureId > 8 && textureId < 18) return 2; + else if (textureId == 18) return 1; + else if (textureId > 44 && textureId < 54) return 2; else if (textureId == 54) return 1; else return 0; }