Reduced code by adding functions

Reduced repetitive code by moving it into functions. New functions are setModelType() in PlayerRenderer.cpp and setPlayerModelType in LivingEntityRenderer.
This commit is contained in:
Langtanium 2026-05-11 18:38:33 -07:00
parent 6f12950c6b
commit fe8e26867f
5 changed files with 25 additions and 40 deletions

View file

@ -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<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;
if (mob == nullptr)
{
@ -60,10 +64,6 @@ void LivingEntityRenderer::render(shared_ptr<Entity> _mob, double x, double y, d
glPushMatrix();
glDisable(GL_CULL_FACE);
if (player != nullptr && modelWide != nullptr && (player->getCustomSkin() == 18 || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_WideModel))) resModel = modelWide;
else if (player != nullptr && modelSlim != nullptr && ((player->getCustomSkin() >= 8 && player->getCustomSkin() <= 17) || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_SlimModel))) resModel = modelSlim;
else resModel = model;
resModel->attackTime = getAttackAnim(mob, a);
if (armor != nullptr) armor->attackTime = resModel->attackTime;
resModel->riding = mob->isRiding();
@ -254,13 +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;
if (player != nullptr && modelWide != nullptr && (player->getCustomSkin() == 18 || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_WideModel))) resModel = modelWide;
else if (player != nullptr && modelSlim != nullptr && ((player->getCustomSkin() >= 8 && player->getCustomSkin() <= 17) || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_SlimModel))) resModel = modelSlim;
else resModel = model;
bindTexture(mob);
if (!mob->isInvisible())
{
@ -332,13 +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;
if (player != nullptr && modelWide != nullptr && (player->getCustomSkin() == 18 || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_WideModel))) resModel = modelWide;
else if (player != nullptr && modelSlim != nullptr && ((player->getCustomSkin() >= 8 && player->getCustomSkin() <= 17) || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_SlimModel))) resModel = modelSlim;
else resModel = model;
int arrowCount = mob->getArrowCount();
if (arrowCount > 0)

View file

@ -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<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);

View file

@ -65,6 +65,13 @@ PlayerRenderer::PlayerRenderer() : LivingEntityRenderer( new HumanoidModel(0), 0
armorParts2 = 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)
{
if( index >= 0 && index < MINECRAFT_NET_MAX_PLAYERS)
@ -76,11 +83,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);
HumanoidModel *resModel;
if (humanoidModelWide != nullptr && (player->getCustomSkin() == 18 || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_WideModel))) resModel = humanoidModelWide;
else if (humanoidModelSlim != nullptr && ((player->getCustomSkin() >= 8 && player->getCustomSkin() <= 17) || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_SlimModel))) resModel = humanoidModelSlim;
else resModel = humanoidModel;
setModelType(player);
// 4J-PB - need to disable rendering armour for some special skins (Daleks)
unsigned int uiAnimOverrideBitmask=player->getAnimOverrideBitmask();
@ -175,14 +178,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;
if(mob == nullptr) return;
if(mob->hasInvisiblePrivilege()) return;
if (humanoidModelWide != nullptr && (mob->getCustomSkin() == 18 || mob->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_WideModel))) resModel = humanoidModelWide;
else if (humanoidModelSlim != nullptr && ((mob->getCustomSkin() >= 8 && mob->getCustomSkin() <= 17) || mob->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_SlimModel))) resModel = humanoidModelSlim;
else resModel = humanoidModel;
setModelType(mob);
setPlayerModelType(resModel);
shared_ptr<ItemInstance> item = mob->inventory->getSelected();
@ -316,11 +317,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;
if (mob != nullptr && humanoidModelWide != nullptr && (mob->getCustomSkin() == 18 || mob->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_WideModel))) resModel = humanoidModelWide;
else if (mob != nullptr && humanoidModelSlim != nullptr && ((mob->getCustomSkin() >= 8 && mob->getCustomSkin() <= 17) || mob->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_SlimModel))) resModel = humanoidModelSlim;
else resModel = humanoidModel;
setModelType(mob);
shared_ptr<ItemInstance> headGear = mob->inventory->getArmor(3);
if (headGear != nullptr)
@ -565,11 +562,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;
if (player != nullptr && humanoidModelWide != nullptr && (player->getCustomSkin() == 18 || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_WideModel))) resModel = humanoidModelWide;
else if (player != nullptr && humanoidModelSlim != nullptr && ((player->getCustomSkin() >= 8 && player->getCustomSkin() <= 17) || player->getAnimOverrideBitmask()&(1<<HumanoidModel::eAnim_SlimModel))) resModel = humanoidModelSlim;
else resModel = humanoidModel;
setModelType(player);
float brightness = 1;
glColor3f(brightness, brightness, brightness);

View file

@ -16,6 +16,7 @@ private:
HumanoidModel *humanoidModel;
HumanoidModel *humanoidModelWide;
HumanoidModel *humanoidModelSlim;
HumanoidModel *resModel;
HumanoidModel *armorParts1;
HumanoidModel *armorParts2;
@ -29,6 +30,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);

View file

@ -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;
}