From d9fb903c89f26d29a9d9f2340694e3b5c4b7d6ad Mon Sep 17 00:00:00 2001 From: Jerry Lingjie Mei Date: Wed, 20 Mar 2024 04:54:22 -0500 Subject: [PATCH] Fix button offset when window resizes (#354) * Add button offsets. * Add offset detection when there's no technique point. * Remove offset calls for image_crop * Fix bugs. * Fix bugs. * Fix corner case when technique points are being generated. * Add png source for technique points. * Remove duplicated assets. --- .../map/control/TECHNIQUE_POINT_0.SEARCH.png | Bin 0 -> 8206 bytes .../share/map/control/TECHNIQUE_POINT_0.png | Bin 0 -> 2862 bytes .../map/control/TECHNIQUE_POINT_1.SEARCH.png | Bin 0 -> 8499 bytes .../share/map/control/TECHNIQUE_POINT_1.png | Bin 6129 -> 2911 bytes .../share/map/control/TECHNIQUE_POINT_2.png | Bin 6186 -> 2988 bytes .../share/map/control/TECHNIQUE_POINT_3.png | Bin 6216 -> 3003 bytes .../share/map/control/TECHNIQUE_POINT_4.png | Bin 6196 -> 2994 bytes .../share/map/control/TECHNIQUE_POINT_5.png | Bin 6097 -> 2968 bytes dev_tools/button_extract.py | 5 +- tasks/map/assets/assets_map_control.py | 50 +++++++++++------- tasks/map/control/joystick.py | 40 ++++++++++---- 11 files changed, 62 insertions(+), 33 deletions(-) create mode 100644 assets/share/map/control/TECHNIQUE_POINT_0.SEARCH.png create mode 100644 assets/share/map/control/TECHNIQUE_POINT_0.png create mode 100644 assets/share/map/control/TECHNIQUE_POINT_1.SEARCH.png diff --git a/assets/share/map/control/TECHNIQUE_POINT_0.SEARCH.png b/assets/share/map/control/TECHNIQUE_POINT_0.SEARCH.png new file mode 100644 index 0000000000000000000000000000000000000000..114720cc9017f77d6780e65eb5a2acd83835f4f5 GIT binary patch literal 8206 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 Gr~d)9O}Lu? literal 0 HcmV?d00001 diff --git a/assets/share/map/control/TECHNIQUE_POINT_1.png b/assets/share/map/control/TECHNIQUE_POINT_1.png index ea6201eaadf6fee823a6f9bf01860db7e1d942c7..6f98d1bf9e54e641b89d344f89ed6ed8a856f0e0 100644 GIT binary patch delta 243 zcmVrQB`jd z#pVF^iUAA&Ky9YO!yhlB>ntGvzc7FS0I1Dm&?rY=Kfklv;_5PE4gdfE?8f-6>@-t3 tjEI=t#91@$=P$XVvoQ;>0T|$)`vi#EUVXSYb#wp#002ovPDHLkV1n^oY19A! delta 3505 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 diff --git a/assets/share/map/control/TECHNIQUE_POINT_2.png b/assets/share/map/control/TECHNIQUE_POINT_2.png index 1c8b28ae6eaef5cd9a8d9e421d211ff85d25cb1d..94f46fcc2312f58ced94a13f6d911fdbbcb0f7ca 100644 GIT binary patch delta 327 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 V4d#l;l9B)b002ovPDHLkV1jVd^jZJ_ diff --git a/assets/share/map/control/TECHNIQUE_POINT_4.png b/assets/share/map/control/TECHNIQUE_POINT_4.png index d6d9e5bf356bdcbb8887a7863744616f155481ae..5037e1bd012dcbc1efe01beab33f7ec6beeb2568 100644 GIT binary patch delta 334 zcmV-U0kQtHFtQhrBTox?Nkld8&&RouB<(H$003yJ@>Wu2356J*3?Q gvoQ-U0vC{BZ!c79_4Vpzm;e9(07*qoM6N<$g5U&}=>Px# delta 3576 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%0AGltAE05uN>MOz zOKR2FG*Q|qEiw(Aw3Q4^CALj^j}r^r7+tt=F_Y)n-rc*pzubFH1hIh~2!8+o0Q_gk z1ONbZy;oj+H|HWEMamKJ`fD#&tNR;^586+*B2q-oIi-}B=4WgLU986h004Bo0|$;q zL_|)dG;-qjXO}NLR~&zHuvo-U%oUkJ9lq)XE##v1sDV{004Bh;pbl(dHaoX=ia+{^Jc5nN-3q3a?b1P z>*aFqL~Z>3^24W3pSB;b+6n|P004BbvuDpwT>Rk1jT@`0tEEyYrGLNff-Q<-Wo4yW z9r|$W^y1>Lk5-m!1zoIU0ssKI-X|Y_G&wohYPJ6PDCaygGxK2ie*N=L4Fv)i0025$ zyWQT|*(sOHJw1Q>1+plLqA0euwx*}2D}w`u0s#yF0G+M3w_K~$N~M2)`|a!NyL$EN z=H?SaL3eWo7yy9o*MDwrpBWz;92i(zTie^)dv*g>M3hRUN~Kb-*B>@l?%uuIXe`(Y z1TX*qbg%;lk9;@t!^Fi}e}8|o*~~dV3*btna_!o+d-IJizP!D;`TN?MTcAMz0{}oL zJACA5MEo>6ckb+&Lx&D+Y;5fA?p7+5D_5?}&o^$}x*ZWIhgJXv0So{DogTo)BBChv z78>_YpBk-Jhc-4g>h=2kLgTBi??lRxBT`xyz#xDD0HC7{AATVsN5uBd_Tu8w=;%8m zBPW0U<=&ldzKxV3M?{K<^|h9*v4JB3AAtYEp8x;=|NjF3wJ`D}-p8`K00000NkvXX Hu0mjf#GR<% diff --git a/dev_tools/button_extract.py b/dev_tools/button_extract.py index a45325055..67a623acc 100644 --- a/dev_tools/button_extract.py +++ b/dev_tools/button_extract.py @@ -92,8 +92,9 @@ def iter_images(): for server in ASSET_SERVER: for path, folders, files in os.walk(os.path.join(AzurLaneConfig.ASSETS_FOLDER, server)): for file in files: - file = os.path.join(path, file).replace('\\', '/') - yield AssetsImage(file) + if not file.startswith('.'): + file = os.path.join(path, file).replace('\\', '/') + yield AssetsImage(file) @dataclass diff --git a/tasks/map/assets/assets_map_control.py b/tasks/map/assets/assets_map_control.py index 6aaa78af9..659f100a7 100644 --- a/tasks/map/assets/assets_map_control.py +++ b/tasks/map/assets/assets_map_control.py @@ -53,53 +53,63 @@ RUN_BUTTON = ButtonWrapper( button=(1147, 591, 1195, 639), ), ) +TECHNIQUE_POINT_0 = ButtonWrapper( + name='TECHNIQUE_POINT_0', + share=Button( + file='./assets/share/map/control/TECHNIQUE_POINT_0.png', + area=(884, 597, 891, 604), + search=(831, 589, 944, 612), + color=(56, 56, 56), + button=(884, 597, 891, 604), + ), +) TECHNIQUE_POINT_1 = ButtonWrapper( name='TECHNIQUE_POINT_1', share=Button( file='./assets/share/map/control/TECHNIQUE_POINT_1.png', - area=(881, 594, 894, 607), - search=(861, 574, 914, 627), - color=(149, 141, 186), - button=(881, 594, 894, 607), + area=(884, 597, 891, 604), + search=(831, 589, 944, 612), + color=(222, 213, 253), + button=(884, 597, 891, 604), ), ) TECHNIQUE_POINT_2 = ButtonWrapper( name='TECHNIQUE_POINT_2', share=Button( file='./assets/share/map/control/TECHNIQUE_POINT_2.png', - area=(889, 578, 903, 592), - search=(869, 558, 923, 612), - color=(139, 132, 174), - button=(889, 578, 903, 592), + area=(892, 581, 900, 589), + search=(872, 561, 920, 609), + color=(213, 203, 249), + button=(892, 581, 900, 589), ), ) TECHNIQUE_POINT_3 = ButtonWrapper( name='TECHNIQUE_POINT_3', share=Button( file='./assets/share/map/control/TECHNIQUE_POINT_3.png', - area=(902, 566, 916, 580), - search=(882, 546, 936, 600), - color=(138, 130, 173), - button=(902, 566, 916, 580), + area=(905, 569, 913, 577), + search=(885, 549, 933, 597), + color=(207, 195, 249), + button=(905, 569, 913, 577), ), ) TECHNIQUE_POINT_4 = ButtonWrapper( name='TECHNIQUE_POINT_4', share=Button( file='./assets/share/map/control/TECHNIQUE_POINT_4.png', - area=(918, 559, 932, 573), - search=(898, 539, 952, 593), - color=(138, 130, 173), - button=(918, 559, 932, 573), + area=(921, 562, 929, 570), + search=(901, 542, 949, 590), + color=(210, 198, 248), + button=(921, 562, 929, 570), ), ) TECHNIQUE_POINT_5 = ButtonWrapper( name='TECHNIQUE_POINT_5', share=Button( file='./assets/share/map/control/TECHNIQUE_POINT_5.png', - area=(935, 559, 948, 573), - search=(915, 539, 968, 593), - color=(71, 72, 77), - button=(935, 559, 948, 573), + area=(938, 562, 945, 570), + search=(918, 542, 965, 590), + color=(215, 203, 250), + button=(938, 562, 945, 570), ), ) diff --git a/tasks/map/control/joystick.py b/tasks/map/control/joystick.py index 86480a934..1d1372e07 100644 --- a/tasks/map/control/joystick.py +++ b/tasks/map/control/joystick.py @@ -5,6 +5,7 @@ import cv2 import numpy as np from module.base.timer import Timer +from module.base.utils import area_offset from module.device.method.maatouch import MaatouchBuilder from module.device.method.minitouch import CommandBuilder, insert_swipe, random_normal_distribution from module.exception import ScriptError @@ -195,18 +196,35 @@ class MapControlJoystick(UI): def map_get_technique_points(self): """ Returns: - int: 0 to 5. + int: 0 to 5 """ - points = [ - self.image_color_count(button, color=(255, 255, 255), threshold=221, count=20) - for button in [ - TECHNIQUE_POINT_1, - TECHNIQUE_POINT_2, - TECHNIQUE_POINT_3, - TECHNIQUE_POINT_4, - TECHNIQUE_POINT_5, - ] - ] + confirm = Timer(3, count=0).start() + while 1: + matched = TECHNIQUE_POINT_1.match_template(self.device.image) + if matched: + matched_button = TECHNIQUE_POINT_1 + break + matched = TECHNIQUE_POINT_0.match_template(self.device.image) + if matched: + matched_button = TECHNIQUE_POINT_0 + break + if confirm.reached(): + logger.warning('Can not match technique points.') + return 0 + else: + self.device.screenshot() + points = [] + for button in [ + TECHNIQUE_POINT_1, + TECHNIQUE_POINT_2, + TECHNIQUE_POINT_3, + TECHNIQUE_POINT_4, + TECHNIQUE_POINT_5, + ]: + if matched_button is not None: + button.load_offset(matched_button) + points.append(self.image_color_count(area_offset(button.area, button.button_offset), color=(255, 255, 255), + threshold=221, count=20)) count = sum(points) logger.attr('TechniquePoints', count) return count