diff --git a/Minecraft.Client/Common/UI/UIControl_PlayerSkinPreview.cpp b/Minecraft.Client/Common/UI/UIControl_PlayerSkinPreview.cpp index b8791d6c..1d5947a3 100644 --- a/Minecraft.Client/Common/UI/UIControl_PlayerSkinPreview.cpp +++ b/Minecraft.Client/Common/UI/UIControl_PlayerSkinPreview.cpp @@ -268,25 +268,6 @@ void UIControl_PlayerSkinPreview::render(EntityRenderer *renderer, double x, dou else model = static_cast(renderer->getModel()); - if (m_pvModelOffsets) - { - std::unordered_set modelOffsetSet(m_pvModelOffsets->begin(), m_pvModelOffsets->end()); - for( auto& offset : modelOffsetSet ) - { - switch (offset->ePart) - { - case eBodyOffset_Head: - if (offset->fD == L'Y') - model->head->y += offset->fO; - break; - case eBodyOffset_Body: - if (offset->fD == L'Y') - model->body->y += offset->fO; - break; - } - } - } - //getAttackAnim(mob, a); //if (armor != nullptr) armor->attackTime = model->attackTime; //model->riding = mob->isRiding(); diff --git a/Minecraft.Client/HumanoidModel.cpp b/Minecraft.Client/HumanoidModel.cpp index 3f717d62..1e60e5e4 100644 --- a/Minecraft.Client/HumanoidModel.cpp +++ b/Minecraft.Client/HumanoidModel.cpp @@ -1,7 +1,7 @@ #include "stdafx.h" #include "HumanoidModel.h" #include "..\Minecraft.World\Mth.h" -#include "..\Minecraft.World\Entity.h" +#include "..\Minecraft.World\Player.h" #include "ModelPart.h" // 4J added @@ -385,12 +385,98 @@ void HumanoidModel::render(shared_ptr entity, float time, float r, float } else { + shared_ptr player = dynamic_pointer_cast(entity); + vector headOffsets = {0, 0, 0}; + vector bodyOffsets = {0, 0, 0}; + vector arm0Offsets = {0, 0, 0}; + vector arm1Offsets = {0, 0, 0}; + vector leg0Offsets = {0, 0, 0}; + vector leg1Offsets = {0, 0, 0}; + if (player != nullptr) + { + vector* pModelOffsets=player->GetModelOffsets(); + if (pModelOffsets != nullptr) + { + for( SKIN_OFFSET *pModelOffset : *pModelOffsets ) + { + switch (pModelOffset->ePart) + { + case eBodyOffset_Head: + if(pModelOffset->fD == 1) + headOffsets[0] = pModelOffset->fO; + else if(pModelOffset->fD == 2) + headOffsets[1] = pModelOffset->fO; + else if(pModelOffset->fD == 3) + headOffsets[2] = pModelOffset->fO; + break; + case eBodyOffset_Body: + if(pModelOffset->fD == 1) + bodyOffsets[0] = pModelOffset->fO; + else if(pModelOffset->fD == 2) + bodyOffsets[1] = pModelOffset->fO; + else if(pModelOffset->fD == 3) + bodyOffsets[2] = pModelOffset->fO; + break; + case eBodyOffset_Arm0: + if(pModelOffset->fD == 1) + arm0Offsets[0] = pModelOffset->fO; + else if(pModelOffset->fD == 2) + arm0Offsets[1] = pModelOffset->fO; + else if(pModelOffset->fD == 3) + arm0Offsets[2] = pModelOffset->fO; + break; + case eBodyOffset_Arm1: + if(pModelOffset->fD == 1) + arm1Offsets[0] = pModelOffset->fO; + else if(pModelOffset->fD == 2) + arm1Offsets[1] = pModelOffset->fO; + else if(pModelOffset->fD == 3) + arm1Offsets[2] = pModelOffset->fO; + break; + case eBodyOffset_Leg0: + if(pModelOffset->fD == 1) + leg0Offsets[0] = pModelOffset->fO; + else if(pModelOffset->fD == 2) + leg0Offsets[1] = pModelOffset->fO; + else if(pModelOffset->fD == 3) + leg0Offsets[2] = pModelOffset->fO; + break; + case eBodyOffset_Leg1: + if(pModelOffset->fD == 1) + leg1Offsets[0] = pModelOffset->fO; + else if(pModelOffset->fD == 2) + leg1Offsets[1] = pModelOffset->fO; + else if(pModelOffset->fD == 3) + leg1Offsets[2] = pModelOffset->fO; + break; + } + } + } + } + glPushMatrix(); + glTranslatef(headOffsets[0]/16.0f, headOffsets[1]/16.0f, headOffsets[2]/16.0f); head->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0&&(!(m_uiAnimOverrideBitmask&(1<0||!m_isArmor)); + glPopMatrix(); + glPushMatrix(); + glTranslatef(bodyOffsets[0]/16.0f, bodyOffsets[1]/16.0f, bodyOffsets[2]/16.0f); body->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0&&(!(m_uiAnimOverrideBitmask&(1<0||!m_isArmor)); + glPopMatrix(); + glPushMatrix(); + glTranslatef(arm0Offsets[0]/16.0f, arm0Offsets[1]/16.0f, arm0Offsets[2]/16.0f); arm0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0&&(!(m_uiAnimOverrideBitmask&(1<0||!m_isArmor)); + glPopMatrix(); + glPushMatrix(); + glTranslatef(arm1Offsets[0]/16.0f, arm1Offsets[1]/16.0f, arm1Offsets[2]/16.0f); arm1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0&&(!(m_uiAnimOverrideBitmask&(1<0||!m_isArmor)); + glPopMatrix(); + glPushMatrix(); + glTranslatef(leg0Offsets[0]/16.0f, leg0Offsets[1]/16.0f, leg0Offsets[2]/16.0f); leg0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0&&(!(m_uiAnimOverrideBitmask&(1<0||!m_isArmor)); + glPopMatrix(); + glPushMatrix(); + glTranslatef(leg1Offsets[0]/16.0f, leg1Offsets[1]/16.0f, leg1Offsets[2]/16.0f); leg1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0&&(!(m_uiAnimOverrideBitmask&(1<0||!m_isArmor)); + glPopMatrix(); hair->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0); if (jacket != 0) jacket->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0); diff --git a/Minecraft.Client/PlayerRenderer.cpp b/Minecraft.Client/PlayerRenderer.cpp index b809bfe5..6fb9f0f2 100644 --- a/Minecraft.Client/PlayerRenderer.cpp +++ b/Minecraft.Client/PlayerRenderer.cpp @@ -251,34 +251,6 @@ void PlayerRenderer::render(shared_ptr _mob, double x, double y, double armorParts2->idle=false; } - // Langtanium - any skin offsets to add to this player (skin dependent) - vector* pModelOffsets=mob->GetModelOffsets(); - if (pModelOffsets!=nullptr) - { - for( SKIN_OFFSET *pModelOffset : *pModelOffsets ) - { - // pModelOffset->ePart, pModelOffset->fD, pModelOffset->fO - switch (pModelOffset->ePart) - { - case eBodyOffset_Head: - glPushMatrix(); - glTranslatef(0, 16 * 2, 0); - glPopMatrix(); - break; - case eBodyOffset_Body: - break; - case eBodyOffset_Arm0: - break; - case eBodyOffset_Arm1: - break; - case eBodyOffset_Leg0: - break; - case eBodyOffset_Leg1: - break; - } - } - } - // 4J-PB - any additional parts to turn on for this player (skin dependent) vector *pAdditionalModelParts=mob->GetAdditionalModelParts(); //turn them on