the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#include "stdafx.h"
2#include "SilverfishModel.h"
3#include "Cube.h"
4#include "..\Minecraft.World\Mth.h"
5#include "ModelPart.h"
6
7const int SilverfishModel::BODY_SIZES[BODY_COUNT][3] = {
8 {
9 3, 2, 2
10 }, {
11 4, 3, 2
12 }, {
13 6, 4, 3
14 }, {
15 3, 3, 3
16 }, {
17 2, 2, 3
18 }, {
19 2, 1, 2
20 }, {
21 1, 1, 2
22 },
23};
24
25const int SilverfishModel::BODY_TEXS[BODY_COUNT][2] = {
26 {
27 0, 0
28 }, {
29 0, 4
30 }, {
31 0, 9
32 }, {
33 0, 16
34 }, {
35 0, 22
36 }, {
37 11, 0
38 }, {
39 13, 4
40 },
41};
42
43SilverfishModel::SilverfishModel()
44{
45 bodyParts = ModelPartArray(BODY_COUNT);
46 float placement = -3.5f;
47 for (unsigned int i = 0; i < bodyParts.length; i++)
48 {
49 bodyParts[i] = new ModelPart(this, BODY_TEXS[i][0], BODY_TEXS[i][1]);
50 bodyParts[i]->addBox(BODY_SIZES[i][0] * -0.5f, 0, BODY_SIZES[i][2] * -0.5f, BODY_SIZES[i][0], BODY_SIZES[i][1], BODY_SIZES[i][2]);
51 bodyParts[i]->setPos(0.0f, 24.0f - (float)BODY_SIZES[i][1], placement);
52 zPlacement[i] = placement;
53 if (i < bodyParts.length - 1)
54 {
55 placement += (BODY_SIZES[i][2] + BODY_SIZES[i + 1][2]) * .5f;
56 }
57 }
58
59 bodyLayers = ModelPartArray(3);
60 bodyLayers[0] = new ModelPart(this, 20, 0);
61 bodyLayers[0]->addBox(-5, 0, BODY_SIZES[2][2] * -0.5f, 10, 8, BODY_SIZES[2][2]);
62 bodyLayers[0]->setPos(0, 24 - 8, zPlacement[2]);
63 bodyLayers[1] = new ModelPart(this, 20, 11);
64 bodyLayers[1]->addBox(-3, 0, BODY_SIZES[4][2] * -0.5f, 6, 4, BODY_SIZES[4][2]);
65 bodyLayers[1]->setPos(0, 24 - 4, zPlacement[4]);
66 bodyLayers[2] = new ModelPart(this, 20, 18);
67 bodyLayers[2]->addBox(-3, 0, BODY_SIZES[4][2] * -0.5f, 6, 5, BODY_SIZES[1][2]);
68 bodyLayers[2]->setPos(0, 24 - 5, zPlacement[1]);
69
70 // 4J added - compile now to avoid random performance hit first time cubes are rendered
71 for (unsigned int i = 0; i < bodyParts.length; i++)
72 {
73 bodyParts[i]->compile(1.0f/16.0f);
74 }
75 bodyLayers[0]->compile(1.0f/16.0f);
76 bodyLayers[1]->compile(1.0f/16.0f);
77 bodyLayers[2]->compile(1.0f/16.0f);
78}
79
80int SilverfishModel::modelVersion()
81{
82 return 38;
83}
84
85void SilverfishModel::render(shared_ptr<Entity> entity, float time, float r, float bob, float yRot, float xRot, float scale, bool usecompiled)
86{
87 setupAnim(time, r, bob, yRot, xRot, scale, entity);
88
89 for (unsigned int i = 0; i < bodyParts.length; i++)
90 {
91 bodyParts[i]->render(scale, usecompiled);
92 }
93 for (unsigned int i = 0; i < bodyLayers.length; i++)
94 {
95 bodyLayers[i]->render(scale, usecompiled);
96 }
97}
98
99void SilverfishModel::setupAnim(float time, float r, float bob, float yRot, float xRot, float scale, shared_ptr<Entity> entity, unsigned int uiBitmaskOverrideAnim)
100{
101 for (unsigned int i = 0; i < bodyParts.length; i++)
102 {
103 bodyParts[i]->yRot = Mth::cos(bob * .9f + i * .15f * PI) * PI * .05f * (1 + abs((int)i - 2));
104 bodyParts[i]->x = Mth::sin(bob * .9f + i * .15f * PI) * PI * .2f * abs((int)i - 2);
105 }
106
107 bodyLayers[0]->yRot = bodyParts[2]->yRot;
108 bodyLayers[1]->yRot = bodyParts[4]->yRot;
109 bodyLayers[1]->x = bodyParts[4]->x;
110 bodyLayers[2]->yRot = bodyParts[1]->yRot;
111 bodyLayers[2]->x = bodyParts[1]->x;
112}