Made changes to skin related code
Renamed all Alex skins and Developer Steve skin to match the official file names, reordered default skin to match the order in the official release of LCE, modified model type logic to be more optimized, added more anim flags to HumanoidModel.h, added code to show armor if the corresponding part is hidden but the "show armor" part anim flag is present, added code to handle extra skin box values of "hide with armor", "mirror skin box", and "scale", corrected player model second/overlay layer scale from 0.5 to 0.25, and fixed skin boxes not rendering on 64x64 DLC skins.
|
|
@ -9615,7 +9615,14 @@ void CMinecraftApp::SetAdditionalSkinBoxes(DWORD dwSkinID, SKIN_BOX *SkinBoxA, D
|
|||
{
|
||||
EntityRenderDispatcher *dispatcher = EntityRenderDispatcher::instance;
|
||||
EntityRenderer *renderer = dispatcher ? dispatcher->getRenderer(eTYPE_PLAYER) : nullptr;
|
||||
Model *pModel = renderer ? renderer->getModel() : nullptr;
|
||||
unsigned int m_uiAnimOverrideBitmask = GetAnimOverrideBitmask(dwSkinID);
|
||||
Model *pModel;
|
||||
if (m_uiAnimOverrideBitmask & (1 << HumanoidModel::eAnim_SlimModel))
|
||||
pModel = renderer ? renderer->getModel(2) : nullptr;
|
||||
else if (m_uiAnimOverrideBitmask & (1 << HumanoidModel::eAnim_WideModel))
|
||||
pModel = renderer ? renderer->getModel(1) : nullptr;
|
||||
else
|
||||
pModel = renderer ? renderer->getModel(0) : nullptr;
|
||||
vector<ModelPart *> *pvModelPart = new vector<ModelPart *>;
|
||||
vector<SKIN_BOX *> *pvSkinBoxes = new vector<SKIN_BOX *>;
|
||||
|
||||
|
|
@ -9648,7 +9655,14 @@ vector<ModelPart *> * CMinecraftApp::SetAdditionalSkinBoxes(DWORD dwSkinID, vect
|
|||
{
|
||||
EntityRenderDispatcher *dispatcher = EntityRenderDispatcher::instance;
|
||||
EntityRenderer *renderer = dispatcher ? dispatcher->getRenderer(eTYPE_PLAYER) : nullptr;
|
||||
Model *pModel = renderer ? renderer->getModel() : nullptr;
|
||||
unsigned int m_uiAnimOverrideBitmask = GetAnimOverrideBitmask(dwSkinID);
|
||||
Model *pModel;
|
||||
if (m_uiAnimOverrideBitmask & (1 << HumanoidModel::eAnim_SlimModel))
|
||||
pModel = renderer ? renderer->getModel(2) : nullptr;
|
||||
else if (m_uiAnimOverrideBitmask & (1 << HumanoidModel::eAnim_WideModel))
|
||||
pModel = renderer ? renderer->getModel(1) : nullptr;
|
||||
else
|
||||
pModel = renderer ? renderer->getModel(0) : nullptr;
|
||||
vector<ModelPart *> *pvModelPart = new vector<ModelPart *>;
|
||||
|
||||
EnterCriticalSection( &csAdditionalModelParts );
|
||||
|
|
|
|||
|
|
@ -120,9 +120,9 @@ void DLCSkinFile::addParameter(DLCManager::EDLCParameterType type, const wstring
|
|||
|
||||
#ifdef __PS3__
|
||||
// 4J Stu - The Xbox version used swscanf_s which isn't available in GCC.
|
||||
swscanf(value.c_str(), L"%10ls%f%f%f%f%f%f%f%f", wchBodyPart,
|
||||
swscanf(value.c_str(), L"%10ls%f%f%f%f%f%f%f%f%f%f%f", wchBodyPart,
|
||||
#else
|
||||
swscanf_s(value.c_str(), L"%9ls%f%f%f%f%f%f%f%f", wchBodyPart,10,
|
||||
swscanf_s(value.c_str(), L"%9ls%f%f%f%f%f%f%f%f%f%f%f", wchBodyPart,10,
|
||||
#endif
|
||||
&pSkinBox->fX,
|
||||
&pSkinBox->fY,
|
||||
|
|
@ -131,7 +131,10 @@ void DLCSkinFile::addParameter(DLCManager::EDLCParameterType type, const wstring
|
|||
&pSkinBox->fH,
|
||||
&pSkinBox->fD,
|
||||
&pSkinBox->fU,
|
||||
&pSkinBox->fV);
|
||||
&pSkinBox->fV,
|
||||
&pSkinBox->fA,
|
||||
&pSkinBox->fM,
|
||||
&pSkinBox->fS);
|
||||
|
||||
if(wcscmp(wchBodyPart,L"HEAD")==0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@
|
|||
#include "../../ModelPart.h"
|
||||
#include "../../Options.h"
|
||||
#include "../../../Minecraft.World/net.minecraft.world.entity.player.h"
|
||||
#include "Skins.h"
|
||||
#include "UIControl_PlayerSkinPreview.h"
|
||||
#include <string>
|
||||
|
||||
|
|
@ -309,24 +308,8 @@ void UIControl_PlayerSkinPreview::render(EntityRenderer *renderer, double x, dou
|
|||
glPushMatrix();
|
||||
glDisable(GL_CULL_FACE);
|
||||
|
||||
HumanoidModel *model = static_cast<HumanoidModel *>(renderer->getModel());
|
||||
Textures *textures = Minecraft::GetInstance()->textures;
|
||||
int skinId = textures->loadMemTexture(m_customTextureUrl, m_backupTexture) - 37;
|
||||
|
||||
if (slim[skinId] == true)
|
||||
{
|
||||
if (textures->getHeight(m_customTextureUrl, m_backupTexture) == 64)
|
||||
model = static_cast<HumanoidModel *>(renderer->getNewModelSlim());
|
||||
else
|
||||
model = static_cast<HumanoidModel *>(renderer->getModelSlim());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (textures->getHeight(m_customTextureUrl, m_backupTexture) == 64)
|
||||
model = static_cast<HumanoidModel *>(renderer->getNewModel());
|
||||
else
|
||||
model = static_cast<HumanoidModel *>(renderer->getModel());
|
||||
}
|
||||
Textures *t = Minecraft::GetInstance()->textures;
|
||||
HumanoidModel *model = static_cast<HumanoidModel *>(renderer->getModel(Player::GetModelTypeFromTextureId(t->loadMemTexture(m_customTextureUrl, m_backupTexture))+Player::GetModelTypeFromAnimBitmask(m_uiAnimOverrideBitmask)));
|
||||
|
||||
//getAttackAnim(mob, a);
|
||||
//if (armor != nullptr) armor->attackTime = model->attackTime;
|
||||
|
|
|
|||
|
|
@ -24,16 +24,16 @@ const WCHAR *UIScene_SkinSelectMenu::wchDefaultNamesA[]=
|
|||
L"Prisoner Steve",
|
||||
L"Cyclist Steve",
|
||||
L"Boxer Steve",
|
||||
L"Developer Steve",
|
||||
L"Alex",
|
||||
L"Tuxedo Alex",
|
||||
L"Boxer Alex",
|
||||
L"Prisoner Alex",
|
||||
L"Tennis Alex",
|
||||
L"Cyclist Alex",
|
||||
L"Tuxedo Alex",
|
||||
L"Athlete Alex",
|
||||
L"Swedish Alex",
|
||||
L"Prisoner Alex",
|
||||
L"Cyclist Alex",
|
||||
L"Boxer Alex",
|
||||
L"Developer Alex",
|
||||
L"Developer Steve",
|
||||
};
|
||||
|
||||
UIScene_SkinSelectMenu::UIScene_SkinSelectMenu(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer)
|
||||
|
|
@ -1004,34 +1004,34 @@ TEXTURE_NAME UIScene_SkinSelectMenu::getTextureId(int skinIndex)
|
|||
texture = TN_MOB_CHAR7;
|
||||
break;
|
||||
case eDefaultSkins_Skin8:
|
||||
texture = TN_MOB_CHAR8;
|
||||
texture = TN_MOB_ALEX;
|
||||
break;
|
||||
case eDefaultSkins_Skin9:
|
||||
texture = TN_MOB_CHAR9;
|
||||
texture = TN_MOB_ALEX1;
|
||||
break;
|
||||
case eDefaultSkins_Skin10:
|
||||
texture = TN_MOB_CHAR10;
|
||||
texture = TN_MOB_ALEX2;
|
||||
break;
|
||||
case eDefaultSkins_Skin11:
|
||||
texture = TN_MOB_CHAR11;
|
||||
texture = TN_MOB_ALEX3;
|
||||
break;
|
||||
case eDefaultSkins_Skin12:
|
||||
texture = TN_MOB_CHAR12;
|
||||
texture = TN_MOB_ALEX4;
|
||||
break;
|
||||
case eDefaultSkins_Skin13:
|
||||
texture = TN_MOB_CHAR13;
|
||||
texture = TN_MOB_ALEX5;
|
||||
break;
|
||||
case eDefaultSkins_Skin14:
|
||||
texture = TN_MOB_CHAR14;
|
||||
texture = TN_MOB_ALEX6;
|
||||
break;
|
||||
case eDefaultSkins_Skin15:
|
||||
texture = TN_MOB_CHAR15;
|
||||
texture = TN_MOB_ALEX7;
|
||||
break;
|
||||
case eDefaultSkins_Skin16:
|
||||
texture = TN_MOB_CHAR16;
|
||||
texture = TN_MOB_DEVALEX;
|
||||
break;
|
||||
case eDefaultSkins_Skin17:
|
||||
texture = TN_MOB_CHAR17;
|
||||
texture = TN_MOB_DEVSTEVE;
|
||||
break;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
BIN
Minecraft.Client/Common/res/1_2_2/mob/alex.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
BIN
Minecraft.Client/Common/res/mob/alex.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
|
@ -19,9 +19,8 @@ ResourceLocation EntityRenderer::SHADOW_LOCATION = ResourceLocation(TN__CLAMP__M
|
|||
EntityRenderer::EntityRenderer()
|
||||
{
|
||||
model = nullptr;
|
||||
modelWide = nullptr;
|
||||
modelSlim = nullptr;
|
||||
newModel = nullptr;
|
||||
newModelSlim = nullptr;
|
||||
tileRenderer = new TileRenderer();
|
||||
shadowRadius = 0;
|
||||
shadowStrength = 1.0f;
|
||||
|
|
@ -407,6 +406,13 @@ void EntityRenderer::registerTerrainTextures(IconRegister *iconRegister)
|
|||
{
|
||||
}
|
||||
|
||||
Model *EntityRenderer::getModel(int modelType)
|
||||
{
|
||||
if (modelType == 2) return modelSlim;
|
||||
else if (modelType == 1) return modelWide;
|
||||
else return model;
|
||||
}
|
||||
|
||||
|
||||
ResourceLocation *EntityRenderer::getTextureLocation(shared_ptr<Entity> mob)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -31,9 +31,8 @@ private:
|
|||
|
||||
protected:
|
||||
Model *model; // TODO 4J: Check why exactly this is here, it seems to get shadowed by classes inheriting from this by their own
|
||||
Model *modelWide;
|
||||
Model *modelSlim;
|
||||
Model *newModel;
|
||||
Model *newModelSlim;
|
||||
|
||||
protected:
|
||||
TileRenderer *tileRenderer; // 4J - changed to protected so derived classes can use instead of shadowing their own
|
||||
|
|
@ -71,10 +70,7 @@ public:
|
|||
|
||||
public:
|
||||
// 4J Added
|
||||
virtual Model *getModel() { return model; }
|
||||
virtual Model *getModelSlim() { return modelSlim; }
|
||||
virtual Model *getNewModel() { return newModel; }
|
||||
virtual Model *getNewModelSlim() { return newModelSlim; }
|
||||
virtual Model *getModel(int modelType = 0);
|
||||
virtual void SetItemFrame(bool bSet) {}
|
||||
virtual bool shouldRender(shared_ptr<Entity> entity, float camX, float camY, float camZ) { return true; }
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
ModelPart * HumanoidModel::AddOrRetrievePart(SKIN_BOX *pBox)
|
||||
{
|
||||
ModelPart *pAttachTo=nullptr;
|
||||
float scale=0;
|
||||
|
||||
switch(pBox->ePart)
|
||||
{
|
||||
|
|
@ -32,21 +33,29 @@ ModelPart * HumanoidModel::AddOrRetrievePart(SKIN_BOX *pBox)
|
|||
break;
|
||||
case eBodyPart_Jacket:
|
||||
pAttachTo=jacket;
|
||||
scale=0.25;
|
||||
break;
|
||||
case eBodyPart_Sleeve0:
|
||||
pAttachTo=sleeve0;
|
||||
scale=0.25;
|
||||
break;
|
||||
case eBodyPart_Sleeve1:
|
||||
pAttachTo=sleeve1;
|
||||
scale=0.25;
|
||||
break;
|
||||
case eBodyPart_Pants0:
|
||||
pAttachTo=pants0;
|
||||
scale=0.25;
|
||||
break;
|
||||
case eBodyPart_Pants1:
|
||||
pAttachTo=pants1;
|
||||
scale=0.25;
|
||||
break;
|
||||
}
|
||||
|
||||
// check if this box has a declared scale then add it
|
||||
if (pBox->fS != 0) scale = pBox->fS;
|
||||
|
||||
// first check this box doesn't already exist
|
||||
ModelPart *pNewBox = pAttachTo->retrieveChild(pBox);
|
||||
|
||||
|
|
@ -64,6 +73,8 @@ ModelPart * HumanoidModel::AddOrRetrievePart(SKIN_BOX *pBox)
|
|||
|
||||
pNewBox = new ModelPart(this, static_cast<int>(pBox->fU), static_cast<int>(pBox->fV));
|
||||
pNewBox->visible=false;
|
||||
if (pBox->fM > 0) pNewBox->bMirror = true; // check if this box has the mirror flag
|
||||
pNewBox->hideWithArmor = (unsigned int)pBox->fA; // add the "hide when armor is worn" bit flags
|
||||
pNewBox->addHumanoidBox(pBox->fX, pBox->fY, pBox->fZ, pBox->fW, pBox->fH, pBox->fD, 0);
|
||||
// 4J-PB - don't compile here, since the lighting isn't set up. It'll be compiled on first use.
|
||||
//pNewBox->compile(1.0f/16.0f);
|
||||
|
|
@ -73,7 +84,7 @@ ModelPart * HumanoidModel::AddOrRetrievePart(SKIN_BOX *pBox)
|
|||
return pNewBox;
|
||||
}
|
||||
|
||||
void HumanoidModel::_init(float g, float yOffset, int texWidth, int texHeight, bool slimHands, bool mirror, bool force32)
|
||||
void HumanoidModel::_init(float g, float yOffset, int texWidth, int texHeight, bool slimHands, bool mirror, bool force32, bool isArmor)
|
||||
{
|
||||
this->texWidth = texWidth;
|
||||
this->texHeight = texHeight;
|
||||
|
|
@ -113,7 +124,7 @@ void HumanoidModel::_init(float g, float yOffset, int texWidth, int texHeight, b
|
|||
if ((texWidth == 64 && texHeight == 64) && !force32)
|
||||
{
|
||||
jacket = new ModelPart(this, 16, 32);
|
||||
jacket->addHumanoidBox(-4, 0, -2, 8, 12, 4, g + 0.5);
|
||||
jacket->addHumanoidBox(-4, 0, -2, 8, 12, 4, g + 0.25);
|
||||
jacket->setPos(0, 0 + yOffset, 0);
|
||||
}
|
||||
|
||||
|
|
@ -131,13 +142,13 @@ void HumanoidModel::_init(float g, float yOffset, int texWidth, int texHeight, b
|
|||
|
||||
if (slimHands == false)
|
||||
{
|
||||
sleeve0->addHumanoidBox(-3, -2, -2, 4, 12, 4, g + 0.5);
|
||||
sleeve1->addHumanoidBox(-1, -2, -2, 4, 12, 4, g + 0.5);
|
||||
sleeve0->addHumanoidBox(-3, -2, -2, 4, 12, 4, g + 0.25);
|
||||
sleeve1->addHumanoidBox(-1, -2, -2, 4, 12, 4, g + 0.25);
|
||||
}
|
||||
else if (slimHands == true)
|
||||
{
|
||||
sleeve0->addHumanoidBox(-2, -2, -2, 3, 12, 4, g + 0.5);
|
||||
sleeve1->addHumanoidBox(-1, -2, -2, 3, 12, 4, g + 0.5);
|
||||
sleeve0->addHumanoidBox(-2, -2, -2, 3, 12, 4, g + 0.25);
|
||||
sleeve1->addHumanoidBox(-1, -2, -2, 3, 12, 4, g + 0.25);
|
||||
}
|
||||
|
||||
sleeve0->setPos(-5, 2 + yOffset, 0);
|
||||
|
|
@ -172,11 +183,11 @@ void HumanoidModel::_init(float g, float yOffset, int texWidth, int texHeight, b
|
|||
leg1 = new ModelPart(this, 16, 48);
|
||||
|
||||
pants0 = new ModelPart(this, 0, 32);
|
||||
pants0->addHumanoidBox(-2, 0, -2, 4, 12, 4, g + 0.5);
|
||||
pants0->addHumanoidBox(-2, 0, -2, 4, 12, 4, g + 0.25);
|
||||
pants0->setPos(-1.9, 12 + yOffset, 0);
|
||||
|
||||
pants1 = new ModelPart(this, 0, 48);
|
||||
pants1->addHumanoidBox(-2, 0, -2, 4, 12, 4, g + 0.5);
|
||||
pants1->addHumanoidBox(-2, 0, -2, 4, 12, 4, g + 0.25);
|
||||
pants1->setPos(1.9, 12 + yOffset, 0);
|
||||
}
|
||||
else if ((texWidth == 64 && texHeight == 32) || force32)
|
||||
|
|
@ -226,6 +237,7 @@ void HumanoidModel::_init(float g, float yOffset, int texWidth, int texHeight, b
|
|||
bowAndArrow=false;
|
||||
elytraFlying = false;
|
||||
elytraCrouching = false;
|
||||
m_isArmor = isArmor;
|
||||
|
||||
|
||||
// 4J added
|
||||
|
|
@ -238,32 +250,37 @@ void HumanoidModel::_init(float g, float yOffset, int texWidth, int texHeight, b
|
|||
|
||||
HumanoidModel::HumanoidModel() : Model()
|
||||
{
|
||||
_init(0, 0, 64, 32, false, true, false);
|
||||
_init(0, 0, 64, 32, false, true, false, false);
|
||||
}
|
||||
|
||||
HumanoidModel::HumanoidModel(float g) : Model()
|
||||
{
|
||||
_init(g, 0, 64, 32, false, true, false);
|
||||
_init(g, 0, 64, 32, false, true, false, false);
|
||||
}
|
||||
|
||||
HumanoidModel::HumanoidModel(float g, bool isArmor) : Model()
|
||||
{
|
||||
_init(g, 0, 64, 32, false, true, false, isArmor);
|
||||
}
|
||||
|
||||
HumanoidModel::HumanoidModel(float g, float yOffset, int texWidth, int texHeight) : Model()
|
||||
{
|
||||
_init(g,yOffset,texWidth,texHeight, false, true, false);
|
||||
_init(g,yOffset,texWidth,texHeight, false, true, false, false);
|
||||
}
|
||||
|
||||
HumanoidModel::HumanoidModel(float g, float yOffset, int texWidth, int texHeight, bool slimHands) : Model()
|
||||
{
|
||||
_init(g,yOffset,texWidth,texHeight, slimHands, true, false);
|
||||
_init(g,yOffset,texWidth,texHeight, slimHands, true, false, false);
|
||||
}
|
||||
|
||||
HumanoidModel::HumanoidModel(float g, float yOffset, int texWidth, int texHeight, bool slimHands, bool mirror) : Model()
|
||||
{
|
||||
_init(g,yOffset,texWidth,texHeight, slimHands, mirror, false);
|
||||
_init(g,yOffset,texWidth,texHeight, slimHands, mirror, false, false);
|
||||
}
|
||||
|
||||
HumanoidModel::HumanoidModel(float g, float yOffset, int texWidth, int texHeight, bool slimHands, bool mirror, bool force32) : Model()
|
||||
{
|
||||
_init(g,yOffset,texWidth,texHeight, slimHands, mirror, force32);
|
||||
_init(g,yOffset,texWidth,texHeight, slimHands, mirror, force32, false);
|
||||
}
|
||||
|
||||
void HumanoidModel::render(shared_ptr<Entity> entity, float time, float r, float bob, float yRot, float xRot, float scale, bool usecompiled)
|
||||
|
|
@ -308,12 +325,12 @@ void HumanoidModel::render(shared_ptr<Entity> entity, float time, float r, float
|
|||
}
|
||||
else
|
||||
{
|
||||
head->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderHead))>0);
|
||||
body->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderTorso))>0);
|
||||
arm0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderArm0))>0);
|
||||
arm1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderArm1))>0);
|
||||
leg0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderLeg0))>0);
|
||||
leg1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderLeg1))>0);
|
||||
head->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderHead))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorHead))>0||!m_isArmor));
|
||||
body->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderTorso))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorTorso))>0||!m_isArmor));
|
||||
arm0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderArm0))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorArm0))>0||!m_isArmor));
|
||||
arm1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderArm1))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorArm1))>0||!m_isArmor));
|
||||
leg0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderLeg0))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorLeg0))>0||!m_isArmor));
|
||||
leg1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderLeg1))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorLeg1))>0||!m_isArmor));
|
||||
hair->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderHair))>0);
|
||||
|
||||
if (jacket)
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ public:
|
|||
float eating_swing;
|
||||
bool elytraFlying;
|
||||
bool elytraCrouching;
|
||||
bool m_isArmor;
|
||||
unsigned int m_uiAnimOverrideBitmask;
|
||||
float m_fYOffset;
|
||||
enum animbits
|
||||
|
|
@ -37,11 +38,20 @@ public:
|
|||
eAnim_DisableRenderLeg1,
|
||||
eAnim_DisableRenderHair,
|
||||
eAnim_SmallModel,
|
||||
eAnim_DisableRenderJacket,
|
||||
eAnim_DisableRenderSleeve0,
|
||||
eAnim_DisableRenderSleeve1,
|
||||
eAnim_DisableRenderPants0,
|
||||
eAnim_DisableRenderPants1
|
||||
eAnim_WideModel,
|
||||
eAnim_SlimModel,
|
||||
eAnim_DisableRenderSleeve1,
|
||||
eAnim_DisableRenderSleeve0,
|
||||
eAnim_DisableRenderPants1,
|
||||
eAnim_DisableRenderPants0,
|
||||
eAnim_DisableRenderJacket,
|
||||
eAnim_RenderArmorHead,
|
||||
eAnim_RenderArmorArm0,
|
||||
eAnim_RenderArmorArm1,
|
||||
eAnim_RenderArmorTorso,
|
||||
eAnim_RenderArmorLeg0,
|
||||
eAnim_RenderArmorLeg1,
|
||||
eAnim_Dinnerbone
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -60,10 +70,11 @@ public:
|
|||
(1 << HumanoidModel::eAnim_DisableRenderPants1);
|
||||
|
||||
void _init(float g, float yOffset, int texWidth, int texHeight,
|
||||
bool slimHands, bool mirror, bool force32);
|
||||
bool slimHands, bool mirror, bool force32, bool isArmor = false);
|
||||
|
||||
HumanoidModel();
|
||||
HumanoidModel(float g);
|
||||
HumanoidModel(float g, bool isArmor);
|
||||
HumanoidModel(float g, float yOffset, int texWidth, int texHeight);
|
||||
HumanoidModel(float g, float yOffset, int texWidth, int texHeight, bool slimHands);
|
||||
HumanoidModel(float g, float yOffset, int texWidth, int texHeight, bool slimHands, bool mirror);
|
||||
|
|
|
|||
|
|
@ -8,29 +8,23 @@
|
|||
#include "../Minecraft.World/Arrow.h"
|
||||
#include "../Minecraft.World/Mth.h"
|
||||
#include "../Minecraft.World/Player.h"
|
||||
#include "Skins.h"
|
||||
|
||||
|
||||
ResourceLocation LivingEntityRenderer::ENCHANT_GLINT_LOCATION = ResourceLocation(TN__BLUR__MISC_GLINT);
|
||||
int LivingEntityRenderer::MAX_ARMOR_LAYERS = 4;
|
||||
|
||||
LivingEntityRenderer::LivingEntityRenderer(Model *model, float shadow, bool slimHands, bool createNewVar)
|
||||
LivingEntityRenderer::LivingEntityRenderer(Model *model, float shadow, bool isPlayer)
|
||||
{
|
||||
this->model = model;
|
||||
|
||||
if (slimHands == true)
|
||||
this->modelSlim = new HumanoidModel(0, 0, 64, 32, true);
|
||||
|
||||
if (createNewVar)
|
||||
if (isPlayer)
|
||||
{
|
||||
this->newModel = new HumanoidModel(0, 0, 64, 64, false, false);
|
||||
|
||||
if (slimHands == true)
|
||||
this->newModelSlim = new HumanoidModel(0, 0, 64, 64, true, false);
|
||||
this->modelWide = new HumanoidModel(0, 0, 64, 64, false);
|
||||
this->modelSlim = new HumanoidModel(0, 0, 64, 64, true);
|
||||
}
|
||||
|
||||
shadowRadius = shadow;
|
||||
armor = nullptr;
|
||||
resModel = model;
|
||||
}
|
||||
|
||||
void LivingEntityRenderer::setArmor(Model *armor)
|
||||
|
|
@ -38,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;
|
||||
|
|
@ -56,8 +55,6 @@ void LivingEntityRenderer::render(shared_ptr<Entity> _mob, double x, double y, d
|
|||
}
|
||||
|
||||
shared_ptr<LivingEntity> mob = dynamic_pointer_cast<LivingEntity>(_mob);
|
||||
shared_ptr<Player> player = dynamic_pointer_cast<Player>(_mob);
|
||||
Model *resModel = static_cast<HumanoidModel *>(model);
|
||||
|
||||
if (mob == nullptr)
|
||||
{
|
||||
|
|
@ -67,30 +64,6 @@ void LivingEntityRenderer::render(shared_ptr<Entity> _mob, double x, double y, d
|
|||
glPushMatrix();
|
||||
glDisable(GL_CULL_FACE);
|
||||
|
||||
if (player != nullptr)
|
||||
{
|
||||
Textures *textures = Minecraft::GetInstance()->textures;
|
||||
int skinId = player->getPlayerDefaultSkin() - 1;
|
||||
int defaultSkin = player->getPlayerDefaultSkin() + 35;
|
||||
|
||||
if (slim[skinId] == true)
|
||||
{
|
||||
if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64)
|
||||
resModel = static_cast<HumanoidModel *>(newModelSlim);
|
||||
else
|
||||
resModel = static_cast<HumanoidModel *>(modelSlim);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64)
|
||||
resModel = static_cast<HumanoidModel *>(newModel);
|
||||
else
|
||||
resModel = static_cast<HumanoidModel *>(model);
|
||||
}
|
||||
}
|
||||
else
|
||||
resModel = static_cast<HumanoidModel *>(model);
|
||||
|
||||
resModel->attackTime = getAttackAnim(mob, a);
|
||||
if (armor != nullptr) armor->attackTime = resModel->attackTime;
|
||||
resModel->riding = mob->isRiding();
|
||||
|
|
@ -281,33 +254,6 @@ void LivingEntityRenderer::render(shared_ptr<Entity> _mob, double x, double y, d
|
|||
|
||||
void LivingEntityRenderer::renderModel(shared_ptr<LivingEntity> mob, float wp, float ws, float bob, float headRotMinusBodyRot, float headRotx, float scale)
|
||||
{
|
||||
shared_ptr<Player> player = dynamic_pointer_cast<Player>(mob);
|
||||
Model *resModel = static_cast<HumanoidModel *>(model);
|
||||
|
||||
if (player != nullptr)
|
||||
{
|
||||
Textures *textures = Minecraft::GetInstance()->textures;
|
||||
int skinId = player->getPlayerDefaultSkin() - 1;
|
||||
int defaultSkin = player->getPlayerDefaultSkin() + 35;
|
||||
|
||||
if (slim[skinId] == true)
|
||||
{
|
||||
if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64)
|
||||
resModel = static_cast<HumanoidModel *>(newModelSlim);
|
||||
else
|
||||
resModel = static_cast<HumanoidModel *>(modelSlim);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64)
|
||||
resModel = static_cast<HumanoidModel *>(newModel);
|
||||
else
|
||||
resModel = static_cast<HumanoidModel *>(model);
|
||||
}
|
||||
}
|
||||
else
|
||||
resModel = static_cast<HumanoidModel *>(model);
|
||||
|
||||
bindTexture(mob);
|
||||
if (!mob->isInvisible())
|
||||
{
|
||||
|
|
@ -351,7 +297,7 @@ void LivingEntityRenderer::setupRotations(shared_ptr<LivingEntity> mob, float bo
|
|||
else
|
||||
{
|
||||
wstring name = mob->getAName();
|
||||
if (name == L"Dinnerbone" || name == L"Grumm")
|
||||
if (name == L"Dinnerbone" || name == L"Grumm" || mob->getAnimOverrideBitmask() & (1 << HumanoidModel::eAnim_Dinnerbone))
|
||||
{
|
||||
if ( !mob->instanceof(eTYPE_PLAYER) || !dynamic_pointer_cast<Player>(mob)->isCapeHidden() )
|
||||
{
|
||||
|
|
@ -379,33 +325,6 @@ void LivingEntityRenderer::additionalRendering(shared_ptr<LivingEntity> mob, flo
|
|||
|
||||
void LivingEntityRenderer::renderArrows(shared_ptr<LivingEntity> mob, float a)
|
||||
{
|
||||
shared_ptr<Player> player = dynamic_pointer_cast<Player>(mob);
|
||||
Model *resModel = static_cast<HumanoidModel *>(model);
|
||||
|
||||
if (player != nullptr)
|
||||
{
|
||||
Textures *textures = Minecraft::GetInstance()->textures;
|
||||
int skinId = player->getPlayerDefaultSkin() - 1;
|
||||
int defaultSkin = player->getPlayerDefaultSkin() + 35;
|
||||
|
||||
if (slim[skinId] == true)
|
||||
{
|
||||
if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64)
|
||||
resModel = static_cast<HumanoidModel *>(newModelSlim);
|
||||
else
|
||||
resModel = static_cast<HumanoidModel *>(modelSlim);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64)
|
||||
resModel = static_cast<HumanoidModel *>(newModel);
|
||||
else
|
||||
resModel = static_cast<HumanoidModel *>(model);
|
||||
}
|
||||
}
|
||||
else
|
||||
resModel = static_cast<HumanoidModel *>(model);
|
||||
|
||||
int arrowCount = mob->getArrowCount();
|
||||
|
||||
if (arrowCount > 0)
|
||||
|
|
|
|||
|
|
@ -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 slimHands = 0, bool createNewVar = 0);
|
||||
LivingEntityRenderer(Model *model, float shadow, bool isPlayer = false);
|
||||
virtual void render(shared_ptr<Entity> 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);
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ void ModelPart::_init()
|
|||
bMirror = false;
|
||||
visible = true;
|
||||
neverRender = false;
|
||||
hideWithArmor = 0L;
|
||||
x=y=z = 0.0f;
|
||||
xRot=yRot=zRot = 0.0f;
|
||||
translateX = translateY = translateZ = 0.0f;
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ public:
|
|||
bool bMirror;
|
||||
bool visible;
|
||||
bool neverRender;
|
||||
unsigned int hideWithArmor;
|
||||
vector <Cube *> cubes;
|
||||
vector <ModelPart *> children;
|
||||
static const float RAD;
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@
|
|||
#include "../Minecraft.World/StringHelpers.h"
|
||||
#include "SkeletonHeadModel.h"
|
||||
#include "Textures.h"
|
||||
#include "Skins.h"
|
||||
|
||||
ResourceLocation PlayerRenderer::SKELETON_LOCATION = ResourceLocation(TN_MOB_SKELETON);
|
||||
ResourceLocation PlayerRenderer::WITHER_SKELETON_LOCATION = ResourceLocation(TN_MOB_WITHER_SKELETON);
|
||||
|
|
@ -64,16 +63,22 @@ static unsigned int nametagColorForIndex(int index)
|
|||
|
||||
ResourceLocation PlayerRenderer::DEFAULT_LOCATION = ResourceLocation(TN_MOB_CHAR);
|
||||
|
||||
PlayerRenderer::PlayerRenderer() : LivingEntityRenderer(new HumanoidModel(0), 0.5f, true, true)
|
||||
PlayerRenderer::PlayerRenderer() : LivingEntityRenderer( new HumanoidModel(0), 0.5f, true )
|
||||
{
|
||||
humanoidModel = static_cast<HumanoidModel*>(model);
|
||||
humanoidModelSlim = static_cast<HumanoidModel*>(modelSlim);
|
||||
newHumanoidModel = static_cast<HumanoidModel*>(newModel);
|
||||
newHumanoidModelSlim = static_cast<HumanoidModel*>(newModelSlim);
|
||||
humanoidModel = static_cast<HumanoidModel *>(model);
|
||||
humanoidModelWide = static_cast<HumanoidModel *>(modelWide);
|
||||
humanoidModelSlim = static_cast<HumanoidModel *>(modelSlim);
|
||||
|
||||
armorParts1 = new HumanoidModel(1.0f);
|
||||
armorParts2 = new HumanoidModel(0.5f);
|
||||
armorParts3 = new HumanoidModel(0.5f);
|
||||
armorParts1 = new HumanoidModel(1.0f, true);
|
||||
armorParts2 = new HumanoidModel(0.5f, true);
|
||||
armorParts3 = new HumanoidModel(0.5f, true);
|
||||
}
|
||||
|
||||
void PlayerRenderer::setModelType(shared_ptr<Player> 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)
|
||||
|
|
@ -87,6 +92,7 @@ int PlayerRenderer::prepareArmor(shared_ptr<LivingEntity> _player, int layer, fl
|
|||
{
|
||||
// 4J - dynamic cast required because we aren't using templates/generics in our version
|
||||
shared_ptr<Player> player = dynamic_pointer_cast<Player>(_player);
|
||||
setModelType(player);
|
||||
|
||||
// 4J-PB - need to disable rendering armour for some special skins (Daleks)
|
||||
unsigned int uiAnimOverrideBitmask = player->getAnimOverrideBitmask();
|
||||
|
|
@ -116,9 +122,9 @@ int PlayerRenderer::prepareArmor(shared_ptr<LivingEntity> _player, int layer, fl
|
|||
armor->leg1->visible = layer == 2 || layer == 3;
|
||||
|
||||
setArmor(armor);
|
||||
if (armor != nullptr) armor->attackTime = model->attackTime;
|
||||
if (armor != nullptr) armor->riding = model->riding;
|
||||
if (armor != nullptr) armor->young = model->young;
|
||||
if (armor != nullptr) armor->attackTime = resModel->attackTime;
|
||||
if (armor != nullptr) armor->riding = resModel->riding;
|
||||
if (armor != nullptr) armor->young = resModel->young;
|
||||
|
||||
float brightness = SharedConstants::TEXTURE_LIGHTING ? 1 : player->getBrightness(a);
|
||||
if (armorItem->getMaterial() == ArmorItem::ArmorMaterial::CLOTH)
|
||||
|
|
@ -221,38 +227,12 @@ void PlayerRenderer::render(shared_ptr<Entity> _mob, double x, double y, double
|
|||
|
||||
// 4J - dynamic cast required because we aren't using templates/generics in our version
|
||||
shared_ptr<Player> mob = dynamic_pointer_cast<Player>(_mob);
|
||||
HumanoidModel* resModel = static_cast<HumanoidModel*>(model);
|
||||
|
||||
if (mob == nullptr) return;
|
||||
if (mob->hasInvisiblePrivilege()) return;
|
||||
|
||||
if (mob != nullptr)
|
||||
{
|
||||
Textures* textures = Minecraft::GetInstance()->textures;
|
||||
int skinId = mob->getPlayerDefaultSkin() - 1;
|
||||
int defaultSkin = mob->getPlayerDefaultSkin() + 35;
|
||||
|
||||
if (slim[skinId] == true)
|
||||
{
|
||||
if (textures->getHeight(mob->customTextureUrl, defaultSkin) == 64)
|
||||
resModel = static_cast<HumanoidModel*>(newHumanoidModelSlim);
|
||||
else
|
||||
resModel = static_cast<HumanoidModel*>(humanoidModelSlim);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (textures->getHeight(mob->customTextureUrl, defaultSkin) == 64)
|
||||
resModel = static_cast<HumanoidModel*>(newHumanoidModel);
|
||||
else
|
||||
resModel = static_cast<HumanoidModel*>(humanoidModel);
|
||||
}
|
||||
}
|
||||
else
|
||||
resModel = static_cast<HumanoidModel*>(model);
|
||||
|
||||
/*if (mob != nullptr && newHumanoidModelSlim != nullptr && (mob->getCustomSkin() >= 10 && mob->getCustomSkin() <= 18)) resModel = newHumanoidModelSlim;
|
||||
else if (mob != nullptr && newHumanoidModel != nullptr && (mob->getCustomSkin() >= 2 && mob->getCustomSkin() <= 9)) resModel = newHumanoidModel;
|
||||
else resModel = humanoidModel;*/
|
||||
setModelType(mob);
|
||||
setPlayerModelType(resModel);
|
||||
|
||||
shared_ptr<ItemInstance> item = mob->inventory->getSelected();
|
||||
|
||||
|
|
@ -341,6 +321,12 @@ void PlayerRenderer::render(shared_ptr<Entity> _mob, double x, double y, double
|
|||
armorParts2->idle = false;
|
||||
}
|
||||
|
||||
// Get armor in armor slot so we can hide the armor layer of the skin - Langtanium
|
||||
shared_ptr<ItemInstance> itemHelmet = mob->inventory->getArmor(3);
|
||||
shared_ptr<ItemInstance> itemChestplate = mob->inventory->getArmor(2);
|
||||
shared_ptr<ItemInstance> itemLeggings = mob->inventory->getArmor(1);
|
||||
shared_ptr<ItemInstance> itemBoots = mob->inventory->getArmor(0);
|
||||
|
||||
// 4J-PB - any additional parts to turn on for this player (skin dependent)
|
||||
vector<ModelPart*>* pAdditionalModelParts = mob->GetAdditionalModelParts();
|
||||
//turn them on
|
||||
|
|
@ -348,7 +334,16 @@ void PlayerRenderer::render(shared_ptr<Entity> _mob, double x, double y, double
|
|||
{
|
||||
for (ModelPart* pModelPart : *pAdditionalModelParts)
|
||||
{
|
||||
pModelPart->visible = true;
|
||||
if (itemHelmet != nullptr && pModelPart->hideWithArmor & (1 << 0)) // Hide the skin boxes that have the "hide when helmet is worn" bit flag - Langtanium
|
||||
pModelPart->visible = false;
|
||||
else if (itemChestplate != nullptr && pModelPart->hideWithArmor & (1 << 1)) // Hide the skin boxes that have the "hide when chestplate is worn" bit flag - Langtanium
|
||||
pModelPart->visible = false;
|
||||
else if (itemLeggings != nullptr && pModelPart->hideWithArmor & (1 << 2)) // Hide the skin boxes that have the "hide when leggings are worn" bit flag - Langtanium
|
||||
pModelPart->visible = false;
|
||||
else if (itemBoots != nullptr && pModelPart->hideWithArmor & (1 << 3)) // Hide the skin boxes that have the "hide when boots are worn" bit flag - Langtanium
|
||||
pModelPart->visible = false;
|
||||
else
|
||||
pModelPart->visible = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -379,35 +374,7 @@ 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);
|
||||
HumanoidModel* resModel = static_cast<HumanoidModel*>(model);
|
||||
|
||||
if (mob != nullptr)
|
||||
{
|
||||
Textures* textures = Minecraft::GetInstance()->textures;
|
||||
int skinId = mob->getPlayerDefaultSkin() - 1;
|
||||
int defaultSkin = mob->getPlayerDefaultSkin() + 35;
|
||||
|
||||
if (slim[skinId] == true)
|
||||
{
|
||||
if (textures->getHeight(mob->customTextureUrl, defaultSkin) == 64)
|
||||
resModel = static_cast<HumanoidModel*>(newHumanoidModelSlim);
|
||||
else
|
||||
resModel = static_cast<HumanoidModel*>(humanoidModelSlim);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (textures->getHeight(mob->customTextureUrl, defaultSkin) == 64)
|
||||
resModel = static_cast<HumanoidModel*>(newHumanoidModel);
|
||||
else
|
||||
resModel = static_cast<HumanoidModel*>(humanoidModel);
|
||||
}
|
||||
}
|
||||
else
|
||||
resModel = static_cast<HumanoidModel*>(model);
|
||||
|
||||
/*if (mob != nullptr && newHumanoidModelSlim != nullptr && (mob->getCustomSkin() >= 10 && mob->getCustomSkin() <= 18)) resModel = newHumanoidModelSlim;
|
||||
else if (mob != nullptr && newHumanoidModel != nullptr && (mob->getCustomSkin() >= 2 && mob->getCustomSkin() <= 9)) resModel = newHumanoidModel;
|
||||
else resModel = humanoidModel;*/
|
||||
setModelType(mob);
|
||||
|
||||
shared_ptr<ItemInstance> headGear = mob->inventory->getArmor(3);
|
||||
if (headGear != nullptr)
|
||||
|
|
@ -741,35 +708,7 @@ void PlayerRenderer::scale(shared_ptr<LivingEntity> player, float a)
|
|||
void PlayerRenderer::renderHand()
|
||||
{
|
||||
shared_ptr<Player> player = dynamic_pointer_cast<Player>(Minecraft::GetInstance()->player);
|
||||
HumanoidModel* resModel = static_cast<HumanoidModel*>(model);
|
||||
|
||||
if (player != nullptr)
|
||||
{
|
||||
Textures* textures = Minecraft::GetInstance()->textures;
|
||||
int skinId = player->getPlayerDefaultSkin() - 1;
|
||||
int defaultSkin = player->getPlayerDefaultSkin() + 35;
|
||||
|
||||
if (slim[skinId] == true)
|
||||
{
|
||||
if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64)
|
||||
resModel = static_cast<HumanoidModel*>(newHumanoidModelSlim);
|
||||
else
|
||||
resModel = static_cast<HumanoidModel*>(humanoidModelSlim);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64)
|
||||
resModel = static_cast<HumanoidModel*>(newHumanoidModel);
|
||||
else
|
||||
resModel = static_cast<HumanoidModel*>(humanoidModel);
|
||||
}
|
||||
}
|
||||
else
|
||||
resModel = static_cast<HumanoidModel*>(model);
|
||||
|
||||
/*if (player != nullptr && newHumanoidModelSlim != nullptr && (player->getCustomSkin() >= 10 && player->getCustomSkin() <= 18)) resModel = newHumanoidModelSlim;
|
||||
else if (player != nullptr && newHumanoidModel != nullptr && (player->getCustomSkin() >= 2 && player->getCustomSkin() <= 9)) resModel = newHumanoidModel;
|
||||
else resModel = humanoidModel;*/
|
||||
setModelType(player);
|
||||
|
||||
float brightness = 1;
|
||||
glColor3f(brightness, brightness, brightness);
|
||||
|
|
@ -781,9 +720,12 @@ void PlayerRenderer::renderHand()
|
|||
// 4J-PB - does this skin have its arm0 disabled? (Dalek, etc)
|
||||
if ((resModel->m_uiAnimOverrideBitmask & (1 << HumanoidModel::eAnim_DisableRenderArm0)) == 0)
|
||||
resModel->arm0->render(1 / 16.0f, true);
|
||||
// Does this skin have its sleeve0 disabled?
|
||||
if ((resModel->m_uiAnimOverrideBitmask & (1 << HumanoidModel::eAnim_DisableRenderSleeve0)) == 0 && resModel->sleeve0 != nullptr)
|
||||
resModel->sleeve0->render(1 / 16.0f, true);
|
||||
|
||||
//Render custom skin boxes on viewmodel - Botch
|
||||
vector<ModelPart*>* additionalModelParts = Minecraft::GetInstance()->player->GetAdditionalModelParts();
|
||||
vector<ModelPart*>* additionalModelParts = player->GetAdditionalModelParts();
|
||||
if (!additionalModelParts) return; //If there are no custom boxes, return. This fixes bug where the game will crash if you select a skin with no additional boxes.
|
||||
vector<ModelPart*> armchildren = resModel->arm0->children;
|
||||
std::unordered_set<ModelPart*> additionalModelPartSet(additionalModelParts->begin(), additionalModelParts->end());
|
||||
|
|
@ -801,6 +743,25 @@ void PlayerRenderer::renderHand()
|
|||
}
|
||||
}
|
||||
}
|
||||
//Render custom skin boxes on viewmodel for sleeve0
|
||||
if (resModel->sleeve0!=nullptr)
|
||||
{
|
||||
vector<ModelPart*> sleevechildren = resModel->sleeve0->children;
|
||||
for (const auto& x : sleevechildren) {
|
||||
if (x) {
|
||||
if (additionalModelPartSet.find(x) != additionalModelPartSet.end()) { //This is to verify box is still actually on current skin
|
||||
glPushMatrix();
|
||||
//We need to transform to match offset of arm/sleeve
|
||||
glTranslatef(-5 * 0.0625f, 2 * 0.0625f, 0);
|
||||
glRotatef(0.1 * (180.0f / PI), 0, 0, 1);
|
||||
x->visible = true;
|
||||
x->render(1.0f / 16.0f, true);
|
||||
x->visible = false;
|
||||
glPopMatrix();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PlayerRenderer::setupPosition(shared_ptr<LivingEntity> _mob, double x, double y, double z)
|
||||
|
|
@ -857,7 +818,7 @@ void PlayerRenderer::setupRotations(shared_ptr<LivingEntity> _mob, float bob, fl
|
|||
}
|
||||
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
LivingEntityRenderer::setupRotations(mob, bob, bodyRot, a);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,9 +14,9 @@ public:
|
|||
|
||||
private:
|
||||
HumanoidModel *humanoidModel;
|
||||
HumanoidModel *humanoidModelWide;
|
||||
HumanoidModel *humanoidModelSlim;
|
||||
HumanoidModel *newHumanoidModel;
|
||||
HumanoidModel *newHumanoidModelSlim;
|
||||
HumanoidModel *resModel;
|
||||
|
||||
HumanoidModel *armorParts1;
|
||||
HumanoidModel *armorParts2;
|
||||
|
|
@ -38,6 +38,7 @@ private:
|
|||
static const wstring MATERIAL_NAMES[5];
|
||||
|
||||
protected:
|
||||
virtual void setModelType(shared_ptr<Player> player);
|
||||
virtual int prepareArmor(shared_ptr<LivingEntity> _player, int layer, float a);
|
||||
virtual void prepareSecondPassArmor(shared_ptr<LivingEntity> mob, int layer, float a);
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,6 @@ enum eBodyPart
|
|||
typedef struct
|
||||
{
|
||||
eBodyPart ePart;
|
||||
float fX,fY,fZ,fW,fH,fD,fU,fV;
|
||||
float fX,fY,fZ,fW,fH,fD,fU,fV,fA,fM,fS;
|
||||
}
|
||||
SKIN_BOX;
|
||||
|
|
|
|||
|
|
@ -1,29 +0,0 @@
|
|||
#pragma once
|
||||
#include <map>
|
||||
using namespace std;
|
||||
|
||||
class AABB;
|
||||
class Recipy;
|
||||
class Object;
|
||||
|
||||
static std::map<int, bool> slim = {
|
||||
{ 0, false },
|
||||
{ 1, false },
|
||||
{ 2, false },
|
||||
{ 3, false },
|
||||
{ 4, false },
|
||||
{ 5, false },
|
||||
{ 6, false },
|
||||
{ 7, false },
|
||||
{ 8, false },
|
||||
{ 9, true },
|
||||
{ 10, true },
|
||||
{ 11, true },
|
||||
{ 12, true },
|
||||
{ 13, true },
|
||||
{ 14, true },
|
||||
{ 15, true },
|
||||
{ 16, true },
|
||||
{ 17, true },
|
||||
{ 18, true },
|
||||
};
|
||||
|
|
@ -72,16 +72,16 @@ const wchar_t *Textures::preLoaded[TN_COUNT] =
|
|||
L"mob/char5",
|
||||
L"mob/char6",
|
||||
L"mob/char7",
|
||||
L"mob/char8",
|
||||
L"mob/char9",
|
||||
L"mob/char10",
|
||||
L"mob/char11",
|
||||
L"mob/char12",
|
||||
L"mob/char13",
|
||||
L"mob/char14",
|
||||
L"mob/char15",
|
||||
L"mob/char16",
|
||||
L"mob/char17",
|
||||
L"mob/alex",
|
||||
L"mob/alex1",
|
||||
L"mob/alex2",
|
||||
L"mob/alex3",
|
||||
L"mob/alex4",
|
||||
L"mob/alex5",
|
||||
L"mob/alex6",
|
||||
L"mob/alex7",
|
||||
L"mob/DevAlex",
|
||||
L"mob/DevSteve",
|
||||
L"terrain/moon",
|
||||
L"terrain/sun",
|
||||
L"armor/power",
|
||||
|
|
@ -1697,16 +1697,16 @@ TEXTURE_NAME OriginalImages[] =
|
|||
TN_MOB_CHAR5,
|
||||
TN_MOB_CHAR6,
|
||||
TN_MOB_CHAR7,
|
||||
TN_MOB_CHAR8,
|
||||
TN_MOB_CHAR9,
|
||||
TN_MOB_CHAR10,
|
||||
TN_MOB_CHAR11,
|
||||
TN_MOB_CHAR12,
|
||||
TN_MOB_CHAR13,
|
||||
TN_MOB_CHAR14,
|
||||
TN_MOB_CHAR15,
|
||||
TN_MOB_CHAR16,
|
||||
TN_MOB_CHAR17,
|
||||
TN_MOB_ALEX,
|
||||
TN_MOB_ALEX1,
|
||||
TN_MOB_ALEX2,
|
||||
TN_MOB_ALEX3,
|
||||
TN_MOB_ALEX4,
|
||||
TN_MOB_ALEX5,
|
||||
TN_MOB_ALEX6,
|
||||
TN_MOB_ALEX7,
|
||||
TN_MOB_DEVALEX,
|
||||
TN_MOB_DEVSTEVE,
|
||||
|
||||
TN_MISC_MAPBG,
|
||||
|
||||
|
|
|
|||
|
|
@ -63,16 +63,16 @@ typedef enum _TEXTURE_NAME
|
|||
TN_MOB_CHAR5,
|
||||
TN_MOB_CHAR6,
|
||||
TN_MOB_CHAR7,
|
||||
TN_MOB_CHAR8,
|
||||
TN_MOB_CHAR9,
|
||||
TN_MOB_CHAR10,
|
||||
TN_MOB_CHAR11,
|
||||
TN_MOB_CHAR12,
|
||||
TN_MOB_CHAR13,
|
||||
TN_MOB_CHAR14,
|
||||
TN_MOB_CHAR15,
|
||||
TN_MOB_CHAR16,
|
||||
TN_MOB_CHAR17,
|
||||
TN_MOB_ALEX,
|
||||
TN_MOB_ALEX1,
|
||||
TN_MOB_ALEX2,
|
||||
TN_MOB_ALEX3,
|
||||
TN_MOB_ALEX4,
|
||||
TN_MOB_ALEX5,
|
||||
TN_MOB_ALEX6,
|
||||
TN_MOB_ALEX7,
|
||||
TN_MOB_DEVALEX,
|
||||
TN_MOB_DEVSTEVE,
|
||||
TN_TERRAIN_MOON,
|
||||
TN_TERRAIN_SUN,
|
||||
TN_POWERED_CREEPER,
|
||||
|
|
|
|||
|
|
@ -727,6 +727,22 @@ void Player::setCustomSkin(DWORD skinId)
|
|||
|
||||
}
|
||||
|
||||
int Player::GetModelTypeFromAnimBitmask(unsigned int uiAnimOverrideBitmask)
|
||||
{
|
||||
if (uiAnimOverrideBitmask&(1<<HumanoidModel::eAnim_SlimModel)) return 2;
|
||||
else if (uiAnimOverrideBitmask&(1<<HumanoidModel::eAnim_WideModel)) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Player::GetModelTypeFromTextureId(int textureId)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
unsigned int Player::getSkinAnimOverrideBitmask(DWORD skinId)
|
||||
{
|
||||
unsigned long bitmask = 0L;
|
||||
|
|
@ -2903,25 +2919,25 @@ int Player::getTexture()
|
|||
case eDefaultSkins_Skin7:
|
||||
return TN_MOB_CHAR7; // 4J - was L"/mob/char7.png";
|
||||
case eDefaultSkins_Skin8:
|
||||
return TN_MOB_CHAR8; // 4J - was L"/mob/char8.png";
|
||||
return TN_MOB_ALEX; // 4J - was L"/mob/alex.png";
|
||||
case eDefaultSkins_Skin9:
|
||||
return TN_MOB_CHAR9; // 4J - was L"/mob/char9.png";
|
||||
return TN_MOB_ALEX1; // 4J - was L"/mob/alex1.png";
|
||||
case eDefaultSkins_Skin10:
|
||||
return TN_MOB_CHAR10; // 4J - was L"/mob/char10.png";
|
||||
return TN_MOB_ALEX2; // 4J - was L"/mob/alex2.png";
|
||||
case eDefaultSkins_Skin11:
|
||||
return TN_MOB_CHAR11; // 4J - was L"/mob/char11.png";
|
||||
return TN_MOB_ALEX3; // 4J - was L"/mob/alex3.png";
|
||||
case eDefaultSkins_Skin12:
|
||||
return TN_MOB_CHAR12; // 4J - was L"/mob/char12.png";
|
||||
return TN_MOB_ALEX4; // 4J - was L"/mob/alex4.png";
|
||||
case eDefaultSkins_Skin13:
|
||||
return TN_MOB_CHAR13; // 4J - was L"/mob/char13.png";
|
||||
return TN_MOB_ALEX5; // 4J - was L"/mob/alex5.png";
|
||||
case eDefaultSkins_Skin14:
|
||||
return TN_MOB_CHAR14; // 4J - was L"/mob/char14.png";
|
||||
return TN_MOB_ALEX6; // 4J - was L"/mob/alex6.png";
|
||||
case eDefaultSkins_Skin15:
|
||||
return TN_MOB_CHAR15; // 4J - was L"/mob/char15.png";
|
||||
return TN_MOB_ALEX7; // 4J - was L"/mob/alex7.png";
|
||||
case eDefaultSkins_Skin16:
|
||||
return TN_MOB_CHAR16; // 4J - was L"/mob/char16.png";
|
||||
return TN_MOB_DEVALEX; // 4J - was L"/mob/DevAlex.png";
|
||||
case eDefaultSkins_Skin17:
|
||||
return TN_MOB_CHAR17; // 4J - was L"/mob/char17.png";
|
||||
return TN_MOB_DEVSTEVE; // 4J - was L"/mob/DevSteve.png";
|
||||
|
||||
default:
|
||||
return TN_MOB_CHAR; // 4J - was L"/mob/char.png";
|
||||
|
|
|
|||
|
|
@ -442,6 +442,8 @@ public:
|
|||
static DWORD getCapeIdFromPath(const wstring &cape);
|
||||
static wstring getCapePathFromId(DWORD capeId);
|
||||
static unsigned int getSkinAnimOverrideBitmask(DWORD skinId);
|
||||
static int GetModelTypeFromAnimBitmask(unsigned int uiAnimOverrideBitmask);
|
||||
static int GetModelTypeFromTextureId(int textureId);
|
||||
|
||||
// 4J Added
|
||||
void setXuid(PlayerUID xuid);
|
||||
|
|
|
|||
|
|
@ -177,6 +177,9 @@ void TextureAndGeometryPacket::read(DataInputStream *dis) //throws IOException
|
|||
this->BoxDataA[i].fD = dis->readFloat();
|
||||
this->BoxDataA[i].fU = dis->readFloat();
|
||||
this->BoxDataA[i].fV = dis->readFloat();
|
||||
this->BoxDataA[i].fA = dis->readFloat();
|
||||
this->BoxDataA[i].fM = dis->readFloat();
|
||||
this->BoxDataA[i].fS = dis->readFloat();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -203,6 +206,9 @@ void TextureAndGeometryPacket::write(DataOutputStream *dos) //throws IOException
|
|||
dos->writeFloat(this->BoxDataA[i].fD);
|
||||
dos->writeFloat(this->BoxDataA[i].fU);
|
||||
dos->writeFloat(this->BoxDataA[i].fV);
|
||||
dos->writeFloat(this->BoxDataA[i].fA);
|
||||
dos->writeFloat(this->BoxDataA[i].fM);
|
||||
dos->writeFloat(this->BoxDataA[i].fS);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||