* Add PigModel and PigRenderer

This commit is contained in:
iProgramInCpp
2023-12-05 20:07:20 +02:00
parent 166bcf708e
commit ca295740dd
48 changed files with 156 additions and 15 deletions

View File

View File

View File

View File

View File

View File

View File

@@ -12,6 +12,7 @@ Model::Model(int width, int height)
{
field_4 = 0.0f;
field_8 = false;
m_bIsBaby = true; // @HUH: Why is this true?
m_textureWidth = width;
m_textureHeight = height;
}

View File

@@ -30,4 +30,5 @@ public:
int m_textureWidth;
int m_textureHeight;
std::vector<ModelPart*> m_parts;
bool m_bIsBaby;
};

View File

@@ -0,0 +1,20 @@
/********************************************************************
Minecraft: Pocket Edition - Decompilation Project
Copyright (C) 2023 iProgramInCpp
The following code is licensed under the BSD 1 clause license.
SPDX-License-Identifier: BSD-1-Clause
********************************************************************/
#include "PigModel.hpp"
PigModel::PigModel(float f) :
QuadrupedModel(6, f)
{
m_head.texOffs(16, 16);
m_head.addBox(-2, 0, -9, 4, 3, 1, f);
field_28C = 4.0f;
}
PigModel::~PigModel()
{
}

View File

@@ -0,0 +1,17 @@
/********************************************************************
Minecraft: Pocket Edition - Decompilation Project
Copyright (C) 2023 iProgramInCpp
The following code is licensed under the BSD 1 clause license.
SPDX-License-Identifier: BSD-1-Clause
********************************************************************/
#pragma once
#include "QuadrupedModel.hpp"
class PigModel : public QuadrupedModel
{
public:
PigModel(float);
~PigModel();
};

View File

@@ -10,7 +10,6 @@
QuadrupedModel::QuadrupedModel(int i, float f) :
Model(64, 32),
m_bIsBaby(true), // @HUH: Why is this true?
m_head(0, 0),
m_unknown(0, 0),
m_body(28, 8),

View File

@@ -5,7 +5,7 @@
The following code is licensed under the BSD 1 clause license.
SPDX-License-Identifier: BSD-1-Clause
********************************************************************/
#pragma off
#pragma once
#include "Model.hpp"
@@ -18,8 +18,8 @@ public:
void render(float, float, float, float, float, float) override;
void setupAnim(float, float, float, float, float, float) override;
private:
bool m_bIsBaby;
protected:
friend class PigModel;
ModelPart m_head;
ModelPart m_unknown;
ModelPart m_body;

View File

View File

View File

View File

View File

View File

View File

View File

View File

@@ -10,11 +10,14 @@
#include "client/app/Minecraft.hpp"
#include "../ItemInHandRenderer.hpp"
#include "client/model/PigModel.hpp"
EntityRenderDispatcher* EntityRenderDispatcher::instance;
float EntityRenderDispatcher::xOff, EntityRenderDispatcher::yOff, EntityRenderDispatcher::zOff;
EntityRenderDispatcher::EntityRenderDispatcher() :
m_HumanoidMobRenderer(new HumanoidModel(0.0f, 0.0f), 0.0f)
m_HumanoidMobRenderer(new HumanoidModel(0.0f, 0.0f), 0.0f),
m_PigRenderer(new PigModel(0.0f), 0.0f)
{
m_pItemInHandRenderer = nullptr;
m_pTextures = nullptr;
@@ -27,14 +30,13 @@ EntityRenderDispatcher::EntityRenderDispatcher() :
m_pFont = nullptr;
m_HumanoidMobRenderer.init(this);
m_PigRenderer.init(this);
// TODO
m_TntRenderer.init(this);
m_CameraRenderer.init(this);
#ifndef ORIGINAL_CODE
// @BUG: Not initializing the item renderer would cause crashes if item7
// entities exist, because it references the dispatcher
m_ItemRenderer.init(this);
#endif
#ifdef ENH_ALLOW_SAND_GRAVITY
m_FallingTileRenderer.init(this);
@@ -63,9 +65,9 @@ EntityRenderDispatcher* EntityRenderDispatcher::getInstance()
return instance;
}
EntityRenderer* EntityRenderDispatcher::getRenderer(Entity* pEnt)
EntityRenderer* EntityRenderDispatcher::getRenderer(int renderType)
{
switch (pEnt->field_C8)
switch (renderType)
{
case RENDER_TNT:
return &m_TntRenderer;
@@ -75,6 +77,9 @@ EntityRenderer* EntityRenderDispatcher::getRenderer(Entity* pEnt)
return &m_CameraRenderer;
case RENDER_HUMANOID:
return &m_HumanoidMobRenderer;
case RENDER_PIG:
return &m_PigRenderer;
// TODO
#ifdef ENH_ALLOW_SAND_GRAVITY
case RENDER_FALLING_TILE:
return &m_FallingTileRenderer;
@@ -84,6 +89,15 @@ EntityRenderer* EntityRenderDispatcher::getRenderer(Entity* pEnt)
return nullptr;
}
EntityRenderer* EntityRenderDispatcher::getRenderer(Entity* pEnt)
{
int renderType = pEnt->field_C8;
if (renderType == RENDER_DYNAMIC)
renderType = pEnt->queryEntityRenderer();
return getRenderer(renderType);
}
void EntityRenderDispatcher::onGraphicsReset()
{
m_HumanoidMobRenderer.onGraphicsReset();

View File

@@ -14,6 +14,7 @@
#include "TntRenderer.hpp"
#include "ItemRenderer.hpp"
#include "FallingTileRenderer.hpp"
#include "PigRenderer.hpp"
class Minecraft;
class Font;
@@ -29,6 +30,7 @@ public:
float distanceToSqr(float x, float y, float z);
Font* getFont();
EntityRenderer* getRenderer(Entity* pEnt);
EntityRenderer* getRenderer(int renderType);
void onGraphicsReset();
void prepare(Level*, Textures*, Font*, Mob*, Options*, float);
void render(Entity*, float);
@@ -41,8 +43,18 @@ public:
public:
ItemInHandRenderer* m_pItemInHandRenderer;
HumanoidMobRenderer m_HumanoidMobRenderer;
PigRenderer m_PigRenderer;
//CowRenderer m_CowRenderer;
//ChickenRenderer m_ChickenRenderer;
TntRenderer m_TntRenderer;
//padding??
ItemRenderer m_ItemRenderer;
//CreeperRenderer m_CreeperRenderer;
//SpiderRenderer m_SpiderRenderer;
//SkeletonRenderer m_SkeletonRenderer;
//ZombieRenderer m_ZombieRenderer;
//SheepRenderer m_SheepRenderer;
//SheepFurRenderer m_SheepFurRenderer;
TripodCameraRenderer m_CameraRenderer;
Textures* m_pTextures;
Level* m_pLevel;

View File

@@ -83,9 +83,13 @@ void MobRenderer::render(Entity* entity, float x, float y, float z, float unused
glDisable(GL_CULL_FACE);
m_pModel->field_4 = getAttackAnim(pMob, f);
m_pModel->field_8 = false;
m_pModel->m_bIsBaby = pMob->isBaby();
if (m_pArmorModel)
{
m_pArmorModel->field_8 = m_pModel->field_8;
m_pArmorModel->m_bIsBaby = m_pModel->m_bIsBaby;
}
float aYaw = pMob->field_5C + (pMob->m_yaw - pMob->field_5C) * f;
float aPitch = pMob->field_60 + (pMob->m_pitch - pMob->field_60) * f;
@@ -104,7 +108,7 @@ void MobRenderer::render(Entity* entity, float x, float y, float z, float unused
x1 = 1.0f;
float x2 = pMob->field_130 - pMob->field_12C * (1.0f - f);
bindTexture("mob/char.png");
bindTexture(pMob->getTexture());
glEnable(GL_ALPHA_TEST);
m_pModel->setBrightness(entity->getBrightness(1.0f));

View File

@@ -0,0 +1,16 @@
/********************************************************************
Minecraft: Pocket Edition - Decompilation Project
Copyright (C) 2023 iProgramInCpp
The following code is licensed under the BSD 1 clause license.
SPDX-License-Identifier: BSD-1-Clause
********************************************************************/
#include "PigRenderer.hpp"
PigRenderer::PigRenderer(Model* pModel, float f) : MobRenderer(pModel, f)
{
}
PigRenderer::~PigRenderer()
{
}

View File

@@ -0,0 +1,17 @@
/********************************************************************
Minecraft: Pocket Edition - Decompilation Project
Copyright (C) 2023 iProgramInCpp
The following code is licensed under the BSD 1 clause license.
SPDX-License-Identifier: BSD-1-Clause
********************************************************************/
#pragma once
#include "MobRenderer.hpp"
class PigRenderer : public MobRenderer
{
public:
PigRenderer(Model*, float);
~PigRenderer();
};