1
0
Fork 0
mirror of https://github.com/ninjamuffin99/Funkin.git synced 2024-08-20 07:25:59 +00:00

AttractState now properly plays the trailer

This commit is contained in:
EliteMasterEric 2023-08-08 16:37:17 -04:00
parent b7f5f33f3e
commit ea31d72cbe
2 changed files with 88 additions and 2 deletions

View file

@ -9,6 +9,7 @@ import openfl.net.NetStream;
/**
* Plays a video via a NetStream. Only works on HTML5.
* This does NOT replace hxCodec, nor does hxCodec replace this. hxCodec only works on desktop and does not work on HTML5!
*/
class FlxVideo extends FlxBasic
{

View file

@ -1,5 +1,11 @@
package funkin.ui.title;
#if html5
import funkin.graphics.video.FlxVideo;
#else
import hxcodec.flixel.FlxVideoSprite;
#end
/**
* After about 2 minutes of inactivity on the title screen,
* the game will enter the Attract state, as a reference to physical arcade machines.
@ -9,9 +15,73 @@ package funkin.ui.title;
*/
class AttractState extends MusicBeatState
{
static final ATTRACT_VIDEO_PATH:String = Paths.videos('kickstarterTrailer.mp4');
static final ATTRACT_VIDEO_PATH:String = Paths.videos('kickstarterTrailer');
public override function create():Void {}
public override function create():Void
{
// Pause existing music.
FlxG.sound.music.stop();
#if html5
playVideoHTML5(ATTRACT_VIDEO_PATH);
#else
playVideoNative(ATTRACT_VIDEO_PATH);
#end
}
#if html5
var vid:FlxVideo;
function playVideoHTML5(filePath:String):Void
{
// Video displays OVER the FlxState.
vid = new FlxVideo(filePath);
if (vid != null)
{
vid.zIndex = 0;
vid.finishCallback = onAttractEnd;
add(vid);
}
else
{
trace('ALERT: Video is null! Could not play cutscene!');
}
}
#else
var vid:FlxVideoSprite;
function playVideoNative(filePath:String):Void
{
// Video displays OVER the FlxState.
vid = new FlxVideoSprite(0, 0);
if (vid != null)
{
vid.zIndex = 0;
vid.bitmap.onEndReached.add(onAttractEnd);
add(vid);
vid.play(filePath, false);
}
else
{
trace('ALERT: Video is null! Could not play cutscene!');
}
}
#end
public override function update(elapsed:Float):Void
{
super.update(elapsed);
// If the user presses any button, skip the video.
if (FlxG.keys.justPressed.ANY)
{
onAttractEnd();
}
}
/**
* When the attraction state ends (after the video ends or the user presses any button),
@ -19,6 +89,21 @@ class AttractState extends MusicBeatState
*/
function onAttractEnd():Void
{
#if html5
if (vid != null)
{
remove(vid);
}
#else
if (vid != null)
{
vid.stop();
remove(vid);
}
#end
vid.destroy();
vid = null;
FlxG.switchState(new TitleState());
}
}