--!optimize 2 --!strict local Camera = {} Camera.__index = Camera Camera.FOV = { Default = 70, Zoomed = 30, } Camera.FOV.Speed = { In = 0.3, Out = 0.4 } Camera.VignetteEnabled = true Camera.CrosshairEffect = true Camera.EffectsEase = Enum.EasingStyle.Quad local Storage = game:GetService("ReplicatedStorage") local Tween = require(Storage:WaitForChild("Tween")) local ZoomTween = Tween.constructor() local VignetteTween = Tween.constructor() function Camera.constructor(CurrentCamera: Camera, Player: Player) return setmetatable({ Camera = CurrentCamera, Player = Player, }, Camera) end function Camera:FirstPerson() self.Player.CameraMode = Enum.CameraMode.LockFirstPerson end function Camera:ThirdPerson() self.Player.CameraMode = Enum.CameraMode.Classic end --damn... type Vignette = any type Crosshair = any function Camera:ZoomIn(Vignette: Vignette?, Crosshair: Crosshair?) ZoomTween:Start(self.Camera, { FieldOfView = Camera.FOV.Zoomed }, TweenInfo.new(Camera.FOV.Speed.In, Camera.EffectsEase)) if Camera.VignetteEnabled then if Vignette then Vignette.Screen.Enabled = true VignetteTween:Start(Vignette.Icon, { ImageTransparency = 0 }, TweenInfo.new(Camera.FOV.Speed.In, Camera.EffectsEase)) else warn("Camera: no Vignette object was provided for the camera", debug.traceback()) end end if Camera.CrosshairEffect then if Crosshair then VignetteTween:Start(Crosshair.Icon, { ImageTransparency = .9 }, TweenInfo.new(Camera.FOV.Speed.In, Camera.EffectsEase)) else warn("Camera: no Crosshair object was provided for the camera", debug.traceback()) end end end function Camera:ZoomOut(Vignette: Vignette?, Crosshair: Crosshair?) ZoomTween:Start(self.Camera, { FieldOfView = Camera.FOV.Default }, TweenInfo.new(Camera.FOV.Speed.Out, Camera.EffectsEase)) if Camera.VignetteEnabled then if Vignette then Vignette.Screen.Enabled = true VignetteTween:Start(Vignette.Icon, { ImageTransparency = 1 }, TweenInfo.new(Camera.FOV.Speed.Out, Camera.EffectsEase)) else warn("Camera: no Vignette object was provided for the camera", debug.traceback()) end end if Camera.CrosshairEffect then if Crosshair then VignetteTween:Start(Crosshair.Icon, { ImageTransparency = 0 }, TweenInfo.new(Camera.FOV.Speed.In, Camera.EffectsEase)) else warn("Camera: no Crosshair object was provided for the camera", debug.traceback()) end end end return Camera