mirror of
https://github.com/ninjamuffin99/Funkin.git
synced 2024-12-23 13:48:23 +00:00
Pico Fist Pump animation (with loss animation)
This commit is contained in:
parent
2e7eabc494
commit
16a6dba9df
|
@ -38,6 +38,11 @@ class PlayerData
|
|||
@:optional
|
||||
public var freeplayDJ:Null<PlayerFreeplayDJData> = null;
|
||||
|
||||
|
||||
/**
|
||||
* Data for displaying this character in the results screen.
|
||||
*/
|
||||
@:optional
|
||||
public var results:Null<PlayerResultsData> = null;
|
||||
|
||||
/**
|
||||
|
@ -97,6 +102,9 @@ class PlayerFreeplayDJData
|
|||
@:optional
|
||||
var cartoon:Null<PlayerFreeplayDJCartoonData>;
|
||||
|
||||
@:optional
|
||||
var fistPump:Null<PlayerFreeplayDJFistPumpData>;
|
||||
|
||||
public function new()
|
||||
{
|
||||
animationMap = new Map();
|
||||
|
@ -183,6 +191,46 @@ class PlayerFreeplayDJData
|
|||
{
|
||||
return cartoon?.channelChangeFrame ?? 60;
|
||||
}
|
||||
|
||||
public function getFistPumpIntroStartFrame():Int
|
||||
{
|
||||
return fistPump?.introStartFrame ?? 0;
|
||||
}
|
||||
|
||||
public function getFistPumpIntroEndFrame():Int
|
||||
{
|
||||
return fistPump?.introEndFrame ?? 0;
|
||||
}
|
||||
|
||||
public function getFistPumpLoopStartFrame():Int
|
||||
{
|
||||
return fistPump?.loopStartFrame ?? 0;
|
||||
}
|
||||
|
||||
public function getFistPumpLoopEndFrame():Int
|
||||
{
|
||||
return fistPump?.loopEndFrame ?? 0;
|
||||
}
|
||||
|
||||
public function getFistPumpIntroBadStartFrame():Int
|
||||
{
|
||||
return fistPump?.introBadStartFrame ?? 0;
|
||||
}
|
||||
|
||||
public function getFistPumpIntroBadEndFrame():Int
|
||||
{
|
||||
return fistPump?.introBadEndFrame ?? 0;
|
||||
}
|
||||
|
||||
public function getFistPumpLoopBadStartFrame():Int
|
||||
{
|
||||
return fistPump?.loopBadStartFrame ?? 0;
|
||||
}
|
||||
|
||||
public function getFistPumpLoopBadEndFrame():Int
|
||||
{
|
||||
return fistPump?.loopBadEndFrame ?? 0;
|
||||
}
|
||||
}
|
||||
|
||||
typedef PlayerResultsData =
|
||||
|
@ -242,3 +290,30 @@ typedef PlayerFreeplayDJCartoonData =
|
|||
var loopFrame:Int;
|
||||
var channelChangeFrame:Int;
|
||||
}
|
||||
|
||||
typedef PlayerFreeplayDJFistPumpData =
|
||||
{
|
||||
@:default(0)
|
||||
var introStartFrame:Int;
|
||||
|
||||
@:default(4)
|
||||
var introEndFrame:Int;
|
||||
|
||||
@:default(4)
|
||||
var loopStartFrame:Int;
|
||||
|
||||
@:default(-1)
|
||||
var loopEndFrame:Int;
|
||||
|
||||
@:default(0)
|
||||
var introBadStartFrame:Int;
|
||||
|
||||
@:default(4)
|
||||
var introBadEndFrame:Int;
|
||||
|
||||
@:default(4)
|
||||
var loopBadStartFrame:Int;
|
||||
|
||||
@:default(-1)
|
||||
var loopBadEndFrame:Int;
|
||||
};
|
||||
|
|
|
@ -315,7 +315,7 @@ class Bopper extends StageProp implements IPlayStateScriptedClass
|
|||
|
||||
public function isAnimationFinished():Bool
|
||||
{
|
||||
return this.animation.finished;
|
||||
return this.animation?.finished ?? false;
|
||||
}
|
||||
|
||||
public function setAnimationOffsets(name:String, xOffset:Float, yOffset:Float):Void
|
||||
|
|
|
@ -116,13 +116,54 @@ class FreeplayDJ extends FlxAtlasSprite
|
|||
if (getCurrentAnimation() != animPrefix) playFlashAnimation(animPrefix, false);
|
||||
timeIdling = 0;
|
||||
case FistPumpIntro:
|
||||
var animPrefix = playableCharData.getAnimationPrefix('fistPump');
|
||||
if (getCurrentAnimation() != animPrefix) playFlashAnimation('Boyfriend DJ fist pump', false);
|
||||
if (getCurrentAnimation() == animPrefix && anim.curFrame >= 4)
|
||||
var animPrefixA = playableCharData.getAnimationPrefix('fistPump');
|
||||
var animPrefixB = playableCharData.getAnimationPrefix('loss');
|
||||
|
||||
if (getCurrentAnimation() == animPrefixA)
|
||||
{
|
||||
playAnimation("Boyfriend DJ fist pump", true, false, false, 0);
|
||||
var endFrame = playableCharData.getFistPumpIntroEndFrame();
|
||||
if (endFrame > -1 && anim.curFrame >= endFrame)
|
||||
{
|
||||
playFlashAnimation(animPrefixA, true, false, false, playableCharData.getFistPumpIntroStartFrame());
|
||||
}
|
||||
}
|
||||
else if (getCurrentAnimation() == animPrefixB)
|
||||
{
|
||||
var endFrame = playableCharData.getFistPumpIntroBadEndFrame();
|
||||
if (endFrame > -1 && anim.curFrame >= endFrame)
|
||||
{
|
||||
playFlashAnimation(animPrefixB, true, false, false, playableCharData.getFistPumpIntroBadStartFrame());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
FlxG.log.warn("Unrecognized animation in FistPumpIntro: " + getCurrentAnimation());
|
||||
}
|
||||
|
||||
case FistPump:
|
||||
var animPrefixA = playableCharData.getAnimationPrefix('fistPump');
|
||||
var animPrefixB = playableCharData.getAnimationPrefix('loss');
|
||||
|
||||
if (getCurrentAnimation() == animPrefixA)
|
||||
{
|
||||
var endFrame = playableCharData.getFistPumpLoopEndFrame();
|
||||
if (endFrame > -1 && anim.curFrame >= endFrame)
|
||||
{
|
||||
playFlashAnimation(animPrefixA, true, false, false, playableCharData.getFistPumpLoopStartFrame());
|
||||
}
|
||||
}
|
||||
else if (getCurrentAnimation() == animPrefixB)
|
||||
{
|
||||
var endFrame = playableCharData.getFistPumpLoopBadEndFrame();
|
||||
if (endFrame > -1 && anim.curFrame >= endFrame)
|
||||
{
|
||||
playFlashAnimation(animPrefixB, true, false, false, playableCharData.getFistPumpLoopBadStartFrame());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
FlxG.log.warn("Unrecognized animation in FistPump: " + getCurrentAnimation());
|
||||
}
|
||||
|
||||
case IdleEasterEgg:
|
||||
var animPrefix = playableCharData.getAnimationPrefix('idleEasterEgg');
|
||||
|
@ -271,7 +312,7 @@ class FreeplayDJ extends FlxAtlasSprite
|
|||
function loadCartoon()
|
||||
{
|
||||
cartoonSnd = FunkinSound.load(Paths.sound(getRandomFlashToon()), 1.0, false, true, true, function() {
|
||||
playAnimation("Boyfriend DJ watchin tv OG", true, false, false, 60);
|
||||
playFlashAnimation(playableCharData.getAnimationPrefix('cartoon'), true, false, false, 60);
|
||||
});
|
||||
|
||||
// Fade out music to 40% volume over 1 second.
|
||||
|
@ -301,21 +342,32 @@ class FreeplayDJ extends FlxAtlasSprite
|
|||
currentState = Confirm;
|
||||
}
|
||||
|
||||
public function fistPump():Void
|
||||
public function fistPumpIntro():Void
|
||||
{
|
||||
currentState = FistPumpIntro;
|
||||
var animPrefix = playableCharData.getAnimationPrefix('fistPump');
|
||||
playFlashAnimation(animPrefix, true, false, false, playableCharData.getFistPumpIntroStartFrame());
|
||||
}
|
||||
|
||||
public function pumpFist():Void
|
||||
public function fistPump():Void
|
||||
{
|
||||
currentState = FistPump;
|
||||
playAnimation("Boyfriend DJ fist pump", true, false, false, 4);
|
||||
var animPrefix = playableCharData.getAnimationPrefix('fistPump');
|
||||
playFlashAnimation(animPrefix, true, false, false, playableCharData.getFistPumpLoopStartFrame());
|
||||
}
|
||||
|
||||
public function pumpFistBad():Void
|
||||
public function fistPumpLossIntro():Void
|
||||
{
|
||||
currentState = FistPumpIntro;
|
||||
var animPrefix = playableCharData.getAnimationPrefix('loss');
|
||||
playFlashAnimation(animPrefix, true, false, false, playableCharData.getFistPumpIntroBadStartFrame());
|
||||
}
|
||||
|
||||
public function fistPumpLoss():Void
|
||||
{
|
||||
currentState = FistPump;
|
||||
playAnimation("Boyfriend DJ loss reaction 1", true, false, false, 4);
|
||||
var animPrefix = playableCharData.getAnimationPrefix('loss');
|
||||
playFlashAnimation(animPrefix, true, false, false, playableCharData.getFistPumpLoopBadStartFrame());
|
||||
}
|
||||
|
||||
override public function getCurrentAnimation():String
|
||||
|
@ -366,12 +418,43 @@ class FreeplayDJ extends FlxAtlasSprite
|
|||
}
|
||||
}
|
||||
|
||||
enum DJBoyfriendState
|
||||
enum FreeplayDJState
|
||||
{
|
||||
/**
|
||||
* Character enters the frame and transitions to Idle.
|
||||
*/
|
||||
Intro;
|
||||
|
||||
/**
|
||||
* Character loops in idle.
|
||||
*/
|
||||
Idle;
|
||||
|
||||
/**
|
||||
* Plays an easter egg animation after a period in Idle, then reverts to Idle.
|
||||
*/
|
||||
IdleEasterEgg;
|
||||
|
||||
/**
|
||||
* Plays an elaborate easter egg animation. Does not revert until another animation is triggered.
|
||||
*/
|
||||
Cartoon;
|
||||
|
||||
/**
|
||||
* Player has selected a song.
|
||||
*/
|
||||
Confirm;
|
||||
|
||||
/**
|
||||
* Character preps to play the fist pump animation; plays after the Results screen.
|
||||
* The actual frame label that gets played may vary based on the player's success.
|
||||
*/
|
||||
FistPumpIntro;
|
||||
|
||||
/**
|
||||
* Character plays the fist pump animation.
|
||||
* The actual frame label that gets played may vary based on the player's success.
|
||||
*/
|
||||
FistPump;
|
||||
IdleEasterEgg;
|
||||
Cartoon;
|
||||
|
|
|
@ -644,8 +644,8 @@ class FreeplayState extends MusicBeatSubState
|
|||
speed: 0.3
|
||||
});
|
||||
|
||||
var diffSelLeft:DifficultySelector = new DifficultySelector(20, grpDifficulties.y - 10, false, controls);
|
||||
var diffSelRight:DifficultySelector = new DifficultySelector(325, grpDifficulties.y - 10, true, controls);
|
||||
var diffSelLeft:DifficultySelector = new DifficultySelector(this, 20, grpDifficulties.y - 10, false, controls);
|
||||
var diffSelRight:DifficultySelector = new DifficultySelector(this, 325, grpDifficulties.y - 10, true, controls);
|
||||
diffSelLeft.visible = false;
|
||||
diffSelRight.visible = false;
|
||||
add(diffSelLeft);
|
||||
|
@ -913,7 +913,15 @@ class FreeplayState extends MusicBeatSubState
|
|||
changeSelection();
|
||||
changeDiff();
|
||||
|
||||
if (dj != null) dj.fistPump();
|
||||
if (fromResultsParams?.newRank == SHIT)
|
||||
{
|
||||
if (dj != null) dj.fistPumpLossIntro();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (dj != null) dj.fistPumpIntro();
|
||||
}
|
||||
|
||||
// rankCamera.fade(FlxColor.BLACK, 0.5, true);
|
||||
rankCamera.fade(0xFF000000, 0.5, true, null, true);
|
||||
if (FlxG.sound.music != null) FlxG.sound.music.volume = 0;
|
||||
|
@ -1095,11 +1103,11 @@ class FreeplayState extends MusicBeatSubState
|
|||
|
||||
if (fromResultsParams?.newRank == SHIT)
|
||||
{
|
||||
if (dj != null) dj.pumpFistBad();
|
||||
if (dj != null) dj.fistPumpLoss();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (dj != null) dj.pumpFist();
|
||||
if (dj != null) dj.fistPump();
|
||||
}
|
||||
|
||||
rankCamera.zoom = 0.8;
|
||||
|
|
Loading…
Reference in a new issue