the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 54 lines 1.4 kB view raw
1#include "stdafx.h" 2#include "net.minecraft.world.entity.h" 3#include "net.minecraft.world.entity.ai.control.h" 4#include "BodyControl.h" 5 6const float BodyControl::maxClampAngle = 75.0f; 7 8BodyControl::BodyControl(LivingEntity *mob) 9{ 10 this->mob = mob; 11 12 timeStill = 0; 13 lastHeadY = 0.0f; 14} 15 16void BodyControl::clientTick() 17{ 18 double xd = mob->x - mob->xo; 19 double zd = mob->z - mob->zo; 20 21 if (xd * xd + zd * zd > MoveControl::MIN_SPEED_SQR) 22 { 23 // we are moving. 24 mob->yBodyRot = mob->yRot; 25 mob->yHeadRot = clamp(mob->yBodyRot, mob->yHeadRot, maxClampAngle); 26 lastHeadY = mob->yHeadRot; 27 timeStill = 0; 28 return; 29 } 30 31 // Body will align to head after looking long enough in a direction 32 float clampAngle = maxClampAngle; 33 if (abs(mob->yHeadRot - lastHeadY) > 15) 34 { 35 timeStill = 0; 36 lastHeadY = mob->yHeadRot; 37 } 38 else 39 { 40 ++timeStill; 41 static const int timeStillBeforeTurn = 10; 42 if (timeStill > timeStillBeforeTurn) clampAngle = max(1 - (timeStill - timeStillBeforeTurn) / 10.f, 0.0f) * maxClampAngle; 43 } 44 45 mob->yBodyRot = clamp(mob->yHeadRot, mob->yBodyRot, clampAngle); 46} 47 48float BodyControl::clamp(float clampTo, float clampFrom, float clampAngle) 49{ 50 float headDiffBody = Mth::wrapDegrees(clampTo - clampFrom); 51 if (headDiffBody < -clampAngle) headDiffBody = -clampAngle; 52 if (headDiffBody >= clampAngle) headDiffBody = +clampAngle; 53 return clampTo - headDiffBody; 54}