Funkin/source/funkin/DialogueBox.hx

276 lines
7.3 KiB
Haxe
Raw Normal View History

package funkin;
2020-10-31 02:30:35 -04:00
import funkin.util.Constants;
2020-10-31 02:30:35 -04:00
import flixel.FlxSprite;
2021-02-01 01:50:30 -05:00
import flixel.addons.text.FlxTypeText;
2020-10-31 02:30:35 -04:00
import flixel.graphics.frames.FlxAtlasFrames;
import flixel.group.FlxSpriteGroup;
import flixel.input.FlxKeyManager;
2021-02-01 01:50:30 -05:00
import flixel.text.FlxText;
2021-02-02 04:54:36 -05:00
import flixel.util.FlxColor;
2021-02-01 01:50:30 -05:00
import flixel.util.FlxTimer;
import funkin.play.PlayState;
2021-02-01 01:50:30 -05:00
using StringTools;
2020-10-31 02:30:35 -04:00
class DialogueBox extends FlxSpriteGroup
{
var box:FlxSprite;
2021-02-01 01:50:30 -05:00
var curCharacter:String = '';
2020-10-31 02:30:35 -04:00
var dialogue:Alphabet;
var dialogueList:Array<String> = [];
2021-02-01 01:50:30 -05:00
// SECOND DIALOGUE FOR THE PIXEL SHIT INSTEAD???
var swagDialogue:FlxTypeText;
var dropText:FlxText;
2020-10-31 02:30:35 -04:00
public var finishThing:Void->Void;
2021-02-01 01:50:30 -05:00
var portraitLeft:FlxSprite;
var portraitRight:FlxSprite;
2021-02-01 05:52:10 -05:00
var handSelect:FlxSprite;
2021-02-02 00:48:22 -05:00
var bgFade:FlxSprite;
2021-02-01 05:52:10 -05:00
2020-10-31 02:30:35 -04:00
public function new(talkingRight:Bool = true, ?dialogueList:Array<String>)
{
super();
switch (PlayState.currentSong.song.toLowerCase())
2021-02-02 04:54:36 -05:00
{
case 'senpai':
2021-02-08 16:34:48 -05:00
FlxG.sound.playMusic(Paths.music('Lunchbox'), 0);
2021-02-02 04:54:36 -05:00
FlxG.sound.music.fadeIn(1, 0, 0.8);
case 'thorns':
2021-02-08 16:34:48 -05:00
FlxG.sound.playMusic(Paths.music('LunchboxScary'), 0);
2021-02-02 04:54:36 -05:00
FlxG.sound.music.fadeIn(1, 0, 0.8);
}
2021-02-02 00:48:22 -05:00
bgFade = new FlxSprite(-200, -200).makeGraphic(Std.int(FlxG.width * 1.3), Std.int(FlxG.height * 1.3), 0xFFB3DFd8);
2021-02-01 01:50:30 -05:00
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 = Paths.getSparrowAtlas('weeb/senpaiPortrait');
portraitLeft.animation.addByPrefix('enter', 'Senpai Portrait Enter', 24, false);
portraitLeft.setGraphicSize(Std.int(portraitLeft.width * Constants.PIXEL_ART_SCALE * 0.9));
portraitLeft.updateHitbox();
portraitLeft.scrollFactor.set();
add(portraitLeft);
portraitLeft.visible = false;
portraitRight = new FlxSprite(0, 40);
portraitRight.frames = Paths.getSparrowAtlas('weeb/bfPortrait');
portraitRight.animation.addByPrefix('enter', 'Boyfriend portrait enter', 24, false);
portraitRight.setGraphicSize(Std.int(portraitRight.width * Constants.PIXEL_ART_SCALE * 0.9));
portraitRight.updateHitbox();
portraitRight.scrollFactor.set();
add(portraitRight);
portraitRight.visible = false;
2021-02-01 01:50:30 -05:00
box = new FlxSprite(-20, 45);
2021-06-23 04:15:44 -04:00
2021-02-08 16:34:48 -05:00
var hasDialog = false;
switch (PlayState.currentSong.song.toLowerCase())
2021-02-02 04:54:36 -05:00
{
case 'senpai':
2021-02-08 16:34:48 -05:00
hasDialog = true;
box.frames = Paths.getSparrowAtlas('weeb/pixelUI/dialogueBox-pixel');
2021-02-02 04:54:36 -05:00
box.animation.addByPrefix('normalOpen', 'Text Box Appear', 24, false);
box.animation.addByIndices('normal', 'Text Box Appear', [4], "", 24);
case 'roses':
2021-02-08 16:34:48 -05:00
hasDialog = true;
FlxG.sound.play(Paths.sound('ANGRY_TEXT_BOX'));
2021-02-02 04:54:36 -05:00
2021-02-08 16:34:48 -05:00
box.frames = Paths.getSparrowAtlas('weeb/pixelUI/dialogueBox-senpaiMad');
2021-02-02 04:54:36 -05:00
box.animation.addByPrefix('normalOpen', 'SENPAI ANGRY IMPACT SPEECH', 24, false);
box.animation.addByIndices('normal', 'SENPAI ANGRY IMPACT SPEECH', [4], "", 24);
case 'thorns':
2021-02-08 16:34:48 -05:00
hasDialog = true;
box.frames = Paths.getSparrowAtlas('weeb/pixelUI/dialogueBox-evil');
2021-02-02 04:54:36 -05:00
box.animation.addByPrefix('normalOpen', 'Spirit Textbox spawn', 24, false);
box.animation.addByIndices('normal', 'Spirit Textbox spawn', [11], "", 24);
2021-02-08 16:34:48 -05:00
var face:FlxSprite = new FlxSprite(320, 170).loadGraphic(Paths.image('weeb/spiritFaceForward'));
2021-02-02 04:54:36 -05:00
face.setGraphicSize(Std.int(face.width * 6));
add(face);
}
this.dialogueList = dialogueList;
2021-06-23 04:15:44 -04:00
if (!hasDialog)
return;
2021-06-23 04:15:44 -04:00
box.animation.play('normalOpen');
box.setGraphicSize(Std.int(box.width * Constants.PIXEL_ART_SCALE * 0.9));
box.updateHitbox();
add(box);
2021-02-01 05:52:10 -05:00
2021-02-01 01:50:30 -05:00
box.screenCenter(X);
portraitLeft.screenCenter(X);
2021-03-13 13:40:54 -05:00
handSelect = new FlxSprite(1042, 590).loadGraphic(Paths.image('weeb/pixelUI/hand_textbox'));
handSelect.setGraphicSize(Std.int(handSelect.width * Constants.PIXEL_ART_SCALE * 0.9));
2021-03-13 13:40:54 -05:00
handSelect.updateHitbox();
handSelect.visible = false;
add(handSelect);
2020-10-31 02:30:35 -04:00
if (!talkingRight)
{
2021-02-02 04:54:36 -05:00
// box.flipX = true;
2020-10-31 02:30:35 -04:00
}
2021-02-01 01:50:30 -05:00
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;
2021-02-08 16:34:48 -05:00
swagDialogue.sounds = [FlxG.sound.load(Paths.sound('pixelText'), 0.6)];
2021-02-01 01:50:30 -05:00
add(swagDialogue);
2020-10-31 02:30:35 -04:00
dialogue = new Alphabet(0, 80, "", false, true);
// dialogue.x = 90;
2021-02-01 01:50:30 -05:00
// add(dialogue);
2020-10-31 02:30:35 -04:00
}
var dialogueOpened:Bool = false;
var dialogueStarted:Bool = false;
var dialogueEnded:Bool = false;
2020-10-31 02:30:35 -04:00
override function update(elapsed:Float)
{
2021-02-02 04:54:36 -05:00
// HARD CODING CUZ IM STUPDI
if (PlayState.currentSong.song.toLowerCase() == 'roses')
2021-02-02 04:54:36 -05:00
portraitLeft.visible = false;
if (PlayState.currentSong.song.toLowerCase() == 'thorns')
2021-02-02 04:54:36 -05:00
{
portraitLeft.color = FlxColor.BLACK;
swagDialogue.color = FlxColor.WHITE;
dropText.color = FlxColor.BLACK;
}
2021-02-01 01:50:30 -05:00
dropText.text = swagDialogue.text;
2020-10-31 02:30:35 -04:00
if (box.animation.curAnim != null)
{
if (box.animation.curAnim.name == 'normalOpen' && box.animation.curAnim.finished)
{
box.animation.play('normal');
dialogueOpened = true;
}
}
if (dialogueOpened && !dialogueStarted)
{
startDialogue();
dialogueStarted = true;
}
if (FlxG.keys.justPressed.ANY && dialogueEnded)
2020-10-31 02:30:35 -04:00
{
remove(dialogue);
2021-06-23 04:15:44 -04:00
2021-02-08 16:34:48 -05:00
FlxG.sound.play(Paths.sound('clickText'), 0.8);
2021-02-02 00:48:22 -05:00
2021-02-04 16:36:01 -05:00
if (dialogueList[1] == null && dialogueList[0] != null)
2020-10-31 02:30:35 -04:00
{
2021-02-02 00:48:22 -05:00
if (!isEnding)
{
isEnding = true;
2021-02-02 04:54:36 -05:00
if (PlayState.currentSong.song.toLowerCase() == 'senpai' || PlayState.currentSong.song.toLowerCase() == 'thorns')
2021-02-02 04:54:36 -05:00
FlxG.sound.music.fadeOut(2.2, 0);
2021-02-02 00:48:22 -05:00
new FlxTimer().start(0.2, function(tmr:FlxTimer)
{
box.alpha -= 1 / 5;
bgFade.alpha -= 1 / 5 * 0.7;
portraitLeft.visible = false;
portraitRight.visible = false;
swagDialogue.alpha -= 1 / 5;
2021-03-13 13:48:49 -05:00
handSelect.alpha -= 1 / 5;
2021-02-02 00:48:22 -05:00
dropText.alpha = swagDialogue.alpha;
}, 5);
new FlxTimer().start(1.2, function(tmr:FlxTimer)
{
finishThing();
kill();
});
}
2020-10-31 02:30:35 -04:00
}
else
{
dialogueList.remove(dialogueList[0]);
startDialogue();
}
}
else if (FlxG.keys.justPressed.ANY && dialogueStarted)
swagDialogue.skip();
2021-06-23 04:15:44 -04:00
2020-10-31 02:30:35 -04:00
super.update(elapsed);
}
2021-02-02 00:48:22 -05:00
var isEnding:Bool = false;
2020-10-31 02:30:35 -04:00
function startDialogue():Void
{
2021-02-01 01:50:30 -05:00
cleanDialog();
// var theDialog:Alphabet = new Alphabet(0, 70, dialogueList[0], false, true);
// dialogue = theDialog;
// add(theDialog);
// swagDialogue.text = ;
swagDialogue.resetText(dialogueList[0]);
2021-03-13 13:40:54 -05:00
swagDialogue.start(0.04);
swagDialogue.completeCallback = function()
{
trace("dialogue finish");
handSelect.visible = true;
dialogueEnded = true;
2021-03-13 13:40:54 -05:00
};
handSelect.visible = false;
dialogueEnded = false;
2021-02-01 01:50:30 -05:00
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();
2020-10-31 02:30:35 -04:00
}
}