Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function Bezier(startpos, pos2, pos3, endpos, t)
- local A = startpos:lerp(pos2, t)
- local B = pos2:lerp(pos3, t)
- local C = pos3:lerp(endpos, t)
- local lerp1 = A:lerp(B, t)
- local lerp2 = B:lerp(C, t)
- local cubic = lerp1:lerp(lerp2, t)
- return cubic
- end
- function Effect(data)
- local FX = data.Effect or 'ResizeAndFade'
- local Parent = data.Parent or Effects
- local Color = data.Color or C3.N(0,0,0)
- local Size = data.Size or V3.N(1,1,1)
- local MoveDir = data.MoveDirection or nil
- local MeshData = data.Mesh or nil
- local SndData = data.Sound or nil
- local Frames = data.Frames or 45
- local Manual = data.Manual or nil
- local Material = data.Material or nil
- local CFra = data.CFrame or Torso.CFrame
- local Settings = data.FXSettings or {}
- local Snd,Prt,Msh;
- if(Manual and typeof(Manual) == 'Instance' and Manual:IsA'BasePart')then
- Prt = Manual
- else
- Prt = Part(Parent,Color,Material,Size,CFra,true,false)
- end
- if(typeof(MeshData) == 'table')then
- Msh = Mesh(Prt,MeshData.MeshType,MeshData.MeshId,MeshData.TextureId,MeshData.Scale,MeshData.Offset)
- elseif(typeof(MeshData) == 'Instance')then
- Msh = MeshData:Clone()
- Msh.Parent = Prt
- end
- if(typeof(SndData) == 'table' or typeof(SndData) == 'Instance')then
- Snd = Sound(Prt,SndData.SoundId,SndData.Pitch,SndData.Volume,false,false,true)
- end
- if(Snd)then
- repeat wait() until Snd.Playing and Snd.IsLoaded and Snd.TimeLength > 0
- Frames = Snd.TimeLength * Frame_Speed/Snd.Pitch
- end
- local MoveSpeed = nil;
- if(MoveDir)then
- MoveSpeed = (CFra.p - MoveDir).magnitude/Frames
- end
- local Inc = M.RNG()-M.RNG()
- local Thingie = 0
- local Thingie2 = M.RNG(50,100)/100
- coroutine.resume(coroutine.create(function()
- if(FX ~= 'Arc')then
- for i = 1, Frames do
- if(FX == 'ResizeAndFade')then
- if(not Settings.EndSize)then
- Settings.EndSize = V3.N(0,0,0)
- end
- local grow = (typeof(Settings.EndSize) == 'Vector3' and Settings.EndSize+Size or typeof(Settings.EndSize) == 'number' and V3.N(Settings.EndSize))
- if(Settings.EndIsIncrement)then
- Prt.Size = Prt.Size + Settings.EndSize
- else
- Prt.Size = Prt.Size - grow/Frames
- end
- Prt.Transparency = (i/Frames)
- elseif(FX == 'Fade')then
- Prt.Transparency = (i/Frames)
- end
- if(Settings.RandomizeCFrame)then
- Prt.CFrame = Prt.CFrame * CF.A(M.RRNG(-360,360),M.RRNG(-360,360),M.RRNG(-360,360))
- end
- if(MoveDir and MoveSpeed)then
- local Orientation = Prt.Orientation
- Prt.CFrame = CF.N(Prt.Position,MoveDir)*CF.N(0,0,-MoveSpeed)
- Prt.Orientation = Orientation
- end
- if(swait and typeof(swait) == 'function')then
- swait()
- else
- wait()
- end
- end
- Prt:destroy()
- else
- local start,third,fourth,endP = Settings.Start,Settings.Third,Settings.Fourth,Settings.End
- if(not Settings.End and Settings.Home)then endP = Settings.Home.CFrame end
- local quarter = third or start:lerp(endP, 0.25) * CF.N(M.RNG(-25,25),M.RNG(0,25),M.RNG(-25,25))
- local threequarter = fourth or start:lerp(endP, 0.75) * CF.N(M.RNG(-25,25),M.RNG(0,25),M.RNG(-25,25))
- assert(start ~= nil,"You need to specify a start point!")
- assert(endP ~= nil,"You need to specify an end point!")
- for i = 0, 1, Settings.Speed or 0.01 do
- if(Settings.Home)then
- endP = Settings.Home.CFrame
- end
- Prt.CFrame = Bezier(start, quarter, threequarter, endP, i)
- if(swait and typeof(swait) == 'function')then
- swait()
- else
- wait()
- end
- end
- if(Settings.RemoveOnGoal)then
- Prt:destroy()
- end
- end
- end))
- return Prt,Msh,Snd
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement