Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Target Zoom for Cameras in PlayState #15775

Open
wants to merge 13 commits into
base: main
Choose a base branch
from
12 changes: 11 additions & 1 deletion source/backend/PsychCamera.hx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ package backend;

class PsychCamera extends FlxCamera
{
public var targetZoom:Float = 1;
public var zoomDecay:Float = 1;
public var lerpZoom:Bool = false;

override public function update(elapsed:Float):Void
{
// follow the target, if there is one
Expand All @@ -21,6 +25,12 @@ class PsychCamera extends FlxCamera

updateFlashSpritePosition();
updateShake(elapsed);

if (lerpZoom) updateLerpZoom(elapsed);
}

public dynamic function updateLerpZoom(elapsed:Float) {
zoom = FlxMath.lerp(targetZoom, zoom, Math.exp(-elapsed * 3.125 * zoomDecay));
}

public function updateFollowDelta(?elapsed:Float = 0):Void
Expand Down Expand Up @@ -111,4 +121,4 @@ class PsychCamera extends FlxCamera
{
return followLerp = value;
}
}
}
44 changes: 28 additions & 16 deletions source/states/PlayState.hx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import backend.StageData;
import backend.WeekData;
import backend.Song;
import backend.Rating;
import backend.PsychCamera;

import flixel.FlxBasic;
import flixel.FlxObject;
Expand Down Expand Up @@ -164,11 +165,19 @@ class PlayState extends MusicBeatState
public var playerStrums:FlxTypedGroup<StrumNote> = new FlxTypedGroup<StrumNote>();
public var grpNoteSplashes:FlxTypedGroup<NoteSplash> = new FlxTypedGroup<NoteSplash>();

public var camZooming:Bool = false;
public var camZooming(default, set):Bool = false;
public var camZoomingMult:Float = 1;
public var camZoomingDecay:Float = 1;
public var camZoomingDecay(default, set):Float = 1;
private var curSong:String = "";

@:noCompletion
function set_camZooming(value:Bool):Bool
return camGame.lerpZoom = camHUD.lerpZoom = camOther.lerpZoom = value;

@:noCompletion
function set_camZoomingDecay(value:Float):Float
return camGame.zoomDecay = camHUD.zoomDecay = camOther.zoomDecay = value * playbackRate;

public var gfSpeed:Int = 1;
public var health(default, set):Float = 1;
public var combo:Int = 0;
Expand Down Expand Up @@ -201,9 +210,9 @@ class PlayState extends MusicBeatState

public var iconP1:HealthIcon;
public var iconP2:HealthIcon;
public var camHUD:FlxCamera;
public var camGame:FlxCamera;
public var camOther:FlxCamera;
public var camHUD:PsychCamera;
public var camGame:PsychCamera;
public var camOther:PsychCamera;
public var cameraSpeed:Float = 1;

public var songScore:Int = 0;
Expand All @@ -218,7 +227,15 @@ class PlayState extends MusicBeatState
public static var seenCutscene:Bool = false;
public static var deathCounter:Int = 0;

public var defaultCamZoom:Float = 1.05;
@:isVar public var defaultCamZoom(get, set):Float;

@:noCompletion
function get_defaultCamZoom():Float
return camGame.targetZoom;

@:noCompletion
function set_defaultCamZoom(value:Float):Float
return camGame.targetZoom = defaultCamZoom = value;

// how big to stretch the pixel art assets
public static var daPixelZoom:Float = 6;
Expand Down Expand Up @@ -302,8 +319,8 @@ class PlayState extends MusicBeatState

// var gameCam:FlxCamera = FlxG.camera;
camGame = initPsychCamera();
camHUD = new FlxCamera();
camOther = new FlxCamera();
camHUD = new PsychCamera();
camOther = new PsychCamera();
camHUD.bgColor.alpha = 0;
camOther.bgColor.alpha = 0;

Expand Down Expand Up @@ -337,7 +354,7 @@ class PlayState extends MusicBeatState
curStage = SONG.stage;

var stageData:StageFile = StageData.getStageFile(curStage);
defaultCamZoom = stageData.defaultZoom;
camGame.targetZoom = stageData.defaultZoom;

stageUI = "normal";
if (stageData.stageUI != null && stageData.stageUI.trim().length > 0)
Expand Down Expand Up @@ -515,7 +532,7 @@ class PlayState extends MusicBeatState
add(camFollow);

FlxG.camera.follow(camFollow, LOCKON, 0);
FlxG.camera.zoom = defaultCamZoom;
FlxG.camera.zoom = camGame.targetZoom;
FlxG.camera.snapToTarget();

FlxG.worldBounds.set(0, 0, FlxG.width, FlxG.height);
Expand Down Expand Up @@ -673,6 +690,7 @@ class PlayState extends MusicBeatState
playbackRate = value;
FlxG.animationTimeScale = value;
Conductor.safeZoneOffset = (ClientPrefs.data.safeFrames / 60) * 1000 * value;
camZoomingDecay = camZoomingDecay; // update zoomDecay field for cameras
setOnScripts('playbackRate', playbackRate);
#else
playbackRate = 1.0; // ensuring -Crow
Expand Down Expand Up @@ -1732,12 +1750,6 @@ class PlayState extends MusicBeatState
timeTxt.text = FlxStringUtil.formatTime(secondsTotal, false);
}

if (camZooming)
{
FlxG.camera.zoom = FlxMath.lerp(defaultCamZoom, FlxG.camera.zoom, Math.exp(-elapsed * 3.125 * camZoomingDecay * playbackRate));
camHUD.zoom = FlxMath.lerp(1, camHUD.zoom, Math.exp(-elapsed * 3.125 * camZoomingDecay * playbackRate));
}

FlxG.watch.addQuick("secShit", curSection);
FlxG.watch.addQuick("beatShit", curBeat);
FlxG.watch.addQuick("stepShit", curStep);
Expand Down