Skip to content

Commit

Permalink
shuffle a bunch of things around to fix the crash
Browse files Browse the repository at this point in the history
we should not use dropdown's selectedIndex as an index for anything, they cause crashes if the parent dialog wasn't opened beforehand
  • Loading branch information
KoloInDaCrib committed Nov 20, 2024
1 parent aa11de5 commit 81b1c7b
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 82 deletions.
72 changes: 15 additions & 57 deletions source/funkin/ui/debug/char/components/dialogs/ResultsAnimDialog.hx
Original file line number Diff line number Diff line change
Expand Up @@ -15,35 +15,8 @@ class ResultsAnimDialog extends DefaultPageDialog
{
public var currentRank(get, never):ScoringRank;

public var currentRankText(get, never):String;

public var characterAtlasAnimations(get, never):Array<
{
sprite:FlxAtlasSprite,
delay:Float,
forceLoop:Bool
}>;

public var characterSparrowAnimations(get, never):Array<
{
sprite:FunkinSprite,
delay:Float
}>;

var rankAnimationDataMap:Map<ScoringRank, Array<PlayerResultsAnimationData>> = [];

var characterAtlasAnimationsMap:Map<ScoringRank, Array<
{
sprite:FlxAtlasSprite,
delay:Float,
forceLoop:Bool
}>> = [];
var characterSparrowAnimationsMap:Map<ScoringRank, Array<
{
sprite:FunkinSprite,
delay:Float
}>> = [];

var rankAnimationBox:AddRankAnimationDataBox;

var previousRank:ScoringRank;
Expand All @@ -68,11 +41,7 @@ class ResultsAnimDialog extends DefaultPageDialog
rankDropdown.onChange = function(_) {
if (previousRank == currentRank) return;

changeRankPreview();

daPage.labelRank.text = currentRankText;

daPage.playAnimation();
daPage.curRankInt = rankDropdown.selectedIndex;
}

rankAnimationBox.useAnimationData(rankAnimationDataMap[currentRank]);
Expand All @@ -81,13 +50,14 @@ class ResultsAnimDialog extends DefaultPageDialog

public function changeRankPreview():Void
{
updateRankAnimations(previousRank);

for (atlas in characterAtlasAnimationsMap[previousRank])
atlas.sprite.visible = false;

for (sprite in characterSparrowAnimationsMap[previousRank])
sprite.sprite.visible = false;
try
{
updateRankAnimations(previousRank);
}
catch (e)
{
// do nothing, janky fix around null object reference
}

rankAnimationBox.useAnimationData(rankAnimationDataMap[currentRank]);
previousRank = currentRank;
Expand Down Expand Up @@ -196,18 +166,8 @@ class ResultsAnimDialog extends DefaultPageDialog
}
}

characterAtlasAnimationsMap.set(rank, atlasAnimations);
characterSparrowAnimationsMap.set(rank, sparrowAnimations);
}

function get_characterAtlasAnimations()
{
return characterAtlasAnimationsMap[currentRank];
}

function get_characterSparrowAnimations()
{
return characterSparrowAnimationsMap[currentRank];
cast(page, CharCreatorResultsPage).characterAtlasAnimationsMap.set(rank, atlasAnimations);
cast(page, CharCreatorResultsPage).characterSparrowAnimationsMap.set(rank, sparrowAnimations);
}

function get_currentRank():ScoringRank
Expand All @@ -232,11 +192,6 @@ class ResultsAnimDialog extends DefaultPageDialog

return PERFECT_GOLD;
}

function get_currentRankText():String
{
return rankDropdown.selectedItem?.text ?? "Perfect Gold";
}
}

private class AddRankAnimationDataBox extends HBox
Expand Down Expand Up @@ -351,12 +306,14 @@ private class AddRankAnimationDataBox extends HBox
')
private class RankAnimationData extends VBox
{
var animRenderTypeValue:String = "sparrow";

public var animData(get, never):PlayerResultsAnimationData;

function get_animData():PlayerResultsAnimationData
{
return {
renderType: animRenderType.selectedItem.value,
renderType: animRenderTypeValue,
assetPath: animAssetPath.text,
offsets: [animOffsetX.value, animOffsetY.value],
zIndex: animZIndex.value,
Expand Down Expand Up @@ -388,6 +345,7 @@ private class RankAnimationData extends VBox
if (data != null)
{
animRenderType.selectedIndex = data.renderType == "sparrow" ? 1 : 0;
animRenderTypeValue = data.renderType;
animAssetPath.value = data.assetPath;

if (data.offsets != null)
Expand Down
84 changes: 59 additions & 25 deletions source/funkin/ui/debug/char/pages/CharCreatorResultsPage.hx
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,19 @@ class CharCreatorResultsPage extends CharCreatorDefaultPage

var rankMusicMap:Map<ScoringRank, ResultsMusic> = [];

public var curRankInt(default, set):Int = 0;
public var characterAtlasAnimationsMap:Map<ScoringRank, Array<
{
sprite:FlxAtlasSprite,
delay:Float,
forceLoop:Bool
}>> = [];
public var characterSparrowAnimationsMap:Map<ScoringRank, Array<
{
sprite:FunkinSprite,
delay:Float
}>> = [];

override public function new(state:CharCreatorState, data:WizardGenerateParams)
{
super(state);
Expand Down Expand Up @@ -91,43 +104,45 @@ class CharCreatorResultsPage extends CharCreatorDefaultPage

function generateUI():Void
{
var rankAnimDialog = cast(dialogMap[RankAnims], ResultsAnimDialog);

labelRank.text = rankAnimDialog.currentRankText;
labelRank.text = "PERFECT_GOLD";
labelRank.styleNames = "infoText";
labelRank.verticalAlign = "center";

checkPlayMusic.text = "Play Music";

labelRank.onClick = function(_) {
var drop = rankAnimDialog.rankDropdown;
if (drop.selectedIndex == -1) return;

var id = drop.selectedIndex + 1;
if (id >= drop.dataSource.size) id = 0;
drop.selectedIndex = id;

rankAnimDialog.changeRankPreview();
playAnimation();
var supposedInt = curRankInt + 1;
if (supposedInt >= ALL_RANKS.length) supposedInt = 0;
curRankInt = supposedInt;
}

labelRank.onRightClick = function(_) {
var drop = rankAnimDialog.rankDropdown;
if (drop.selectedIndex == -1) return;
var supposedInt = curRankInt - 1;
if (supposedInt < 0) supposedInt = ALL_RANKS.length - 1;
curRankInt = supposedInt;
}
}

var id = drop.selectedIndex - 1;
if (id < 0) id = drop.dataSource.size - 1;
drop.selectedIndex = id;
function set_curRankInt(value:Int)
{
if (this.curRankInt == value) return this.curRankInt;

rankAnimDialog.changeRankPreview();
playAnimation();
}
this.curRankInt = value;

var rankAnimDialog = cast(dialogMap[RankAnims], ResultsAnimDialog);
if (rankAnimDialog.rankDropdown.selectedIndex != value) rankAnimDialog.rankDropdown.selectedIndex = value;

clearSprites();
rankAnimDialog.changeRankPreview();
playAnimation();

return value;
}

override public function performCleanup():Void
{
var animDialog:ResultsAnimDialog = cast dialogMap[RankAnims];
rankMusicMap[animDialog.currentRank].stop();
rankMusicMap[ALL_RANKS[curRankInt]].stop();
FlxG.sound.music.volume = 1;
}

Expand All @@ -141,6 +156,25 @@ class CharCreatorResultsPage extends CharCreatorDefaultPage
}
}

public function clearSprites()
{
for (r => array in characterAtlasAnimationsMap)
{
for (atlas in array)
{
atlas.sprite.visible = false;
}
}

for (r => array in characterSparrowAnimationsMap)
{
for (sparrow in array)
{
sparrow.sprite.visible = false;
}
}
}

var animTimers:Array<FlxTimer> = [];
var previousMusic:Null<ResultsMusic> = null;

Expand All @@ -154,9 +188,9 @@ class CharCreatorResultsPage extends CharCreatorDefaultPage

var animDialog:ResultsAnimDialog = cast dialogMap[RankAnims];

var rank = animDialog.currentRank;
var rank = ALL_RANKS[curRankInt];

labelRank.text = animDialog.currentRankText;
labelRank.text = Std.string(rank);

var newMusic = rankMusicMap[rank];
previousMusic = newMusic;
Expand All @@ -174,7 +208,7 @@ class CharCreatorResultsPage extends CharCreatorDefaultPage
FlxG.sound.music.volume = 1;
}

for (atlas in animDialog.characterAtlasAnimations)
for (atlas in characterAtlasAnimationsMap[rank])
{
atlas.sprite.visible = false;
animTimers.push(new FlxTimer().start(atlas.delay + rank.getBFDelay(), _ -> {
Expand All @@ -184,7 +218,7 @@ class CharCreatorResultsPage extends CharCreatorDefaultPage
}));
}

for (sprite in animDialog.characterSparrowAnimations)
for (sprite in characterSparrowAnimationsMap[rank])
{
sprite.sprite.visible = false;
animTimers.push(new FlxTimer().start(sprite.delay + rank.getBFDelay(), _ -> {
Expand Down

0 comments on commit 81b1c7b

Please sign in to comment.