From 6e72357f723bab90f904c3ccee021a9ff2c2bd6f Mon Sep 17 00:00:00 2001
From: Cameron Taylor <cameron.taylor.ninja@gmail.com>
Date: Sun, 11 Oct 2020 17:24:34 -0700
Subject: [PATCH] sections in progress

---
 Project.xml             |  2 +-
 source/ChartingState.hx | 65 +++++++++++++++++++++++++++++++++++++----
 2 files changed, 61 insertions(+), 6 deletions(-)

diff --git a/Project.xml b/Project.xml
index 9949b1368..22550498e 100644
--- a/Project.xml
+++ b/Project.xml
@@ -61,7 +61,7 @@
 	<!--<haxedef name="FLX_RECORD" />-->
 
 	<!--Disable the right and middle mouse buttons-->
-	<haxedef name="FLX_NO_MOUSE_ADVANCED" />
+	<!-- <haxedef name="FLX_NO_MOUSE_ADVANCED" /> -->
 
 	<!--Disable the native cursor API on Flash-->
 	<!--<haxedef name="FLX_NO_NATIVE_CURSOR" />-->
diff --git a/source/ChartingState.hx b/source/ChartingState.hx
index dd36771d2..457ced3ed 100644
--- a/source/ChartingState.hx
+++ b/source/ChartingState.hx
@@ -20,14 +20,28 @@ class ChartingState extends MusicBeatState
 	var _file:FileReference;
 	var sequencer:FlxTypedGroup<DisplayNote>;
 	var notes:Array<Dynamic> = [];
+
+	/**
+	 * Array of notes showing when each section STARTS
+	 */
+	var sectionData:Array<Int> = [0];
+
+	var section:Int = 0;
 	var bpmTxt:FlxText;
 
 	var strumLine:FlxSprite;
+	var curSong:String = 'Fresh';
+	var amountSteps:Int = 0;
 
 	override function create()
 	{
-		FlxG.sound.playMusic('assets/music/Fresh.mp3', 0.6);
+		FlxG.sound.playMusic('assets/music/' + curSong + '.mp3', 0.6);
 		FlxG.sound.music.pause();
+		FlxG.sound.music.onComplete = function()
+		{
+			FlxG.sound.music.pause();
+			FlxG.sound.music.time = 0;
+		};
 		Conductor.changeBPM(120);
 
 		var saveButton:FlxButton = new FlxButton(0, 0, "Save", function()
@@ -53,10 +67,12 @@ class ChartingState extends MusicBeatState
 		sequencer = new FlxTypedGroup<DisplayNote>();
 		add(sequencer);
 
+		amountSteps = Math.floor(FlxG.sound.music.length / Conductor.stepCrochet);
+
 		for (r in 0...4)
 		{
 			notes.push([]);
-			for (i in 0...16)
+			for (i in 0...amountSteps)
 			{
 				notes[r].push(false);
 				var seqBtn:DisplayNote = new DisplayNote((35 * r) + 10, (35 * i) + 50, null, function()
@@ -69,7 +85,7 @@ class ChartingState extends MusicBeatState
 
 				seqBtn.strumTime = Conductor.stepCrochet * i;
 				seqBtn.makeGraphic(30, 30, FlxColor.WHITE);
-				seqBtn.ID = i + (16 * r);
+				seqBtn.ID = i + (amountSteps * r);
 				sequencer.add(seqBtn);
 			}
 		}
@@ -79,6 +95,45 @@ class ChartingState extends MusicBeatState
 	{
 		Conductor.songPosition = FlxG.sound.music.time;
 
+		if (FlxG.mouse.justPressedMiddle && section > 0)
+		{
+			var pushSection:Int = Math.round(FlxG.sound.music.time / Conductor.crochet) * 4;
+
+			if (sectionData[section] == null)
+			{
+				sectionData.push(pushSection);
+			}
+			else
+				sectionData[section] == pushSection;
+		}
+
+		if (FlxG.keys.justPressed.LEFT || FlxG.keys.justPressed.RIGHT)
+		{
+			FlxG.sound.music.pause();
+
+			if (FlxG.keys.justPressed.RIGHT)
+			{
+				if (section + 1 <= sectionData.length)
+					section += 1;
+				else
+					section = 0;
+			}
+
+			if (FlxG.keys.justPressed.LEFT)
+			{
+				if (section > 0)
+					section -= 1;
+				else
+					section = sectionData.length;
+			}
+
+			if (sectionData[section] != null)
+				FlxG.sound.music.time = sectionData[section] * Conductor.stepCrochet;
+		}
+
+		if (FlxG.keys.justPressed.R && sectionData[section] != null)
+			FlxG.sound.music.time = sectionData[section] * Conductor.stepCrochet;
+
 		if (FlxG.sound.music.playing)
 		{
 		}
@@ -105,11 +160,11 @@ class ChartingState extends MusicBeatState
 		if (FlxG.keys.justPressed.DOWN)
 			Conductor.changeBPM(Conductor.bpm - 1);
 
-		bpmTxt.text = "BPM: " + Conductor.bpm;
+		bpmTxt.text = "BPM: " + Conductor.bpm + "\nSection: " + section;
 
 		sequencer.forEach(function(spr:DisplayNote)
 		{
-			if (notes[Std.int(spr.ID / 16)][spr.ID % 16] != 0)
+			if (notes[Std.int(spr.ID / amountSteps)][spr.ID % amountSteps] != 0)
 				spr.alpha = 1;
 			else
 				spr.alpha = 0.5;