new post | browse code | authors | help | about

LuaBin 2.0

Viewing file root / lua / postprocess / dof.lua

  1.  
  2. CreateClientConVar( "pp_dof", "0", false, false )      
  3. CreateClientConVar( "pp_dof_initlength", "256", false, false )
  4. CreateClientConVar( "pp_dof_spacing", "512", false, false )
  5.  
  6. // Global table to hold the DoF effect
  7. DOF_Ents                = {}
  8. DOF_SPACING     = 0
  9. DOF_OFFSET              = 0
  10.  
  11. local NUM_DOF_NODES = 16
  12.  
  13. function DOF_Kill( )
  14.  
  15.         for k, v in pairs(DOF_Ents) do
  16.        
  17.                 if (v:IsValid()) then
  18.                         v:Remove()
  19.                 end
  20.        
  21.         end
  22.  
  23.         DOFModeHack( false )
  24.        
  25. end
  26.  
  27.  
  28. function DOF_Start()
  29.  
  30.         DOF_Kill()
  31.        
  32.         for i=0, NUM_DOF_NODES do
  33.                
  34.                 local effectdata = EffectData()
  35.                         effectdata:SetScale( i )
  36.                 util.Effect( "dof_node", effectdata )
  37.        
  38.         end
  39.        
  40.         DOFModeHack( true )
  41.  
  42. end
  43.  
  44.  
  45. function DOF_Think( )
  46.  
  47.         local ply = LocalPlayer()
  48.         if ( !ValidEntity( ply ) ) then return end
  49.        
  50.         DOF_SPACING = tonumber( ply:GetInfo("pp_dof_spacing") )
  51.         DOF_OFFSET = tonumber( ply:GetInfo("pp_dof_initlength") )
  52.  
  53. end
  54.  
  55. hook.Add( "Think", "DOFThink", DOF_Think )
  56.  
  57.  
  58. local function OnChange( name, oldvalue, newvalue )
  59.  
  60.         if ( !GAMEMODE:PostProcessPermitted( "dof" ) ) then     return end
  61.  
  62.         if ( newvalue != "0" ) then
  63.                 DOF_Start()
  64.         else
  65.                 DOF_Kill()
  66.         end
  67.  
  68. end
  69.  
  70. cvars.AddChangeCallback( "pp_dof", OnChange )
  71.  
  72.  
  73. /*
  74. // Control Panel
  75. */
  76. local function BuildControlPanel( CPanel )
  77.  
  78.         CPanel:AddControl( "Header", { Text = "#Depth_Of_Field", Description = "#Depth_Of_Field_Information" }  )
  79.         CPanel:AddControl( "CheckBox", { Label = "#Depth_Of_Field_Toggle", Command = "pp_dof" }  )
  80.                
  81.         CPanel:AddControl( "Slider", { Label = "#Depth_Of_Field_spacing", Command = "pp_dof_spacing", Type = "Float", Min = "8", Max = "1024" }  )     
  82.         CPanel:AddControl( "Slider", { Label = "#Depth_Of_Field_start_distance", Command = "pp_dof_initlength", Type = "Float", Min = "9", Max = "1024" }  )   
  83.        
  84. end
  85.  
  86. /*
  87. // Tool Menu
  88. */
  89. local function AddPostProcessMenu()
  90.  
  91.         spawnmenu.AddToolMenuOption( "PostProcessing", "PPShader", "DoF", "#Simple DoF", "", "", BuildControlPanel, { SwitchConVar = "pp_dof" } )
  92.  
  93. end
  94.  
  95. hook.Add( "PopulateToolMenu", "AddPostProcessMenu_DoF", AddPostProcessMenu )