CapsAdmin

Untitled

Feb 17th, 2014
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.12 KB | None | 0 0
  1. local PART = {}
  2.  
  3. PART.ClassName = "jiggle"
  4.  
  5. pac.StartStorableVars()
  6.     pac.GetSet(PART, "Strain", 0.5)
  7.     pac.GetSet(PART, "Speed", 1)
  8.     pac.GetSet(PART, "ConstantVelocity", Vector(0, 0, 0))
  9.     pac.GetSet(PART, "LocalVelocity", true)
  10.     pac.GetSet(PART, "JiggleAngle", true)
  11.     pac.GetSet(PART, "JigglePosition", true)
  12.    
  13.     pac.GetSet(PART, "ConstrainPitch", false)
  14.     pac.GetSet(PART, "ConstrainYaw", false)
  15.     pac.GetSet(PART, "ConstrainRoll", false)
  16.    
  17.     pac.GetSet(PART, "ConstrainX", false)
  18.     pac.GetSet(PART, "ConstrainY", false)
  19.     pac.GetSet(PART, "ConstrainZ", false)
  20.    
  21.     pac.GetSet(PART, "ConstrainSphere", 0)
  22.     pac.GetSet(PART, "StopRadius", 0)
  23.     pac.GetSet(PART, "Ground", false)
  24.     pac.GetSet(PART, "ResetOnHide", false)
  25. pac.EndStorableVars()
  26.  
  27. local math_AngleDifference = math.AngleDifference
  28.  
  29. function PART:Reset()
  30.     local pos, ang = self:HasParent() and not self.Parent.NonPhysical and self.Parent:GetDrawPosition() or self:GetBonePosition()
  31.        
  32.     self.pos = pos
  33.     self.vel = Vector()
  34.    
  35.     self.ang = ang
  36.     self.angvel = Angle()
  37. end
  38.  
  39. function PART:Initialize()
  40.     self:Reset()
  41. end
  42.  
  43. function PART:OnShow()
  44.     if self.ResetOnHide and self:IsHidden() then
  45.         self:Reset()
  46.     end
  47. end
  48.  
  49. function PART:OnDraw(owner, pos, ang)  
  50.     local delta = FrameTime()
  51.     local speed = self.Speed * delta
  52.  
  53.     self.vel = self.vel or VectorRand()
  54.     self.pos = self.pos or pos * 1
  55.    
  56.     if self.StopRadius ~= 0 and self.pos and self.pos:Distance(pos) < self.StopRadius then
  57.         self.vel = Vector()
  58.     return end
  59.    
  60.     if self.JigglePosition then        
  61.         if self.ConstrainX then
  62.             self.pos.x = self.pos.x + self.Position.x
  63.         else
  64.             self.vel.x = self.vel.x + (pos.x - self.pos.x)
  65.            
  66.             if self.LocalVelocity then
  67.                 self.vel = self.vel + ang:Right() * self.ConstantVelocity.x
  68.             else
  69.                 self.vel.x = self.vel.x + self.ConstantVelocity.x
  70.             end
  71.            
  72.             self.pos.x = self.pos.x + (self.vel.x * (self.Invert and -speed or speed))
  73.             self.vel.x = self.vel.x * self.Strain
  74.         end
  75.                
  76.         if self.ConstrainY then
  77.             self.pos.y = self.pos.y + self.Position.y
  78.         else
  79.             self.vel.y = self.vel.y + (pos.y - self.pos.y)
  80.            
  81.             if self.LocalVelocity then
  82.                 self.vel = self.vel + ang:Forward() * self.ConstantVelocity.y
  83.             else
  84.                 self.vel.y = self.vel.y + self.ConstantVelocity.y
  85.             end
  86.            
  87.             self.pos.y = self.pos.y + (self.vel.y * speed)
  88.             self.vel.y = self.vel.y * self.Strain
  89.         end
  90.        
  91.         if self.ConstrainZ then
  92.             self.pos.z = self.pos.z + self.Position.z
  93.         else
  94.             self.vel.z = self.vel.z + (pos.z - self.pos.z)
  95.            
  96.             if self.LocalVelocity then
  97.                 self.vel = self.vel + ang:Up() * self.ConstantVelocity.z
  98.             else
  99.                 self.vel.z = self.vel.z + self.ConstantVelocity.z
  100.             end
  101.            
  102.             self.pos.z = self.pos.z + (self.vel.z * speed)
  103.             self.vel.z = self.vel.z * self.Strain
  104.         end
  105.        
  106.         if self.Ground then
  107.             self.pos.z = util.QuickTrace(pos, physenv.GetGravity()*100).HitPos.z
  108.         end
  109.     else
  110.         self.pos = pos
  111.     end
  112.            
  113.     if self.ConstrainSphere > 0 then
  114.         local len = math.min(self.pos:Distance(pos), self.ConstrainSphere)
  115.        
  116.         self.pos = pos + (self.pos - pos):GetNormalized() * len
  117.     end
  118.    
  119.     if self.JiggleAngle then
  120.         self.angvel = self.angvel or ang * 1
  121.         self.ang = self.ang or ang * 1
  122.         if self.ConstrainPitch then
  123.             self.ang.p = self.cached_ang.p
  124.             self.angvel.p = 0
  125.         else
  126.             self.angvel.p = self.angvel.p + math_AngleDifference(ang.p, self.ang.p)
  127.             self.ang.p = math_AngleDifference(self.ang.p, self.angvel.p * -speed)
  128.             self.angvel.p = self.angvel.p * self.Strain
  129.         end
  130.        
  131.         if self.ConstrainYaw then
  132.             self.ang.y = self.cached_ang.y
  133.             self.angvel.y = 0
  134.         else
  135.             self.angvel.y = self.angvel.y + math_AngleDifference(ang.y, self.ang.y)
  136.             self.ang.y = math_AngleDifference(self.ang.y, self.angvel.y * -speed)
  137.             self.angvel.y = self.angvel.y * self.Strain
  138.         end
  139.        
  140.         if self.ConstrainRoll then
  141.             self.ang.r = self.cached_ang.r
  142.             self.angvel.r = 0
  143.         else
  144.             self.angvel.r = self.angvel.r + math_AngleDifference(ang.r, self.ang.r)
  145.             self.ang.r = math_AngleDifference(self.ang.r, self.angvel.r * -speed)
  146.             self.angvel.r = self.angvel.r * self.Strain
  147.         end
  148.     else
  149.         self.ang = ang
  150.     end
  151.    
  152. end
  153.  
  154. pac.RegisterPart(PART)
Advertisement
Add Comment
Please, Sign In to add comment