[fixed] gate stool [changed] renderbounds update interval (was 2sec, now 3-10sec) This update breaks compatibility with previous gmod versions (use 572 or earlier for gmod10 v32)
77 lines
2.1 KiB
Lua
77 lines
2.1 KiB
Lua
|
|
include('shared.lua')
|
|
|
|
local matLight = Material( "sprites/light_ignorez" )
|
|
local matBeam = Material( "effects/lamp_beam" )
|
|
|
|
ENT.RenderGroup = RENDERGROUP_BOTH
|
|
|
|
function ENT:Initialize()
|
|
|
|
self.PixVis = util.GetPixelVisibleHandle()
|
|
|
|
end
|
|
|
|
/*---------------------------------------------------------
|
|
Name: Draw
|
|
---------------------------------------------------------*/
|
|
function ENT:Draw()
|
|
|
|
self.BaseClass.Draw( self )
|
|
|
|
Wire_Render(self.Entity)
|
|
|
|
end
|
|
|
|
/*---------------------------------------------------------
|
|
Name: DrawTranslucent
|
|
Desc: Draw translucent
|
|
---------------------------------------------------------*/
|
|
function ENT:DrawTranslucent()
|
|
|
|
self.BaseClass.DrawTranslucent( self )
|
|
|
|
// No glow if we're not switched on!
|
|
if ( !self:GetOn() ) then return end
|
|
|
|
local LightNrm = self.Entity:GetAngles():Up()
|
|
local ViewNormal = self.Entity:GetPos() - EyePos()
|
|
local Distance = ViewNormal:Length()
|
|
ViewNormal:Normalize()
|
|
local ViewDot = ViewNormal:Dot( LightNrm )
|
|
local r, g, b, a = self:GetColor()
|
|
local LightPos = self.Entity:GetPos() + LightNrm * -6
|
|
|
|
// glow sprite
|
|
/*
|
|
render.SetMaterial( matBeam )
|
|
|
|
local BeamDot = BeamDot = 0.25
|
|
|
|
render.StartBeam( 3 )
|
|
render.AddBeam( LightPos + LightNrm * 1, 128, 0.0, Color( r, g, b, 255 * BeamDot) )
|
|
render.AddBeam( LightPos - LightNrm * 100, 128, 0.5, Color( r, g, b, 64 * BeamDot) )
|
|
render.AddBeam( LightPos - LightNrm * 200, 128, 1, Color( r, g, b, 0) )
|
|
render.EndBeam()
|
|
*/
|
|
|
|
if ( ViewDot >= 0 ) then
|
|
|
|
render.SetMaterial( matLight )
|
|
local Visibile = util.PixelVisible( LightPos, 16, self.PixVis )
|
|
|
|
if (!Visibile) then return end
|
|
|
|
local Size = math.Clamp( Distance * Visibile * ViewDot * 2, 64, 512 )
|
|
|
|
Distance = math.Clamp( Distance, 32, 800 )
|
|
local Alpha = math.Clamp( (1000 - Distance) * Visibile * ViewDot, 0, 100 )
|
|
local Col = Color( r, g, b, Alpha )
|
|
|
|
render.DrawSprite( LightPos, Size, Size, Col, Visibile * ViewDot )
|
|
render.DrawSprite( LightPos, Size*0.4, Size*0.4, Color(255, 255, 255, Alpha), Visibile * ViewDot )
|
|
|
|
end
|
|
|
|
end
|