mirror of
https://github.com/smartcmd/MinecraftConsoles.git
synced 2026-04-28 18:05:14 +00:00
Added more skin offset code
Added another offset enum for the helmet offset, fixed renderUIOffset() function not rendering skins that didn't have an offset, and added more code for offsets.
This commit is contained in:
parent
cef65c8df3
commit
e0cf6f23c1
|
|
@ -113,7 +113,7 @@ void DLCSkinFile::addParameter(DLCManager::EDLCParameterType type, const wstring
|
|||
WCHAR wchBodyPart[10];
|
||||
SKIN_BOX *pSkinBox = new SKIN_BOX;
|
||||
ZeroMemory(pSkinBox,sizeof(SKIN_BOX));
|
||||
|
||||
|
||||
#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%f%f%f", wchBodyPart,
|
||||
|
|
@ -305,6 +305,10 @@ void DLCSkinFile::addParameter(DLCManager::EDLCParameterType type, const wstring
|
|||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Pants1;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"HELMET")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Helmet;
|
||||
}
|
||||
else if(wcscmp(wchBodyPart,L"WAIST")==0)
|
||||
{
|
||||
pSkinOffset->ePart=eBodyOffset_Waist;
|
||||
|
|
|
|||
|
|
@ -367,10 +367,8 @@ void UIControl_PlayerSkinPreview::render(EntityRenderer *renderer, double x, dou
|
|||
glEnable(GL_ALPHA_TEST);
|
||||
|
||||
//model->prepareMobModel(mob, wp, ws, a);
|
||||
if (m_pvModelOffsets != nullptr) // If the skin has offsets use a modified version of the render function
|
||||
model->renderUIOffset(wp, ws, bob, headRot - bodyRot, headRotx, _scale, true, m_pvModelOffsets);
|
||||
else // If the skin has no offsets use the default render function (without this all skins that don't have an offset won't render)
|
||||
model->render(nullptr, wp, ws, bob, headRot - bodyRot, headRotx, _scale, true);
|
||||
// Using a modified version of the render function to render offsts is skin select menu
|
||||
model->renderUIOffset(wp, ws, bob, headRot - bodyRot, headRotx, _scale, true, m_pvModelOffsets);
|
||||
/*for (int i = 0; i < MAX_ARMOR_LAYERS; i++)
|
||||
{
|
||||
if (prepareArmor(mob, i, a))
|
||||
|
|
|
|||
|
|
@ -402,85 +402,54 @@ void HumanoidModel::render(shared_ptr<Entity> entity, float time, float r, float
|
|||
{
|
||||
case eBodyOffset_Head:
|
||||
if(pModelOffset->fD == 1)
|
||||
headOffsets[0] = pModelOffset->fO / 16.0f;
|
||||
headOffsets[0] += pModelOffset->fO / 16.0f;
|
||||
else if(pModelOffset->fD == 2)
|
||||
headOffsets[1] = pModelOffset->fO / 16.0f;
|
||||
headOffsets[1] += pModelOffset->fO / 16.0f;
|
||||
else if(pModelOffset->fD == 3)
|
||||
headOffsets[2] = pModelOffset->fO / 16.0f;
|
||||
headOffsets[2] += pModelOffset->fO / 16.0f;
|
||||
break;
|
||||
case eBodyOffset_Body:
|
||||
if(pModelOffset->fD == 1)
|
||||
bodyOffsets[0] = pModelOffset->fO / 16.0f;
|
||||
bodyOffsets[0] += pModelOffset->fO / 16.0f;
|
||||
else if(pModelOffset->fD == 2)
|
||||
bodyOffsets[1] = pModelOffset->fO / 16.0f;
|
||||
bodyOffsets[1] += pModelOffset->fO / 16.0f;
|
||||
else if(pModelOffset->fD == 3)
|
||||
bodyOffsets[2] = pModelOffset->fO / 16.0f;
|
||||
bodyOffsets[2] += pModelOffset->fO / 16.0f;
|
||||
break;
|
||||
case eBodyOffset_Arm0:
|
||||
if(pModelOffset->fD == 1)
|
||||
arm0Offsets[0] = pModelOffset->fO / 16.0f;
|
||||
arm0Offsets[0] += pModelOffset->fO / 16.0f;
|
||||
else if(pModelOffset->fD == 2)
|
||||
arm0Offsets[1] = pModelOffset->fO / 16.0f;
|
||||
arm0Offsets[1] += pModelOffset->fO / 16.0f;
|
||||
else if(pModelOffset->fD == 3)
|
||||
arm0Offsets[2] = pModelOffset->fO / 16.0f;
|
||||
arm0Offsets[2] += pModelOffset->fO / 16.0f;
|
||||
break;
|
||||
case eBodyOffset_Arm1:
|
||||
if(pModelOffset->fD == 1)
|
||||
arm1Offsets[0] = pModelOffset->fO / 16.0f;
|
||||
arm1Offsets[0] += pModelOffset->fO / 16.0f;
|
||||
else if(pModelOffset->fD == 2)
|
||||
arm1Offsets[1] = pModelOffset->fO / 16.0f;
|
||||
arm1Offsets[1] += pModelOffset->fO / 16.0f;
|
||||
else if(pModelOffset->fD == 3)
|
||||
arm1Offsets[2] = pModelOffset->fO / 16.0f;
|
||||
arm1Offsets[2] += pModelOffset->fO / 16.0f;
|
||||
break;
|
||||
case eBodyOffset_Leg0:
|
||||
if(pModelOffset->fD == 1)
|
||||
leg0Offsets[0] = pModelOffset->fO / 16.0f;
|
||||
leg0Offsets[0] += pModelOffset->fO / 16.0f;
|
||||
else if(pModelOffset->fD == 2)
|
||||
leg0Offsets[1] = pModelOffset->fO / 16.0f;
|
||||
leg0Offsets[1] += pModelOffset->fO / 16.0f;
|
||||
else if(pModelOffset->fD == 3)
|
||||
leg0Offsets[2] = pModelOffset->fO / 16.0f;
|
||||
leg0Offsets[2] += pModelOffset->fO / 16.0f;
|
||||
break;
|
||||
case eBodyOffset_Leg1:
|
||||
if(pModelOffset->fD == 1)
|
||||
leg1Offsets[0] = pModelOffset->fO / 16.0f;
|
||||
leg1Offsets[0] += pModelOffset->fO / 16.0f;
|
||||
else if(pModelOffset->fD == 2)
|
||||
leg1Offsets[1] = pModelOffset->fO / 16.0f;
|
||||
leg1Offsets[1] += pModelOffset->fO / 16.0f;
|
||||
else if(pModelOffset->fD == 3)
|
||||
leg1Offsets[2] = pModelOffset->fO / 16.0f;
|
||||
leg1Offsets[2] += pModelOffset->fO / 16.0f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (m_isArmor) // Set offsets for armor
|
||||
{
|
||||
for( SKIN_OFFSET *pModelOffset : *pModelOffsets )
|
||||
{
|
||||
switch (pModelOffset->ePart)
|
||||
{
|
||||
case eBodyOffset_Boot0:
|
||||
if (leg0->isArmorPart1)
|
||||
{
|
||||
if(pModelOffset->fD == 1)
|
||||
leg0Offsets[0] += pModelOffset->fO / 16.0f;
|
||||
else if(pModelOffset->fD == 2)
|
||||
leg0Offsets[1] += pModelOffset->fO / 16.0f;
|
||||
else if(pModelOffset->fD == 3)
|
||||
leg0Offsets[2] += pModelOffset->fO / 16.0f;
|
||||
}
|
||||
break;
|
||||
case eBodyOffset_Boot1:
|
||||
if (leg1->isArmorPart1)
|
||||
{
|
||||
if(pModelOffset->fD == 1)
|
||||
leg1Offsets[0] += pModelOffset->fO / 16.0f;
|
||||
else if(pModelOffset->fD == 2)
|
||||
leg1Offsets[1] += pModelOffset->fO / 16.0f;
|
||||
else if(pModelOffset->fD == 3)
|
||||
leg1Offsets[2] += pModelOffset->fO / 16.0f;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
glPushMatrix();
|
||||
|
|
@ -549,25 +518,65 @@ void HumanoidModel::render(shared_ptr<Entity> entity, float time, float r, float
|
|||
if (waist != 0)
|
||||
waist->render(scale, usecompiled);
|
||||
if (belt != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(bodyOffsets[0], bodyOffsets[1], bodyOffsets[2]);
|
||||
belt->render(scale, usecompiled);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (bodyArmor != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(bodyOffsets[0], bodyOffsets[1], bodyOffsets[2]);
|
||||
bodyArmor->render(scale, usecompiled);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (armArmor0 != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(arm0Offsets[0], arm0Offsets[1], arm0Offsets[2]);
|
||||
armArmor0->render(scale, usecompiled);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (armArmor1 != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(arm1Offsets[0], arm1Offsets[1], arm1Offsets[2]);
|
||||
armArmor1->render(scale, usecompiled);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (legging0 != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(leg0Offsets[0], leg0Offsets[1], leg0Offsets[2]);
|
||||
legging0->render(scale, usecompiled);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (legging1 != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(leg1Offsets[0], leg1Offsets[1], leg1Offsets[2]);
|
||||
legging1->render(scale, usecompiled);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (sock0 != 0)
|
||||
sock0->render(scale, usecompiled);
|
||||
if (sock1 != 0)
|
||||
sock1->render(scale, usecompiled);
|
||||
if (boot0 != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(leg0Offsets[0], leg0Offsets[1], leg0Offsets[2]);
|
||||
boot0->render(scale, usecompiled);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (boot1 != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(leg1Offsets[0], leg1Offsets[1], leg1Offsets[2]);
|
||||
boot1->render(scale, usecompiled);
|
||||
glPopMatrix();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -641,93 +650,134 @@ void HumanoidModel::renderUIOffset(float time, float r, float bob, float yRot, f
|
|||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
glPushMatrix();
|
||||
glTranslatef(headOffsets[0], headOffsets[1], headOffsets[2]);
|
||||
head->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderHead))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorHead))>0||!m_isArmor));
|
||||
glPopMatrix();
|
||||
glPushMatrix();
|
||||
glTranslatef(headOffsets[0], headOffsets[1], headOffsets[2]);
|
||||
head->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderHead))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorHead))>0||!m_isArmor));
|
||||
glPopMatrix();
|
||||
glPushMatrix();
|
||||
glTranslatef(bodyOffsets[0], bodyOffsets[1], bodyOffsets[2]);
|
||||
body->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderTorso))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorTorso))>0||!m_isArmor));
|
||||
glPopMatrix();
|
||||
glPushMatrix();
|
||||
glTranslatef(arm0Offsets[0], arm0Offsets[1], arm0Offsets[2]);
|
||||
arm0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderArm0))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorArm0))>0||!m_isArmor));
|
||||
glPopMatrix();
|
||||
glPushMatrix();
|
||||
glTranslatef(arm1Offsets[0], arm1Offsets[1], arm1Offsets[2]);
|
||||
arm1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderArm1))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorArm1))>0||!m_isArmor));
|
||||
glPopMatrix();
|
||||
glPushMatrix();
|
||||
glTranslatef(leg0Offsets[0], leg0Offsets[1], leg0Offsets[2]);
|
||||
leg0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderLeg0))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorLeg0))>0||!m_isArmor));
|
||||
glPopMatrix();
|
||||
glPushMatrix();
|
||||
glTranslatef(leg1Offsets[0], leg1Offsets[1], leg1Offsets[2]);
|
||||
leg1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderLeg1))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorLeg1))>0||!m_isArmor));
|
||||
glPopMatrix();
|
||||
glPushMatrix();
|
||||
glTranslatef(headOffsets[0], headOffsets[1], headOffsets[2]);
|
||||
hair->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderHair))>0);
|
||||
glPopMatrix();
|
||||
if (jacket != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(bodyOffsets[0], bodyOffsets[1], bodyOffsets[2]);
|
||||
body->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderTorso))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorTorso))>0||!m_isArmor));
|
||||
jacket->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderJacket))>0);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (sleeve0 != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(arm0Offsets[0], arm0Offsets[1], arm0Offsets[2]);
|
||||
arm0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderArm0))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorArm0))>0||!m_isArmor));
|
||||
sleeve0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderSleeve0))>0);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (sleeve1 != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(arm1Offsets[0], arm1Offsets[1], arm1Offsets[2]);
|
||||
arm1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderArm1))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorArm1))>0||!m_isArmor));
|
||||
sleeve1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderSleeve1))>0);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (pants0 != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(leg0Offsets[0], leg0Offsets[1], leg0Offsets[2]);
|
||||
leg0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderLeg0))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorLeg0))>0||!m_isArmor));
|
||||
pants0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderPants0))>0);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (pants1 != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(leg0Offsets[0], leg0Offsets[1], leg0Offsets[2]);
|
||||
pants1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderPants1))>0);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (waist != 0)
|
||||
waist->render(scale, usecompiled);
|
||||
if (belt != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(bodyOffsets[0], bodyOffsets[1], bodyOffsets[2]);
|
||||
belt->render(scale, usecompiled);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (bodyArmor != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(bodyOffsets[0], bodyOffsets[1], bodyOffsets[2]);
|
||||
bodyArmor->render(scale, usecompiled);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (armArmor0 != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(arm0Offsets[0], arm0Offsets[1], arm0Offsets[2]);
|
||||
armArmor0->render(scale, usecompiled);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (armArmor1 != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(arm1Offsets[0], arm1Offsets[1], arm1Offsets[2]);
|
||||
armArmor1->render(scale, usecompiled);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (legging0 != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(leg0Offsets[0], leg0Offsets[1], leg0Offsets[2]);
|
||||
legging0->render(scale, usecompiled);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (legging1 != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(leg1Offsets[0], leg1Offsets[1], leg1Offsets[2]);
|
||||
leg1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderLeg1))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorLeg1))>0||!m_isArmor));
|
||||
legging1->render(scale, usecompiled);
|
||||
glPopMatrix();
|
||||
glPushMatrix();
|
||||
glTranslatef(headOffsets[0], headOffsets[1], headOffsets[2]);
|
||||
hair->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderHair))>0);
|
||||
glPopMatrix();
|
||||
if (jacket != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(bodyOffsets[0], bodyOffsets[1], bodyOffsets[2]);
|
||||
jacket->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderJacket))>0);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (sleeve0 != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(arm0Offsets[0], arm0Offsets[1], arm0Offsets[2]);
|
||||
sleeve0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderSleeve0))>0);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (sleeve1 != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(arm1Offsets[0], arm1Offsets[1], arm1Offsets[2]);
|
||||
sleeve1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderSleeve1))>0);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (pants0 != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(leg0Offsets[0], leg0Offsets[1], leg0Offsets[2]);
|
||||
pants0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderPants0))>0);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (pants1 != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(leg0Offsets[0], leg0Offsets[1], leg0Offsets[2]);
|
||||
pants1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderPants1))>0);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (waist != 0)
|
||||
waist->render(scale, usecompiled);
|
||||
if (belt != 0)
|
||||
belt->render(scale, usecompiled);
|
||||
if (bodyArmor != 0)
|
||||
bodyArmor->render(scale, usecompiled);
|
||||
if (armArmor0 != 0)
|
||||
armArmor0->render(scale, usecompiled);
|
||||
if (armArmor1 != 0)
|
||||
armArmor1->render(scale, usecompiled);
|
||||
if (legging0 != 0)
|
||||
legging0->render(scale, usecompiled);
|
||||
if (legging1 != 0)
|
||||
legging1->render(scale, usecompiled);
|
||||
if (sock0 != 0)
|
||||
sock0->render(scale, usecompiled);
|
||||
if (sock1 != 0)
|
||||
sock1->render(scale, usecompiled);
|
||||
if (boot0 != 0)
|
||||
boot0->render(scale, usecompiled);
|
||||
if (boot1 != 0)
|
||||
boot1->render(scale, usecompiled);
|
||||
}
|
||||
if (sock0 != 0)
|
||||
sock0->render(scale, usecompiled);
|
||||
if (sock1 != 0)
|
||||
sock1->render(scale, usecompiled);
|
||||
if (boot0 != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(leg0Offsets[0], leg0Offsets[1], leg0Offsets[2]);
|
||||
boot0->render(scale, usecompiled);
|
||||
glPopMatrix();
|
||||
}
|
||||
if (boot1 != 0)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(leg1Offsets[0], leg1Offsets[1], leg1Offsets[2]);
|
||||
boot1->render(scale, usecompiled);
|
||||
glPopMatrix();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void HumanoidModel::setupAnim(float time, float r, float bob, float yRot, float xRot, float scale, shared_ptr<Entity> entity, unsigned int uiBitmaskOverrideAnim)
|
||||
|
|
@ -735,6 +785,99 @@ void HumanoidModel::setupAnim(float time, float r, float bob, float yRot, float
|
|||
//bool bIsAttacking = (attackTime > -9990.0f);
|
||||
|
||||
{
|
||||
/* Code to get armor offsets, not fully implemented yet. Directly applying the offsets
|
||||
causes the armor pivot points to not aline with the player model pivot points. Some math
|
||||
is requied to properly rotate the armor pivot points around the player model pivot points - Langtanium*/
|
||||
vector<float> headOffsets = {0, 0, 0};
|
||||
vector<float> bodyOffsets = {0, 0, 0};
|
||||
vector<float> arm0Offsets = {0, 0, 0};
|
||||
vector<float> arm1Offsets = {0, 0, 0};
|
||||
vector<float> leg0Offsets = {0, 0, 0};
|
||||
vector<float> leg1Offsets = {0, 0, 0};
|
||||
if (m_isArmor)
|
||||
{
|
||||
shared_ptr<Player> player = dynamic_pointer_cast<Player>(entity);
|
||||
vector<SKIN_OFFSET *>* pModelOffsets = nullptr;
|
||||
if (player != nullptr)
|
||||
pModelOffsets = player->GetModelOffsets();
|
||||
if (pModelOffsets != nullptr)
|
||||
{
|
||||
for( SKIN_OFFSET *pModelOffset : *pModelOffsets )
|
||||
{
|
||||
switch (pModelOffset->ePart)
|
||||
{
|
||||
case eBodyOffset_Helmet:
|
||||
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;
|
||||
case eBodyOffset_Belt:
|
||||
if (!body->isArmorPart1)
|
||||
{
|
||||
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_BodyArmor:
|
||||
if (body->isArmorPart1)
|
||||
{
|
||||
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_ArmArmor0:
|
||||
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_ArmArmor1:
|
||||
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_Boot0:
|
||||
if (leg0->isArmorPart1)
|
||||
{
|
||||
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_Boot1:
|
||||
if (leg1->isArmorPart1)
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
head->yRot = yRot / (float) (180.0f / PI);
|
||||
head->xRot = xRot / (float) (180.0f / PI);
|
||||
hair->yRot = head->yRot;
|
||||
|
|
@ -959,6 +1102,13 @@ void HumanoidModel::setupAnim(float time, float r, float bob, float yRot, float
|
|||
body->y = 0.0f;
|
||||
arm0->y = 2.0f;
|
||||
arm1->y = 2.0f;
|
||||
/*if (m_isArmor) // If armor apply helmet offset using some math, needs to be refined - Langtanium
|
||||
{
|
||||
head->x = headOffsets[1] * sin(yRot / (float) (180.0f / PI)) * sin(xRot / (float) (180.0f / PI));
|
||||
head->y = headOffsets[1] * cos(xRot / (float) (180.0f / PI));
|
||||
head->z = headOffsets[1] * sin(xRot / (float) (180.0f / PI)) - headOffsets[1] * abs(sin(yRot / (float) (180.0f / PI))) * sin(xRot / (float) (180.0f / PI));
|
||||
}
|
||||
else*/
|
||||
head->y = 0.0f;
|
||||
hair->y = 0.0f;
|
||||
ear->y = 1.0f;
|
||||
|
|
@ -998,7 +1148,6 @@ void HumanoidModel::setupAnim(float time, float r, float bob, float yRot, float
|
|||
jacket->z = body->z;
|
||||
jacket->xRot = body->xRot;
|
||||
jacket->yRot = body->yRot;
|
||||
jacket->zRot = body->zRot;
|
||||
}
|
||||
if (sleeve0 != 0)
|
||||
{
|
||||
|
|
@ -1043,7 +1192,6 @@ void HumanoidModel::setupAnim(float time, float r, float bob, float yRot, float
|
|||
waist->z = body->z;
|
||||
waist->xRot = body->xRot;
|
||||
waist->yRot = body->yRot;
|
||||
waist->zRot = body->zRot;
|
||||
}
|
||||
if (belt != 0)
|
||||
{
|
||||
|
|
@ -1052,7 +1200,6 @@ void HumanoidModel::setupAnim(float time, float r, float bob, float yRot, float
|
|||
belt->z = body->z;
|
||||
belt->xRot = body->xRot;
|
||||
belt->yRot = body->yRot;
|
||||
belt->zRot = body->zRot;
|
||||
}
|
||||
if (bodyArmor != 0)
|
||||
{
|
||||
|
|
@ -1061,7 +1208,6 @@ void HumanoidModel::setupAnim(float time, float r, float bob, float yRot, float
|
|||
bodyArmor->z = body->z;
|
||||
bodyArmor->xRot = body->xRot;
|
||||
bodyArmor->yRot = body->yRot;
|
||||
bodyArmor->zRot = body->zRot;
|
||||
}
|
||||
if (armArmor0 != 0)
|
||||
{
|
||||
|
|
@ -1178,18 +1324,22 @@ void HumanoidModel::render(HumanoidModel *model, float scale, bool usecompiled)
|
|||
arm0->zRot = model->arm0->zRot;
|
||||
|
||||
if (sleeve0 != 0)
|
||||
{
|
||||
sleeve0->xRot = model->arm0->xRot;
|
||||
sleeve0->yRot = model->arm0->yRot;
|
||||
sleeve0->zRot = model->arm0->zRot;
|
||||
}
|
||||
|
||||
arm1->xRot = model->arm1->xRot;
|
||||
arm1->yRot = model->arm1->yRot;
|
||||
arm1->zRot = model->arm1->zRot;
|
||||
|
||||
if (sleeve1 != 0)
|
||||
{
|
||||
sleeve1->xRot = model->arm1->xRot;
|
||||
sleeve1->yRot = model->arm1->yRot;
|
||||
sleeve1->zRot = model->arm1->zRot;
|
||||
}
|
||||
|
||||
leg0->xRot = model->leg0->xRot;
|
||||
if (pants0 != 0)
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ enum eBodyOffset
|
|||
eBodyOffset_Sleeve1,
|
||||
eBodyOffset_Pants0,
|
||||
eBodyOffset_Pants1,
|
||||
eBodyOffset_Helmet,
|
||||
eBodyOffset_Waist,
|
||||
eBodyOffset_Legging0,
|
||||
eBodyOffset_Legging1,
|
||||
|
|
|
|||
Loading…
Reference in a new issue