Rotating a model not working

script:

if RHeld == true and not rebounce then
			rebounce = true
			circle:PivotTo((CFrame.new(PosX, -2.75, PosZ) + bruh * (modelSize * 0.5)) * CFrame.Angles(0, math.rad(90), 0))
			wait(0.5)
			rebounce = false
		else
				circle:PivotTo(CFrame.new(PosX,  -2.75, PosZ)+ (bruh * (modelSize*0.5)))
			
		end

it rotates, but turns back into original position a few frames later

The conditional is wrong; you set rebounce to true, which makes not rebounce false, which makes the else part of the conditional run.

i need

circle:PivotTo(CFrame.new(PosX,  -2.75, PosZ)+ (bruh * (modelSize*0.5)))

to always run, ive tried just doing

circle:PivotTo(CFrame.new(PosX,  -2.75, PosZ)+ (bruh * (modelSize*0.5)))
if RHeld == true and not rebounce then
			rebounce = true
			circle:PivotTo(circle:GetPivot* CFrame.Angles(0, math.rad(90), 0))
			wait(0.5)
			rebounce = false
	end

but got the same result

Try changing the conditional to

if RHeld == true or rebounce then
    -- what is currently in the thing
end

i don’t think you understand, i am trying to make it rotate when rheld is true, but it can’t because there are two PivotTo, i need the

circle:PivotTo(CFrame.new(PosX,  -2.75, PosZ)+ (bruh * (modelSize*0.5)))

to always run

heres the script right now:

	--	circle:PivotTo(CFrame.new(PosX,  -2.75, PosZ)+ (bruh * (modelSize*0.5)))
		if RHeld == true and not rebounce then
			rebounce = true
			circle:PivotTo(circle:GetPivot() * CFrame.Angles(0, math.rad(90), 0))
			wait(0.5)
			
			rebounce = false
			
		end

without the first line, it rotates fine, but when i enable the second line, the video in the post happens

Remove the rebounce completely if that is the case. Are you trying to put a cooldown on the rotation?