From ba5b7dba261aa264076e3683fdc04c04f61ac43b Mon Sep 17 00:00:00 2001 From: LA_DI_DA <11174151+0O0o0oOoO00@users.noreply.github.com> Date: Fri, 14 Feb 2025 18:36:27 +0800 Subject: [PATCH] fix: diamond inheritance of FleetEquipment, EquipmentChange, Equipment, Dock --- module/equipment/equipment.py | 23 +++++++++++++-- module/equipment/equipment_change.py | 25 +++++++++++++--- module/equipment/fleet_equipment.py | 24 ++++++++++++++-- module/retire/dock.py | 43 ++++++++++++++++++++-------- 4 files changed, 94 insertions(+), 21 deletions(-) diff --git a/module/equipment/equipment.py b/module/equipment/equipment.py index c0ef97829..f2eb70076 100644 --- a/module/equipment/equipment.py +++ b/module/equipment/equipment.py @@ -1,3 +1,5 @@ +import collections + from module.base.button import ButtonGrid from module.base.decorator import cached_property from module.base.timer import Timer @@ -577,7 +579,7 @@ def equip_redirect_inherit_to_old() -> bool: return False -class Equipment(StorageHandler, ApiCollectionSwitch): +class Equipment(StorageHandler): def __init__(self, config, device=None, task=None): conf = AzurLaneConfig.build_azurlane_config(config, task) dev = Device.build_device(conf, device) @@ -585,7 +587,24 @@ class Equipment(StorageHandler, ApiCollectionSwitch): self.equipment_old: EquipmentOld = EquipmentOld(config=conf, device=dev, task=task) self.equipment_new: EquipmentNew = EquipmentNew(config=conf, device=dev, task=task) StorageHandler.__init__(self, config=conf, device=dev, task=task) - ApiCollectionSwitch.__init__(self, self.equipment_old, self.equipment_new) + + self.equipment_switch_stack = collections.deque() + self.equipment_current_use = self.equipment_new + + def switch_equipment_to_old(self): + self.equipment_switch_stack.append(self.equipment_current_use) + self.equipment_current_use = self.equipment_new + + def switch_equipment_to_new(self): + self.equipment_switch_stack.append(self.equipment_current_use) + self.equipment_current_use = self.equipment_new + + def switch_equipment_back(self): + if len(self.equipment_switch_stack) == 0: + self.equipment_current_use = self.equipment_new + return + + self.equipment_current_use = self.equipment_switch_stack.pop() ''' EquipmentOld diff --git a/module/equipment/equipment_change.py b/module/equipment/equipment_change.py index 90e4c4a18..eb437bb4f 100644 --- a/module/equipment/equipment_change.py +++ b/module/equipment/equipment_change.py @@ -318,7 +318,7 @@ class EquipmentChangeNew(EquipmentNew): return -class EquipmentChange(StorageHandler, ApiCollectionSwitch): +class EquipmentChange(StorageHandler): def __init__(self, config, device=None, task=None): conf = AzurLaneConfig.build_azurlane_config(config, task) dev = Device.build_device(conf, device) @@ -326,7 +326,24 @@ class EquipmentChange(StorageHandler, ApiCollectionSwitch): self.equipment_change_old: EquipmentChangeOld = EquipmentChangeOld(config=conf, device=dev, task=task) self.equipment_change_new: EquipmentChangeNew = EquipmentChangeNew(config=conf, device=dev, task=task) StorageHandler.__init__(self, config=conf, device=dev, task=task) - ApiCollectionSwitch.__init__(self, self.equipment_change_old, self.equipment_change_new) + + self.equipment_change_switch_stack = collections.deque() + self.equipment_change_current_use = self.equipment_change_new + + def switch_equipment_change_to_old(self): + self.equipment_change_switch_stack.append(self.equipment_change_current_use) + self.equipment_change_current_use = self.equipment_change_new + + def switch_equipment_change_to_new(self): + self.equipment_change_switch_stack.append(self.equipment_change_current_use) + self.equipment_change_current_use = self.equipment_change_new + + def switch_equipment_change_back(self): + if len(self.equipment_change_switch_stack) == 0: + self.equipment_change_current_use = self.equipment_change_new + return + + self.equipment_change_current_use = self.equipment_change_switch_stack.pop() ''' EquipmentChangeOld @@ -487,7 +504,7 @@ class EquipmentChange(StorageHandler, ApiCollectionSwitch): ''' def equipping_set(self, enable=False): - return self.current_use.equipping_set(enable=enable) + return self.equipment_change_current_use.equipping_set(enable=enable) def _equip_equipment(self, point, offset=(100, 100)): - return self.current_use._equip_equipment(point, offset=offset) + return self.equipment_change_current_use._equip_equipment(point, offset=offset) diff --git a/module/equipment/fleet_equipment.py b/module/equipment/fleet_equipment.py index ca61c6f31..51f722573 100644 --- a/module/equipment/fleet_equipment.py +++ b/module/equipment/fleet_equipment.py @@ -1,3 +1,5 @@ +import collections + import gl from module.base.decorator import cached_property, Config from module.base.utils import ApiCollectionSwitch @@ -85,7 +87,7 @@ class FleetEquipmentNew(EquipmentChangeNew): self.ui_back(FLEET_CHECK) -class FleetEquipment(StorageHandler, ApiCollectionSwitch): +class FleetEquipment(StorageHandler): def __init__(self, config, device=None, task=None): conf = AzurLaneConfig.build_azurlane_config(config, task) dev = Device.build_device(conf, device) @@ -93,7 +95,23 @@ class FleetEquipment(StorageHandler, ApiCollectionSwitch): self.fleet_equipment_old: DailyEquipment = DailyEquipment(config=conf, device=dev, task=task) self.fleet_equipment_new: FleetEquipmentNew = FleetEquipmentNew(config=conf, device=dev, task=task) StorageHandler.__init__(self, config=conf, device=dev, task=task) - ApiCollectionSwitch.__init__(self, self.fleet_equipment_old, self.fleet_equipment_new) + + self.fleet_equipment_switch_stack = collections.deque() + self.fleet_equipment_current_use = self.fleet_equipment_new + + def switch_fleet_equipment_to_old(self): + self.fleet_equipment_switch_stack.append(self.fleet_equipment_current_use) + self.fleet_equipment_current_use = self.fleet_equipment_new + + def switch_fleet_equipment_to_new(self): + self.fleet_equipment_switch_stack.append(self.fleet_equipment_current_use) + self.fleet_equipment_current_use = self.fleet_equipment_new + + def switch_fleet_equipment_back(self): + if len(self.fleet_equipment_switch_stack) == 0: + self.fleet_equipment_current_use = self.fleet_equipment_new + return + self.fleet_equipment_current_use = self.fleet_equipment_switch_stack.pop() ''' DailyEquipment @@ -250,4 +268,4 @@ class FleetEquipment(StorageHandler, ApiCollectionSwitch): ''' def _equip_equipment(self, point, offset=(100, 100)): - return self.current_use._equip_equipment(point, offset) + return self.fleet_equipment_current_use._equip_equipment(point, offset) diff --git a/module/retire/dock.py b/module/retire/dock.py index 6aea3cb0f..94fd6a1d3 100644 --- a/module/retire/dock.py +++ b/module/retire/dock.py @@ -1,3 +1,5 @@ +import collections + import module.config.server as server import gl @@ -454,7 +456,7 @@ def redirect_inherit_to_old() -> bool: return False -class Dock(StorageHandler, ApiCollectionSwitch): +class Dock(StorageHandler): def __init__(self, config, device=None, task=None): conf = AzurLaneConfig.build_azurlane_config(config, task) dev = Device.build_device(conf, device) @@ -462,7 +464,24 @@ class Dock(StorageHandler, ApiCollectionSwitch): self.dock_old: DockOld = DockOld(config=conf, device=dev, task=task) self.dock_new: DockNew = DockNew(config=conf, device=dev, task=task) StorageHandler.__init__(self, config=conf, device=dev, task=task) - ApiCollectionSwitch.__init__(self, self.dock_old, self.dock_new) + + self.dock_switch_stack = collections.deque() + self.dock_current_use = self.dock_new + + def switch_dock_to_old(self): + self.dock_switch_stack.append(self.dock_current_use) + self.dock_current_use = self.dock_old + + def switch_dock_to_new(self): + self.dock_switch_stack.append(self.dock_current_use) + self.dock_current_use = self.dock_new + + def switch_dock_back(self): + if len(self.dock_switch_stack) == 0: + self.dock_current_use = self.dock_new + return + + self.dock_current_use = self.dock_switch_stack.pop() ''' DockOld @@ -668,32 +687,32 @@ class Dock(StorageHandler, ApiCollectionSwitch): ''' def handle_dock_cards_loading(self): - return self.current_use.handle_dock_cards_loading() + return self.dock_current_use.handle_dock_cards_loading() def _dock_quit_check_func(self): - return self.current_use._dock_quit_check_func() + return self.dock_current_use._dock_quit_check_func() def dock_quit(self): - return self.current_use.dock_quit() + return self.dock_current_use.dock_quit() def dock_filter_enter(self): - return self.current_use.dock_filter_enter() + return self.dock_current_use.dock_filter_enter() def dock_filter_confirm(self, wait_loading=True): - return self.current_use.dock_filter_confirm(wait_loading=wait_loading) + return self.dock_current_use.dock_filter_confirm(wait_loading=wait_loading) @cached_property def dock_filter(self) -> Setting: - return self.current_use.dock_filter + return self.dock_current_use.dock_filter def dock_filter_set(self, sort='level', index='all', faction='all', rarity='all', extra='no_limit', wait_loading=True): - return self.current_use.dock_filter_set(sort, index, faction, rarity, extra, wait_loading) + return self.dock_current_use.dock_filter_set(sort, index, faction, rarity, extra, wait_loading) def dock_select_one(self, button, skip_first_screenshot=True): - return self.current_use.dock_select_one(button, skip_first_screenshot=skip_first_screenshot) + return self.dock_current_use.dock_select_one(button, skip_first_screenshot=skip_first_screenshot) def dock_selected(self, skip_first_screenshot=True): - return self.current_use.dock_selected(skip_first_screenshot=skip_first_screenshot) + return self.dock_current_use.dock_selected(skip_first_screenshot=skip_first_screenshot) def dock_select_confirm(self, check_button, skip_first_screenshot=True): - return self.current_use.dock_select_confirm(check_button, skip_first_screenshot=skip_first_screenshot) + return self.dock_current_use.dock_select_confirm(check_button, skip_first_screenshot=skip_first_screenshot)