11package funkin .game ;
22
33import flixel .math .FlxPoint ;
4+ import flixel .math .FlxAngle ;
45import flixel .math .FlxRect ;
56import funkin .backend .chart .ChartData ;
67import funkin .backend .scripting .events .note .NoteCreationEvent ;
@@ -243,10 +244,14 @@ class Note extends FlxSprite
243244 override function drawComplex (camera : FlxCamera ) {
244245 var downscrollCam = (camera is HudCamera ? ({var _ : HudCamera = cast camera ;_ ;}).downscroll : false );
245246 if (updateFlipY ) flipY = (isSustainNote && flipSustain ) && (downscrollCam != (__strum != null && __strum .getScrollSpeed (this ) < 0 ));
246- if (downscrollCam ) {
247- frameOffset .y + = __notePosFrameOffset .y * 2 ;
247+ if (downscrollCam && __strum != null ) {
248+ final xx = x ;
249+ x + = origin .x - offset .x ;
250+ x - = __strum .x ; x * = - 1 ; x + = __strum .x ;
251+ x - = origin .x - offset .x ;
252+ x + = __strum .width ; // ??? maybe this isnt good
248253 super .drawComplex (camera );
249- frameOffset . y - = __notePosFrameOffset . y * 2 ;
254+ x = xx ;
250255 } else
251256 super .drawComplex (camera );
252257 }
@@ -258,36 +263,24 @@ class Note extends FlxSprite
258263 @:privateAccess var oldDefaultCameras = FlxCamera ._defaultCameras ;
259264 @:privateAccess if (__strumCameras != null ) FlxCamera ._defaultCameras = __strumCameras ;
260265
261- var negativeScroll = isSustainNote && nextSustain != null && lastScrollSpeed < 0 ;
262- if (negativeScroll ) offset .y * = - 1 ;
263-
266+ var negativeScroll = isSustainNote && strumRelativePos && lastScrollSpeed < 0 ;
267+ if (negativeScroll ) y - = height ;
264268 if (__strum != null && strumRelativePos ) {
265- var pos = __posPoint .set (x , y );
266-
267- setPosition (__strum .x , __strum .y );
268-
269- __notePosFrameOffset .set (pos .x / scale .x , pos .y / scale .y );
270-
271- frameOffset .x - = __notePosFrameOffset .x ;
272- frameOffset .y - = __notePosFrameOffset .y ;
273-
274- this .frameOffsetAngle = __noteAngle ;
275-
269+ final pos = __posPoint .set (x , y );
270+ // distance = pos.y , we can use it safely like this
271+ final xx = - origin .x + offset .x + (pos .y * Math .cos ((__noteAngle + 90 ) * FlxAngle .TO_RAD ));
272+ final yy = - origin .y + offset .y + (pos .y * Math .sin ((__noteAngle + 90 ) * FlxAngle .TO_RAD ));
273+ setPosition (
274+ xx + __strum .x + (__strum .width * 0.5 ),
275+ yy + __strum .y + (__strum .height * 0.5 )
276+ );
276277 super .draw ();
277-
278- this .frameOffsetAngle = 0 ;
279-
280- frameOffset .x + = __notePosFrameOffset .x ;
281- frameOffset .y + = __notePosFrameOffset .y ;
282-
283278 setPosition (pos .x , pos .y );
284- // pos.put();
285279 } else {
286- __notePosFrameOffset .set (0 , 0 );
287280 super .draw ();
288281 }
282+ if (negativeScroll ) y + = height ;
289283
290- if (negativeScroll ) offset .y * = - 1 ;
291284 @:privateAccess FlxCamera ._defaultCameras = oldDefaultCameras ;
292285 }
293286
@@ -301,7 +294,7 @@ class Note extends FlxSprite
301294 if (lastScrollSpeed != scrollSpeed ) {
302295 lastScrollSpeed = scrollSpeed ;
303296 if (nextSustain != null ) {
304- scale .y = (sustainLength * 0.45 * scrollSpeed ) / frameHeight ;
297+ scale .y = (sustainLength * 0.45 * Math . abs ( scrollSpeed ) ) / frameHeight ;
305298 updateHitbox ();
306299 scale .y + = gapFix / frameHeight ;
307300 }
@@ -311,7 +304,7 @@ class Note extends FlxSprite
311304 }
312305
313306 public function updateSustainClip () if (wasGoodHit && ! noSustainClip ) {
314- var t = CoolUtil .bound ((Conductor .songPosition - strumTime ) / height * 0.45 * lastScrollSpeed , 0 , 1 );
307+ var t = CoolUtil .bound ((Conductor .songPosition - strumTime ) / height * 0.45 * Math . abs ( lastScrollSpeed ) , 0 , 1 );
315308 var rect = clipRect == null ? FlxRect .get () : clipRect ;
316309 clipRect = rect .set (0 , frameHeight * t , frameWidth , frameHeight * (1 - t ));
317310 }
0 commit comments