CreateClientConVar( "pp_dof", "0", false, false ) CreateClientConVar( "pp_dof_initlength", "256", false, false ) CreateClientConVar( "pp_dof_spacing", "512", false, false ) // Global table to hold the DoF effect DOF_Ents = {} DOF_SPACING = 0 DOF_OFFSET = 0 local NUM_DOF_NODES = 16 function DOF_Kill( ) for k, v in pairs(DOF_Ents) do if (v:IsValid()) then v:Remove() end end DOFModeHack( false ) end function DOF_Start() DOF_Kill() for i=0, NUM_DOF_NODES do local effectdata = EffectData() effectdata:SetScale( i ) util.Effect( "dof_node", effectdata ) end DOFModeHack( true ) end function DOF_Think( ) local ply = LocalPlayer() if ( !ValidEntity( ply ) ) then return end DOF_SPACING = tonumber( ply:GetInfo("pp_dof_spacing") ) DOF_OFFSET = tonumber( ply:GetInfo("pp_dof_initlength") ) end hook.Add( "Think", "DOFThink", DOF_Think ) local function OnChange( name, oldvalue, newvalue ) if ( !GAMEMODE:PostProcessPermitted( "dof" ) ) then return end if ( newvalue != "0" ) then DOF_Start() else DOF_Kill() end end cvars.AddChangeCallback( "pp_dof", OnChange ) /* // Control Panel */ local function BuildControlPanel( CPanel ) CPanel:AddControl( "Header", { Text = "#Depth_Of_Field", Description = "#Depth_Of_Field_Information" } ) CPanel:AddControl( "CheckBox", { Label = "#Depth_Of_Field_Toggle", Command = "pp_dof" } ) CPanel:AddControl( "Slider", { Label = "#Depth_Of_Field_spacing", Command = "pp_dof_spacing", Type = "Float", Min = "8", Max = "1024" } ) CPanel:AddControl( "Slider", { Label = "#Depth_Of_Field_start_distance", Command = "pp_dof_initlength", Type = "Float", Min = "9", Max = "1024" } ) end /* // Tool Menu */ local function AddPostProcessMenu() spawnmenu.AddToolMenuOption( "PostProcessing", "PPShader", "DoF", "#Simple DoF", "", "", BuildControlPanel, { SwitchConVar = "pp_dof" } ) end hook.Add( "PopulateToolMenu", "AddPostProcessMenu_DoF", AddPostProcessMenu )