* 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

@@ -320,6 +320,8 @@
<ClInclude Include="$(MC_ROOT)\source\client\renderer\FoliageColor.hpp" /> <ClInclude Include="$(MC_ROOT)\source\client\renderer\FoliageColor.hpp" />
<ClInclude Include="$(MC_ROOT)\source\client\renderer\GrassColor.hpp" /> <ClInclude Include="$(MC_ROOT)\source\client\renderer\GrassColor.hpp" />
<ClInclude Include="$(MC_ROOT)\source\client\gui\components\OptionList.hpp" /> <ClInclude Include="$(MC_ROOT)\source\client\gui\components\OptionList.hpp" />
<ClInclude Include="..\..\..\..\source\client\model\PigModel.hpp" />
<ClInclude Include="..\..\..\..\source\client\renderer\entity\PigRenderer.hpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="$(MC_ROOT)\source\client\app\App.cpp" /> <ClCompile Include="$(MC_ROOT)\source\client\app\App.cpp" />
@@ -420,6 +422,8 @@
<ClCompile Include="$(MC_ROOT)\source\client\renderer\FoliageColor.cpp" /> <ClCompile Include="$(MC_ROOT)\source\client\renderer\FoliageColor.cpp" />
<ClCompile Include="$(MC_ROOT)\source\client\renderer\GrassColor.cpp" /> <ClCompile Include="$(MC_ROOT)\source\client\renderer\GrassColor.cpp" />
<ClCompile Include="$(MC_ROOT)\source\client\gui\components\OptionList.cpp" /> <ClCompile Include="$(MC_ROOT)\source\client\gui\components\OptionList.cpp" />
<ClCompile Include="..\..\..\..\source\client\model\PigModel.cpp" />
<ClCompile Include="..\..\..\..\source\client\renderer\entity\PigRenderer.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Common\Common.vcxproj"> <ProjectReference Include="..\Common\Common.vcxproj">

View File

@@ -380,6 +380,12 @@
<ClInclude Include="$(MC_ROOT)\source\client\model\QuadrupedModel.hpp"> <ClInclude Include="$(MC_ROOT)\source\client\model\QuadrupedModel.hpp">
<Filter>Header Files\Model</Filter> <Filter>Header Files\Model</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\..\..\source\client\model\PigModel.hpp">
<Filter>Header Files\Model</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\source\client\renderer\entity\PigRenderer.hpp">
<Filter>Header Files\Renderer\Entity</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="$(MC_ROOT)\source\client\gui\components\AvailableGamesList.cpp"> <ClCompile Include="$(MC_ROOT)\source\client\gui\components\AvailableGamesList.cpp">
@@ -676,5 +682,11 @@
<ClCompile Include="$(MC_ROOT)\source\client\model\QuadrupedModel.cpp"> <ClCompile Include="$(MC_ROOT)\source\client\model\QuadrupedModel.cpp">
<Filter>Source Files\Model</Filter> <Filter>Source Files\Model</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\source\client\model\PigModel.cpp">
<Filter>Source Files\Model</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\source\client\renderer\entity\PigRenderer.cpp">
<Filter>Source Files\Renderer\Entity</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
</Project> </Project>

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_4 = 0.0f;
field_8 = false; field_8 = false;
m_bIsBaby = true; // @HUH: Why is this true?
m_textureWidth = width; m_textureWidth = width;
m_textureHeight = height; m_textureHeight = height;
} }

View File

@@ -30,4 +30,5 @@ public:
int m_textureWidth; int m_textureWidth;
int m_textureHeight; int m_textureHeight;
std::vector<ModelPart*> m_parts; 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) : QuadrupedModel::QuadrupedModel(int i, float f) :
Model(64, 32), Model(64, 32),
m_bIsBaby(true), // @HUH: Why is this true?
m_head(0, 0), m_head(0, 0),
m_unknown(0, 0), m_unknown(0, 0),
m_body(28, 8), m_body(28, 8),

View File

@@ -5,7 +5,7 @@
The following code is licensed under the BSD 1 clause license. The following code is licensed under the BSD 1 clause license.
SPDX-License-Identifier: BSD-1-Clause SPDX-License-Identifier: BSD-1-Clause
********************************************************************/ ********************************************************************/
#pragma off #pragma once
#include "Model.hpp" #include "Model.hpp"
@@ -18,8 +18,8 @@ public:
void render(float, float, float, float, float, float) override; void render(float, float, float, float, float, float) override;
void setupAnim(float, float, float, float, float, float) override; void setupAnim(float, float, float, float, float, float) override;
private: protected:
bool m_bIsBaby; friend class PigModel;
ModelPart m_head; ModelPart m_head;
ModelPart m_unknown; ModelPart m_unknown;
ModelPart m_body; 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 "client/app/Minecraft.hpp"
#include "../ItemInHandRenderer.hpp" #include "../ItemInHandRenderer.hpp"
#include "client/model/PigModel.hpp"
EntityRenderDispatcher* EntityRenderDispatcher::instance; EntityRenderDispatcher* EntityRenderDispatcher::instance;
float EntityRenderDispatcher::xOff, EntityRenderDispatcher::yOff, EntityRenderDispatcher::zOff; float EntityRenderDispatcher::xOff, EntityRenderDispatcher::yOff, EntityRenderDispatcher::zOff;
EntityRenderDispatcher::EntityRenderDispatcher() : 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_pItemInHandRenderer = nullptr;
m_pTextures = nullptr; m_pTextures = nullptr;
@@ -27,14 +30,13 @@ EntityRenderDispatcher::EntityRenderDispatcher() :
m_pFont = nullptr; m_pFont = nullptr;
m_HumanoidMobRenderer.init(this); m_HumanoidMobRenderer.init(this);
m_PigRenderer.init(this);
// TODO
m_TntRenderer.init(this); m_TntRenderer.init(this);
m_CameraRenderer.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); m_ItemRenderer.init(this);
#endif
#ifdef ENH_ALLOW_SAND_GRAVITY #ifdef ENH_ALLOW_SAND_GRAVITY
m_FallingTileRenderer.init(this); m_FallingTileRenderer.init(this);
@@ -63,9 +65,9 @@ EntityRenderDispatcher* EntityRenderDispatcher::getInstance()
return instance; return instance;
} }
EntityRenderer* EntityRenderDispatcher::getRenderer(Entity* pEnt) EntityRenderer* EntityRenderDispatcher::getRenderer(int renderType)
{ {
switch (pEnt->field_C8) switch (renderType)
{ {
case RENDER_TNT: case RENDER_TNT:
return &m_TntRenderer; return &m_TntRenderer;
@@ -75,6 +77,9 @@ EntityRenderer* EntityRenderDispatcher::getRenderer(Entity* pEnt)
return &m_CameraRenderer; return &m_CameraRenderer;
case RENDER_HUMANOID: case RENDER_HUMANOID:
return &m_HumanoidMobRenderer; return &m_HumanoidMobRenderer;
case RENDER_PIG:
return &m_PigRenderer;
// TODO
#ifdef ENH_ALLOW_SAND_GRAVITY #ifdef ENH_ALLOW_SAND_GRAVITY
case RENDER_FALLING_TILE: case RENDER_FALLING_TILE:
return &m_FallingTileRenderer; return &m_FallingTileRenderer;
@@ -84,6 +89,15 @@ EntityRenderer* EntityRenderDispatcher::getRenderer(Entity* pEnt)
return nullptr; 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() void EntityRenderDispatcher::onGraphicsReset()
{ {
m_HumanoidMobRenderer.onGraphicsReset(); m_HumanoidMobRenderer.onGraphicsReset();

View File

@@ -14,6 +14,7 @@
#include "TntRenderer.hpp" #include "TntRenderer.hpp"
#include "ItemRenderer.hpp" #include "ItemRenderer.hpp"
#include "FallingTileRenderer.hpp" #include "FallingTileRenderer.hpp"
#include "PigRenderer.hpp"
class Minecraft; class Minecraft;
class Font; class Font;
@@ -29,6 +30,7 @@ public:
float distanceToSqr(float x, float y, float z); float distanceToSqr(float x, float y, float z);
Font* getFont(); Font* getFont();
EntityRenderer* getRenderer(Entity* pEnt); EntityRenderer* getRenderer(Entity* pEnt);
EntityRenderer* getRenderer(int renderType);
void onGraphicsReset(); void onGraphicsReset();
void prepare(Level*, Textures*, Font*, Mob*, Options*, float); void prepare(Level*, Textures*, Font*, Mob*, Options*, float);
void render(Entity*, float); void render(Entity*, float);
@@ -41,8 +43,18 @@ public:
public: public:
ItemInHandRenderer* m_pItemInHandRenderer; ItemInHandRenderer* m_pItemInHandRenderer;
HumanoidMobRenderer m_HumanoidMobRenderer; HumanoidMobRenderer m_HumanoidMobRenderer;
PigRenderer m_PigRenderer;
//CowRenderer m_CowRenderer;
//ChickenRenderer m_ChickenRenderer;
TntRenderer m_TntRenderer; TntRenderer m_TntRenderer;
//padding??
ItemRenderer m_ItemRenderer; ItemRenderer m_ItemRenderer;
//CreeperRenderer m_CreeperRenderer;
//SpiderRenderer m_SpiderRenderer;
//SkeletonRenderer m_SkeletonRenderer;
//ZombieRenderer m_ZombieRenderer;
//SheepRenderer m_SheepRenderer;
//SheepFurRenderer m_SheepFurRenderer;
TripodCameraRenderer m_CameraRenderer; TripodCameraRenderer m_CameraRenderer;
Textures* m_pTextures; Textures* m_pTextures;
Level* m_pLevel; 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); glDisable(GL_CULL_FACE);
m_pModel->field_4 = getAttackAnim(pMob, f); m_pModel->field_4 = getAttackAnim(pMob, f);
m_pModel->field_8 = false; m_pModel->field_8 = false;
m_pModel->m_bIsBaby = pMob->isBaby();
if (m_pArmorModel) if (m_pArmorModel)
{
m_pArmorModel->field_8 = m_pModel->field_8; 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 aYaw = pMob->field_5C + (pMob->m_yaw - pMob->field_5C) * f;
float aPitch = pMob->field_60 + (pMob->m_pitch - pMob->field_60) * 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; x1 = 1.0f;
float x2 = pMob->field_130 - pMob->field_12C * (1.0f - f); float x2 = pMob->field_130 - pMob->field_12C * (1.0f - f);
bindTexture("mob/char.png"); bindTexture(pMob->getTexture());
glEnable(GL_ALPHA_TEST); glEnable(GL_ALPHA_TEST);
m_pModel->setBrightness(entity->getBrightness(1.0f)); 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();
};

View File

@@ -1068,6 +1068,13 @@ void Entity::lavaHurt()
} }
} }
int Entity::queryEntityRenderer()
{
// If field_C8 is equal to RENDER_DYNAMIC, EntityRenderDispatcher
// calls here. Used for sheared sheep.
return 0;
}
int Entity::hashCode() int Entity::hashCode()
{ {
return m_EntityID; return m_EntityID;

View File

@@ -22,10 +22,20 @@ class ItemInstance;
enum eEntityRenderType enum eEntityRenderType
{ {
RENDER_NONE, RENDER_NONE,
RENDER_DYNAMIC,
RENDER_TNT, RENDER_TNT,
RENDER_HUMANOID, RENDER_HUMANOID,
RENDER_ITEM, RENDER_ITEM,
RENDER_CAMERA, RENDER_CAMERA,
RENDER_CHICKEN,
RENDER_COW,
RENDER_PIG,
RENDER_SHEEP,
RENDER_SHEEP_FUR,
RENDER_ZOMBIE,
RENDER_SKELETON,
RENDER_SPIDER,
RENDER_CREEPER,
// custom // custom
RENDER_FALLING_TILE = 50, RENDER_FALLING_TILE = 50,
@@ -139,6 +149,7 @@ public:
virtual void markHurt(); virtual void markHurt();
virtual void burn(int); virtual void burn(int);
virtual void lavaHurt(); virtual void lavaHurt();
virtual int queryEntityRenderer();
virtual bool isLocalPlayer(); virtual bool isLocalPlayer();

View File

@@ -57,7 +57,7 @@ Mob::Mob(Level* pLevel) : Entity(pLevel)
field_B84 = 0; field_B84 = 0;
m_pEntLookedAt = nullptr; m_pEntLookedAt = nullptr;
m_texture = "/mob/char.png"; m_texture = "/mob/pig.png";
m_class = ""; m_class = "";
field_34 = 1; field_34 = 1;
@@ -744,6 +744,11 @@ int Mob::getMaxSpawnClusterSize()
return 4; return 4;
} }
bool Mob::isBaby()
{
return false;
}
void Mob::actuallyHurt(int damage) void Mob::actuallyHurt(int damage)
{ {
#ifdef TEST_SURVIVAL_MODE #ifdef TEST_SURVIVAL_MODE

View File

@@ -62,6 +62,7 @@ public:
virtual Vec3 getLookAngle(float f); virtual Vec3 getLookAngle(float f);
virtual Vec3 getViewVector(float f); virtual Vec3 getViewVector(float f);
virtual int getMaxSpawnClusterSize(); virtual int getMaxSpawnClusterSize();
virtual bool isBaby();
virtual void actuallyHurt(int damage); virtual void actuallyHurt(int damage);
virtual bool removeWhenFarAway(); virtual bool removeWhenFarAway();
virtual int getDeathLoot(); virtual int getDeathLoot();

View File

@@ -22,7 +22,7 @@ Player::Player(Level* pLevel) : Mob(pLevel)
field_BC4 = 0; field_BC4 = 0;
m_bHaveRespawnPos = false; m_bHaveRespawnPos = false;
field_C8 = 2; field_C8 = RENDER_HUMANOID;
m_pInventory = new Inventory(this); m_pInventory = new Inventory(this);