169 lines
4.8 KiB
C++
Executable File
169 lines
4.8 KiB
C++
Executable File
#ifndef NET_MINECRAFT_CLIENT_MODEL__SpiderModel_H__
|
|
#define NET_MINECRAFT_CLIENT_MODEL__SpiderModel_H__
|
|
|
|
//package net.minecraft.client.model;
|
|
|
|
#include "Model.h"
|
|
|
|
#include "geom/ModelPart.h"
|
|
#include "../../world/entity/Entity.h"
|
|
#include "../../util/Mth.h"
|
|
|
|
class SpiderModel: public Model
|
|
{
|
|
typedef Model super;
|
|
public:
|
|
ModelPart head, body0, body1, leg0, leg1, leg2, leg3, leg4, leg5, leg6, leg7;
|
|
|
|
SpiderModel()
|
|
: head(32, 4),
|
|
body0(0, 0),
|
|
body1(0, 12),
|
|
leg0(18, 0),
|
|
leg1(18, 0),
|
|
leg2(18, 0),
|
|
leg3(18, 0),
|
|
leg4(18, 0),
|
|
leg5(18, 0),
|
|
leg6(18, 0),
|
|
leg7(18, 0)
|
|
{
|
|
float g = 0;
|
|
|
|
head.setModel(this);
|
|
body0.setModel(this);
|
|
body0.setModel(this);
|
|
leg0.setModel(this);
|
|
leg1.setModel(this);
|
|
leg2.setModel(this);
|
|
leg3.setModel(this);
|
|
leg4.setModel(this);
|
|
leg5.setModel(this);
|
|
leg6.setModel(this);
|
|
leg7.setModel(this);
|
|
|
|
float yo = 18 + 6 - 9;
|
|
|
|
head.addBox(-4, -4, -8, 8, 8, 8, g); // Head
|
|
head.setPos(0, 0 + yo, -3);
|
|
|
|
body0.addBox(-3, -3, -3, 6, 6, 6, g); // Body
|
|
body0.setPos(0, yo, 0);
|
|
|
|
body1.addBox(-5, -4, -6, 10, 8, 12, g); // Body
|
|
body1.setPos(0, 0 + yo, 3 + 6);
|
|
|
|
leg0.addBox(-15, -1, -1, 16, 2, 2, g); // Leg0
|
|
leg0.setPos(-4, 0 + yo, 2);
|
|
|
|
leg1.addBox(-1, -1, -1, 16, 2, 2, g); // Leg1
|
|
leg1.setPos(4, 0 + yo, 2);
|
|
|
|
leg2.addBox(-15, -1, -1, 16, 2, 2, g); // Leg2
|
|
leg2.setPos(-4, 0 + yo, 1);
|
|
|
|
leg3.addBox(-1, -1, -1, 16, 2, 2, g); // Leg3
|
|
leg3.setPos(4, 0 + yo, 1);
|
|
|
|
leg4.addBox(-15, -1, -1, 16, 2, 2, g); // Leg0
|
|
leg4.setPos(-4, 0 + yo, 0);
|
|
|
|
leg5.addBox(-1, -1, -1, 16, 2, 2, g); // Leg1
|
|
leg5.setPos(4, 0 + yo, 0);
|
|
|
|
leg6.addBox(-15, -1, -1, 16, 2, 2, g); // Leg2
|
|
leg6.setPos(-4, 0 + yo, -1);
|
|
|
|
leg7.addBox(-1, -1, -1, 16, 2, 2, g); // Leg3
|
|
leg7.setPos(4, 0 + yo, -1);
|
|
}
|
|
|
|
/*@Override*/
|
|
void render(Entity* entity, float time, float r, float bob, float yRot, float xRot, float scale) {
|
|
setupAnim(time, r, bob, yRot, xRot, scale);
|
|
|
|
head.render(scale);
|
|
body0.render(scale);
|
|
body1.render(scale);
|
|
leg0.render(scale);
|
|
leg1.render(scale);
|
|
leg2.render(scale);
|
|
leg3.render(scale);
|
|
leg4.render(scale);
|
|
leg5.render(scale);
|
|
leg6.render(scale);
|
|
leg7.render(scale);
|
|
}
|
|
|
|
void setupAnim(float time, float r, float bob, float yRot, float xRot, float scale) {
|
|
head.yRot = yRot / (float) (180 / Mth::PI);
|
|
head.xRot = xRot / (float) (180 / Mth::PI);
|
|
|
|
const float sr = (float) Mth::PI / 4.0f;
|
|
leg0.zRot = -sr;
|
|
leg1.zRot = sr;
|
|
|
|
leg2.zRot = -sr * 0.74f;
|
|
leg3.zRot = sr * 0.74f;
|
|
|
|
leg4.zRot = -sr * 0.74f;
|
|
leg5.zRot = sr * 0.74f;
|
|
|
|
leg6.zRot = -sr;
|
|
leg7.zRot = sr;
|
|
|
|
//float ro = -(float) Mth::PI / 2.0f * 0;
|
|
const float ur = (float) Mth::PI / 8.0f;
|
|
const float ur2 = sr;
|
|
|
|
leg0.yRot = ur2;
|
|
leg1.yRot = -ur2;
|
|
leg2.yRot = ur;
|
|
leg3.yRot = -ur;
|
|
leg4.yRot = -ur;
|
|
leg5.yRot = +ur;
|
|
leg6.yRot = -ur2;
|
|
leg7.yRot = +ur2;
|
|
|
|
//static Stopwatch w;
|
|
//w.start();
|
|
|
|
float c0 = -((float) Mth::cos(time * 0.6662f * 2 + Mth::PI * 2 * 0 / 4.0f) * 0.4f) * r;
|
|
float c1 = -((float) Mth::cos(time * 0.6662f * 2 + Mth::PI * 2 * 2 / 4.0f) * 0.4f) * r;
|
|
float c2 = -((float) Mth::cos(time * 0.6662f * 2 + Mth::PI * 2 * 1 / 4.0f) * 0.4f) * r;
|
|
float c3 = -((float) Mth::cos(time * 0.6662f * 2 + Mth::PI * 2 * 3 / 4.0f) * 0.4f) * r;
|
|
|
|
//LOGI("spider: %f, %f, %f, %f\n", c0, c1, c2, c3);
|
|
|
|
float s0 = std::abs((float) Mth::sin(time * 0.6662f + Mth::PI * 2 * 0 / 4.0f) * 0.4f) * r;
|
|
float s1 = std::abs((float) Mth::sin(time * 0.6662f + Mth::PI * 2 * 2 / 4.0f) * 0.4f) * r;
|
|
float s2 = std::abs((float) Mth::sin(time * 0.6662f + Mth::PI * 2 * 1 / 4.0f) * 0.4f) * r;
|
|
float s3 = std::abs((float) Mth::sin(time * 0.6662f + Mth::PI * 2 * 3 / 4.0f) * 0.4f) * r;
|
|
|
|
//w.stop();
|
|
//w.printEvery(100);
|
|
|
|
//LOGI("spiddy: %f, %f, %f, %f\n", s0, s1, s2, s3);
|
|
|
|
leg0.yRot += c0;
|
|
leg1.yRot -= c0;
|
|
leg2.yRot += c1;
|
|
leg3.yRot -= c1;
|
|
leg4.yRot += c2;
|
|
leg5.yRot -= c2;
|
|
leg6.yRot += c3;
|
|
leg7.yRot -= c3;
|
|
|
|
leg0.zRot += s0;
|
|
leg1.zRot -= s0;
|
|
leg2.zRot += s1;
|
|
leg3.zRot -= s1;
|
|
leg4.zRot += s2;
|
|
leg5.zRot -= s2;
|
|
leg6.zRot += s3;
|
|
leg7.zRot -= s3;
|
|
}
|
|
};
|
|
|
|
#endif /*NET_MINECRAFT_CLIENT_MODEL__SpiderModel_H__*/
|