Advertisement
Guest User

asd

a guest
Jul 16th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.06 KB | None | 0 0
  1. local PenetColor = Color(255, 255, 255, 255)
  2. local PenetMat = Material("trails/smoke")
  3. local PenetMat2 = Material("effects/yellowflare")
  4.  
  5. local cv_gv = GetConVar("sv_gravity")
  6.  
  7. function EFFECT:Init(data)
  8. self.StartPos = data:GetOrigin()
  9. self.Dir = data:GetNormal()
  10. self.Dir:Normalize()
  11. self.Len = 32
  12. self.EndPos = self.StartPos + self.Dir * self.Len
  13. self.LifeTime = 0.75
  14. self.DieTime = CurTime() + self.LifeTime
  15. self.Thickness = 1
  16. self.Grav = Vector(0, 0, -cv_gv:GetFloat())
  17. self.PartMult = data:GetMagnitude()
  18. self.SparkLife = 0.3
  19. self.WeaponEnt = data:GetEntity()
  20. if not IsValid(self.WeaponEnt) then return end
  21.  
  22. if self.WeaponEnt.TracerName then
  23. local fx = EffectData()
  24. fx:SetStart(self.StartPos)
  25. local traceres = util.QuickTrace(self.StartPos, self.Dir * 9999999, nil)
  26. fx:SetOrigin(traceres.HitPos or self.StartPos)
  27. util.Effect(self.WeaponEnt.TracerName, fx)
  28. self:Remove()
  29. --Sparks
  30. --Impact
  31. else
  32. local emitter = ParticleEmitter(self.StartPos)
  33. --[[
  34. for i = 1, cv_sc:GetFloat() * self.PartMult * 0.1 do
  35. local part = emitter:Add("effects/yellowflare", self.StartPos)
  36. part:SetVelocity((self.Dir + VectorRand() * 0.5) * math.Rand(75, 185))
  37. part:SetDieTime(math.Rand(0.25, 1) * self.SparkLife)
  38. part:SetStartAlpha(255)
  39. part:SetStartSize(math.Rand(2, 4))
  40. part:SetEndSize(0)
  41. part:SetRoll(0)
  42. part:SetGravity(self.Grav)
  43. part:SetCollide(true)
  44. part:SetBounce(0.55)
  45. part:SetAirResistance(0.5)
  46. part:SetStartLength(0.2)
  47. part:SetEndLength(0)
  48. part:SetVelocityScale(true)
  49. part:SetCollide(true)
  50. end
  51. ]]--
  52.  
  53. local part = emitter:Add("effects/select_ring", self.StartPos)
  54. part:SetStartAlpha(225)
  55. part:SetStartSize(1)
  56. part:SetDieTime(self.LifeTime / 5)
  57. part:SetEndSize(0)
  58. part:SetEndAlpha(0)
  59. part:SetRoll(math.Rand(0, 360))
  60. part:SetColor(200, 200, 200)
  61. part = emitter:Add("effects/select_ring", self.StartPos)
  62. part:SetStartAlpha(255)
  63. part:SetStartSize(1.5 * self.PartMult)
  64. part:SetDieTime(self.LifeTime / 6)
  65. part:SetEndSize(0)
  66. part:SetEndAlpha(0)
  67. part:SetRoll(math.Rand(0, 360))
  68. part:SetColor(200, 200, 200)
  69. emitter:Finish()
  70. end
  71. end
  72.  
  73. function EFFECT:Think()
  74. if self.DieTime and (CurTime() > self.DieTime) then return false end
  75.  
  76. return true
  77. end
  78.  
  79. function EFFECT:Render()
  80. if self.DieTime then
  81. local fDelta = (self.DieTime - CurTime()) / self.LifeTime
  82. fDelta = math.Clamp(fDelta, 0, 1)
  83. render.SetMaterial(PenetMat)
  84. local color = ColorAlpha(PenetColor, 32 * fDelta)
  85. local precision = 16
  86. local i = 1
  87.  
  88. while i <= precision do
  89. 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)
  90. i = i + 1
  91. end
  92.  
  93. render.SetMaterial(PenetMat2)
  94. i = 1
  95.  
  96. while i <= precision do
  97. 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)
  98. i = i + 1
  99. end
  100. end
  101. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement