I’m trying to make the player look at the punching bag while moving in half-circle but when I use CFrame.lookAt it causes tons of issue
Here’s the code of the punching bag stuff
function FindNearestTarget(HRP, punchingBagUsed)
local TargetDistance = 50
local Target
--[[for i, v in pairs(workspace.Punchingbag:GetDescendants()) do
if v:IsA("Model") and v:FindFirstChild("Punchingbag") and v.Name ~= char.Name then
local TargetHRP = v.Punchingbag.Bag
local Mag = (HRP.Position - TargetHRP.Position).Magnitude
if Mag < TargetDistance then
TargetDistance = Mag
Target = TargetHRP
end
end
end]]
local Mag = (HRP.Position - punchingBagUsed.Bag.Position).Magnitude
if Mag < TargetDistance then
TargetDistance = Mag
Target = punchingBagUsed.Bag
end
return Target
end
local function OnUpdate()
if Target and LockOn then
local Mag = (Part.Position - Target.Position).Magnitude
print("MAGNITUDE IS : " .. Mag)
Hum.AutoRotate = true
UserInput.MouseBehavior = Enum.MouseBehavior.Default
HRP.CFrame = HRP.CFrame * CFrame.Angles(0, math.rad(-120), 0)
--Camera.CFrame = CFrame.lookAt(Camera.CFrame.Position, (Target.Position + Vector3.new(0, -1, 0)))
if LookingSide == 1 then
if UserInput:IsKeyDown(Enum.KeyCode.A) and theta > -2.5 then
theta -= 0.1
print("THETA IS : " .. theta)
KeyDown = true
HumanoidPosition = Vector3.new(MainPart.Position.X + radius*-math.sin(theta), HumanoidPosition.Y, MainPart.Position.Z + radius*-math.cos(theta))
humanoid:MoveTo(HumanoidPosition)
else
ContextActionService:BindActionAtPriority(
"PunchKeys",
function()
return Enum.ContextActionResult.Sink;
end,
false,
Enum.ContextActionPriority.High.Value,
Enum.PlayerActions.CharacterLeft
)
end
if UserInput:IsKeyDown(Enum.KeyCode.D) and theta < 2.5 then
theta += 0.1
print("THETA IS : " .. theta)
HumanoidPosition = Vector3.new(MainPart.Position.X + radius*-math.sin(theta), HumanoidPosition.Y, MainPart.Position.Z + radius*-math.cos(theta))
humanoid:MoveTo(HumanoidPosition)
else
ContextActionService:BindActionAtPriority(
"PunchKeys",
function()
return Enum.ContextActionResult.Sink;
end,
false,
Enum.ContextActionPriority.High.Value,
Enum.PlayerActions.CharacterRight
)
end
else
if UserInput:IsKeyDown(Enum.KeyCode.A) and theta > -2.5 then
theta -= 0.1
print("THETA IS : " .. theta)
KeyDown = true
HumanoidPosition = Vector3.new(MainPart.Position.X + radius*math.sin(theta), HumanoidPosition.Y, MainPart.Position.Z + radius*math.cos(theta))
humanoid:MoveTo(HumanoidPosition)
else
ContextActionService:BindActionAtPriority(
"PunchKeys",
function()
return Enum.ContextActionResult.Sink;
end,
false,
Enum.ContextActionPriority.High.Value,
Enum.PlayerActions.CharacterLeft
)
end
if UserInput:IsKeyDown(Enum.KeyCode.D) and theta < 2.5 then
theta += 0.1
print("THETA IS : " .. theta)
HumanoidPosition = Vector3.new(MainPart.Position.X + radius*math.sin(theta), HumanoidPosition.Y, MainPart.Position.Z + radius*math.cos(theta))
humanoid:MoveTo(HumanoidPosition)
else
ContextActionService:BindActionAtPriority(
"PunchKeys",
function()
return Enum.ContextActionResult.Sink;
end,
false,
Enum.ContextActionPriority.High.Value,
Enum.PlayerActions.CharacterRight
)
end
end
else
theta = -2.5
Target = nil
LockOn = false
Hum.AutoRotate = false
--M2("On")
UserInput.MouseIconEnabled = true
end
end
BoxingTraining.OnClientEvent:Connect(function(player, punchingBagUsed, spawningPoint, direction)
MainPart = punchingBagUsed.Bag
Part = spawningPoint
LookingSide = direction
radius = (Part.Position - MainPart.Position).Magnitude
local animation = Instance.new("Animation")
animation.AnimationId = "http://www.roblox.com/Asset?ID=16021081080"
local humanoid = char:WaitForChild("Humanoid")
local YourAnimationTrack = humanoid.Animator:LoadAnimation(animation)
ContextActionService:BindActionAtPriority(
"PunchKeys",
function()
return Enum.ContextActionResult.Sink;
end,
false,
Enum.ContextActionPriority.High.Value,
Enum.PlayerActions.CharacterBackward,
Enum.PlayerActions.CharacterForward
)
--[[ContextActionService:BindActionAtPriority(
"BoxingTraining",
function()
print("PLAYER MUST MOVE IN A SPECIFIC DIRECTION")
return Enum.ContextActionResult.Pass
end,
false,
Enum.ContextActionPriority.High.Value,
Enum.PlayerActions.CharacterLeft,
Enum.PlayerActions.CharacterRight
)]]
LockOn = true
Target = FindNearestTarget(HRP, punchingBagUsed)
FightingStance = UserInput.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or (Enum.UserInputType.Touch and UserInput.TouchEnabled) then
if CanPunch == true then
CanPunch = false
YourAnimationTrack.Priority = Enum.AnimationPriority.Action2
YourAnimationTrack:Play()
--hitboxEvent:FireServer(Vector3.new(3,3,3), Vector3.new(2,5), 0, 0.3)
wait(YourAnimationTrack.Length)
CanPunch = true
end
end
end)
Connection = RunService:BindToRenderStep("Camera",Enum.RenderPriority.Camera.Value, OnUpdate)
end)
ReplicatedStorage.UnbindAction.UnbindFightingStance.OnClientEvent:Connect(function()
LockOn = false
ContextActionService:UnbindAction("PunchKeys")
Hum.AutoRotate = true
Camera.CameraType = Enum.CameraType.Custom
--theta = 0
end)