private float[] GetFirstPersonHandsMatrix(EntityAgent entity, float[] viewMat, float deltaTime)
        {
            var modelMat = Mat4f.Invert(Mat4f.Create(), viewMat);

            // If the hands haven't been rendered in the last 10 render ticks, reset wobble and such.
            if (_renderTick - _lastTickHandsRendered > 10)
            {
                _moveWobble    = 0;
                _lastYaw       = entity.Pos.Yaw;;
                _yawDifference = 0;
            }
            _lastTickHandsRendered = _renderTick;


            if (entity.Controls.TriesToMove)
            {
                var moveSpeed = entity.Controls.MovespeedMultiplier * (float)entity.GetWalkSpeedMultiplier();
                _moveWobble += moveSpeed * deltaTime * 5.0F;
            }
            else
            {
                var target = (float)(Math.Round(_moveWobble / Math.PI) * Math.PI);
                var speed  = deltaTime * (0.2F + Math.Abs(target - _moveWobble) * 4);
                if (Math.Abs(target - _moveWobble) < speed)
                {
                    _moveWobble = target;
                }
                else
                {
                    _moveWobble += Math.Sign(target - _moveWobble) * speed;
                }
            }
            _moveWobble = _moveWobble % (GameMath.PI * 2);

            var moveWobbleOffsetX = GameMath.Sin((_moveWobble + GameMath.PI)) * 0.03F;
            var moveWobbleOffsetY = GameMath.Sin(_moveWobble * 2) * 0.02F;


            _yawDifference += GameMath.AngleRadDistance(_lastYaw, entity.Pos.Yaw);
            _yawDifference *= (1 - 0.075F);
            _lastYaw        = entity.Pos.Yaw;

            var yawRotation   = -_yawDifference / 2;
            var pitchRotation = (entity.Pos.Pitch - GameMath.PI) / 4;


            Mat4f.RotateY(modelMat, modelMat, yawRotation);
            Mat4f.Translate(modelMat, modelMat, 0.0F, -0.35F, -0.20F);
            Mat4f.RotateY(modelMat, modelMat, -yawRotation);
            Mat4f.RotateX(modelMat, modelMat, pitchRotation / 2);
            Mat4f.Translate(modelMat, modelMat, 0.0F, 0.0F, -0.20F);
            Mat4f.RotateX(modelMat, modelMat, pitchRotation);
            Mat4f.RotateY(modelMat, modelMat, yawRotation);

            Mat4f.Translate(modelMat, modelMat, moveWobbleOffsetX, moveWobbleOffsetY, 0.0F);
            Mat4f.RotateY(modelMat, modelMat, 90.0F * GameMath.DEG2RAD);

            return(modelMat);
        }