Hello everyone,
I'm designing a turret that consists of two main components, the base of the turret that only needs to rotate on the Y axis and the barrel of the turret that I need to aim on the X and Z axis.
Posted below is the entire function I have setup for the aiming of the turret, currently I'm trying to keep them in sync through lerping, but the turret doesn't stay together perfectly the parts lag behind each other a bit. I have also tried tweening for this but the lag is even worse.
Another idea I had for this was using welds, but since the CFrame is based off of offset instead of realworld position I couldn't figure out how to rotate the bricks to face the correct way properly.
Does anyone have any idea how this problem could be solved?
Thanks for reading.
function aim(target)
print("Aim function called")
aiming = true
repeat
wait()
local look = Vector3.new(target.Position.X,turretBase.Position.Y, target.Position.Z)
local look2 = Vector3.new(target.Position.X,standBasePivot.Position.Y, target.Position.Z)
local diff = (turretBase.CFrame.LookVector - CFrame.new(turretBase.CFrame.p,look).LookVector).Magnitude
--print("turretBase diff:",diff)
for i=0,1,0.01 do
wait()
local x,y,z = standBasePivot.CFrame:ToEulerAnglesXYZ()
local x1,y1,z1 = standBase.CFrame:ToEulerAnglesXYZ()
standBase.CFrame = standBase.CFrame:Lerp(CFrame.new(standBasePivot.CFrame.p, target.Position - Vector3.new(0,3,0)),i)
turretBase.CFrame = CFrame.new(turretBase.CFrame.p) * CFrame.Angles(x1,y1,0)
--turretBase.CFrame = turretBase.CFrame:Lerp(CFrame.new(turretBase.CFrame.p,look),i)
--standBase.CFrame = standBase.CFrame:Lerp(CFrame.new(standBasePivot.CFrame.p) * CFrame.Angles(x1,y,z1),i)
if i > 0.3 then
break
end
end
local diff = (standBase.CFrame.LookVector - (CFrame.new(standBasePivot.CFrame.p, target.Position - Vector3.new(0,3,0))).LookVector).Magnitude
--print("standBase diff:",diff)
--[[for i=0,1,0.01/diff do
wait()
--turretBase.CFrame = turretBase.CFrame:Lerp(CFrame.new(turretBase.CFrame.p,look),i)
standBase.CFrame = standBase.CFrame:Lerp(CFrame.new(standBasePivot.CFrame.p, target.Position - Vector3.new(0,3,0)),i)
if i > 0.3 then
break
end
end--]]
local x,y,z = standBase.CFrame:ToEulerAnglesXYZ()
print("X:",x,"Y",y,"Z",z)
local dist = (myTorso.Position - target.Position).magnitude
until target == nil or checkSight(target) == false or target.Parent.Humanoid.Health < 1 or dist < 10 or dist > searchRadius
aiming = false
print("Finished aiming...")
end
