From 4b9b02783f1bbfc1049e11b606883c5cfa0b215e Mon Sep 17 00:00:00 2001 From: Kae <80987908+Novaenia@users.noreply.github.com> Date: Mon, 26 Jun 2023 18:39:40 +1000 Subject: [PATCH] HD Cursor --- assets/opensb/cursors/cursors.frames.patch | 5 +++++ assets/opensb/cursors/cursors.png | Bin 0 -> 2083 bytes assets/opensb/cursors/inspect.cursor.patch | 3 +++ assets/opensb/cursors/link.cursor.patch | 3 +++ assets/opensb/cursors/pointer.cursor.patch | 3 +++ source/frontend/StarErrorScreen.cpp | 10 ++++++---- source/frontend/StarInterfaceCursor.cpp | 6 ++++++ source/frontend/StarInterfaceCursor.hpp | 2 ++ source/frontend/StarMainInterface.cpp | 15 +++++++++------ source/frontend/StarTitleScreen.cpp | 11 +++++++---- 10 files changed, 44 insertions(+), 14 deletions(-) create mode 100644 assets/opensb/cursors/cursors.frames.patch create mode 100644 assets/opensb/cursors/cursors.png create mode 100644 assets/opensb/cursors/inspect.cursor.patch create mode 100644 assets/opensb/cursors/link.cursor.patch create mode 100644 assets/opensb/cursors/pointer.cursor.patch diff --git a/assets/opensb/cursors/cursors.frames.patch b/assets/opensb/cursors/cursors.frames.patch new file mode 100644 index 0000000..c2f200a --- /dev/null +++ b/assets/opensb/cursors/cursors.frames.patch @@ -0,0 +1,5 @@ +{ + "frameGrid" : { + "size" : [32, 32] + } +} \ No newline at end of file diff --git a/assets/opensb/cursors/cursors.png b/assets/opensb/cursors/cursors.png new file mode 100644 index 0000000000000000000000000000000000000000..6b30ce1eb3cb7be3aafef49edd40dd114f196f6e GIT binary patch literal 2083 zcmai#Sx{5i7KYC`BoPvjNPvW)Na#qg6+=XnK_Gw#1erliL`l+IXlVwagA9#8!sKv8 z5HX-Kgh5Li6(T4qASVq9$mj%$j3P?BNYg}_NpAX~t-4QlRekH~&iHz} zX`uDd003w(++F;Y%2y&%RZ(V{XF;D*K%T#wGjONZP^vVDpPjs%06?6JS>qy=KGN4S zaGz3}_4TC`O4rQSS-GNQ@FR=GI^<5N5Jrf_;uIeJV6-@{tlhxCAPbBA$pgJG7vpM8 zklfr##H%-FF>;uelHa$+*^_;wl;yQ`sZ>h1My#r;%A#YXag^pDeIAe3+1WWgJ*|8Q zXL-9@DVyW`y#o~gKLDnghK90VEykV21AvWx{0*qH#e)w38?X!)r@+ME*Ovu{UwUA( zR8%XFw-b>y=~JIqTP90(@+gga8m|hSFD|9Auk;j;bel8wpWXXDcOv-@UygBqH4*Kz z@oBoo=}>-_qm?z5l@=dQowGYoop-2h*?gZcLZ#F-9zUhm)#RFfNU!4;%W=lP5@P-I zwUbmjS0})ZpTgmQ4)2vhRMIH4?9zm1?J0GPf3bcvytYQ-AW7+X(XTifo;SaH>l|8z z)%oOZo&1`lD1j!J)OafE>RrX7N*6`&bJXPTO>~VS&q=6VUmKd)7)*_+a-xWiRM@n8 zUS~kk?p}uzr$i$O?HZ4>zm61dS zt_DKpX$D5NbzT&bVySIv3WKn=JL^o+>sX2b&z~pbI@IeG<&dEv<8Y~7lSonBIdl%i zTj)a$a|YyDfJWFCHoBkFD|d2K9*IZ}EkfY|pbUHVjzo>h7sysjHJUb4^*e}L2m;#d zJDY1yJ(FkJ)%X<5Ydz(r=g} za4@{j`c};a7iHn_DPsc9Xcsc>c_u$FiD`VnKJeLsK>MZrV&%5-OO=1MU$Cq^!X~q3 z*!nb6FR;fHG5_*_`{^V1HHo{g8gT1=R5wc?#Ux{p=Bse(*D{Bava*s(h48$Quq#`x zy+z%U7>;@K*c|5KFmKsJ6g6Dr)P@lGj-A6=<9hpe;D#S;%<#|v5%q7?;o(}vR8LP8 zOmj5$ju9lPo#QU8B{eo1y^T(BrN+d@iXZUxXLLH!GJ9W{IIfzrMR3B+akL+R!l*^= zrq+I^8Em4%#e-RxF}lvlZxuX&0TDLTdf*j0w;| zNFAyB9j!Mteez6;Tv_lVhxZUJJ9KoDbz({;G*WEpo)iQ;j1*WLC!g`0{uG~Xmb){6 zYW}zPTV8K|O`2-ur)g*w6lkinoWNc!tSL;%7W!^m*)LG>|L6sNJSu2nxdzvXjZP{` zbr6Qv4B2+`?LBsPxbjO8}j@MJ>cLn&sa5s~;U>NXTx%m?K8 z_ukIn;K8{{b0{dAW6XIpx&z|q@B^x^m>Sb95lXeZ(M4ZdV^S}uH(8BCIR@XKN6?-+ATVC4_? z4sp(%Lz+kW$@g;2gfC;d2 zd~a#l2i{y)VxfTDac)65t5(azJnlC`6of%4y@TK(D|md4I1rxLIc2McWxjGm3N7nE@dXM&FlXqk`v4e$aB_q^d}zP)nL37#3+WVF0=ds&*geH0$UT zjgTU|!gk+S>5Hn3OT*`l{JIFNUWJF(-9SCF7j)I`F*@FtS*j_$jH$IHQ)?X~S`nPu zJOr|ve~;zF-qmlw1;5S)9V9iPZ}p(BytmkL@CrWanH;0Kwk)G3ZzcT3&uxCCT$li3 MpSQ~$XHNQm0nyW^WdHyG literal 0 HcmV?d00001 diff --git a/assets/opensb/cursors/inspect.cursor.patch b/assets/opensb/cursors/inspect.cursor.patch new file mode 100644 index 0000000..7ca7bef --- /dev/null +++ b/assets/opensb/cursors/inspect.cursor.patch @@ -0,0 +1,3 @@ +{ + "scale" : 1 +} \ No newline at end of file diff --git a/assets/opensb/cursors/link.cursor.patch b/assets/opensb/cursors/link.cursor.patch new file mode 100644 index 0000000..7ca7bef --- /dev/null +++ b/assets/opensb/cursors/link.cursor.patch @@ -0,0 +1,3 @@ +{ + "scale" : 1 +} \ No newline at end of file diff --git a/assets/opensb/cursors/pointer.cursor.patch b/assets/opensb/cursors/pointer.cursor.patch new file mode 100644 index 0000000..7ca7bef --- /dev/null +++ b/assets/opensb/cursors/pointer.cursor.patch @@ -0,0 +1,3 @@ +{ + "scale" : 1 +} \ No newline at end of file diff --git a/source/frontend/StarErrorScreen.cpp b/source/frontend/StarErrorScreen.cpp index 6809d95..6d4e6b3 100644 --- a/source/frontend/StarErrorScreen.cpp +++ b/source/frontend/StarErrorScreen.cpp @@ -76,11 +76,13 @@ void ErrorScreen::renderCursor() { Vec2I cursorPos = m_cursorScreenPos; Vec2I cursorSize = m_cursor.size(); Vec2I cursorOffset = m_cursor.offset(); + unsigned int cursorScale = m_cursor.scale(interfaceScale()); + Drawable cursorDrawable = m_cursor.drawable(); - cursorPos[0] -= cursorOffset[0] * interfaceScale(); - cursorPos[1] -= (cursorSize[1] - cursorOffset[1]) * interfaceScale(); - if (!m_guiContext->trySetCursor(m_cursor.drawable(), cursorOffset, interfaceScale())) - m_guiContext->drawDrawable(m_cursor.drawable(), Vec2F(cursorPos), interfaceScale()); + cursorPos[0] -= cursorOffset[0] * cursorScale; + cursorPos[1] -= (cursorSize[1] - cursorOffset[1]) * cursorScale; + if (!m_guiContext->trySetCursor(cursorDrawable, cursorOffset, cursorScale)) + m_guiContext->drawDrawable(cursorDrawable, Vec2F(cursorPos), cursorScale); } float ErrorScreen::interfaceScale() const { diff --git a/source/frontend/StarInterfaceCursor.cpp b/source/frontend/StarInterfaceCursor.cpp index 8844da2..9fa01f7 100644 --- a/source/frontend/StarInterfaceCursor.cpp +++ b/source/frontend/StarInterfaceCursor.cpp @@ -36,6 +36,8 @@ void InterfaceCursor::setCursor(String const& configFile) { m_drawable = Animation(config.get("animation"), "/interface"); m_size = Vec2I(m_drawable.get().drawable(1.0f).boundBox(false).size()); } + + m_scale = config.getUInt("scale", 0); } Drawable InterfaceCursor::drawable() const { @@ -53,6 +55,10 @@ Vec2I InterfaceCursor::offset() const { return m_offset; } +unsigned int InterfaceCursor::scale(unsigned int interfaceScale) const { + return m_scale ? m_scale : interfaceScale; +} + void InterfaceCursor::update(float dt) { if (m_drawable.is()) { m_drawable.get().update(dt); diff --git a/source/frontend/StarInterfaceCursor.hpp b/source/frontend/StarInterfaceCursor.hpp index 2f58867..6936700 100644 --- a/source/frontend/StarInterfaceCursor.hpp +++ b/source/frontend/StarInterfaceCursor.hpp @@ -20,6 +20,7 @@ public: Drawable drawable() const; Vec2I size() const; Vec2I offset() const; + unsigned int scale(unsigned int interfaceScale = 0) const; void update(float dt); @@ -27,6 +28,7 @@ private: String m_configFile; Vec2I m_offset; Vec2I m_size; + unsigned int m_scale; MVariant m_drawable; }; diff --git a/source/frontend/StarMainInterface.cpp b/source/frontend/StarMainInterface.cpp index 1dcb6c4..6c29587 100644 --- a/source/frontend/StarMainInterface.cpp +++ b/source/frontend/StarMainInterface.cpp @@ -1375,10 +1375,13 @@ void MainInterface::renderCursor() { Vec2I cursorPos = m_cursorScreenPos; Vec2I cursorSize = m_cursor.size(); Vec2I cursorOffset = m_cursor.offset(); - cursorPos[0] -= cursorOffset[0] * interfaceScale(); - cursorPos[1] -= (cursorSize[1] - cursorOffset[1]) * interfaceScale(); - if (!m_guiContext->trySetCursor(m_cursor.drawable(), cursorOffset, interfaceScale())) - m_guiContext->drawDrawable(m_cursor.drawable(), Vec2F(cursorPos), interfaceScale()); + unsigned int cursorScale = m_cursor.scale(interfaceScale()); + Drawable cursorDrawable = m_cursor.drawable(); + + cursorPos[0] -= cursorOffset[0] * cursorScale; + cursorPos[1] -= (cursorSize[1] - cursorOffset[1]) * cursorScale; + if (!m_guiContext->trySetCursor(cursorDrawable, cursorOffset, cursorScale)) + m_guiContext->drawDrawable(cursorDrawable, Vec2F(cursorPos), cursorScale); if (m_cursorTooltip) { auto assets = Root::singleton().assets(); @@ -1388,7 +1391,7 @@ void MainInterface::renderCursor() { auto rawCursorOffset = jsonToVec2I(assets->json("/interface.config:cursorTooltip.offset")); Vec2I tooltipSize = Vec2I(imgDb->imageSize(backgroundImage)) * interfaceScale(); - Vec2I cursorOffset = (Vec2I{0, -m_cursor.size().y()} + rawCursorOffset) * interfaceScale(); + Vec2I cursorOffset = (Vec2I{0, -m_cursor.size().y()} + rawCursorOffset) * cursorScale; Vec2I tooltipOffset = m_cursorScreenPos + cursorOffset; size_t fontSize = assets->json("/interface.config:cursorTooltip.fontSize").toUInt(); String font = assets->json("/interface.config:cursorTooltip.font").toString(); @@ -1404,7 +1407,7 @@ void MainInterface::renderCursor() { VerticalAnchor::VMidAnchor)); } - m_cursorItem->setPosition(m_cursorScreenPos / interfaceScale() + m_config->inventoryItemMouseOffset); + m_cursorItem->setPosition(m_cursorScreenPos / cursorScale + m_config->inventoryItemMouseOffset); if (auto swapItem = m_client->mainPlayer()->inventory()->swapSlotItem()) m_cursorItem->setItem(swapItem); diff --git a/source/frontend/StarTitleScreen.cpp b/source/frontend/StarTitleScreen.cpp index 4571f04..e2963f0 100644 --- a/source/frontend/StarTitleScreen.cpp +++ b/source/frontend/StarTitleScreen.cpp @@ -414,11 +414,14 @@ void TitleScreen::renderCursor() { Vec2I cursorPos = m_cursorScreenPos; Vec2I cursorSize = m_cursor.size(); Vec2I cursorOffset = m_cursor.offset(); + unsigned int cursorScale = m_cursor.scale(interfaceScale()); + Drawable cursorDrawable = m_cursor.drawable(); - cursorPos[0] -= cursorOffset[0] * interfaceScale(); - cursorPos[1] -= (cursorSize[1] - cursorOffset[1]) * interfaceScale(); - if (!m_guiContext->trySetCursor(m_cursor.drawable(), cursorOffset, interfaceScale())) - m_guiContext->drawDrawable(m_cursor.drawable(), Vec2F(cursorPos), interfaceScale()); + cursorPos[0] -= cursorOffset[0] * cursorScale; + cursorPos[1] -= (cursorSize[1] - cursorOffset[1]) * cursorScale; + + if (!m_guiContext->trySetCursor(cursorDrawable, cursorOffset, cursorScale)) + m_guiContext->drawDrawable(cursorDrawable, Vec2F(cursorPos), cursorScale); } float TitleScreen::interfaceScale() const {