From 2a751e2e37c29c813739432485cf5622b15d1297 Mon Sep 17 00:00:00 2001 From: Kae <80987908+Novaenia@users.noreply.github.com> Date: Sat, 27 Apr 2024 16:31:10 +1000 Subject: [PATCH] Make zoom key-binds holdable also fixed some random UI shine cause it was the wrong freaking size --- assets/opensb/interface/merchant/shine.png | Bin 0 -> 866 bytes source/client/StarClientApplication.cpp | 31 +++++++++++++-------- source/client/StarClientApplication.hpp | 1 + 3 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 assets/opensb/interface/merchant/shine.png diff --git a/assets/opensb/interface/merchant/shine.png b/assets/opensb/interface/merchant/shine.png new file mode 100644 index 0000000000000000000000000000000000000000..639bae9277dc750383ed462bd9dbc1db94943126 GIT binary patch literal 866 zcmeAS@N?(olHy`uVBq!ia0vp^I~f=l1v%J&EcK~u*$fQKnw~C>Ar-gYUfRfcz=4P5 zp#H<(`C;egN}tIRTgRArZerZoGk;&#xMx1tkj-0gVJnlxizr5!qNk0`>qHMIhRazz zImO%_Q~6+mHa|$zd7VwciK*;-mJh^>82NTGw8u0!>m5)Oe=vc&-~=NIkJaJ{lT6V8 z-XfSZM1T>fmko?STF}LSG6-RiUN{2U(ZF4BfYBTYvBxwp>m6WZzr%n)G6jr$I~dqy z3Yd}50al9#Ofm%rc##m}z!<2(g6Tr2^BDOo9handleInput(event, processed); - - auto config = m_root->configuration(); - int zoomOffset = 0; - - if (auto presses = m_input->bindDown("opensb", "zoomIn")) - zoomOffset += *presses; - if (auto presses = m_input->bindDown("opensb", "zoomOut")) - zoomOffset -= *presses; - - if (zoomOffset != 0) - config->set("zoomLevel", max(1.0f, round(config->get("zoomLevel").toFloat() + zoomOffset))); } void ClientApplication::update() { @@ -882,6 +872,25 @@ void ClientApplication::updateRunning(float dt) { m_player->addEmote(HumanoidEmote::Eat); if (isActionTakenEdge(InterfaceAction::EmoteSleep)) m_player->addEmote(HumanoidEmote::Sleep); + + if (int newZoomDirection = (int)m_input->bindHeld("opensb", "zoomIn") - (int)m_input->bindHeld("opensb", "zoomOut")) + m_cameraZoomDirection = newZoomDirection; + } + if (m_cameraZoomDirection != 0) { + const float threshold = 0.01f; + bool goingIn = m_cameraZoomDirection == 1; + auto config = m_root->configuration(); + float curZoom = config->get("zoomLevel").toFloat(), + newZoom = max(1.f, curZoom * powf(1.f + (float)m_cameraZoomDirection * 0.5f, min(1.f, dt * 5.f))), + intZoom = max(1.f, (goingIn ? floor(curZoom) : ceil(curZoom)) + m_cameraZoomDirection); + bool pastInt = goingIn ? newZoom + threshold > intZoom + : newZoom - threshold < intZoom; + if (pastInt) { + float intNewZoom = goingIn ? ceil(newZoom) : floor(newZoom); + newZoom = lerp(clamp(abs(intZoom - newZoom) - 1.f, 0.f, 1.f), intZoom, intNewZoom); + m_cameraZoomDirection = 0; + } + config->set("zoomLevel", newZoom); } if (m_controllerLeftStick.magnitudeSquared() > 0.001f) diff --git a/source/client/StarClientApplication.hpp b/source/client/StarClientApplication.hpp index 5670595..f0eacb0 100644 --- a/source/client/StarClientApplication.hpp +++ b/source/client/StarClientApplication.hpp @@ -108,6 +108,7 @@ private: int m_cameraOffsetDownTicks = 0; Vec2F m_cameraPositionSmoother; Vec2F m_cameraSmoothDelta; + int m_cameraZoomDirection; int m_minInterfaceScale = 2; int m_maxInterfaceScale = 3;