Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/one_dragon/base/controller/controller_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,11 @@ def click(self, pos: Point = None, press_time: float = 0, pc_alt: bool = False,
"""
pass

def screenshot(self, independent: bool = False) -> tuple[float, MatLike | None]:
def screenshot(self, independent: bool = False, dont_move_mouse: bool = False) -> tuple[float, MatLike | None]:
"""
截图并保存在内存中
"""
self.before_screenshot()
self.before_screenshot(dont_move_mouse=dont_move_mouse)
screenshot_time = time.time()
screen = self.get_screenshot(independent)
if screen is None:
Expand All @@ -78,7 +78,7 @@ def screenshot(self, independent: bool = False) -> tuple[float, MatLike | None]:

return screenshot_time, fix_screen

def before_screenshot(self) -> None:
def before_screenshot(self, dont_move_mouse: bool = False) -> None:
"""
截图前的操作 由子类实现
"""
Expand Down
4 changes: 2 additions & 2 deletions src/one_dragon/base/operation/operation.py
Original file line number Diff line number Diff line change
Expand Up @@ -628,7 +628,7 @@ def operation_usage_time(self) -> float:
"""
return time.time() - self.operation_start_time - self.pause_total_time

def screenshot(self):
def screenshot(self, dont_move_mouse: bool = False):
"""截图并保存在内存中。

此方法包装截图功能并将最后一张截图保存在内存中
Expand All @@ -637,7 +637,7 @@ def screenshot(self):
Returns:
np.ndarray: 截图图像。
"""
self.last_screenshot_time, self.last_screenshot = self.ctx.controller.screenshot()
self.last_screenshot_time, self.last_screenshot = self.ctx.controller.screenshot(dont_move_mouse=dont_move_mouse)
return self.last_screenshot

def save_screenshot(self, prefix: str | None = None) -> str:
Expand Down
1 change: 1 addition & 0 deletions src/one_dragon_qt/view/setting/setting_env_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ def _init_basic_group(self) -> SettingCardGroup:
self.screenshot_method_opt.value_changed.connect(lambda: self.ctx.init_controller())
basic_group.addSettingCard(self.screenshot_method_opt)


self.debug_opt = SwitchSettingCard(
icon=FluentIcon.SEARCH, title='调试模式', content='正常无需开启'
)
Expand Down
4 changes: 2 additions & 2 deletions src/sr_od/application/echo_of_war/challenge_ehco_of_war.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,13 +146,13 @@ def after_click_start_challenge(self) -> OperationRoundResult:

@node_from(from_name='点击开始挑战后确认')
@node_from(from_name='点击再来一次后确认')
@operation_node(name='等待战斗结果')
@operation_node(name='等待战斗结果', screenshot_before_round=False)
def _wait_battle_result(self) -> OperationRoundResult:
"""
等待战斗结果
:return:
"""
screen = self.screenshot()
screen = self.screenshot(dont_move_mouse=True)

state = battle_screen_state.get_tp_battle_screen_state(self.ctx, screen, battle_success=True, battle_fail=True)

Expand Down
4 changes: 2 additions & 2 deletions src/sr_od/challenge_mission/use_trailblaze_power.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,13 +206,13 @@ def _after_start_challenge(self) -> OperationRoundResult:
@node_from(from_name='开始挑战后')
@node_from(from_name='再来一次后确认')
@node_from(from_name='再来一次后确认', success=False, status='无对话框')
@operation_node(name='等待战斗结果', timeout_seconds=600)
@operation_node(name='等待战斗结果', timeout_seconds=600, screenshot_before_round=False)
def _wait_battle_result(self) -> OperationRoundResult:
"""
等待战斗结果
:return:
"""
screen = self.screenshot()
screen = self.screenshot(dont_move_mouse=True)

state = battle_screen_state.get_tp_battle_screen_state(
self.ctx, screen,
Expand Down
11 changes: 11 additions & 0 deletions src/sr_od/config/game_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -241,3 +241,14 @@ def win_title(self) -> str:
游戏窗口名称 只有区服有关
"""
return '崩坏:星穹铁道'

@property
def move_mouse_before_screenshot(self) -> bool:
"""
截图前是否挪开鼠标
"""
return self.get('move_mouse_before_screenshot', True)

@move_mouse_before_screenshot.setter
def move_mouse_before_screenshot(self, new_value: bool) -> None:
self.update('move_mouse_before_screenshot', new_value)
1 change: 1 addition & 0 deletions src/sr_od/context/sr_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,7 @@ def init_controller(self) -> None:
self.controller.cleanup_after_app_shutdown()

self.controller = SrPcController(
env_config=self.env_config,
game_config=self.game_config,
screenshot_method=self.env_config.screenshot_method,
standard_width=self.project_config.screen_standard_width,
Expand Down
10 changes: 8 additions & 2 deletions src/sr_od/context/sr_pc_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

from one_dragon.base.controller.pc_controller_base import PcControllerBase
from one_dragon.base.geometry.point import Point
from one_dragon.envs.env_config import EnvConfig
from one_dragon.utils import cal_utils
from one_dragon.utils.log_utils import log
from sr_od.config.game_config import GameConfig
Expand All @@ -17,7 +18,9 @@ class SrPcController(PcControllerBase):
MOVE_INTERACT_TYPE: ClassVar[int] = 0
TALK_INTERACT_TYPE: ClassVar[int] = 1

def __init__(self, game_config: GameConfig,
def __init__(self,
env_config: EnvConfig,
game_config: GameConfig,
screenshot_method: str,
standard_width: int = 1920,
standard_height: int = 1080):
Expand All @@ -26,6 +29,7 @@ def __init__(self, game_config: GameConfig,
standard_width=standard_width,
standard_height=standard_height)

self.env_config: EnvConfig = env_config
self.game_config: GameConfig = game_config
self.turn_dx: float = self.game_config.turn_dx
self.run_speed: float = 30
Expand Down Expand Up @@ -63,7 +67,9 @@ def fill_uid_black(self, screen: MatLike) -> MatLike:
cv2.rectangle(screen, lt, rb, (114, 114, 114), -1)
return screen

def before_screenshot(self) -> None:
def before_screenshot(self, dont_move_mouse: bool = False) -> None:
if not self.env_config.move_mouse_before_screenshot and dont_move_mouse:
return
self.mouse_move(Point(30, 1030))

def esc(self) -> bool:
Expand Down
6 changes: 6 additions & 0 deletions src/sr_od/gui/interface/setting/sr_setting_game_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,11 @@ def _get_basic_group(self) -> QWidget:
options_enum=TypeInputWay)
basic_group.addSettingCard(self.input_way_opt)

self.move_mouse_before_screenshot_opt = SwitchSettingCard(
icon=FluentIcon.CAMERA, title='截图前先挪开鼠标', content='部分场景下(如自动战斗时)适用'
)
basic_group.addSettingCard(self.move_mouse_before_screenshot_opt)

self.run_opt = ComboBoxSettingCard(icon=FluentIcon.GAME, title='疾跑', options_enum=RunModeEnum)
basic_group.addSettingCard(self.run_opt)

Expand Down Expand Up @@ -102,6 +107,7 @@ def on_interface_shown(self) -> None:
VerticalScrollInterface.on_interface_shown(self)

self.input_way_opt.init_with_adapter(self.ctx.game_config.type_input_way_adapter)
self.move_mouse_before_screenshot_opt.init_with_adapter(self.ctx.game_config.get_prop_adapter('move_mouse_before_screenshot'))
self.run_opt.init_with_adapter(self.ctx.game_config.run_mode_adapter)
self.use_quirky_snacks_opt.init_with_adapter(self.ctx.game_config.use_quirky_snacks_adapter)

Expand Down
4 changes: 2 additions & 2 deletions src/sr_od/operations/battle/wait_battle_result.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ def __init__(self, ctx: SrContext, try_attack: bool = False):
self.try_attack: bool = try_attack
"""未进入战斗时 是否尝试攻击"""

@operation_node(name='等待', timeout_seconds=1200, is_start_node=True)
@operation_node(name='等待', timeout_seconds=1200, is_start_node=True, screenshot_before_round=False)
def wait(self) -> OperationRoundResult:
screen = self.screenshot()
screen = self.screenshot(dont_move_mouse=True)

state = battle_screen_state.get_tp_battle_screen_state(
self.ctx, screen,
Expand Down