summaryrefslogtreecommitdiff
path: root/entities/effects/fire_tracer/init.lua
blob: eef727aac13bcb456425f1f843d03ff08c127f19 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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