mirror of
https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1.git
synced 2026-03-20 15:03:32 +00:00
the whole game
This commit is contained in:
246
src/client/model/HumanoidModel.cpp
Executable file
246
src/client/model/HumanoidModel.cpp
Executable file
@@ -0,0 +1,246 @@
|
||||
#include "HumanoidModel.h"
|
||||
#include "../Minecraft.h"
|
||||
#include "../../util/Mth.h"
|
||||
#include "../../world/entity/player/Player.h"
|
||||
#include "../../world/entity/player/Inventory.h"
|
||||
|
||||
HumanoidModel::HumanoidModel( float g /*= 0*/, float yOffset /*= 0*/ )
|
||||
: holdingLeftHand(false),
|
||||
holdingRightHand(false),
|
||||
sneaking(false),
|
||||
bowAndArrow(false),
|
||||
head(0, 0),
|
||||
//ear (24, 0),
|
||||
//hair(32, 0),
|
||||
body(16, 16),
|
||||
arm0(24 + 16, 16),
|
||||
arm1(24 + 16, 16),
|
||||
leg0(0, 16),
|
||||
leg1(0, 16)
|
||||
{
|
||||
head.setModel(this);
|
||||
body.setModel(this);
|
||||
arm0.setModel(this);
|
||||
arm1.setModel(this);
|
||||
leg0.setModel(this);
|
||||
leg1.setModel(this);
|
||||
|
||||
head.addBox(-4, -8, -4, 8, 8, 8, g); // Head
|
||||
head.setPos(0, 0 + yOffset, 0);
|
||||
|
||||
//ear.addBox(-3, -6, -1, 6, 6, 1, g); // Ear
|
||||
|
||||
//hair.addBox(-4, -8, -4, 8, 8, 8, g + 0.5f); // Head
|
||||
// hair.setPos(0, 0 + yOffset, 0);
|
||||
|
||||
body.addBox(-4, 0, -2, 8, 12, 4, g); // Body
|
||||
body.setPos(0, 0 + yOffset, 0);
|
||||
|
||||
arm0.addBox(-3, -2, -2, 4, 12, 4, g); // Arm0
|
||||
arm0.setPos(-5, 2 + yOffset, 0);
|
||||
|
||||
arm1.mirror = true;
|
||||
arm1.addBox(-1, -2, -2, 4, 12, 4, g); // Arm1
|
||||
arm1.setPos(5, 2 + yOffset, 0);
|
||||
|
||||
leg0.addBox(-2, 0, -2, 4, 12, 4, g); // Leg0
|
||||
leg0.setPos(-2, 12 + yOffset, 0);
|
||||
|
||||
leg1.mirror = true;
|
||||
leg1.addBox(-2, 0, -2, 4, 12, 4, g); // Leg1
|
||||
leg1.setPos(2, 12 + yOffset, 0);
|
||||
}
|
||||
|
||||
void HumanoidModel::render(Entity* e, float time, float r, float bob, float yRot, float xRot, float scale )
|
||||
{
|
||||
if(e != NULL && e->isMob()) {
|
||||
Mob* mob = (Mob*)(e);
|
||||
ItemInstance* item = mob->getCarriedItem();
|
||||
if(item != NULL) {
|
||||
if(mob->getUseItemDuration() > 0) {
|
||||
UseAnim::UseAnimation anim = item->getUseAnimation();
|
||||
if(anim == UseAnim::bow) {
|
||||
bowAndArrow = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setupAnim(time, r, bob, yRot, xRot, scale);
|
||||
|
||||
head.render(scale);
|
||||
body.render(scale);
|
||||
arm0.render(scale);
|
||||
arm1.render(scale);
|
||||
leg0.render(scale);
|
||||
leg1.render(scale);
|
||||
bowAndArrow = false;
|
||||
//hair.render(scale);
|
||||
}
|
||||
|
||||
void HumanoidModel::render( HumanoidModel* model, float scale )
|
||||
{
|
||||
head.yRot = model->head.yRot;
|
||||
head.y = model->head.y;
|
||||
head.xRot = model->head.xRot;
|
||||
//hair.yRot = head.yRot;
|
||||
//hair.xRot = head.xRot;
|
||||
|
||||
arm0.xRot = model->arm0.xRot;
|
||||
arm0.zRot = model->arm0.zRot;
|
||||
|
||||
arm1.xRot = model->arm1.xRot;
|
||||
arm1.zRot = model->arm1.zRot;
|
||||
|
||||
leg0.xRot = model->leg0.xRot;
|
||||
leg1.xRot = model->leg1.xRot;
|
||||
|
||||
head.render(scale);
|
||||
body.render(scale);
|
||||
arm0.render(scale);
|
||||
arm1.render(scale);
|
||||
leg0.render(scale);
|
||||
leg1.render(scale);
|
||||
//hair.render(scale);
|
||||
}
|
||||
|
||||
void HumanoidModel::renderHorrible( float time, float r, float bob, float yRot, float xRot, float scale )
|
||||
{
|
||||
setupAnim(time, r, bob, yRot, xRot, scale);
|
||||
head.renderHorrible(scale);
|
||||
body.renderHorrible(scale);
|
||||
arm0.renderHorrible(scale);
|
||||
arm1.renderHorrible(scale);
|
||||
leg0.renderHorrible(scale);
|
||||
leg1.renderHorrible(scale);
|
||||
//hair.renderHorrible(scale);
|
||||
}
|
||||
// Updated to match Minecraft Java, all except hair.
|
||||
void HumanoidModel::setupAnim( float time, float r, float bob, float yRot, float xRot, float scale )
|
||||
{
|
||||
head.yRot = yRot / (180 / Mth::PI);
|
||||
head.xRot = xRot / (180 / Mth::PI);
|
||||
const float tcos0 = Mth::cos(time * 0.6662f) * r;
|
||||
const float tcos1 = Mth::cos(time * 0.6662f + Mth::PI) * r;
|
||||
|
||||
arm0.xRot = tcos1;
|
||||
arm1.xRot = tcos0;
|
||||
arm0.zRot = 0;
|
||||
arm1.zRot = 0;
|
||||
|
||||
leg0.xRot = tcos0 * 1.4f;
|
||||
leg1.xRot = tcos1 * 1.4f;
|
||||
leg0.yRot = 0;
|
||||
leg1.yRot = 0;
|
||||
|
||||
if (riding) {
|
||||
arm0.xRot += -Mth::PI / 2 * 0.4f;
|
||||
arm1.xRot += -Mth::PI / 2 * 0.4f;
|
||||
leg0.xRot = -Mth::PI / 2 * 0.8f;
|
||||
leg1.xRot = -Mth::PI / 2 * 0.8f;
|
||||
leg0.yRot = Mth::PI / 2 * 0.2f;
|
||||
leg1.yRot = -Mth::PI / 2 * 0.2f;
|
||||
}
|
||||
|
||||
if (holdingLeftHand != 0) {
|
||||
arm1.xRot = arm1.xRot * 0.5f - Mth::PI / 2.0f * 0.2f * holdingLeftHand;
|
||||
}
|
||||
if (holdingRightHand != 0) {
|
||||
arm0.xRot = arm0.xRot * 0.5f - Mth::PI / 2.0f * 0.2f * holdingRightHand;
|
||||
}
|
||||
arm0.yRot = 0;
|
||||
arm1.yRot = 0;
|
||||
|
||||
if (attackTime > -9990) {
|
||||
float swing = attackTime;
|
||||
body.yRot = Mth::sin(Mth::sqrt(swing) * Mth::PI * 2) * 0.2f;
|
||||
arm0.z = Mth::sin(body.yRot) * 5;
|
||||
arm0.x = -Mth::cos(body.yRot) * 5;
|
||||
arm1.z = -Mth::sin(body.yRot) * 5;
|
||||
arm1.x = Mth::cos(body.yRot) * 5;
|
||||
arm0.yRot += body.yRot;
|
||||
arm1.yRot += body.yRot;
|
||||
arm1.xRot += body.yRot;
|
||||
|
||||
swing = 1 - attackTime;
|
||||
swing *= swing;
|
||||
swing *= swing;
|
||||
swing = 1 - swing;
|
||||
float aa = Mth::sin(swing * Mth::PI);
|
||||
float bb = Mth::sin(attackTime * Mth::PI) * -(head.xRot - 0.7f) * 0.75f;
|
||||
arm0.xRot -= aa * 1.2f + bb;
|
||||
arm0.yRot += body.yRot * 2;
|
||||
arm0.zRot = Mth::sin(attackTime * Mth::PI) * -0.4f;
|
||||
}
|
||||
|
||||
if (sneaking) {
|
||||
body.xRot = 0.5f;
|
||||
arm0.xRot += 0.4f;
|
||||
arm1.xRot += 0.4f;
|
||||
leg0.z = +4.0f;
|
||||
leg1.z = +4.0f;
|
||||
leg0.y = +9.0f;
|
||||
leg1.y = +9.0f;
|
||||
head.y = +1;
|
||||
} else {
|
||||
body.xRot = 0.0f;
|
||||
leg0.z = +0.0f;
|
||||
leg1.z = +0.0f;
|
||||
leg0.y = +12.0f;
|
||||
leg1.y = +12.0f;
|
||||
head.y = 0;
|
||||
}
|
||||
|
||||
const float bcos = Mth::cos(bob * 0.09f) * 0.05f + 0.05f;
|
||||
const float bsin = Mth::sin(bob * 0.067f) * 0.05f;
|
||||
|
||||
arm0.zRot += bcos;
|
||||
arm1.zRot -= bcos;
|
||||
arm0.xRot += bsin;
|
||||
arm1.xRot -= bsin;
|
||||
|
||||
if (bowAndArrow) {
|
||||
float attack2 = 0;
|
||||
float attack = 0;
|
||||
|
||||
arm0.zRot = 0;
|
||||
arm1.zRot = 0;
|
||||
arm0.yRot = -(0.1f - attack2 * 0.6f) + head.yRot;
|
||||
arm1.yRot = +(0.1f - attack2 * 0.6f) + head.yRot + 0.4f;
|
||||
arm0.xRot = -Mth::PI / 2.0f + head.xRot;
|
||||
arm1.xRot = -Mth::PI / 2.0f + head.xRot;
|
||||
arm0.xRot -= attack2 * 1.2f - attack * 0.4f;
|
||||
arm1.xRot -= attack2 * 1.2f - attack * 0.4f;
|
||||
|
||||
arm0.zRot += bcos;
|
||||
arm1.zRot -= bcos;
|
||||
arm0.xRot += bsin;
|
||||
arm1.xRot -= bsin;
|
||||
}
|
||||
}
|
||||
|
||||
void HumanoidModel::onGraphicsReset()
|
||||
{
|
||||
head.onGraphicsReset();
|
||||
body.onGraphicsReset();
|
||||
arm0.onGraphicsReset();
|
||||
arm1.onGraphicsReset();
|
||||
leg0.onGraphicsReset();
|
||||
leg1.onGraphicsReset();
|
||||
//hair.onGraphicsReset();
|
||||
}
|
||||
|
||||
//void renderHair(float scale) {
|
||||
// hair.yRot = head.yRot;
|
||||
// hair.xRot = head.xRot;
|
||||
// hair.render(scale);
|
||||
//}
|
||||
//
|
||||
//void renderEars(float scale) {
|
||||
// ear.yRot = head.yRot;
|
||||
// ear.xRot = head.xRot;
|
||||
// ear.x=0;
|
||||
// ear.y=0;
|
||||
// ear.render(scale);
|
||||
//}
|
||||
//
|
||||
Reference in New Issue
Block a user