diff --git a/source/funkin/backend/scripting/events/gameplay/BopZoomEvent.hx b/source/funkin/backend/scripting/events/gameplay/BopZoomEvent.hx new file mode 100644 index 0000000000..d9a6a54793 --- /dev/null +++ b/source/funkin/backend/scripting/events/gameplay/BopZoomEvent.hx @@ -0,0 +1,18 @@ +package funkin.backend.scripting.events.gameplay; + +final class BopZoomEvent extends CancellableEvent { + /** + Whether to use the zoomMultiplier property in the camera. + **/ + public var useZoomMultiplier:Bool; + + /** + If higher than this, the zoom will be skipped. + **/ + public var maxZoomMultiplier:Float; + + /** + The zoom's strength multiplier. + **/ + public var zoomStrength:Float; +} \ No newline at end of file diff --git a/source/funkin/game/PlayState.hx b/source/funkin/game/PlayState.hx index 135edeb766..c0eed26bb4 100644 --- a/source/funkin/game/PlayState.hx +++ b/source/funkin/game/PlayState.hx @@ -1428,13 +1428,8 @@ class PlayState extends MusicBeatState var beat = Conductor.getBeats(camZoomingEvery, camZoomingInterval, camZoomingOffset); if (camZoomingLastBeat != beat) { camZoomingLastBeat = beat; - if (useCamZoomMult) { - if (camZoomingMult < maxCamZoomMult) camZoomingMult += camZoomingStrength; - } - else if (FlxG.camera.zoom < maxCamZoom) { - FlxG.camera.zoom += camGameZoomMult * camZoomingStrength; - camHUD.zoom += camHUDZoomMult * camZoomingStrength; - } + + doBopZoom(); } } @@ -1514,6 +1509,29 @@ class PlayState extends MusicBeatState scripts.event("postDraw", e); } + public function doBopZoom() + { + var event:BopZoomEvent = EventManager.get(BopZoomEvent).recycle(useCamZoomMult, maxCamZoomMult, camZoomingStrength); + gameAndCharsEvent("OnBopZoom", event); + + if (event.cancelled) + { + gameAndCharsEvent("onPostBopZoom", event); + return; + } + + if (event.useZoomMultiplier) { + if (camZoomingMult < event.maxZoomMultiplier) + camZoomingMult += event.zoomStrength; + } + else if (FlxG.camera.zoom < maxCamZoom) { + FlxG.camera.zoom += camGameZoomMult * event.zoomStrength; + camHUD.zoom += camHUDZoomMult * event.zoomStrength; + } + + gameAndCharsEvent("onPostBopZoom", event); + } + public function moveCamera() if (strumLines.members[curCameraTarget] != null) { var data:CamPosData = getStrumlineCamPos(curCameraTarget); data.pos.add(cameraFocusOffset.x, cameraFocusOffset.y);