add sborka
This commit is contained in:
103
garrysmod/addons/lvs_base/lua/effects/lvs_laser_charge.lua
Normal file
103
garrysmod/addons/lvs_base/lua/effects/lvs_laser_charge.lua
Normal file
@@ -0,0 +1,103 @@
|
||||
|
||||
EFFECT.HeatWaveMat = Material( "particle/warp1_warp" )
|
||||
EFFECT.GlowMat = Material( "sprites/light_glow02_add" )
|
||||
|
||||
function EFFECT:Init( data )
|
||||
self.Ent = data:GetEntity()
|
||||
self.ID = data:GetAttachment()
|
||||
|
||||
if not IsValid( self.Ent ) then return end
|
||||
|
||||
|
||||
local att = self.Ent:GetAttachment( self.ID )
|
||||
|
||||
if not att then return end
|
||||
|
||||
local Pos = att.Pos
|
||||
|
||||
self.LifeTime = 0.35
|
||||
self.DieTime = CurTime() + self.LifeTime
|
||||
|
||||
self.Emitter = ParticleEmitter( Pos, false )
|
||||
self.Particles = {}
|
||||
end
|
||||
|
||||
function EFFECT:Think()
|
||||
if (self.DieTime or 0) < CurTime() or not IsValid( self.Ent ) then
|
||||
if IsValid( self.Emitter ) then
|
||||
self.Emitter:Finish()
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
self:DoSpark()
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function EFFECT:DoSpark()
|
||||
local T = CurTime()
|
||||
|
||||
if (self._Next or 0) > T then return end
|
||||
|
||||
self._Next = T + 0.01
|
||||
|
||||
if not IsValid( self.Emitter ) then return end
|
||||
|
||||
if not IsValid( self.Ent ) or not self.ID then return end
|
||||
|
||||
local att = self.Ent:GetAttachment( self.ID )
|
||||
|
||||
if not att then return end
|
||||
|
||||
local Pos = att.Pos
|
||||
local Dir = VectorRand() * 25
|
||||
|
||||
for id, particle in pairs( self.Particles ) do
|
||||
if not particle then
|
||||
self.Particles[ id ] = nil
|
||||
|
||||
continue
|
||||
end
|
||||
|
||||
particle:SetGravity( (Pos - particle:GetPos()) * 50 )
|
||||
end
|
||||
|
||||
local particle = self.Emitter:Add( "sprites/rico1", Pos + Dir )
|
||||
|
||||
if not particle then return end
|
||||
|
||||
particle:SetDieTime( 0.25 )
|
||||
particle:SetStartAlpha( 255 )
|
||||
particle:SetEndAlpha( 0 )
|
||||
particle:SetStartSize( math.Rand( 1, 5 ) )
|
||||
particle:SetEndSize( 0 )
|
||||
particle:SetColor( 255, 0, 0 )
|
||||
particle:SetAirResistance( 0 )
|
||||
particle:SetRoll( math.Rand(-10,10) )
|
||||
particle:SetRollDelta( math.Rand(-10,10) )
|
||||
|
||||
table.insert( self.Particles, particle )
|
||||
end
|
||||
|
||||
function EFFECT:Render()
|
||||
if not IsValid( self.Ent ) or not self.ID then return end
|
||||
|
||||
local att = self.Ent:GetAttachment( self.ID )
|
||||
|
||||
if not att then return end
|
||||
|
||||
local Scale = (self.DieTime - CurTime()) / self.LifeTime
|
||||
|
||||
if Scale <= 0 then return end
|
||||
|
||||
local rnd = VectorRand() * math.Rand(0,0.5)
|
||||
|
||||
render.SetMaterial( self.HeatWaveMat )
|
||||
render.DrawSprite( att.Pos, 30 *(1 - Scale), 30 * (1 - Scale), Color( 255, 255, 255, 255) )
|
||||
|
||||
render.SetMaterial( self.GlowMat )
|
||||
render.DrawSprite( att.Pos + rnd, 120 * (1 - Scale), 120 * (1 - Scale), Color(255,0,0,255) )
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user