From aa8dab3b1aa1f9c7693068c2f15018a243c944ec Mon Sep 17 00:00:00 2001 From: Yoshman29 <81191621+YoshiCrafter29@users.noreply.github.com> Date: Fri, 5 May 2023 17:01:06 +0200 Subject: [PATCH] stuff i forgot to push a week ago --- source/funkin/backend/scripting/HScript.hx | 64 +--------------------- source/funkin/backend/utils/CoolUtil.hx | 39 +++++++++---- source/funkin/game/NoteGroup.hx | 42 ++++++-------- source/funkin/game/PlayState.hx | 6 +- 4 files changed, 48 insertions(+), 103 deletions(-) diff --git a/source/funkin/backend/scripting/HScript.hx b/source/funkin/backend/scripting/HScript.hx index 1e68bead..158012a6 100644 --- a/source/funkin/backend/scripting/HScript.hx +++ b/source/funkin/backend/scripting/HScript.hx @@ -165,68 +165,6 @@ class HScript extends Script { } public override function onDestroy() { - @:privateAccess { - // INTERP - if (interp != null) { - interp.scriptObject = null; - interp.errorHandler = null; - interp.variables.clear(); - interp.variables = null; - interp.publicVariables = null; - interp.staticVariables = null; - for(l in interp.locals) - if (l != null) - l.r = null; - interp.locals.clear(); - interp.locals = null; - interp.binops.clear(); - interp.binops = null; - interp.depth = 0; - interp.inTry = false; - while(interp.declared.length > 0) - interp.declared.shift(); - interp.declared = null; - interp.returnValue = null; - interp.isBypassAccessor = false; - interp.importEnabled = false; - interp.allowStaticVariables = false; - interp.allowPublicVariables = false; - while(interp.importBlocklist.length > 0) - interp.importBlocklist.shift(); - interp.importBlocklist = null; - while(interp.__instanceFields.length > 0) - interp.importBlocklist.shift(); - interp.__instanceFields = null; - interp.curExpr = null; - } - - if (parser != null) { - parser.line = 0; - parser.opChars = null; - parser.identChars = null; - parser.opPriority.clear(); - parser.opPriority = null; - parser.opRightAssoc.clear(); - parser.opRightAssoc = null; - parser.preprocesorValues.clear(); - parser.preprocesorValues = null; - parser.input = null; - parser.readPos = 0; - parser.char = 0; - parser.ops = null; - parser.idents = null; - parser.uid = 0; - parser.origin = null; - parser.tokenMin = 0; - parser.tokenMax = 0; - parser.oldTokenMin = 0; - parser.oldTokenMax = 0; - parser.tokens = null; - } - - expr = null; - parser = null; - interp = null; - } + super.onDestroy(); } } diff --git a/source/funkin/backend/utils/CoolUtil.hx b/source/funkin/backend/utils/CoolUtil.hx index ca4e1021..ce531a79 100644 --- a/source/funkin/backend/utils/CoolUtil.hx +++ b/source/funkin/backend/utils/CoolUtil.hx @@ -287,7 +287,7 @@ class CoolUtil * @param menuSFX Menu SFX to play * @param volume At which volume it should play */ - public static function playMenuSFX(menuSFX:CoolSfx = SCROLL, volume:Float = 1) { + public static inline function playMenuSFX(menuSFX:CoolSfx = SCROLL, volume:Float = 1) { FlxG.sound.play(Paths.sound(switch(menuSFX) { case CONFIRM: 'menu/confirm'; case CANCEL: 'menu/cancel'; @@ -346,7 +346,7 @@ class CoolUtil * @param fill Whenever the sprite should fill instead of shrinking (true) * @param maxScale Maximum scale (0 / none) */ - public static function setUnstretchedGraphicSize(sprite:FlxSprite, width:Int, height:Int, fill:Bool = true, maxScale:Float = 0) { + public static inline function setUnstretchedGraphicSize(sprite:FlxSprite, width:Int, height:Int, fill:Bool = true, maxScale:Float = 0) { sprite.setGraphicSize(width, height); sprite.updateHitbox(); var nScale = (fill ? Math.max : Math.min)(sprite.scale.x, sprite.scale.y); @@ -402,7 +402,7 @@ class CoolUtil * @param cam Camera * @param axes Axes (XY) */ - public static function cameraCenter(obj:FlxObject, cam:FlxCamera, axes:FlxAxes = XY) { + public static inline function cameraCenter(obj:FlxObject, cam:FlxCamera, axes:FlxAxes = XY) { switch(axes) { case XY: obj.setPosition((cam.width - obj.width) / 2, (cam.height - obj.height) / 2); @@ -421,7 +421,7 @@ class CoolUtil * @param width Width * @param height Height */ - public static function setSpriteSize(sprite:FlxSprite, width:Float, height:Float) { + public static inline function setSpriteSize(sprite:FlxSprite, width:Float, height:Float) { sprite.scale.set(width / sprite.frameWidth, height / sprite.frameHeight); sprite.updateHitbox(); } @@ -491,16 +491,31 @@ class CoolUtil /** * Gets the macro class created by hscript-improved for an abstract / enum */ - public static function getMacroAbstractClass(className:String) { + public static inline function getMacroAbstractClass(className:String) { return Type.resolveClass('${className}_HSC'); } + /** + * Basically indexOf, but starts from the end. + * @param array Array to scan + * @param element Element + * @return Index, or -1 if unsuccessful. + */ + public static inline function indexOfFromLast(array:Array, element:T):Int { + var i = array.length - 1; + while(i >= 0) + if (array[i] == element) + return i; + return -1; + } + /** * Clears the content of an array */ - public static function clear(array:Array):Array { - while(array.length > 0) - array.shift(); + public static inline function clear(array:Array):Array { + // while(array.length > 0) + // array.shift(); + array.resize(0); return array; } @@ -510,7 +525,7 @@ class CoolUtil * @param ...args Group entries * @return Array */ - public static function pushGroup(array:Array, ...args:T):Array { + public static inline function pushGroup(array:Array, ...args:T):Array { for(a in args) array.push(a); return array; @@ -520,7 +535,7 @@ class CoolUtil * Opens an URL in the browser. * @param url */ - public static function openURL(url:String) { + public static inline function openURL(url:String) { #if linux Sys.command('/usr/bin/xdg-open', [url, "&"]); #else @@ -538,7 +553,7 @@ class CoolUtil * Stops a sound, set its time to 0 then play it again. * @param sound Sound to replay. */ - public static function replay(sound:FlxSound) { + public static inline function replay(sound:FlxSound) { sound.stop(); sound.time = 0; sound.play(); @@ -570,7 +585,7 @@ class CoolUtil * @param frontEnd SoundFrontEnd to set the music of * @param music Music */ - public static function setMusic(frontEnd:SoundFrontEnd, music:FlxSound) { + public static inline function setMusic(frontEnd:SoundFrontEnd, music:FlxSound) { if (frontEnd.music != null) @:privateAccess frontEnd.destroySound(frontEnd.music); frontEnd.list.remove(music); diff --git a/source/funkin/game/NoteGroup.hx b/source/funkin/game/NoteGroup.hx index bd680539..a6e6e628 100644 --- a/source/funkin/game/NoteGroup.hx +++ b/source/funkin/game/NoteGroup.hx @@ -16,44 +16,39 @@ class NoteGroup extends FlxTypedGroup { public inline function sortNotes() { sort(function(i, n1, n2) { if (n1.strumTime == n2.strumTime) - return n1.isSustainNote ? -1 : 1; - return FlxSort.byValues(FlxSort.ASCENDING, n1.strumTime, n2.strumTime); + return n1.isSustainNote ? 1 : -1; + return FlxSort.byValues(FlxSort.DESCENDING, n1.strumTime, n2.strumTime); }); } public override function update(elapsed:Float) { - i = 0; + i = length-1; __loopSprite = null; - while(i < length) { - __loopSprite = members[i]; + while(i >= 0) { + __loopSprite = members[i--]; if (__loopSprite == null || !__loopSprite.exists || !__loopSprite.active) { - i++; continue; } if (__loopSprite.strumTime - Conductor.songPosition > 1500) break; __loopSprite.update(elapsed); - i++; } } public override function draw() { @:privateAccess var oldDefaultCameras = FlxCamera._defaultCameras; @:privateAccess if (cameras != null) FlxCamera._defaultCameras = cameras; - - i = 0; - __loopSprite = null; var oldCur = __currentlyLooping; __currentlyLooping = true; - while(i < length) { - __loopSprite = members[i]; - if (__loopSprite == null || !__loopSprite.exists || !__loopSprite.visible) { - i++; + + i = length-1; + __loopSprite = null; + while(i >= 0) { + __loopSprite = members[i--]; + if (__loopSprite == null || !__loopSprite.exists || !__loopSprite.visible) continue; - } if (__loopSprite.strumTime - Conductor.songPosition > 1500) break; __loopSprite.draw(); - i++; } __currentlyLooping = oldCur; @@ -61,21 +56,18 @@ class NoteGroup extends FlxTypedGroup { } public override function forEach(noteFunc:Note->Void, recursive:Bool = false) { - i = 0; + i = length-1; __loopSprite = null; var oldCur = __currentlyLooping; __currentlyLooping = true; - while(i < length) { - __loopSprite = members[i]; - if (__loopSprite == null || !__loopSprite.exists) { - i++; + while(i >= 0) { + __loopSprite = members[i--]; + if (__loopSprite == null || !__loopSprite.exists) continue; - } if (__loopSprite.strumTime - Conductor.songPosition > 1500) break; noteFunc(__loopSprite); - i++; } __currentlyLooping = oldCur; } @@ -90,14 +82,14 @@ class NoteGroup extends FlxTypedGroup { if (members == null) return null; - var index:Int = members.indexOf(Object); + var index:Int = members.indexOfFromLast(Object); if (index < 0) return null; // doesnt prevent looping from breaking if (Splice && __currentlyLooping && i >= index) - i--; + i++; if (Splice) { diff --git a/source/funkin/game/PlayState.hx b/source/funkin/game/PlayState.hx index b69a566c..365eb22b 100644 --- a/source/funkin/game/PlayState.hx +++ b/source/funkin/game/PlayState.hx @@ -903,7 +903,7 @@ class PlayState extends MusicBeatState } } events.sort(function(p1, p2) { - return FlxSort.byValues(FlxSort.ASCENDING, p1.time, p2.time); + return FlxSort.byValues(FlxSort.DESCENDING, p1.time, p2.time); }); camZoomingInterval = cast songData.meta.beatsPerMesure.getDefault(4); @@ -1112,8 +1112,8 @@ class PlayState extends MusicBeatState } } - while(events.length > 0 && events[0].time <= Conductor.songPosition) - executeEvent(events.shift()); + while(events.length > 0 && events.last().time <= Conductor.songPosition) + executeEvent(events.pop()); if (generatedMusic && strumLines.members[curCameraTarget] != null) {