function ENT:CalcView( ply, origin, angles, fov ) local plyangles = ply:GetAimVector():Angle() local viewpos = self.Entity:LocalToWorld( Vector( 0, 0, 16 )) local viewang = self.Entity:GetAngles() -- local viewfov = self.Entity:GetVelocity():Length() * 0.09 // This is all to smooth the angle & FOV of the player self.LastAng = self.LastAng or viewang self.LastPos = self.LastPos or viewpos -- self.LastFov = self.LastFov or viewfov local angdiff = Angle() angdiff.yaw = math.AngleDifference( self.LastAng.yaw, viewang.yaw ) angdiff.pitch = math.AngleDifference( self.LastAng.pitch, viewang.pitch ) angdiff.roll = math.AngleDifference( self.LastAng.roll, viewang.roll ) local posdiff = Vector() posdiff.x = self.LastPos.x - viewpos.x posdiff.y = self.LastPos.y - viewpos.y posdiff.z = self.LastPos.z - viewpos.z -- local fovdiff = self.LastFov - viewfov self.LastAng.yaw = math.ApproachAngle( self.LastAng.yaw, viewang.yaw, angdiff.yaw * FrameTime() * 2 ) self.LastAng.pitch = math.ApproachAngle( self.LastAng.pitch, viewang.pitch, angdiff.pitch * FrameTime() * 2 ) self.LastAng.roll = math.ApproachAngle( self.LastAng.roll, viewang.roll, angdiff.roll * FrameTime() * 2 ) self.LastPos.x = math.Approach( self.LastPos.x, viewpos.x, posdiff.x * FrameTime() * 2 ) self.LastPos.y = math.Approach( self.LastPos.y, viewpos.y, posdiff.y * FrameTime() * 2 ) self.LastPos.z = math.Approach( self.LastPos.z, viewpos.z, posdiff.z * FrameTime() * 2 ) -- self.LastFov = math.Approach( self.LastFov, viewfov, fovdiff * FrameTime() * 2 ) local view = {} view.origin = viewpos self.LastPos - (posdiff * 0.8) view.angles = self.LastAng - (angdiff * 1.5) + plyangles -- view.fov = self.LastFov - (fovdiff * 0.7) return view end