(this is an actual functional script for a flower) So I was scripting a flower and then I optimized it and ended up with this:
local RunService = game:GetService("RunService")
local ws = workspace
local parent = script.Parent
local Heartbeat = RunService.Heartbeat
local sin = math.sin
local pi = math.pi
local CFrame_new = CFrame.new
local CFrame_fromEulerAnglesYXZ = CFrame.fromEulerAnglesYXZ
local CFrame_Angles = CFrame.Angles
local Vector3_new = Vector3.new
local entries = {}
local p1 = parent.Petals1:GetChildren()
for i = 1, #p1 do
local v = p1[i]
if v:IsA("Model") then
local pa = v.Petal11
local x, y, z = pa.CFrame:ToOrientation()
local s = v.Petal11.Size
local s2 = v.Petal112.Size
local s3 = v.Petal113.Size
entries[#entries+1] = {
1, i, 1, v.Petal11.CFrame, x, y, z, (i-1)/(pi*2),
{ v.Petal11, v.Petal112, v.Petal113, v.Petal114, v.Petal1121, v.Petal1122, v.Petal1131, v.Petal1132 },
{ -s.Z*0.5, -s2.Z*0.5, -s3.Z*0.5, -v.Petal114.Size.Z*0.5, s2.X*0.5, -s2.X*0.5, s3.X*0.5, -s3.X*0.5, v.Petal1121.Size.X*0.5, -v.Petal1122.Size.X*0.5, v.Petal1131.Size.X*0.5, -v.Petal1132.Size.X*0.5 }
}
end
end
local p2 = parent.Petals2:GetChildren()
for i = 1, #p2 do
local pt = p2[i]
if pt:IsA("Model") then
local pa = pt.pa
local x, y, z = pa.CFrame:ToOrientation()
local s = pa.Size
local sB = pt.pb.Size
local sC = pt.pc.Size
local sD = pt.pd.Size
local sE = pt.pe.Size
entries[#entries+1] = {
2, i, 1, pa.CFrame, x, y, z, (i-1)/(3*pi),
{ pa, pt.pb, pt.pc, pt.pd, pt.pe, pt.pf, pt.pb1, pt.pb2, pt.pc1, pt.pc2, pt.pc11, pt.pc22, pt.pd1, pt.pd2, pt.pe1, pt.pe2 },
{ -s.Z*0.5, -sB.Z*0.5, -sC.Z*0.5, -sD.Z*0.5, -sE.Z*0.5, -pt.pf.Size.Z*0.5, -sB.X*0.5, sB.X*0.5, -sC.X*0.5, sC.X*0.5, -pt.pc1.Size.X*0.5, pt.pc2.Size.X*0.5, -sD.X*0.5, sD.X*0.5, -sE.X*0.5, sE.X*0.5, -pt.pb1.Size.X*0.5, pt.pb2.Size.X*0.5, -pt.pc11.Size.X*0.5, pt.pc22.Size.X*0.5, -pt.pd1.Size.X*0.5, pt.pd2.Size.X*0.5, -pt.pe1.Size.X*0.5, pt.pe2.Size.X*0.5 }
}
end
end
local p3 = parent.Petals3:GetChildren()
for i = 1, #p3 do
local pt = p3[i]
if pt:IsA("Model") then
local pa = pt.pa
local s = pa.Size
local x, y, z = pa.CFrame:ToOrientation()
local sB = pt.pb.Size
local sC = pt.pc.Size
entries[#entries+1] = {
3, i, 1, pa.CFrame * CFrame_new(0,0,s.Z/2), x, y, z, (i-1)/(3*pi),
{ pa, pt.pb, pt.pc, pt.pd, pt.pb1, pt.pb2, pt.pc1, pt.pc2 },
{ -s.Z*0.5, -sB.Z*0.5, -sC.Z*0.5, -pt.pd.Size.Z*0.5, -sB.X*0.5, sB.X*0.5, -sC.X*0.5, sC.X*0.5, -pt.pb1.Size.X*0.5, pt.pb2.Size.X*0.5, -pt.pc1.Size.X*0.5, pt.pc2.Size.X*0.5 }
}
end
end
local parts, cframes = {}, {}
Heartbeat:Connect(function(dt)
local pcount = 0
for i = 1, #entries do
local e = entries[i]
local t, x, y, z = e[8], e[5], e[6], e[7]
local p, s = e[9], e[10]
if e[1] == 1 then
local aCF = e[4] * CFrame_fromEulerAnglesYXZ(sin(t)/6,0,0) * CFrame_new(0,0,s[1])
local bCF = CFrame_new((aCF * CFrame_new(0,0,s[1])).Position) * CFrame_fromEulerAnglesYXZ(sin(t-1)/6+x,y,z) * CFrame_new(0,0,s[2])
local cCF = CFrame_new((bCF * CFrame_new(0,0,s[2])).Position) * CFrame_fromEulerAnglesYXZ(sin(t-2)/3+x+0.3,y,z) * CFrame_new(0,0,s[3])
local dCF = CFrame_new((cCF * CFrame_new(0,0,s[3])).Position) * CFrame_fromEulerAnglesYXZ(sin(t-3)/4+x+0.6,y,z) * CFrame_new(0,0,s[4])
local a1CF = CFrame_new((bCF * CFrame_new(s[5],0,0)).Position) * CFrame_fromEulerAnglesYXZ(sin(t)/6+x,y,z+sin(t+1)/4) * CFrame_Angles(0,0,-0.5) * CFrame_new(s[9],0,0)
local a2CF = CFrame_new((bCF * CFrame_new(s[6],0,0)).Position) * CFrame_fromEulerAnglesYXZ(sin(t)/6+x,y,z+sin(t+1)/-4) * CFrame_Angles(0,0,0.5) * CFrame_new(s[10],0,0)
local b1CF = CFrame_new((cCF * CFrame_new(s[7],0,0)).Position) * CFrame_fromEulerAnglesYXZ(sin(t-1)/6+x,y,z+sin(t+1.2)/4) * CFrame_Angles(-0.3,0,-0.6) * CFrame_new(s[11]-0.5,0,0)
local b2CF = CFrame_new((cCF * CFrame_new(s[8],0,0)).Position) * CFrame_fromEulerAnglesYXZ(sin(t-1)/6+x,y,z+sin(t+1.2)/-4) * CFrame_Angles(-0.3,0,0.6) * CFrame_new(s[12]+0.5,0,0)
pcount += 1; parts[pcount] = p[1]; cframes[pcount] = aCF
pcount += 1; parts[pcount] = p[2]; cframes[pcount] = bCF
pcount += 1; parts[pcount] = p[3]; cframes[pcount] = cCF
pcount += 1; parts[pcount] = p[4]; cframes[pcount] = dCF
pcount += 1; parts[pcount] = p[5]; cframes[pcount] = a1CF
pcount += 1; parts[pcount] = p[6]; cframes[pcount] = a2CF
pcount += 1; parts[pcount] = p[7]; cframes[pcount] = b1CF
pcount += 1; parts[pcount] = p[8]; cframes[pcount] = b2CF
elseif e[1] == 2 then
local aCF = e[4] * CFrame_fromEulerAnglesYXZ(sin(t)/8,0,0) * CFrame_new(0,0,s[1])
local bCF = CFrame_new((aCF * CFrame_new(0,0,s[1])).Position) * CFrame_fromEulerAnglesYXZ(sin(t-1)/7+x,y,z) * CFrame_new(0,0,s[2])
local cCF = CFrame_new((bCF * CFrame_new(0,0,s[2])).Position) * CFrame_fromEulerAnglesYXZ(sin(t-1.5)/4+x,y,z) * CFrame_new(0,0,s[3])
local dCF = CFrame_new((cCF * CFrame_new(0,0,s[3])).Position) * CFrame_fromEulerAnglesYXZ(sin(t-2)/3+x,y,z) * CFrame_new(0,0,s[4])
local eCF = CFrame_new((dCF * CFrame_new(0,0,s[4])).Position) * CFrame_fromEulerAnglesYXZ(sin(t-2.5)/3+x,y,z) * CFrame_new(0,0,s[5])
local fCF = CFrame_new((eCF * CFrame_new(0,0,s[5])).Position) * CFrame_fromEulerAnglesYXZ(sin(t-3)/2+x,y,z) * CFrame_new(0,0,s[6])
local b1CF = CFrame_new((bCF * CFrame_new(s[7],0,0)).Position) * CFrame_fromEulerAnglesYXZ(sin(t-1)/7+x,y,sin(t)/-4+z+0.2) * CFrame_new(s[17],0,0)
local b2CF = CFrame_new((bCF * CFrame_new(s[8],0,0)).Position) * CFrame_fromEulerAnglesYXZ(sin(t-1)/7+x,y,sin(t)/4+z-0.2) * CFrame_new(s[18],0,0)
local c1CF = CFrame_new((cCF * CFrame_new(s[9],0,0)).Position) * CFrame_fromEulerAnglesYXZ(sin(t-1.5)/4+x,y,sin(t-0.5)/-3+z+0.5) * CFrame_new(s[11],0,0)
local c2CF = CFrame_new((cCF * CFrame_new(s[10],0,0)).Position) * CFrame_fromEulerAnglesYXZ(sin(t-1.5)/4+x,y,sin(t-0.5)/3+z-0.5) * CFrame_new(s[12],0,0)
local c11CF = CFrame_new((c1CF * CFrame_new(s[11],0,0)).Position) * CFrame_fromEulerAnglesYXZ(sin(t-2)/4+x,y,sin(t+0.5)/-2+z+0.7) * CFrame_new(s[19],0,0)
local c22CF = CFrame_new((c2CF * CFrame_new(s[12],0,0)).Position) * CFrame_fromEulerAnglesYXZ(sin(t-2)/4+x,y,sin(t+0.5)/2+z-0.7) * CFrame_new(s[20],0,0)
local d1CF = CFrame_new((dCF * CFrame_new(s[13],0,0)).Position) * CFrame_fromEulerAnglesYXZ(sin(t-2)/4+x,y,sin(t-1)/-2+z+0.4) * CFrame_new(s[21],0,0)
local d2CF = CFrame_new((dCF * CFrame_new(s[14],0,0)).Position) * CFrame_fromEulerAnglesYXZ(sin(t-2)/4+x,y,sin(t-1)/2+z-0.4) * CFrame_new(s[22],0,0)
local e1CF = CFrame_new((eCF * CFrame_new(s[15],0,0)).Position) * CFrame_fromEulerAnglesYXZ(sin(t-2.5)/4+x+0.1,y,sin(t-1)/-3+z+0.3) * CFrame_new(s[23],0,0)
local e2CF = CFrame_new((eCF * CFrame_new(s[16],0,0)).Position) * CFrame_fromEulerAnglesYXZ(sin(t-2.5)/4+x+0.1,y,sin(t-1)/3+z-0.3) * CFrame_new(s[24],0,0)
pcount += 1; parts[pcount] = p[1]; cframes[pcount] = aCF; pcount += 1; parts[pcount] = p[2]; cframes[pcount] = bCF; pcount += 1; parts[pcount] = p[3]; cframes[pcount] = cCF
pcount += 1; parts[pcount] = p[4]; cframes[pcount] = dCF; pcount += 1; parts[pcount] = p[5]; cframes[pcount] = eCF; pcount += 1; parts[pcount] = p[6]; cframes[pcount] = fCF
pcount += 1; parts[pcount] = p[7]; cframes[pcount] = b1CF; pcount += 1; parts[pcount] = p[8]; cframes[pcount] = b2CF; pcount += 1; parts[pcount] = p[9]; cframes[pcount] = c1CF
pcount += 1; parts[pcount] = p[10]; cframes[pcount] = c2CF; pcount += 1; parts[pcount] = p[11]; cframes[pcount] = c11CF; pcount += 1; parts[pcount] = p[12]; cframes[pcount] = c22CF
pcount += 1; parts[pcount] = p[13]; cframes[pcount] = d1CF; pcount += 1; parts[pcount] = p[14]; cframes[pcount] = d2CF; pcount += 1; parts[pcount] = p[15]; cframes[pcount] = e1CF
pcount += 1; parts[pcount] = p[16]; cframes[pcount] = e2CF
else
local aCF = e[4] * CFrame_fromEulerAnglesYXZ(sin(t)/8,0,0) * CFrame_new(0,0,s[1])
local bCF = CFrame_new((aCF * CFrame_new(0,0,s[1])).Position) * CFrame_fromEulerAnglesYXZ(sin(t-1)/7+x,y,z) * CFrame_new(0,0,s[2])
local cCF = CFrame_new((bCF * CFrame_new(0,0,s[2])).Position) * CFrame_fromEulerAnglesYXZ(sin(t-2)/5+x,y,z) * CFrame_new(0,0,s[3])
local dCF = CFrame_new((cCF * CFrame_new(0,0,s[3])).Position) * CFrame_fromEulerAnglesYXZ(sin(t-3)/4+x+0.3,y,z) * CFrame_new(0,0,s[4])
local b1CF = CFrame_new((bCF * CFrame_new(s[5],0,0)).Position) * CFrame_fromEulerAnglesYXZ(sin(t-0.5)/7+x,y,sin(t)/4+z-0.2) * CFrame_new(s[9],0,0)
local b2CF = CFrame_new((bCF * CFrame_new(s[6],0,0)).Position) * CFrame_fromEulerAnglesYXZ(sin(t-0.5)/7+x,y,sin(t)/-4+z+0.2) * CFrame_new(s[10],0,0)
local c1CF = CFrame_new((cCF * CFrame_new(s[7],0,0)).Position) * CFrame_fromEulerAnglesYXZ(sin(t-1.5)/5+x,y,sin(t-0.5)/3+z-0.3) * CFrame_new(s[11],0,0)
local c2CF = CFrame_new((cCF * CFrame_new(s[8],0,0)).Position) * CFrame_fromEulerAnglesYXZ(sin(t-1.5)/5+x,y,sin(t-0.5)/-3+z+0.3) * CFrame_new(s[12],0,0)
pcount += 1; parts[pcount] = p[1]; cframes[pcount] = aCF; pcount += 1; parts[pcount] = p[2]; cframes[pcount] = bCF; pcount += 1; parts[pcount] = p[3]; cframes[pcount] = cCF
pcount += 1; parts[pcount] = p[4]; cframes[pcount] = dCF; pcount += 1; parts[pcount] = p[5]; cframes[pcount] = b1CF; pcount += 1; parts[pcount] = p[6]; cframes[pcount] = b2CF
pcount += 1; parts[pcount] = p[7]; cframes[pcount] = c1CF; pcount += 1; parts[pcount] = p[8]; cframes[pcount] = c2CF
end
e[8] = t + dt * e[3]
end
if pcount > 0 then
ws:BulkMoveTo(parts, cframes)
end
end)
If you guys are curious, here’s the video of the script (and flower) in action: