Advertisement
Guest User

Untitled

a guest
Sep 21st, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.01 KB | None | 0 0
  1. init=false
  2. if(not init)then
  3. init=true
  4. oldtype=type
  5.  
  6. function type(var)
  7. if(getmetatable(var) and getmetatable(var).__type)then
  8. if(oldtype(getmetatable(var).__type)=="function")then
  9. return getmetatable(var).__type(var)
  10. elseif(oldtype(getmetatable(var).__type)=="string")then
  11. return getmetatable(var).__type
  12. end
  13. else
  14. return oldtype(var)
  15. end
  16. end
  17. end
  18. local Vector2D={}
  19. Vector2D.__index=function(a,b,c)
  20. if(b=="x")then return a[1] end
  21. if(b=="y")then return a[2] end
  22. end
  23. Vector2D.__call=function(tab,x,y,...)--Argvar here
  24. if(#{...}>0)then error("Too many arguments!") end
  25. local t={x,y}
  26. return setmetatable(t,tab)
  27. end
  28. Vector2D.__tostring=function(tab)
  29. return tab.x.." "..tab.y
  30. end
  31. Vector2D.__type=function() return "Vector2D" end
  32.  
  33. Vector2D.__add=function(a,b) return Vector2D(a.x+b.x,a.y+b.y) end
  34. Vector2D.__mul=function(a,b)
  35. if(type(b)=="Vector2D")then
  36. return Vector2D(a.x*b.x,a.y*b.y)
  37. end
  38. if(type(b)=="number")then
  39. return Vector2D(a.x*b,a.y*b)
  40. end
  41. end
  42. setmetatable(Vector2D,Vector2D)
  43. local a=Vector2D(12,12)
  44.  
  45. local particle2dtable={}
  46. local Particle2D={}
  47. Particle2D.__call=function(tab,...)
  48. local t={}
  49. t._id=#particle2dtable+1
  50. t._created=CurTime()
  51. t.x=256
  52. t.y=256
  53. t.startsize=50
  54. t.endsize=100
  55. t.startalpha=255
  56. t.endalpha=0
  57. t.velocity=Vector2D(0,0)
  58. t.gravity=Vector2D(0,0)
  59. t.r=255
  60. t.g=255
  61. t.b=255
  62. t.w=64
  63. t.h=64
  64. t.rollspeed=-100
  65. t.roll=0
  66. t.lifetime=5
  67. t.radius=10
  68. t.alpha=255
  69. t.mat="gui/silkicons/box"
  70. t.resistance=0
  71. t.collides=true
  72. table.Inherit(t,Particle2D)
  73. setmetatable(t,tab)
  74. particle2dtable[t._id]=t
  75. return t
  76. end
  77. function Particle2D:SetPos(x,y)
  78. if(type(x)=="Vector2D")then
  79. self.x=x.x
  80. self.y=x.y
  81. else
  82. self.x=x
  83. self.y=y
  84. end
  85. end
  86. function Particle2D:SetStartSize(radius)
  87. self.startsize=radius
  88. end
  89. function Particle2D:SetEndSize(radius)
  90. self.endsize=radius
  91. end
  92. function Particle2D:SetStartAlpha(trans)
  93. self.startalpha=trans
  94. end
  95. function Particle2D:SetEndAlpha(trans)
  96. self.endalpha=trans
  97. end
  98. function Particle2D:SetVelocity(v2d)
  99. self.velocity=v2d
  100. end
  101. function Particle2D:GetVelocity()
  102. return self.velocity
  103. end
  104. function Particle2D:SetGravity(v2d)
  105. self.gravity=v2d
  106. end
  107. function Particle2D:SetSize(w,h)
  108. if(not h)then h=w end
  109. self.w=w
  110. self.h=h
  111. end
  112. function Particle2D:SetRollSpeed(speed)
  113. self.rollspeed=speed
  114. end
  115. function Particle2D:SetRoll(roll)
  116. self.roll=roll
  117. end
  118. function Particle2D:SetColor(r,g,b)
  119. if(type(r)=="table" and r.r and r.g and r.b)then--It's a color table
  120. self.r=r.r
  121. self.g=r.g
  122. self.b=r.b
  123. else
  124. self.r=r
  125. self.g=g
  126. self.b=b
  127. end
  128. end
  129. function Particle2D:SetLifeTime(time)
  130. self.lifetime=time
  131. end
  132. function Particle2D:SetMaterial(texture)
  133. self.mat=texture
  134. end
  135. function Particle2D:SetResistance(res)
  136. self.resistance=res
  137. end
  138. function Particle2D:EnableCollision(bool)
  139. self.collides=true
  140. end
  141. function Particle2D:Terminate()
  142. particle2dtable[self._id]=nil
  143. end
  144. function Particle2D:Draw()
  145. if(not self._init)then
  146. self._init=true
  147. self._lerptime=CurTime()+self.lifetime
  148. mat=surface.GetTextureID(self.mat)--Boosts fps
  149. end
  150. local lerp=(self._lerptime-CurTime())/self.lifetime
  151. self.alpha=Lerp(1-lerp,self.startalpha,self.endalpha)
  152. self:SetSize(Lerp(1-lerp,self.startsize,self.endsize))
  153. local integral=CurTime()-self._created
  154. self.roll=(self.roll+FrameTime()*self.rollspeed)
  155. self.velocity.x=self.velocity.x
  156. local vx=self.velocity.x--Do something with resistance here
  157. local vy=self.velocity.y
  158. local gx=self.gravity.x
  159. local gy=self.gravity.y
  160. local x=(vx*integral)+(gx*integral*integral)
  161. local y=(vy*integral)+(gy*integral*integral)
  162. local vec=Vector2D(x,y)
  163. local posx=self.x+(vx*integral)+(gx*integral*integral)
  164. local posy=self.y+(vy*integral)+(gy*integral*integral)
  165. if(self.collides)then
  166. if(posx>ScrW())then
  167. --Bounce goes here
  168. end
  169. if(posy>ScrH())then
  170. end
  171. posx=math.Clamp(posx,0,ScrW())
  172. posy=math.Clamp(posy,0,ScrH())
  173. end
  174.  
  175. surface.SetTexture(mat)--Move to IMaterial
  176. surface.SetDrawColor(self.r,self.g,self.b,self.alpha)
  177. surface.DrawTexturedRectRotated(posx,posy,self.w,self.h,self.roll)
  178. if(CurTime()>self._lerptime)then
  179. self:Terminate()
  180. end
  181. end
  182.  
  183. setmetatable(Particle2D,Particle2D)
  184. hook.Add("HUDPaint","2DParticleDraw",function()
  185. for k,v in pairs(particle2dtable) do
  186. v:Draw()
  187. end
  188. end)
  189.  
  190. for i=1,260 do
  191. local a=Particle2D()
  192. a:SetRollSpeed(math.Rand(-800,800))
  193. a:SetPos(ScrW()/2,ScrH()/2)
  194. a:SetVelocity(Vector2D(math.Rand(-300,300),math.Rand(-100,-400)))
  195. a:SetGravity(Vector2D(0,128))
  196. a:SetStartSize(18)
  197. a:SetEndSize(42)
  198. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement