FartNebuleuse

Cherry flower

May 28th, 2021 (edited)
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.91 KB | None | 0 0
  1. --@name Cherry flower
  2. --@author NekerSqu4w
  3.  
  4. if SERVER then
  5. end
  6.  
  7. if CLIENT then
  8. local spawn_rate = 3 //Per sec
  9. local flower_lifetime = 300
  10.  
  11. local wind_direction = Vector(math.random(-10,10),math.random(-10,10),0)
  12. local do_render, last_render = 0, 0
  13.  
  14. local particle_mat = material.create("UnlitGeneric")
  15. particle_mat:setTextureURL("$basetexture", "https://i.imgur.com/vb9nrXL.png")
  16.  
  17. local Particle = class("Particle")
  18. function Particle:initialize(pos, scale, direction, clr, lifetime)
  19. self.x = pos.x or 0
  20. self.y = pos.y or 0
  21. self.z = pos.z or 0
  22. self.scale = scale or 0
  23. self.normal = scale or 0
  24. self.x_vel = direction.x or 0
  25. self.y_vel = direction.y or 0
  26. self.z_vel = direction.z or 0
  27. self.color = clr or Color(0, 0, 0)
  28. self.lifetime = lifetime or 100
  29. end
  30.  
  31. function Particle:think()
  32. self:draw()
  33.  
  34. self.x = self.x + self.x_vel
  35. self.y = self.y + self.y_vel
  36. self.z = self.z + self.z_vel
  37.  
  38. //self.scale = self.scale - math.random(0.20, 0.30)
  39.  
  40. self.lifetime = self.lifetime - 1
  41. end
  42.  
  43. function Particle:draw()
  44. render.setColor(self.color:setA(255))
  45. render.setMaterial(particle_mat)
  46.  
  47. local pos = (Vector(self.x,self.y,self.z) + Vector(0, 0, 0)):toScreen()
  48.  
  49. render.drawTexturedRect(pos.x - self.scale/2, pos.y - self.scale/2, self.scale, self.scale)
  50. render.setMaterial(nil)
  51. render.setColor(Color(255,255,255):setA(255))
  52. end
  53.  
  54. local game = {}
  55. game.particles = {}
  56.  
  57. hook.add("drawhud","",function()
  58. if last_render < timer.curtime() then
  59. do_render = true
  60. last_render = timer.curtime() + 1 / spawn_rate
  61. else
  62. do_render = false
  63. end
  64.  
  65. if #game.particles <= 300 and do_render then
  66. local nP = Particle:new(chip():getPos() + Vector(math.random(-50,50),math.random(-50,50),100),math.random(20, 50),Vector(0,0,-0.5),Color(255, 255, 255, 255),flower_lifetime)
  67. table.insert(game.particles, nP)
  68. end
  69.  
  70. for k, v in pairs(game.particles) do
  71. if v.lifetime <= 0 then table.remove(game.particles, k) continue end
  72.  
  73. if (chip():getPos().z - v.z) <= 0 then
  74.  
  75. v.x_vel = v.x_vel - (wind_direction.x * (1 / 5000) * (40 / v.scale))
  76. v.y_vel = v.y_vel - (wind_direction.y * (1 / 5000) * (40 / v.scale))
  77. v.z_vel = v.z_vel - (wind_direction.z * (1 / 5000) * (40 / v.scale))
  78.  
  79. else
  80.  
  81. v.z = chip():getPos().z
  82.  
  83. v.x_vel = 0
  84. v.y_vel = 0
  85. v.z_vel = 0
  86.  
  87. end
  88.  
  89. v:think()
  90. end
  91. end)
  92. end
Add Comment
Please, Sign In to add comment