Tidy up beam progress square

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