From 0d96a68e8481f8a7d7b8f1809962b29c12f45ef7 Mon Sep 17 00:00:00 2001 From: ivan71kmayshan27 <40351785+ivan71kmayshan27@users.noreply.github.com> Date: Mon, 10 Feb 2025 22:09:35 +0100 Subject: [PATCH] Allow configuration of minimum and maximum camera distance in main game screen (#7603) * Variable min and max zoom * Variable min and max zoom * Variable min and max zoom --------- Co-authored-by: ivan Co-authored-by: Anuken --- core/assets/bundles/bundle.properties | 3 +++ core/src/mindustry/core/Renderer.java | 13 ++++++++++--- .../mindustry/ui/dialogs/SettingsMenuDialog.java | 15 +++++++++++++++ 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index e9f5aa6008..2d96be383a 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1262,6 +1262,9 @@ setting.macnotch.name = Adapt interface to display notch setting.macnotch.description = Restart required to apply changes steam.friendsonly = Friends Only steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join. +setting.maxmagnificationmultiplierpercent.name = Min Camera Distance +setting.minmagnificationmultiplierpercent.name = Max Camera Distance +setting.minmagnificationmultiplierpercent.description = High values may cause performance issues. public.beta = Note that beta versions of the game cannot make public lobbies. uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] seconds... uiscale.cancel = Cancel & Exit diff --git a/core/src/mindustry/core/Renderer.java b/core/src/mindustry/core/Renderer.java index 00fb77bfaf..f8babe63b5 100644 --- a/core/src/mindustry/core/Renderer.java +++ b/core/src/mindustry/core/Renderer.java @@ -42,8 +42,11 @@ public class Renderer implements ApplicationListener{ public FrameBuffer effectBuffer = new FrameBuffer(); public boolean animateShields, drawWeather = true, drawStatus, enableEffects, drawDisplays = true, drawLight = true, pixelate = false; public float weatherAlpha; - /** minZoom = zooming out, maxZoom = zooming in */ + /** minZoom = zooming out, maxZoom = zooming in, used by cutscenes */ public float minZoom = 1.5f, maxZoom = 6f; + + /** minZoom = zooming out, maxZoom = zooming in, used by actual gameplay zoom and regulated by settings **/ + public float minZoomInGame = 0.5f, maxZoomInGame = 6f; public Seq envRenderers = new Seq<>(); public ObjectMap customBackgrounds = new ObjectMap<>(); public TextureRegion[] bubbles = new TextureRegion[16], splashes = new TextureRegion[12]; @@ -165,6 +168,8 @@ public class Renderer implements ApplicationListener{ drawStatus = settings.getBool("blockstatus"); enableEffects = settings.getBool("effects"); drawDisplays = !settings.getBool("hidedisplays"); + maxZoomInGame = settings.getFloat("maxzoomingamemultiplier", 1) * maxZoom; + minZoomInGame = minZoom / settings.getFloat("minzoomingamemultiplier", 1); drawLight = settings.getBool("drawlight", true); pixelate = settings.getBool("pixelate"); @@ -486,11 +491,13 @@ public class Renderer implements ApplicationListener{ } public float minScale(){ - return Scl.scl(minZoom); + if(control.input.logicCutscene) return Scl.scl(minZoom); + return Scl.scl(minZoomInGame); } public float maxScale(){ - return Mathf.round(Scl.scl(maxZoom)); + if(control.input.logicCutscene) return Mathf.round(Scl.scl(maxZoom)); + return Mathf.round(Scl.scl(maxZoomInGame)); } public float getScale(){ diff --git a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java index e32dc46d61..ce99608f4c 100644 --- a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -397,8 +397,23 @@ public class SettingsMenuDialog extends BaseDialog{ } return s + "%"; }); + graphics.sliderPref("unitlaseropacity", 100, 0, 100, 5, s -> s + "%"); graphics.sliderPref("bridgeopacity", 100, 0, 100, 5, s -> s + "%"); + + graphics.sliderPref("maxmagnificationmultiplierpercent", 100, 100, 200, 25, s -> { + if(ui.settings != null){ + Core.settings.put("maxzoomingamemultiplier", (float)s / 100.0f); + } + return s + "%"; + }); + + graphics.sliderPref("minmagnificationmultiplierpercent", 100, 100, 300, 25, s -> { + if(ui.settings != null){ + Core.settings.put("minzoomingamemultiplier", (float)s / 100.0f); + } + return s + "%"; + }); if(!mobile){ graphics.checkPref("vsync", true, b -> Core.graphics.setVSync(b));