From b6c4959334284a42fcc46a9b1796a26c51475bec Mon Sep 17 00:00:00 2001 From: ArthurKun <16458204+ArthurKun21@users.noreply.github.com> Date: Sat, 6 Apr 2024 04:08:10 +0800 Subject: [PATCH] Improve support list refresh behavior (#1782) Co-authored-by: arthur <16458204+ArthurKun021@users.noreply.github.com> --- app/src/main/assets/En/support_refresh.png | Bin 0 -> 2048 bytes .../assets/En/support_scrollbar_bottom.png | Bin 0 -> 910 bytes .../assets/En/support_scrollbar_moved.png | Bin 0 -> 362 bytes .../main/assets/En/support_scrollbar_top.png | Bin 0 -> 850 bytes .../fate_grand_automata/util/ImageLoader.kt | 4 ++++ .../fate_grand_automata/scripts/Images.kt | 4 ++++ .../locations/SupportScreenLocations.kt | 15 ++++++++++++++ .../scripts/modules/SupportScreen.kt | 3 +++ .../scripts/modules/SupportScreenRefresher.kt | 7 ++++++- .../scripts/modules/SupportSelectionLoop.kt | 3 ++- .../PreferredSupportSelection.kt | 19 ++++++++++++++++-- .../SupportSelectionResult.kt | 7 ++++--- 12 files changed, 55 insertions(+), 7 deletions(-) create mode 100644 app/src/main/assets/En/support_refresh.png create mode 100644 app/src/main/assets/En/support_scrollbar_bottom.png create mode 100644 app/src/main/assets/En/support_scrollbar_moved.png create mode 100644 app/src/main/assets/En/support_scrollbar_top.png diff --git a/app/src/main/assets/En/support_refresh.png b/app/src/main/assets/En/support_refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..9952f30c606e39fa641fc6383bd0106742f803c8 GIT binary patch literal 2048 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 IM6N<$f|Kl-B>(^b literal 0 HcmV?d00001 diff --git a/app/src/main/assets/En/support_scrollbar_top.png b/app/src/main/assets/En/support_scrollbar_top.png new file mode 100644 index 0000000000000000000000000000000000000000..b9eee0ae772a376eabf1bc3178940e83ef14c3cb GIT binary patch literal 850 zcmV-Y1FigtP)^e~^ z%aUAOOp7!nOQuBXoGxT{fPXQ-%!k2`f6$LV{R|v9=K!1o0Ox=JI55swvPhC7j^lCQ zPevi*Tv3!%##A(o5Q0S!3mBHuOTm%@1n!#oJYKK`2LNE4Lo%ODN2AFoybgnC944~~ zTQC6=qNR0eP$R1wrkYAE*8w2`A&fB=gj*;ASTI&C<#U#i%;Q;f!#MXn@A$0Yowu(? zqwV#|*2DX=o2ypGd;M24=*iWZQ_31{t%3j%Nz_y=iet|YJU<|W++NBUTPc@1t!Agy zj-n_WdP8q8==H3W^yDk|yC+-QYn3bStbUrxncCq;ui5xG^8NF(hH2%}G@~f;0DvyEMdU-g3Y5@t9jaOpAP$7VDY`2y1U{0@ci?gEw@<6 zN}8DfmNJQj3@tr2GTGWar}FCWgE#f=Ah_&aM~2yK{8L4kB?)IDxtU!@;l%F`1|M!( zr*#SDpRDA+-{1OXcg?BgscCcBWSS!=1tasB9Cm}=5fd+o5~r!PvHsxK-(MfsTYfNn z^Xi2kj>ZW`woQipo`2r$x7so!hAMpfc;ngEpRTQz3x$G0Es<78W)(yVf{Y2$ES;#f z;&*VrDXCLx7#h z>m_a1wVysJRg1Qi$;#G>oO30!h7|)42F?Kx+!eq389;)po1&r "support_extra.png" Images.SupportNotFound -> "support_not_found.png" Images.Support -> "support.png" + Images.SupportScrollBarTop -> "support_scrollbar_top.png" + Images.SupportScrollBarMoved -> "support_scrollbar_moved.png" + Images.SupportScrollBarBottom -> "support_scrollbar_bottom.png" + Images.SupportRefresh -> "support_refresh.png" Images.ServantCheckSupport -> "servant_check_support.png" Images.BattleMenu -> "battle_menu.png" Images.EmptyEnhance -> "empty_enhance.png" diff --git a/scripts/src/main/java/io/github/fate_grand_automata/scripts/Images.kt b/scripts/src/main/java/io/github/fate_grand_automata/scripts/Images.kt index 5c37d740f..e17ff2961 100644 --- a/scripts/src/main/java/io/github/fate_grand_automata/scripts/Images.kt +++ b/scripts/src/main/java/io/github/fate_grand_automata/scripts/Images.kt @@ -54,6 +54,10 @@ enum class Images { SupportExtra, SupportNotFound, Support, + SupportScrollBarTop, + SupportScrollBarMoved, + SupportScrollBarBottom, + SupportRefresh, ServantCheckSupport, BattleMenu, EmptyEnhance, diff --git a/scripts/src/main/java/io/github/fate_grand_automata/scripts/locations/SupportScreenLocations.kt b/scripts/src/main/java/io/github/fate_grand_automata/scripts/locations/SupportScreenLocations.kt index 9c4e46ffb..6bcb8c95c 100644 --- a/scripts/src/main/java/io/github/fate_grand_automata/scripts/locations/SupportScreenLocations.kt +++ b/scripts/src/main/java/io/github/fate_grand_automata/scripts/locations/SupportScreenLocations.kt @@ -72,4 +72,19 @@ class SupportScreenLocations @Inject constructor( SupportClass.Extra -> 1264 SupportClass.Mix -> 1402 }.let { x -> Location(x, 256) + headerOffset } + + val topScrollbarRegion = when(isWide) { + true -> Region(1305, 335, 70, 35).xFromCenter() + false -> Region(1195, 335, 70, 35).xFromCenter() + } + + val bottomScrollbarRegion = when(isWide) { + true -> Region(1305, 1400, 70, 35).xFromCenter() + false -> Region(1195, 1400, 70, 35).xFromCenter() + } + + val refreshRegion = when(isWide){ + true -> Region(380, 195, 175, 165).xFromCenter() + false -> Region(490, 195, 175, 165).xFromCenter() + } } \ No newline at end of file diff --git a/scripts/src/main/java/io/github/fate_grand_automata/scripts/modules/SupportScreen.kt b/scripts/src/main/java/io/github/fate_grand_automata/scripts/modules/SupportScreen.kt index f34f7ec90..e89e6b242 100644 --- a/scripts/src/main/java/io/github/fate_grand_automata/scripts/modules/SupportScreen.kt +++ b/scripts/src/main/java/io/github/fate_grand_automata/scripts/modules/SupportScreen.kt @@ -15,6 +15,7 @@ interface SupportScreen { fun click(supportClass: SupportClass) fun delay(duration: Duration) fun refresh() + fun refreshAvailable(): Boolean fun isAnyDialogOpen(): Boolean fun noSupportsPresent(): Boolean fun someSupportsPresent(): Boolean @@ -48,6 +49,8 @@ class RealSupportScreen @Inject constructor( locations.support.updateYesClick.click() } + override fun refreshAvailable() = + images[Images.SupportRefresh] in locations.support.refreshRegion override fun isAnyDialogOpen() = images[Images.SupportExtra] !in locations.support.extraRegion diff --git a/scripts/src/main/java/io/github/fate_grand_automata/scripts/modules/SupportScreenRefresher.kt b/scripts/src/main/java/io/github/fate_grand_automata/scripts/modules/SupportScreenRefresher.kt index f5092df4c..2f7979d12 100644 --- a/scripts/src/main/java/io/github/fate_grand_automata/scripts/modules/SupportScreenRefresher.kt +++ b/scripts/src/main/java/io/github/fate_grand_automata/scripts/modules/SupportScreenRefresher.kt @@ -20,7 +20,12 @@ class SupportScreenRefresher @Inject constructor( private val supportRefreshThreshold = 10.seconds fun refreshSupportList() { - performRefresh() + val refreshAvailable = screen.refreshAvailable() + if (refreshAvailable){ + screen.refresh() + } else { + performRefresh() + } waitForSupportScreenToLoad() } diff --git a/scripts/src/main/java/io/github/fate_grand_automata/scripts/modules/SupportSelectionLoop.kt b/scripts/src/main/java/io/github/fate_grand_automata/scripts/modules/SupportSelectionLoop.kt index 684f93ffa..d0586e002 100644 --- a/scripts/src/main/java/io/github/fate_grand_automata/scripts/modules/SupportSelectionLoop.kt +++ b/scripts/src/main/java/io/github/fate_grand_automata/scripts/modules/SupportSelectionLoop.kt @@ -47,7 +47,8 @@ class SupportSelectionLoop @Inject constructor( result = null } // Refresh support list if not exceeded max refreshes - numberOfUpdates < commonSupportPrefs.maxUpdates -> { + // or if Early Refresh due to lack of scrollbar + result is SupportSelectionResult.EarlyRefresh || numberOfUpdates < commonSupportPrefs.maxUpdates -> { refresher.refreshSupportList() onAllList = false diff --git a/scripts/src/main/java/io/github/fate_grand_automata/scripts/supportSelection/PreferredSupportSelection.kt b/scripts/src/main/java/io/github/fate_grand_automata/scripts/supportSelection/PreferredSupportSelection.kt index a673cdf0b..14bb8b177 100644 --- a/scripts/src/main/java/io/github/fate_grand_automata/scripts/supportSelection/PreferredSupportSelection.kt +++ b/scripts/src/main/java/io/github/fate_grand_automata/scripts/supportSelection/PreferredSupportSelection.kt @@ -1,6 +1,7 @@ package io.github.fate_grand_automata.scripts.supportSelection import io.github.fate_grand_automata.scripts.IFgoAutomataApi +import io.github.fate_grand_automata.scripts.Images import io.github.fate_grand_automata.scripts.entrypoints.AutoBattle import io.github.fate_grand_automata.scripts.prefs.ISupportPreferences import io.github.lib_automata.Region @@ -40,8 +41,22 @@ class PreferredSupportSelection @Inject constructor( matched.click() SupportSelectionResult.Done } else { - // nope, not found this time. keep scrolling - SupportSelectionResult.ScrollDown + var topScrollbar = false + var movedSrollBar = false + var bottomScrollbar = false + useSameSnapIn { + topScrollbar = images[Images.SupportScrollBarTop] in locations.support.topScrollbarRegion + if (!topScrollbar) { + movedSrollBar = images[Images.SupportScrollBarMoved] in locations.support.topScrollbarRegion + bottomScrollbar = images[Images.SupportScrollBarBottom] in + locations.support.bottomScrollbarRegion + } + } + when { + topScrollbar -> SupportSelectionResult.ScrollDown + movedSrollBar && !bottomScrollbar -> SupportSelectionResult.ScrollDown + else -> SupportSelectionResult.EarlyRefresh + } } } } diff --git a/scripts/src/main/java/io/github/fate_grand_automata/scripts/supportSelection/SupportSelectionResult.kt b/scripts/src/main/java/io/github/fate_grand_automata/scripts/supportSelection/SupportSelectionResult.kt index b011f5266..bdd42567e 100644 --- a/scripts/src/main/java/io/github/fate_grand_automata/scripts/supportSelection/SupportSelectionResult.kt +++ b/scripts/src/main/java/io/github/fate_grand_automata/scripts/supportSelection/SupportSelectionResult.kt @@ -1,7 +1,8 @@ package io.github.fate_grand_automata.scripts.supportSelection sealed class SupportSelectionResult { - object Refresh: SupportSelectionResult() - object ScrollDown: SupportSelectionResult() - object Done: SupportSelectionResult() + data object Refresh: SupportSelectionResult() + data object ScrollDown: SupportSelectionResult() + data object EarlyRefresh: SupportSelectionResult() + data object Done: SupportSelectionResult() } \ No newline at end of file