From 13ae7d65b6719a7d360b2cbe864ddeacc2c33e7e Mon Sep 17 00:00:00 2001
From: Cameron Taylor <cameron.taylor.ninja@gmail.com>
Date: Mon, 1 Feb 2021 01:50:30 -0500
Subject: [PATCH] FONT AND BULLSHIT

---
 Project.xml           |   9 ++--
 source/DialogueBox.hx | 110 +++++++++++++++++++++++++++++++++++++++---
 source/PlayState.hx   |  25 +++++++---
 3 files changed, 127 insertions(+), 17 deletions(-)

diff --git a/Project.xml b/Project.xml
index b5bf7197f..80c962c90 100644
--- a/Project.xml
+++ b/Project.xml
@@ -54,9 +54,12 @@
 
 	<assets path="CHANGELOG.md"/>
 
-
-	<assets path="assets/fonts/vcr.ttf" embed="true" />
-
+	<!-- NOTE FOR FUTURE SELF SINCE FONTS ARE ALWAYS FUCKY 
+		TO FIX ONE OF THEM, I CONVERTED IT TO OTF. DUNNO IF YOU NEED TO
+		THEN UHHH I USED THE NAME OF THE FONT WITH SETFORMAT() ON THE TEXT!!!
+		NOT USING A DIRECT THING TO THE ASSET!!!
+	-->
+	<assets path="assets/fonts" embed='true'/>
 	<!-- _______________________________ Libraries ______________________________ -->
 
 	<haxelib name="flixel" />
diff --git a/source/DialogueBox.hx b/source/DialogueBox.hx
index 17f3d616d..9be4fd482 100644
--- a/source/DialogueBox.hx
+++ b/source/DialogueBox.hx
@@ -2,38 +2,99 @@ package;
 
 import flixel.FlxG;
 import flixel.FlxSprite;
+import flixel.addons.text.FlxTypeText;
 import flixel.graphics.frames.FlxAtlasFrames;
 import flixel.group.FlxSpriteGroup;
 import flixel.input.FlxKeyManager;
+import flixel.text.FlxText;
+import flixel.util.FlxTimer;
+
+using StringTools;
 
 class DialogueBox extends FlxSpriteGroup
 {
 	var box:FlxSprite;
 
+	var curCharacter:String = '';
+
 	var dialogue:Alphabet;
 	var dialogueList:Array<String> = [];
 
+	// SECOND DIALOGUE FOR THE PIXEL SHIT INSTEAD???
+	var swagDialogue:FlxTypeText;
+
+	var dropText:FlxText;
+
 	public var finishThing:Void->Void;
 
+	var portraitLeft:FlxSprite;
+	var portraitRight:FlxSprite;
+
 	public function new(talkingRight:Bool = true, ?dialogueList:Array<String>)
 	{
 		super();
 
-		box = new FlxSprite(40);
-		box.frames = FlxAtlasFrames.fromSparrow('assets/images/speech_bubble_talking.png', 'assets/images/speech_bubble_talking.xml');
-		box.animation.addByPrefix('normalOpen', 'Speech Bubble Normal Open', 24, false);
-		box.animation.addByPrefix('normal', 'speech bubble normal', 24);
+		var bgFade:FlxSprite = new FlxSprite(-200, -200).makeGraphic(Std.int(FlxG.width * 1.3), Std.int(FlxG.height * 1.3), 0xFFB3DFd8);
+		bgFade.scrollFactor.set();
+		bgFade.alpha = 0;
+		add(bgFade);
+
+		new FlxTimer().start(0.83, function(tmr:FlxTimer)
+		{
+			bgFade.alpha += (1 / 5) * 0.7;
+			if (bgFade.alpha > 0.7)
+				bgFade.alpha = 0.7;
+		}, 5);
+
+		portraitLeft = new FlxSprite(-20, 40);
+		portraitLeft.frames = FlxAtlasFrames.fromSparrow('assets/images/weeb/senpaiPortrait.png', 'assets/images/weeb/senpaiPortrait.xml');
+		portraitLeft.animation.addByPrefix('enter', 'Senpai Portrait Enter', 24, false);
+		portraitLeft.setGraphicSize(Std.int(portraitLeft.width * PlayState.daPixelZoom * 0.9));
+		portraitLeft.updateHitbox();
+		portraitLeft.scrollFactor.set();
+		add(portraitLeft);
+		portraitLeft.visible = false;
+
+		portraitRight = new FlxSprite(0, 40);
+		portraitRight.frames = FlxAtlasFrames.fromSparrow('assets/images/weeb/bfPortrait.png', 'assets/images/weeb/bfPortrait.xml');
+		portraitRight.animation.addByPrefix('enter', 'Boyfriend portrait enter', 24, false);
+		portraitRight.setGraphicSize(Std.int(portraitRight.width * PlayState.daPixelZoom * 0.9));
+		portraitRight.updateHitbox();
+		portraitRight.scrollFactor.set();
+		add(portraitRight);
+		portraitRight.visible = false;
+
+		box = new FlxSprite(-20, 45);
+		box.frames = FlxAtlasFrames.fromSparrow('assets/images/weeb/pixelUI/dialogueBox-pixel.png', 'assets/images/weeb/pixelUI/dialogueBox-pixel.xml');
+		box.animation.addByPrefix('normalOpen', 'Text Box Appear', 24, false);
+		box.animation.addByIndices('normal', 'Text Box Appear', [4], "", 24);
 		box.animation.play('normalOpen');
+		box.setGraphicSize(Std.int(box.width * PlayState.daPixelZoom * 0.9));
+		box.updateHitbox();
 		add(box);
 
+		box.screenCenter(X);
+		portraitLeft.screenCenter(X);
+
 		if (!talkingRight)
 		{
 			box.flipX = true;
 		}
 
+		dropText = new FlxText(242, 502, Std.int(FlxG.width * 0.6), "", 32);
+		dropText.font = 'Pixel Arial 11 Bold';
+		dropText.color = 0xFFD89494;
+		add(dropText);
+
+		swagDialogue = new FlxTypeText(240, 500, Std.int(FlxG.width * 0.6), "", 32);
+		swagDialogue.font = 'Pixel Arial 11 Bold';
+		swagDialogue.color = 0xFF3F2021;
+		swagDialogue.sounds = [FlxG.sound.load('assets/sounds/pixelText' + TitleState.soundExt, 0.6)];
+		add(swagDialogue);
+
 		dialogue = new Alphabet(0, 80, "", false, true);
 		// dialogue.x = 90;
-		add(dialogue);
+		// add(dialogue);
 
 		this.dialogueList = dialogueList;
 	}
@@ -43,6 +104,8 @@ class DialogueBox extends FlxSpriteGroup
 
 	override function update(elapsed:Float)
 	{
+		dropText.text = swagDialogue.text;
+
 		if (box.animation.curAnim != null)
 		{
 			if (box.animation.curAnim.name == 'normalOpen' && box.animation.curAnim.finished)
@@ -79,8 +142,39 @@ class DialogueBox extends FlxSpriteGroup
 
 	function startDialogue():Void
 	{
-		var theDialog:Alphabet = new Alphabet(0, 70, dialogueList[0], false, true);
-		dialogue = theDialog;
-		add(theDialog);
+		cleanDialog();
+
+		// var theDialog:Alphabet = new Alphabet(0, 70, dialogueList[0], false, true);
+		// dialogue = theDialog;
+		// add(theDialog);
+
+		// swagDialogue.text = ;
+		swagDialogue.resetText(dialogueList[0]);
+		swagDialogue.start(0.02, true);
+
+		switch (curCharacter)
+		{
+			case 'dad':
+				portraitRight.visible = false;
+				if (!portraitLeft.visible)
+				{
+					portraitLeft.visible = true;
+					portraitLeft.animation.play('enter');
+				}
+			case 'bf':
+				portraitLeft.visible = false;
+				if (!portraitRight.visible)
+				{
+					portraitRight.visible = true;
+					portraitRight.animation.play('enter');
+				}
+		}
+	}
+
+	function cleanDialog():Void
+	{
+		var splitName:Array<String> = dialogueList[0].split(":");
+		curCharacter = splitName[1];
+		dialogueList[0] = dialogueList[0].substr(splitName[1].length + 2).trim();
 	}
 }
diff --git a/source/PlayState.hx b/source/PlayState.hx
index 6a336ec9c..8eb75aa4e 100644
--- a/source/PlayState.hx
+++ b/source/PlayState.hx
@@ -148,6 +148,12 @@ class PlayState extends MusicBeatState
 					"If you can beat me here...",
 					"Only then I will even CONSIDER letting you\ndate my daughter!"
 				];
+			case 'senpai':
+				dialogue = [
+					':dad:Ah, a new fair maiden has come in search of true love!',
+					":dad:A serenade between gentlemen shall decide where her beautiful heart shall reside.",
+					":bf:Beep bo bop"
+				];
 		}
 
 		if (SONG.song.toLowerCase() == 'spookeez' || SONG.song.toLowerCase() == 'monster' || SONG.song.toLowerCase() == 'south')
@@ -511,7 +517,7 @@ class PlayState extends MusicBeatState
 
 		var doof:DialogueBox = new DialogueBox(false, dialogue);
 		// doof.x += 70;
-		doof.y = FlxG.height * 0.5;
+		// doof.y = FlxG.height * 0.5;
 		doof.scrollFactor.set();
 		doof.finishThing = startCountdown;
 
@@ -619,7 +625,9 @@ class PlayState extends MusicBeatState
 						});
 					});
 				case 'senpai':
-					schoolIntro();
+					schoolIntro(doof);
+				case 'roses':
+					schoolIntro(doof);
 				default:
 					startCountdown();
 			}
@@ -629,7 +637,7 @@ class PlayState extends MusicBeatState
 			switch (curSong.toLowerCase())
 			{
 				case 'senpai':
-					schoolIntro();
+					schoolIntro(doof);
 				default:
 					startCountdown();
 			}
@@ -638,7 +646,7 @@ class PlayState extends MusicBeatState
 		super.create();
 	}
 
-	function schoolIntro():Void
+	function schoolIntro(?dialogueBox:DialogueBox):Void
 	{
 		var black:FlxSprite = new FlxSprite(-100, -100).makeGraphic(FlxG.width * 2, FlxG.height * 2, FlxColor.BLACK);
 		black.scrollFactor.set();
@@ -647,8 +655,6 @@ class PlayState extends MusicBeatState
 		new FlxTimer().start(0.3, function(tmr:FlxTimer)
 		{
 			black.alpha -= 0.15;
-			if (!startedCountdown)
-				startCountdown();
 
 			if (black.alpha > 0)
 			{
@@ -656,6 +662,13 @@ class PlayState extends MusicBeatState
 			}
 			else
 			{
+				if (dialogueBox != null)
+				{
+					add(dialogueBox);
+				}
+				else
+					startCountdown();
+
 				remove(black);
 			}
 		});