From 886ed14ef06f0c421603d77724666b4997a7ea51 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Sun, 4 Apr 2021 17:54:58 +0800 Subject: [PATCH] Add: Able to goto another map in OS --- module/map_detection/detector.py | 2 +- module/os/camera.py | 3 +- module/os/fleet.py | 6 +++- module/os/globe_camera.py | 16 ---------- module/os/globe_operation.py | 6 ++-- module/os/map.py | 54 +++++++++++++++++++++++++++++--- 6 files changed, 59 insertions(+), 28 deletions(-) diff --git a/module/map_detection/detector.py b/module/map_detection/detector.py index 30357a44b..e6d9b01f9 100644 --- a/module/map_detection/detector.py +++ b/module/map_detection/detector.py @@ -44,7 +44,7 @@ class MapDetector: def load(self, image): """ Args: - image (np.ndarray): Shape (720, 1280, 3) + image: Shape (720, 1280, 3) """ self.backend.load(image) diff --git a/module/os/camera.py b/module/os/camera.py index 0a0de9b6c..8fc3fa607 100644 --- a/module/os/camera.py +++ b/module/os/camera.py @@ -1,11 +1,10 @@ import numpy as np -from module.logger import logger from module.map.camera import Camera from module.map.map_base import location_ensure from module.map_detection.view import View -from module.os.radar import Radar from module.os.map_operation import OSMapOperation +from module.os.radar import Radar class OSCamera(OSMapOperation, Camera): diff --git a/module/os/fleet.py b/module/os/fleet.py index c84701f13..854035a2e 100644 --- a/module/os/fleet.py +++ b/module/os/fleet.py @@ -4,6 +4,7 @@ from module.logger import logger from module.map.fleet import Fleet from module.map.map_grids import SelectedGrids from module.os.camera import OSCamera +from module.os.map_base import OSCampaignMap from module.os_ash.ash import OSAsh from module.os_combat.combat import Combat @@ -19,7 +20,10 @@ class OSFleet(OSCamera, Combat, Fleet, OSAsh): self.camera = location self.update() - def map_init(self, map_): + def map_init(self, map_=None): + map_ = OSCampaignMap() + map_.shape = self.get_map_shape() + logger.hr('Map init') self.fleet_1_location = () self.fleet_2_location = () diff --git a/module/os/globe_camera.py b/module/os/globe_camera.py index cf74e2710..3f7d04de3 100644 --- a/module/os/globe_camera.py +++ b/module/os/globe_camera.py @@ -146,19 +146,3 @@ class GlobeCamera(GlobeOperation, ZoneManager): if pinned_zone == zone: logger.attr('Globe_pinned', pinned_zone) break - - def globe_goto(self, zone): - """ - Args: - zone (str, int, Zone): Name in CN/EN/JP, zone id, or Zone instance. - - Pages: - in: IN_GLOBE or IN_MAP - out: IN_MAP - """ - pass - - -# g = GlobeCamera('alas') -# g.globe_update() -# g.globe_focus_to('NY') diff --git a/module/os/globe_operation.py b/module/os/globe_operation.py index 4c47d6181..1eb0ff5a6 100644 --- a/module/os/globe_operation.py +++ b/module/os/globe_operation.py @@ -1,15 +1,15 @@ +from module.base.timer import Timer from module.base.utils import * from module.logger import logger from module.map_detection.utils import * from module.os.assets import * -from module.ui.ui import UI -from module.base.timer import Timer +from module.os_handler.map_event import MapEventHandler ZONE_TYPES = [ZONE_DANGEROUS, ZONE_SAFE, ZONE_OBSCURED, ZONE_LOGGER, ZONE_STRONGHOLD] ASSETS_PINNED_ZONE = ZONE_TYPES + [ZONE_ENTRANCE, ZONE_SWITCH, ZONE_PINNED] -class GlobeOperation(UI): +class GlobeOperation(MapEventHandler): def is_in_globe(self): return self.appear(IN_GLOBE, offset=(20, 20)) diff --git a/module/os/map.py b/module/os/map.py index 791034d1d..001d4746c 100644 --- a/module/os/map.py +++ b/module/os/map.py @@ -1,11 +1,12 @@ from module.logger import logger from module.map.map import Map from module.map.map_grids import SelectedGrids +from module.os.assets import * from module.os.fleet import OSFleet -from module.os.map_base import OSCampaignMap +from module.os.globe_camera import GlobeCamera -class OSMap(OSFleet, Map): +class OSMap(OSFleet, Map, GlobeCamera): def clear_all_objects(self, grid=None): """Method to clear all objects around specific grid. @@ -111,7 +112,50 @@ class OSMap(OSFleet, Map): def run(self): self.device.screenshot() self.handle_siren_platform() - map_ = OSCampaignMap() - map_.shape = self.get_map_shape() - self.map_init(map_) + self.map_init() self.full_clear() + + def _get_map_outside_button(self): + """ + Returns: + Button: Click outside of map. + """ + if self.view.left_edge: + edge = self.view.backend.left_edge + area = (113, 185, edge.get_x(290), 290) + elif self.view.right_edge: + edge = self.view.backend.right_edge + area = (edge.get_x(360), 360, 1280, 560) + else: + logger.warning('No left edge or right edge') + return None + + button = Button(area=area, color=(), button=area, name='MAP_OUTSIDE') + return button + + def globe_goto(self, zone): + """ + Goto another zone in OS. + + Args: + zone (str, int, Zone): Name in CN/EN/JP, zone id, or Zone instance. + + Pages: + in: IN_MAP + out: IN_MAP + """ + # IN_MAP + self.device.screenshot() + self.map_init() + self.ensure_edge_insight() + button = self._get_map_outside_button() + self.ui_click(button, + appear_button=self.is_in_map, check_button=self.is_zone_pinned, skip_first_screenshot=True) + # IN_GLOBE + self.ensure_no_zone_pinned() + self.globe_update() + self.globe_focus_to(zone) + self.ui_click(ZONE_ENTRANCE, appear_button=self.is_zone_pinned, check_button=self.is_in_map, + skip_first_screenshot=True, additional=self.handle_map_event) + # IN_MAP + pass