the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 90 lines 3.0 kB view raw
1#include "stdafx.h" 2#include "..\Minecraft.World\net.minecraft.world.entity.animal.h" 3#include "ModelPart.h" 4#include "VillagerGolemModel.h" 5 6VillagerGolemModel::VillagerGolemModel(float g, float yOffset) 7{ 8 int xTexSize = 128; 9 int yTexSize = 128; 10 11 head = (new ModelPart(this))->setTexSize(xTexSize, yTexSize); 12 head->setPos(0, 0 + yOffset, -2); 13 head->texOffs(0, 0)->addBox(-4, -12, -5.5f, 8, 10, 8, g); 14 head->texOffs(24, 0)->addBox(-1, -5.0f, -7.5f, 2, 4, 2, g); 15 16 body = (new ModelPart(this))->setTexSize(xTexSize, yTexSize); 17 body->setPos(0, 0 + yOffset, 0); 18 body->texOffs(0, 40)->addBox(-9, -2, -6, 18, 12, 11, g); 19 body->texOffs(0, 70)->addBox(-4.5f, 10, -3, 9, 5, 6, g + 0.5f); 20 21 arm0 = (new ModelPart(this))->setTexSize(xTexSize, yTexSize); 22 arm0->setPos(0, -7, 0); 23 arm0->texOffs(60, 21)->addBox(-13, -2.5f, -3, 4, 30, 6, g); 24 25 arm1 = (new ModelPart(this))->setTexSize(xTexSize, yTexSize); 26 arm1->setPos(0, -7, 0); 27 arm1->texOffs(60, 58)->addBox(9, -2.5f, -3, 4, 30, 6, g); 28 29 leg0 = (new ModelPart(this, 0, 22))->setTexSize(xTexSize, yTexSize); 30 leg0->setPos(-4.0f, 18 + yOffset, 0); 31 leg0->texOffs(37, 0)->addBox(-3.5f, -3, -3, 6, 16, 5, g); 32 33 leg1 = (new ModelPart(this, 0, 22))->setTexSize(xTexSize, yTexSize); 34 leg1->bMirror = true; 35 leg1->texOffs(60, 0)->setPos(5.0f, 18 + yOffset, 0); 36 leg1->addBox(-3.5f, -3, -3, 6, 16, 5, g); 37} 38 39void VillagerGolemModel::render(shared_ptr<Entity> entity, float time, float r, float bob, float yRot, float xRot, float scale, bool usecompiled) 40{ 41 setupAnim(time, r, bob, yRot, xRot, scale, entity); 42 43 head->render(scale, usecompiled); 44 body->render(scale, usecompiled); 45 leg0->render(scale, usecompiled); 46 leg1->render(scale, usecompiled); 47 arm0->render(scale, usecompiled); 48 arm1->render(scale, usecompiled); 49} 50 51void VillagerGolemModel::setupAnim(float time, float r, float bob, float yRot, float xRot, float scale, shared_ptr<Entity> entity, unsigned int uiBitmaskOverrideAnim) 52{ 53 head->yRot = yRot / (float) (180 / PI); 54 head->xRot = xRot / (float) (180 / PI); 55 56 leg0->xRot = (-1.5f * triangleWave(time, 13)) * r; 57 leg1->xRot = (1.5f * triangleWave(time, 13)) * r; 58 leg0->yRot = 0; 59 leg1->yRot = 0; 60} 61 62void VillagerGolemModel::prepareMobModel(shared_ptr<LivingEntity> mob, float time, float r, float a) 63{ 64 shared_ptr<VillagerGolem> vg = dynamic_pointer_cast<VillagerGolem>(mob); 65 int attackTick = vg->getAttackAnimationTick(); 66 if (attackTick > 0) 67 { 68 arm0->xRot = (-2.0f + 1.5f * triangleWave(attackTick - a, 10)); 69 arm1->xRot = (-2.0f + 1.5f * triangleWave(attackTick - a, 10)); 70 } 71 else 72 { 73 int offerFlowerTick = vg->getOfferFlowerTick(); 74 if (offerFlowerTick > 0) 75 { 76 arm0->xRot = -0.8f + 0.025f * triangleWave(offerFlowerTick, 70); 77 arm1->xRot = 0; 78 } 79 else 80 { 81 arm0->xRot = (-0.2f + 1.5f * triangleWave(time, 13)) * r; 82 arm1->xRot = (-0.2f - 1.5f * triangleWave(time, 13)) * r; 83 } 84 } 85} 86 87float VillagerGolemModel::triangleWave(float bob, float period) 88{ 89 return (abs(fmod(bob, period) - period * 0.5f) - period * 0.25f) / (period * 0.25f); 90}