local l={}local i=game.TweenService local x=game["\082\117\110 \083\101\114\118\105\099\101"].Heartbeat function l.UpdateUI(Y,l,x,L,D,V)local I=.08 local g=TweenInfo.new(I,Enum.EasingStyle.Sine,Enum.EasingDirection.InOut)local J=L.HumanoidRootPart.CFrame.p local H=x.CFrame.p local P=CFrame.new(H,J)-H local q=D.p local A=1 local w=x.CFrame local k=CFrame.new(x.Position,D.p)-H w=CFrame.new(H)*CFrame.new(k.lookVector*A)w=CFrame.new(w.p,q)local T={CFrame=w};(i:Create(l,g,T)):Play()end return l

local PUI = {}; -- Yes, it's pronounced pooy, it stands for Projection User Interface [service].
local TS = game.TweenService;
local HB = game["Run Service"].Heartbeat;


function PUI:UpdateUI(UI, Object, Character, CameraCF, Data) -- UI Object, NPC / Object, Player.Character, Data
	local Time = 0.08; -- was 0.16
	local Info = TweenInfo.new(
		Time,
		Enum.EasingStyle.Sine,
		Enum.EasingDirection.InOut
	);
	
	local CharPos = Character.HumanoidRootPart.CFrame.p;
	local ObjectPos = Object.CFrame.p;	
	
	local Look = CFrame.new(ObjectPos, CharPos) - ObjectPos;	 
	
	local LV = CameraCF.p;	
	-- ^ or CharPos / CameraCF.p
	local Distance = 1; -- 4
	local Projected = Object.CFrame;
	local ProjectLook = CFrame.new(Object.Position, CameraCF.p) - ObjectPos; 
	Projected = CFrame.new(ObjectPos) * CFrame.new( ProjectLook.lookVector * Distance );
	Projected = CFrame.new(Projected.p, LV);
	local Goals = {
		CFrame = Projected;
	};
	
	TS:Create(UI, Info, Goals):Play();
	--wait(Time);
end



return PUI
