This beam code is inside a while loop, and that loop basically tracks all the players inside a specific region3, and does logic for capturing a control point. However, it’s kind of clunky, and I feel could be achieved in a better way.
Important info, Percent starts at 100. When capturing, the Percent goes down to 0, then goes back up to 100. So with 4 sides, my logic is Beam_1 would handle 100 to 50, then Beam_2 would do 50 to 0, and then Beam_3 does 0 back up to 50, and finally Beam_4 does the final 50 to 100.
for _, beam in pairs(CapturePoint:GetChildren()) do
if beam:IsA("Beam") then
if not First then continue end -- Nobody capturing
if not Reset then -- 100 - 0 (going down)
if Percent >= 50 and Percent <= 100 then
if beam.Name == "Beam_1" then
beam.Color = ColorSequence.new{
ColorSequenceKeypoint.new(0, First.TeamColor.Color),
ColorSequenceKeypoint.new(1 - ((Percent - 50) / 50), First.TeamColor.Color),
ColorSequenceKeypoint.new(1 - ((Percent - 50) / 50), Color3.fromRGB(100, 100, 100)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(100, 100, 100))
}
end
else -- 50 - 0
if beam.Name == "Beam_1" then
beam.Color = ColorSequence.new(First.TeamColor.Color)
elseif beam.Name == "Beam_2" then
beam.Color = ColorSequence.new{
ColorSequenceKeypoint.new(0, First.TeamColor.Color),
ColorSequenceKeypoint.new(1 - (Percent / 50), First.TeamColor.Color),
ColorSequenceKeypoint.new(1 - (Percent / 50), Color3.fromRGB(100, 100, 100)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(100, 100, 100))
}
end
end
else -- 0 - 100 (going back up)
if Percent >= 0 and Percent <= 50 then
if beam.Name == "Beam_2" then
beam.Color = ColorSequence.new(First.TeamColor.Color)
elseif beam.Name == "Beam_3" then
beam.Color = ColorSequence.new{
ColorSequenceKeypoint.new(0, First.TeamColor.Color),
ColorSequenceKeypoint.new(Percent / 50, First.TeamColor.Color),
ColorSequenceKeypoint.new(Percent / 50, Color3.fromRGB(100, 100, 100)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(100, 100, 100))
}
end
else -- 50 - 100
if beam.Name == "Beam_3" then
beam.Color = ColorSequence.new(First.TeamColor.Color)
elseif beam.Name == "Beam_4" then
beam.Color = ColorSequence.new{
ColorSequenceKeypoint.new(0, First.TeamColor.Color),
ColorSequenceKeypoint.new(((Percent - 50) / 50), First.TeamColor.Color),
ColorSequenceKeypoint.new(((Percent - 50) / 50), Color3.fromRGB(100, 100, 100)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(100, 100, 100))
}
end
end
end
end
end
Only other problem is when it’s complete, Beam_1 gets reset. This is because Reset is set to false and Percent is at 100