Here I've made a script stored in the ServerScriptService where the AI would turn around and face towards the targeted brick
local dude = workspace.Noob
local faceTarget = function(target)
local settings = {
horizontalRange = math.rad(math.huge);
verticalRange = math.rad(math.huge);
maxHorizontalWaist = math.rad(math.huge);
}
local hrp = dude:WaitForChild("HumanoidRootPart");
local torsojoint = hrp:WaitForChild("Root Hip");
local tjC0 = torsojoint.C0;
local springPart = dude:WaitForChild("Spring");
local BP = springPart:WaitForChild("BodyPosition");
BP.Position = Vector3.new();
springPart.CFrame = CFrame.new();
springPart.Anchored = false;
local lookAt = function(thing)
local eye = (hrp.CFrame * CFrame.new(0, 0, 0)):pointToObjectSpace(thing).Unit;
local horizontal = -math.atan2(eye.x, -eye.z);
local vertical = math.asin(eye.y);
local goal = Vector3.new();
if not (math.abs(horizontal) > settings.horizontalRange or math.abs(vertical) > settings.verticalRange) then
local hsign, habs = math.sign(horizontal), math.abs(horizontal);
local hwaist = habs*1.1;
if (hwaist > settings.maxHorizontalWaist) then
local remainder = hwaist - settings.maxHorizontalWaist;
hwaist = settings.maxHorizontalWaist;
end
goal = Vector3.new(hsign, hsign*hwaist, vertical);
end
return goal;
end
game:GetService("RunService").Heartbeat:Connect(function(dt)
BP.Position = lookAt(target.Position);
local set = springPart.Position;
torsojoint.C0 = tjC0 * CFrame.fromEulerAnglesYXZ(0, 0, set.y);
end);
end
faceTarget(workspace.Target)
Here's the issue: https://www.youtube.com/watch?v=zayt7CXnHT0&feature=youtu.be
The noob keeps unnecessarily turning a full 360 when the brick is the opposite of the Noob's original direction (The rotation before I started to go Run mode)
