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 "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}