add sborka
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
|
||||
local MuzzleFX = Material("sprites/strider_blackball")
|
||||
local BeamFX = Material("sprites/bluelaser1")
|
||||
local WarpFX = Material("particle/warp5_warp")
|
||||
|
||||
function EFFECT:Init( data )
|
||||
self.Ent = data:GetEntity()
|
||||
|
||||
if not IsValid( self.Ent ) then return end
|
||||
|
||||
self.LifeTime = 0.2
|
||||
self.DieTime = CurTime() + self.LifeTime
|
||||
|
||||
self.Ent:EmitSound( "NPC_Strider.Shoot" )
|
||||
|
||||
self:SetRenderBoundsWS( self.Ent:GetPos(), self.Ent:GetPos() - self.Ent:GetUp() * 50000 )
|
||||
end
|
||||
|
||||
function EFFECT:Think()
|
||||
if (self.DieTime or 0) < CurTime() then
|
||||
self:DoImpactEffect()
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function EFFECT:DoImpactEffect()
|
||||
if not IsValid( self.Ent ) then return end
|
||||
|
||||
local Muzzle = self.Ent:GetAttachment( self.Ent:LookupAttachment( "bellygun" ) )
|
||||
|
||||
if not Muzzle then return end
|
||||
|
||||
local trace = util.TraceLine( {
|
||||
start = Muzzle.Pos,
|
||||
endpos = Muzzle.Pos + self.Ent:GetAimVector() * 50000,
|
||||
mask = MASK_SOLID_BRUSHONLY
|
||||
} )
|
||||
|
||||
local effectdata = EffectData()
|
||||
effectdata:SetOrigin( trace.HitPos + trace.HitNormal )
|
||||
effectdata:SetRadius( 256 )
|
||||
effectdata:SetNormal( trace.HitNormal )
|
||||
util.Effect( "AR2Explosion", effectdata, true, true )
|
||||
end
|
||||
|
||||
function EFFECT:Render()
|
||||
if not IsValid( self.Ent ) then return end
|
||||
|
||||
local Muzzle = self.Ent:GetAttachment( self.Ent:LookupAttachment( "bellygun" ) )
|
||||
|
||||
if not Muzzle then return end
|
||||
|
||||
local T = CurTime()
|
||||
local Delta = ((T + self.LifeTime) - self.DieTime) / self.LifeTime
|
||||
|
||||
local trace = util.TraceLine( {
|
||||
start = Muzzle.Pos,
|
||||
endpos = Muzzle.Pos + self.Ent:GetAimVector() * 50000,
|
||||
mask = MASK_SOLID_BRUSHONLY
|
||||
} )
|
||||
|
||||
self:SetRenderBoundsWS( Muzzle.Pos, trace.HitPos )
|
||||
|
||||
render.SetMaterial( BeamFX )
|
||||
render.DrawBeam( Muzzle.Pos, trace.HitPos, (Delta ^ 2) * 64, 0, 1, Color( 255, 255, 255 ) )
|
||||
|
||||
local Sub = trace.HitPos - Muzzle.Pos
|
||||
local Dir = Sub:GetNormalized()
|
||||
local Dist = Sub:Length()
|
||||
|
||||
local Scale = 512 - Delta * 512
|
||||
render.SetMaterial( WarpFX )
|
||||
render.DrawSprite( Muzzle.Pos + Dir * Dist * Delta, Scale, Scale, Color( 255, 255, 255, 255) )
|
||||
end
|
||||
Reference in New Issue
Block a user