forked from Kolyah35/minecraft-pe-0.6.1
84 lines
2.8 KiB
C++
Executable File
84 lines
2.8 KiB
C++
Executable File
#include "HumanoidMobRenderer.h"
|
|
#include "EntityRenderDispatcher.h"
|
|
#include "../ItemInHandRenderer.h"
|
|
#include "../TileRenderer.h"
|
|
#include "../../model/HumanoidModel.h"
|
|
#include "../../../world/level/tile/Tile.h"
|
|
#include "../../../world/entity/player/Player.h"
|
|
#include "../../../world/entity/player/Inventory.h"
|
|
#include "../../../world/item/ItemInstance.h"
|
|
#include "../../../world/item/Item.h"
|
|
#include "../../../world/item/BowItem.h"
|
|
|
|
HumanoidMobRenderer::HumanoidMobRenderer(HumanoidModel* humanoidModel, float shadow)
|
|
: super(humanoidModel, shadow),
|
|
humanoidModel(humanoidModel)
|
|
{
|
|
}
|
|
|
|
void HumanoidMobRenderer::renderHand() {
|
|
humanoidModel->attackTime = 0;
|
|
humanoidModel->setupAnim(0, 0, 0, 0, 0, 1 / 16.0f);
|
|
|
|
//@attn @cuberender @enableClientState @vertexarray
|
|
glEnableClientState2(GL_VERTEX_ARRAY);
|
|
glEnableClientState2(GL_TEXTURE_COORD_ARRAY);
|
|
//glEnableClientState2(GL_COLOR_ARRAY);
|
|
humanoidModel->arm0.render(1 / 16.0f);
|
|
glDisableClientState2(GL_VERTEX_ARRAY);
|
|
glDisableClientState2(GL_TEXTURE_COORD_ARRAY);
|
|
//glDisableClientState2(GL_COLOR_ARRAY);
|
|
}
|
|
|
|
void HumanoidMobRenderer::additionalRendering(Mob* mob, float a) {
|
|
ItemInstance* item = mob->getCarriedItem();
|
|
if (item != NULL && item->count > 0) {
|
|
glPushMatrix2();
|
|
humanoidModel->arm0.translateTo(1 / 16.0f);
|
|
glTranslatef2(-1.0f / 16.0f, 7.0f / 16.0f, 1.0f / 16.0f);
|
|
|
|
if (item->id < 256 && TileRenderer::canRender(Tile::tiles[item->id]->getRenderShape())) {
|
|
float s = 8.0f / 16.0f;
|
|
glTranslatef2(0.0f, 3.0f / 16.0f, -5 / 16.0f);
|
|
s *= 0.75f;
|
|
glRotatef2(20.0f, 1.0f, 0.0f, 0.0f);
|
|
glRotatef2(45.0f, 0.0f, 1.0f, 0.0f);
|
|
glScalef2(s, -s, s);
|
|
} else if (item->id == Item::bow->id) {
|
|
const float s = 10.0f / 16.0f;
|
|
glTranslatef2(0 / 16.0f, 2 / 16.0f, 5 / 16.0f);
|
|
glRotatef2(-20, 0, 1, 0);
|
|
glScalef2(s, -s, s);
|
|
glRotatef2(-100, 1, 0, 0);
|
|
glRotatef2(45, 0, 1, 0);
|
|
} else if (Item::items[item->id]->isHandEquipped()) {
|
|
float s = 10.0f / 16.0f;
|
|
glTranslatef2(0.0f, 3.0f / 16.0f, 0.0f);
|
|
glScalef2(s, -s, s);
|
|
glRotatef2(-100.0f, 1.0f, 0.0f, 0.0f);
|
|
glRotatef2(45.0f, 0.0f, 1.0f, 0.0f);
|
|
} else {
|
|
float s = 6 / 16.0f;
|
|
glTranslatef2(+4 / 16.0f, +3 / 16.0f, -3 / 16.0f);
|
|
glScalef2(s, s, s);
|
|
glRotatef2(60.0f, 0.0f, 0.0f, 1.0f);
|
|
glRotatef2(-90.0f, 1.0f, 0.0f, 0.0f);
|
|
glRotatef2(20.0f, 0.0f, 0.0f, 1.0f);
|
|
}
|
|
entityRenderDispatcher->itemInHandRenderer->renderItem(mob, item);
|
|
glPopMatrix2();
|
|
}
|
|
}
|
|
|
|
void HumanoidMobRenderer::render( Entity* mob_, float x, float y, float z, float rot, float a ) {
|
|
Mob* mob = (Mob*)mob_;
|
|
ItemInstance* carriedItem = mob->getCarriedItem();
|
|
if(carriedItem != NULL)
|
|
humanoidModel->holdingRightHand = true;
|
|
|
|
humanoidModel->sneaking = mob->isSneaking();
|
|
|
|
super::render(mob_, x, y, z, rot, a);
|
|
humanoidModel->holdingRightHand = false;
|
|
}
|