Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local PenetColor = Color(255, 255, 255, 255)
- local PenetMat = Material("trails/smoke")
- local PenetMat2 = Material("effects/yellowflare")
- local cv_gv = GetConVar("sv_gravity")
- function EFFECT:Init(data)
- self.StartPos = data:GetOrigin()
- self.Dir = data:GetNormal()
- self.Dir:Normalize()
- self.Len = 32
- self.EndPos = self.StartPos + self.Dir * self.Len
- self.LifeTime = 0.75
- self.DieTime = CurTime() + self.LifeTime
- self.Thickness = 1
- self.Grav = Vector(0, 0, -cv_gv:GetFloat())
- self.PartMult = data:GetMagnitude()
- self.SparkLife = 0.3
- self.WeaponEnt = data:GetEntity()
- if not IsValid(self.WeaponEnt) then return end
- end
- end
- function EFFECT:Think()
- if self.DieTime and (CurTime() > self.DieTime) then return false end
- return true
- end
- function EFFECT:Render()
- if self.DieTime then
- local fDelta = (self.DieTime - CurTime()) / self.LifeTime
- fDelta = math.Clamp(fDelta, 0, 1)
- render.SetMaterial(PenetMat)
- local color = ColorAlpha(PenetColor, 32 * fDelta)
- local precision = 16
- local i = 1
- while i <= precision do
- render.DrawBeam(self.StartPos + self.Dir * self.Len * ((i - 1) / precision), self.StartPos + self.Dir * self.Len * (i / precision), self.Thickness * fDelta * (1 - i / precision), 0.5, 0.5, color)
- i = i + 1
- end
- render.SetMaterial(PenetMat2)
- i = 1
- while i <= precision do
- render.DrawBeam(self.StartPos + self.Dir * self.Len * ((i - 1) / precision), self.StartPos + self.Dir * self.Len * (i / precision), self.Thickness / 3 * 2 * fDelta * (1 - i / precision), 0.5, 0.5, color)
- i = i + 1
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement