mirror of
https://github.com/ninjamuffin99/Funkin.git
synced 2024-11-15 11:22:55 +00:00
wip sequence
This commit is contained in:
parent
def2b64a41
commit
677357ba37
|
@ -388,7 +388,7 @@ class FunkinSound extends FlxSound implements ICloneable<FunkinSound>
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var music = FunkinSound.load(pathToUse, params?.startingVolume ?? 1.0, params.loop ?? true, false, true);
|
var music = FunkinSound.load(pathToUse, params?.startingVolume ?? 1.0, params.loop ?? true, false, true, params.onComplete);
|
||||||
if (music != null)
|
if (music != null)
|
||||||
{
|
{
|
||||||
FlxG.sound.music = music;
|
FlxG.sound.music = music;
|
||||||
|
@ -396,6 +396,8 @@ class FunkinSound extends FlxSound implements ICloneable<FunkinSound>
|
||||||
// Prevent repeat update() and onFocus() calls.
|
// Prevent repeat update() and onFocus() calls.
|
||||||
FlxG.sound.list.remove(FlxG.sound.music);
|
FlxG.sound.list.remove(FlxG.sound.music);
|
||||||
|
|
||||||
|
if (FlxG.sound.music != null && params.onLoad != null) params.onLoad();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -21,7 +21,7 @@ class CharSelectPlayer extends FlxAtlasSprite
|
||||||
if (hasAnimation("slidein idle point")) playAnimation("slidein idle point", true, false, false);
|
if (hasAnimation("slidein idle point")) playAnimation("slidein idle point", true, false, false);
|
||||||
else
|
else
|
||||||
playAnimation("idle", true, false, true);
|
playAnimation("idle", true, false, true);
|
||||||
case "slidein idle point":
|
case "slidein idle point", "cannot select", "unlock":
|
||||||
playAnimation("idle", true, false, true);
|
playAnimation("idle", true, false, true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -26,6 +26,7 @@ import funkin.ui.PixelatedIcon;
|
||||||
import funkin.util.MathUtil;
|
import funkin.util.MathUtil;
|
||||||
import funkin.vis.dsp.SpectralAnalyzer;
|
import funkin.vis.dsp.SpectralAnalyzer;
|
||||||
import openfl.display.BlendMode;
|
import openfl.display.BlendMode;
|
||||||
|
import funkin.save.Save;
|
||||||
|
|
||||||
class CharSelectSubState extends MusicBeatSubState
|
class CharSelectSubState extends MusicBeatSubState
|
||||||
{
|
{
|
||||||
|
@ -69,8 +70,6 @@ class CharSelectSubState extends MusicBeatSubState
|
||||||
|
|
||||||
var charSelectCam:FunkinCamera;
|
var charSelectCam:FunkinCamera;
|
||||||
|
|
||||||
var introM:FunkinSound = null;
|
|
||||||
|
|
||||||
public function new()
|
public function new()
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
|
@ -89,6 +88,8 @@ class CharSelectSubState extends MusicBeatSubState
|
||||||
var playerData = player.getCharSelectData();
|
var playerData = player.getCharSelectData();
|
||||||
if (playerData == null) continue;
|
if (playerData == null) continue;
|
||||||
|
|
||||||
|
trace(player.isUnlocked());
|
||||||
|
|
||||||
var targetPosition:Int = playerData.position ?? 0;
|
var targetPosition:Int = playerData.position ?? 0;
|
||||||
while (availableChars.exists(targetPosition))
|
while (availableChars.exists(targetPosition))
|
||||||
{
|
{
|
||||||
|
@ -104,38 +105,6 @@ class CharSelectSubState extends MusicBeatSubState
|
||||||
{
|
{
|
||||||
super.create();
|
super.create();
|
||||||
|
|
||||||
selectSound = new FunkinSound();
|
|
||||||
selectSound.loadEmbedded(Paths.sound('CS_select'));
|
|
||||||
selectSound.pitch = 1;
|
|
||||||
selectSound.volume = 0.7;
|
|
||||||
FlxG.sound.defaultSoundGroup.add(selectSound);
|
|
||||||
|
|
||||||
// playing it here to preload it. not doing this makes a super awkward pause at the end of the intro
|
|
||||||
// TODO: probably make an intro thing for funkinSound itself that preloads the next audio?
|
|
||||||
FunkinSound.playMusic('stayFunky',
|
|
||||||
{
|
|
||||||
startingVolume: 0,
|
|
||||||
overrideExisting: true,
|
|
||||||
restartTrack: true
|
|
||||||
});
|
|
||||||
var introMusic:String = Paths.music('stayFunky/stayFunky-intro');
|
|
||||||
introM = FunkinSound.load(introMusic, 1.0, false, true, true, () -> {
|
|
||||||
FunkinSound.playMusic('stayFunky',
|
|
||||||
{
|
|
||||||
startingVolume: 1,
|
|
||||||
overrideExisting: true,
|
|
||||||
restartTrack: true
|
|
||||||
});
|
|
||||||
@:privateAccess
|
|
||||||
gfChill.analyzer = new SpectralAnalyzer(FlxG.sound.music._channel.__audioSource, 7, 0.1);
|
|
||||||
#if desktop
|
|
||||||
// On desktop it uses FFT stuff that isn't as optimized as the direct browser stuff we use on HTML5
|
|
||||||
// So we want to manually change it!
|
|
||||||
@:privateAccess
|
|
||||||
gfChill.analyzer.fftN = 512;
|
|
||||||
#end
|
|
||||||
});
|
|
||||||
|
|
||||||
var bg:FlxSprite = new FlxSprite(-153, -140);
|
var bg:FlxSprite = new FlxSprite(-153, -140);
|
||||||
bg.loadGraphic(Paths.image('charSelect/charSelectBG'));
|
bg.loadGraphic(Paths.image('charSelect/charSelectBG'));
|
||||||
bg.scrollFactor.set(0.1, 0.1);
|
bg.scrollFactor.set(0.1, 0.1);
|
||||||
|
@ -174,15 +143,15 @@ class CharSelectSubState extends MusicBeatSubState
|
||||||
gfChill = new CharSelectGF();
|
gfChill = new CharSelectGF();
|
||||||
gfChill.switchGF("bf");
|
gfChill.switchGF("bf");
|
||||||
add(gfChill);
|
add(gfChill);
|
||||||
@:privateAccess
|
|
||||||
playerChill = new CharSelectPlayer(0, 0);
|
|
||||||
playerChill.switchChar("bf");
|
|
||||||
add(playerChill);
|
|
||||||
|
|
||||||
playerChillOut = new CharSelectPlayer(0, 0);
|
playerChillOut = new CharSelectPlayer(0, 0);
|
||||||
playerChillOut.switchChar("bf");
|
playerChillOut.switchChar("bf");
|
||||||
add(playerChillOut);
|
add(playerChillOut);
|
||||||
|
|
||||||
|
playerChill = new CharSelectPlayer(0, 0);
|
||||||
|
playerChill.switchChar("bf");
|
||||||
|
add(playerChill);
|
||||||
|
|
||||||
var speakers:FlxAtlasSprite = new FlxAtlasSprite(0, 0, Paths.animateAtlas("charSelect/charSelectSpeakers"));
|
var speakers:FlxAtlasSprite = new FlxAtlasSprite(0, 0, Paths.animateAtlas("charSelect/charSelectSpeakers"));
|
||||||
speakers.anim.play("");
|
speakers.anim.play("");
|
||||||
speakers.scrollFactor.set(1.8, 1.8);
|
speakers.scrollFactor.set(1.8, 1.8);
|
||||||
|
@ -289,7 +258,7 @@ class CharSelectSubState extends MusicBeatSubState
|
||||||
FlxG.debugger.addTrackerProfile(new TrackerProfile(CharSelectSubState, ["curChar", "grpXSpread", "grpYSpread"]));
|
FlxG.debugger.addTrackerProfile(new TrackerProfile(CharSelectSubState, ["curChar", "grpXSpread", "grpYSpread"]));
|
||||||
FlxG.debugger.track(this);
|
FlxG.debugger.track(this);
|
||||||
|
|
||||||
FlxG.sound.playMusic(Paths.music('charSelect/charSelectMusic'));
|
// FlxG.sound.playMusic(Paths.music('charSelect/charSelectMusic'));
|
||||||
|
|
||||||
camFollow = new FlxObject(0, 0, 1, 1);
|
camFollow = new FlxObject(0, 0, 1, 1);
|
||||||
add(camFollow);
|
add(camFollow);
|
||||||
|
@ -301,6 +270,14 @@ class CharSelectSubState extends MusicBeatSubState
|
||||||
temp.loadGraphic(Paths.image('charSelect/placement'));
|
temp.loadGraphic(Paths.image('charSelect/placement'));
|
||||||
add(temp);
|
add(temp);
|
||||||
temp.alpha = 0.0;
|
temp.alpha = 0.0;
|
||||||
|
|
||||||
|
selectSound = new FunkinSound();
|
||||||
|
selectSound.loadEmbedded(Paths.sound('CS_select'));
|
||||||
|
selectSound.pitch = 1;
|
||||||
|
selectSound.volume = 0.7;
|
||||||
|
|
||||||
|
FlxG.sound.defaultSoundGroup.add(selectSound);
|
||||||
|
|
||||||
Conductor.stepHit.add(spamOnStep);
|
Conductor.stepHit.add(spamOnStep);
|
||||||
// FlxG.debugger.track(temp, "tempBG");
|
// FlxG.debugger.track(temp, "tempBG");
|
||||||
}
|
}
|
||||||
|
@ -309,6 +286,8 @@ class CharSelectSubState extends MusicBeatSubState
|
||||||
var grpXSpread(default, set):Float = 107;
|
var grpXSpread(default, set):Float = 107;
|
||||||
var grpYSpread(default, set):Float = 127;
|
var grpYSpread(default, set):Float = 127;
|
||||||
|
|
||||||
|
var nonLocks = [];
|
||||||
|
|
||||||
function initLocks():Void
|
function initLocks():Void
|
||||||
{
|
{
|
||||||
grpIcons = new FlxSpriteGroup();
|
grpIcons = new FlxSpriteGroup();
|
||||||
|
@ -319,7 +298,7 @@ class CharSelectSubState extends MusicBeatSubState
|
||||||
|
|
||||||
for (i in 0...9)
|
for (i in 0...9)
|
||||||
{
|
{
|
||||||
if (availableChars.exists(i))
|
if (availableChars.exists(i) && Save.instance.charactersSeen.contains(availableChars[i]))
|
||||||
{
|
{
|
||||||
var path:String = availableChars.get(i);
|
var path:String = availableChars.get(i);
|
||||||
var temp:PixelatedIcon = new PixelatedIcon(0, 0);
|
var temp:PixelatedIcon = new PixelatedIcon(0, 0);
|
||||||
|
@ -331,9 +310,15 @@ class CharSelectSubState extends MusicBeatSubState
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (availableChars.exists(i)) nonLocks.push(i);
|
||||||
|
|
||||||
var temp:Lock = new Lock(0, 0, i);
|
var temp:Lock = new Lock(0, 0, i);
|
||||||
temp.ID = 1;
|
temp.ID = 1;
|
||||||
|
|
||||||
|
temp.onAnimationComplete.add(function(anim) {
|
||||||
|
if (anim == "unlock") playerChill.playAnimation("unlock", true);
|
||||||
|
});
|
||||||
|
|
||||||
grpIcons.add(temp);
|
grpIcons.add(temp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -341,6 +326,78 @@ class CharSelectSubState extends MusicBeatSubState
|
||||||
updateIconPositions();
|
updateIconPositions();
|
||||||
|
|
||||||
grpIcons.scrollFactor.set();
|
grpIcons.scrollFactor.set();
|
||||||
|
|
||||||
|
// playing it here to preload it. not doing this makes a super awkward pause at the end of the intro
|
||||||
|
// TODO: probably make an intro thing for funkinSound itself that preloads the next audio?
|
||||||
|
FunkinSound.playMusic('stayFunky',
|
||||||
|
{
|
||||||
|
startingVolume: 0,
|
||||||
|
overrideExisting: true,
|
||||||
|
restartTrack: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
unLock();
|
||||||
|
}
|
||||||
|
|
||||||
|
function unLock()
|
||||||
|
{
|
||||||
|
var index = nonLocks[0];
|
||||||
|
|
||||||
|
var copy = 3;
|
||||||
|
|
||||||
|
var yThing = 0;
|
||||||
|
|
||||||
|
while (index > copy)
|
||||||
|
{
|
||||||
|
yThing++;
|
||||||
|
copy += 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
var xThing = copy - index - 1;
|
||||||
|
|
||||||
|
cursorY = 3 - yThing;
|
||||||
|
cursorX = 3 - xThing;
|
||||||
|
|
||||||
|
selectTimer.start(1, function(_) {
|
||||||
|
var lock:Lock = cast grpIcons.group.members[index];
|
||||||
|
|
||||||
|
lock.playAnimation("unlock");
|
||||||
|
|
||||||
|
playerChill.visible = false;
|
||||||
|
playerChill.switchChar(availableChars[index]);
|
||||||
|
|
||||||
|
playerChillOut.visible = true;
|
||||||
|
playerChillOut.playAnimation("death");
|
||||||
|
playerChillOut.onAnimationComplete.addOnce((_) -> if (_ == "death")
|
||||||
|
{
|
||||||
|
playerChill.playAnimation("unlock");
|
||||||
|
playerChill.onAnimationComplete.addOnce(function(_) {
|
||||||
|
nonLocks.shift();
|
||||||
|
|
||||||
|
if (nonLocks.length > 0) unLock();
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FunkinSound.playMusic('stayFunky',
|
||||||
|
{
|
||||||
|
startingVolume: 1,
|
||||||
|
overrideExisting: true,
|
||||||
|
restartTrack: true,
|
||||||
|
onLoad: function() {
|
||||||
|
@:privateAccess
|
||||||
|
gfChill.analyzer = new SpectralAnalyzer(FlxG.sound.music._channel.__audioSource, 7, 0.1);
|
||||||
|
#if desktop
|
||||||
|
// On desktop it uses FFT stuff that isn't as optimized as the direct browser stuff we use on HTML5
|
||||||
|
// So we want to manually change it!
|
||||||
|
@:privateAccess
|
||||||
|
gfChill.analyzer.fftN = 512;
|
||||||
|
#end
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
playerChill.visible = true;
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateIconPositions()
|
function updateIconPositions()
|
||||||
|
@ -372,17 +429,6 @@ class CharSelectSubState extends MusicBeatSubState
|
||||||
override public function update(elapsed:Float):Void
|
override public function update(elapsed:Float):Void
|
||||||
{
|
{
|
||||||
super.update(elapsed);
|
super.update(elapsed);
|
||||||
@:privateAccess
|
|
||||||
if (introM != null && !introM.paused && gfChill.analyzer == null)
|
|
||||||
{
|
|
||||||
gfChill.analyzer = new SpectralAnalyzer(introM._channel.__audioSource, 7, 0.1);
|
|
||||||
#if desktop
|
|
||||||
// On desktop it uses FFT stuff that isn't as optimized as the direct browser stuff we use on HTML5
|
|
||||||
// So we want to manually change it!
|
|
||||||
@:privateAccess
|
|
||||||
gfChill.analyzer.fftN = 512;
|
|
||||||
#end
|
|
||||||
}
|
|
||||||
|
|
||||||
Conductor.instance.update();
|
Conductor.instance.update();
|
||||||
|
|
||||||
|
@ -426,6 +472,8 @@ class CharSelectSubState extends MusicBeatSubState
|
||||||
if (controls.UI_UP_P)
|
if (controls.UI_UP_P)
|
||||||
{
|
{
|
||||||
cursorY -= 1;
|
cursorY -= 1;
|
||||||
|
cursorDenied.visible = false;
|
||||||
|
|
||||||
holdTmrUp = 0;
|
holdTmrUp = 0;
|
||||||
|
|
||||||
selectSound.play(true);
|
selectSound.play(true);
|
||||||
|
@ -433,18 +481,22 @@ class CharSelectSubState extends MusicBeatSubState
|
||||||
if (controls.UI_DOWN_P)
|
if (controls.UI_DOWN_P)
|
||||||
{
|
{
|
||||||
cursorY += 1;
|
cursorY += 1;
|
||||||
|
cursorDenied.visible = false;
|
||||||
holdTmrDown = 0;
|
holdTmrDown = 0;
|
||||||
selectSound.play(true);
|
selectSound.play(true);
|
||||||
}
|
}
|
||||||
if (controls.UI_LEFT_P)
|
if (controls.UI_LEFT_P)
|
||||||
{
|
{
|
||||||
cursorX -= 1;
|
cursorX -= 1;
|
||||||
|
cursorDenied.visible = false;
|
||||||
|
|
||||||
holdTmrLeft = 0;
|
holdTmrLeft = 0;
|
||||||
selectSound.play(true);
|
selectSound.play(true);
|
||||||
}
|
}
|
||||||
if (controls.UI_RIGHT_P)
|
if (controls.UI_RIGHT_P)
|
||||||
{
|
{
|
||||||
cursorX += 1;
|
cursorX += 1;
|
||||||
|
cursorDenied.visible = false;
|
||||||
holdTmrRight = 0;
|
holdTmrRight = 0;
|
||||||
selectSound.play(true);
|
selectSound.play(true);
|
||||||
}
|
}
|
||||||
|
@ -466,7 +518,7 @@ class CharSelectSubState extends MusicBeatSubState
|
||||||
cursorY = -1;
|
cursorY = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (availableChars.exists(getCurrentSelected()))
|
if (availableChars.exists(getCurrentSelected()) && Save.instance.charactersSeen.contains(availableChars[getCurrentSelected()]))
|
||||||
{
|
{
|
||||||
curChar = availableChars.get(getCurrentSelected());
|
curChar = availableChars.get(getCurrentSelected());
|
||||||
|
|
||||||
|
@ -567,6 +619,8 @@ class CharSelectSubState extends MusicBeatSubState
|
||||||
if (selectSound.pitch > 5) selectSound.pitch = 5;
|
if (selectSound.pitch > 5) selectSound.pitch = 5;
|
||||||
selectSound.play(true);
|
selectSound.play(true);
|
||||||
|
|
||||||
|
cursorDenied.visible = false;
|
||||||
|
|
||||||
if (spamUp)
|
if (spamUp)
|
||||||
{
|
{
|
||||||
cursorY -= 1;
|
cursorY -= 1;
|
||||||
|
@ -621,7 +675,7 @@ class CharSelectSubState extends MusicBeatSubState
|
||||||
memb.scale.set(2.6, 2.6);
|
memb.scale.set(2.6, 2.6);
|
||||||
|
|
||||||
if (controls.ACCEPT) memb.animation.play("confirm");
|
if (controls.ACCEPT) memb.animation.play("confirm");
|
||||||
if (controls.BACK)
|
if (memb.animation.curAnim.name == "confirm" && controls.BACK)
|
||||||
{
|
{
|
||||||
memb.animation.play("confirm", false, true);
|
memb.animation.play("confirm", false, true);
|
||||||
member.animation.finishCallback = (_) -> {
|
member.animation.finishCallback = (_) -> {
|
||||||
|
|
Loading…
Reference in a new issue