diff options
Diffstat (limited to 'entities/effects/fire_tracer/init.lua')
| -rw-r--r-- | entities/effects/fire_tracer/init.lua | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/entities/effects/fire_tracer/init.lua b/entities/effects/fire_tracer/init.lua new file mode 100644 index 0000000..3f8842b --- /dev/null +++ b/entities/effects/fire_tracer/init.lua @@ -0,0 +1,87 @@ + +EFFECT.Mat = Material( "trails/plasma" ) +EFFECT.Sprite = Material( "effects/yellowflare" ) + +function EFFECT:Init( data ) + + self.Position = data:GetStart() + self.WeaponEnt = data:GetEntity() + self.Attachment = data:GetAttachment() + + self.StartPos = self:GetTracerShootPos( self.Position, self.WeaponEnt, self.Attachment ) + self.EndPos = data:GetOrigin() + + local dir = self.StartPos - self.EndPos + dir:Normalize() + + self.Dir = dir + + self.Entity:SetRenderBoundsWS( self.StartPos, self.EndPos ) + + self.Alpha = 100 + self.Color = Color( 250, 150, 50, self.Alpha ) + + local dlight = DynamicLight( self:EntIndex() ) + + if dlight then + + dlight.Pos = self.StartPos + dlight.r = 255 + dlight.g = 150 + dlight.b = 50 + dlight.Brightness = 3 + dlight.Decay = 256 + dlight.size = 256 * math.Rand( 0.5, 1.0 ) + dlight.DieTime = CurTime() + 5 + + end + +end + +function EFFECT:Think( ) + + self.Entity:SetRenderBoundsWS( self.StartPos, self.EndPos ) + + self.Alpha = self.Alpha - FrameTime() * 200 + self.Color = Color( 250, 150, 50, self.Alpha ) + + return self.Alpha > 0 + +end + +function EFFECT:Render( ) + + if self.Alpha < 1 then return end + + --[[self.Length = ( self.StartPos - self.EndPos ):Length() + + render.SetMaterial( self.Mat ) + render.DrawBeam( self.StartPos, self.EndPos, ( 100 / self.Alpha ) * 0.5 + 0.5, 0, 0, self.Color )]] + + if ( self.Alpha < 1 ) then return end + + self.Length = (self.StartPos - self.EndPos):Length() + + local texcoord = CurTime() * -0.2 + + for i = 1, 10 do + + render.SetMaterial( self.Mat ) + + texcoord = texcoord + i * 0.05 * texcoord + + render.DrawBeam( self.StartPos, + self.EndPos, + i * self.Alpha * 0.03, + texcoord, + texcoord + (self.Length / (128 + self.Alpha)), + self.Color ) + + render.SetMaterial( self.Sprite ) + + render.DrawSprite( self.StartPos + self.Dir * i, i * 5, i * 5, Color( self.Color.r, self.Color.g, self.Color.b, self.Alpha ) ) + render.DrawSprite( self.EndPos, i * 5, i * 5, Color( self.Color.r, self.Color.g, self.Color.b, self.Alpha ) ) + + end + +end |
