Merge branch 'main' of https://git.zhaozuohong.vip/mower-ng/mower-ng
Some checks failed
ci/woodpecker/push/check_format Pipeline failed
Some checks failed
ci/woodpecker/push/check_format Pipeline failed
This commit is contained in:
commit
e5ff27e8e3
116 changed files with 902 additions and 831 deletions
BIN
mower/resources/clue/give_away_digit_bg.png
(Stored with Git LFS)
BIN
mower/resources/clue/give_away_digit_bg.png
(Stored with Git LFS)
Binary file not shown.
|
@ -42,10 +42,11 @@ from mower.utils.scheduler_task import (
|
|||
scheduling,
|
||||
try_add_release_dorm,
|
||||
)
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.translate import translate_room
|
||||
|
||||
|
||||
class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
|
||||
class BaseSchedulerSolver(BaseSolver, BaseMixin):
|
||||
solver_name = "经典版"
|
||||
|
||||
def __init__(self) -> None:
|
||||
|
@ -198,7 +199,7 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
|
|||
elif scene == Scene.RIIC_OPERATOR_SELECT:
|
||||
self.tap("confirm_blue")
|
||||
else:
|
||||
self.scene_graph_navigation(Scene.INFRA_MAIN)
|
||||
SceneGraphSolver().navigation(Scene.INFRA_MAIN)
|
||||
|
||||
def enter_room(self, room):
|
||||
EnterRoomSolver().run(room)
|
||||
|
@ -669,7 +670,7 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
|
|||
and config.conf.run_order_buffer_time > 0
|
||||
):
|
||||
logger.info("跑单前返回主界面以保持登录状态")
|
||||
self.back_to_index()
|
||||
SceneGraphSolver().navigation(Scene.INDEX)
|
||||
self.refresh_connecting = True
|
||||
return
|
||||
self.refresh_connecting = False
|
||||
|
@ -1001,7 +1002,7 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
|
|||
unknown_cnt += 1
|
||||
if unknown_cnt > 5:
|
||||
unknown_cnt = 0
|
||||
self.back_to_infrastructure()
|
||||
SceneGraphSolver.navigation(Scene.INFRA_MAIN)
|
||||
self.enter_room("train")
|
||||
else:
|
||||
self.sleep()
|
||||
|
@ -1039,7 +1040,7 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
|
|||
unknown_cnt += 1
|
||||
if unknown_cnt > 5:
|
||||
unknown_cnt = 0
|
||||
self.back_to_infrastructure()
|
||||
SceneGraphSolver.navigation(Scene.INFRA_MAIN)
|
||||
self.enter_room("train")
|
||||
else:
|
||||
self.sleep()
|
||||
|
@ -1653,7 +1654,7 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
|
|||
- timedelta(seconds=(60 * config.conf.run_order_delay))
|
||||
)
|
||||
logger.info("下一次进行插拔的时间为:" + execute_time.strftime("%H:%M:%S"))
|
||||
self.scene_graph_navigation(Scene.INFRA_MAIN)
|
||||
SceneGraphSolver().navigation(Scene.INFRA_MAIN)
|
||||
return execute_time
|
||||
|
||||
def adjust_order_time(self, accelerate, room):
|
||||
|
@ -1787,7 +1788,7 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
|
|||
self.adjust_order_time(accelerate, room)
|
||||
if not_return:
|
||||
return
|
||||
self.scene_graph_step(Scene.INFRA_MAIN)
|
||||
SceneGraphSolver().navigation(Scene.INFRA_MAIN)
|
||||
|
||||
def get_order(self, name):
|
||||
if name in self.op_data.operators:
|
||||
|
@ -2180,13 +2181,13 @@ class BaseSchedulerSolver(SceneGraphSolver, BaseMixin):
|
|||
if "检测到安排干员未成功" in str(e):
|
||||
skip_enter = True
|
||||
continue
|
||||
self.scene_graph_navigation(Scene.INFRA_MAIN)
|
||||
SceneGraphSolver().navigation(Scene.INFRA_MAIN)
|
||||
continue
|
||||
if len(new_plan) != 1:
|
||||
self.scene_graph_navigation(Scene.INFRA_MAIN)
|
||||
SceneGraphSolver().navigation(Scene.INFRA_MAIN)
|
||||
else:
|
||||
if config.conf.run_order_buffer_time <= 0:
|
||||
self.scene_graph_navigation(Scene.INFRA_MAIN)
|
||||
SceneGraphSolver().navigation(Scene.INFRA_MAIN)
|
||||
return new_plan
|
||||
|
||||
def move_free_to_end(self, input_list):
|
||||
|
|
|
@ -11,10 +11,11 @@ from mower.utils.image import crop2content, cropimg, loadres, thres2
|
|||
from mower.utils.log import logger
|
||||
from mower.utils.rapidocr import ocr_rec
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.vector import sa, va
|
||||
|
||||
|
||||
class CreditSolver(SceneGraphSolver):
|
||||
class CreditSolver(BaseSolver):
|
||||
solver_name = "访问好友"
|
||||
|
||||
def run(self) -> None:
|
||||
|
@ -94,4 +95,4 @@ class CreditSolver(SceneGraphSolver):
|
|||
else:
|
||||
return True
|
||||
else:
|
||||
self.scene_graph_step(Scene.FRIEND_LIST)
|
||||
SceneGraphSolver().step(Scene.FRIEND_LIST)
|
||||
|
|
|
@ -15,6 +15,7 @@ from mower.utils.graph import SceneGraphSolver
|
|||
from mower.utils.image import loadimg
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
# 向下x变大 = 0
|
||||
# 向右y变大 = 0
|
||||
|
@ -154,7 +155,7 @@ def 经验卡分类(物品):
|
|||
pass
|
||||
|
||||
|
||||
class depotREC(SceneGraphSolver):
|
||||
class depotREC(BaseSolver):
|
||||
solver_name = "仓库识别"
|
||||
|
||||
def __init__(self) -> None:
|
||||
|
@ -255,7 +256,7 @@ class depotREC(SceneGraphSolver):
|
|||
return # 正确结束
|
||||
|
||||
else:
|
||||
self.scene_graph_step(Scene.DEPOT)
|
||||
SceneGraphSolver().step(Scene.DEPOT)
|
||||
return
|
||||
|
||||
def 对比截图(self, image1, image2):
|
||||
|
|
|
@ -4,12 +4,13 @@ from mower.utils import typealias as tp
|
|||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.tile_pos import Calc, find_level
|
||||
|
||||
from .mixin import FightMixin
|
||||
|
||||
|
||||
class AutoFight(SceneGraphSolver, FightMixin):
|
||||
class AutoFight(BaseSolver, FightMixin):
|
||||
solver_name = "自动战斗"
|
||||
|
||||
def run(
|
||||
|
@ -52,7 +53,7 @@ class AutoFight(SceneGraphSolver, FightMixin):
|
|||
|
||||
def breach_solver(self):
|
||||
if (strategy := config.conf.work.enemy_breach_strategy) == "give_up":
|
||||
self.scene_graph_navigation(Scene.OPERATOR_FAILED)
|
||||
SceneGraphSolver().navigation(Scene.OPERATOR_FAILED)
|
||||
elif strategy == "restart_game":
|
||||
config.device.exit()
|
||||
self.success = False
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from mower.utils import config
|
||||
from mower.utils import typealias as tp
|
||||
from mower.utils.graph.utils import SceneGraphSolver
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
from .battle_agent_choose import BattleAgentChooseSolver
|
||||
from .battle_fill_choose import BattleFillChooseSolver
|
||||
|
@ -9,7 +9,7 @@ from .check_current_team import CheckCurrentTeamSolver
|
|||
from .choose_squad import ChooseSquadSolver
|
||||
|
||||
|
||||
class BattleChooseSolver(SceneGraphSolver):
|
||||
class BattleChooseSolver(BaseSolver):
|
||||
solver_name = "战斗选人"
|
||||
|
||||
def run(
|
||||
|
|
|
@ -8,13 +8,13 @@ from mower.utils import config
|
|||
from mower.utils.character_recognize import (
|
||||
operator_team_select,
|
||||
)
|
||||
from mower.utils.graph.utils import SceneGraphSolver
|
||||
from mower.utils.image import cropimg, diff_ratio
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class BattleAgentChooseSolver(SceneGraphSolver):
|
||||
class BattleAgentChooseSolver(BaseSolver):
|
||||
solver_name = "战斗选择指定干员"
|
||||
|
||||
def run(self, agents: list) -> list:
|
||||
|
|
|
@ -2,14 +2,14 @@ from mower.solvers.fight.battle_choose.battle_filter import BattleFilterSolver
|
|||
from mower.solvers.fight.battle_choose.battle_tag_choose import BattleTagChoose
|
||||
from mower.utils import config
|
||||
from mower.utils.character_recognize import operator_team_select
|
||||
from mower.utils.graph.utils import SceneGraphSolver
|
||||
from mower.utils.image import cropimg, diff_ratio
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
# 按需填充干员
|
||||
class BattleFillChooseSolver(SceneGraphSolver):
|
||||
class BattleFillChooseSolver(BaseSolver):
|
||||
solver_name = "标签填充干员"
|
||||
|
||||
def run(self, label: str, number: int, black_list: list = []):
|
||||
|
|
|
@ -4,12 +4,12 @@ import cv2
|
|||
import numpy as np
|
||||
|
||||
from mower.utils import config
|
||||
from mower.utils.graph.utils import SceneGraphSolver
|
||||
from mower.utils.image import cropimg
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class BattleFilterSolver(SceneGraphSolver):
|
||||
class BattleFilterSolver(BaseSolver):
|
||||
def run(self, tag: str, ascending: bool = True) -> None:
|
||||
self.labels = [
|
||||
"获取时间",
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
from mower.utils.graph.utils import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class BattleTagChoose(SceneGraphSolver):
|
||||
class BattleTagChoose(BaseSolver):
|
||||
def run(self, tag) -> None:
|
||||
self.tag = tag
|
||||
self.first_tag = None
|
||||
|
|
|
@ -4,17 +4,17 @@ from skimage.metrics import structural_similarity
|
|||
from mower.utils import config
|
||||
from mower.utils import typealias as tp
|
||||
from mower.utils.character_recognize import operator_team
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.image import cmatch, cropimg, load_static
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.vector import sa
|
||||
|
||||
from .choose_skill import ChooseSkillSolver
|
||||
from .choose_support import ChooseSupportSolver
|
||||
|
||||
|
||||
class CheckCurrentTeamSolver(SceneGraphSolver):
|
||||
class CheckCurrentTeamSolver(BaseSolver):
|
||||
solver_name = "检测当前编队"
|
||||
|
||||
def run(self, opers: tp.Opers = [], groups: tp.Groups = [], support: bool = True):
|
||||
|
|
|
@ -2,13 +2,13 @@ import cv2
|
|||
from scipy.signal import argrelmax
|
||||
|
||||
from mower.utils import config
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.image import cmatch, cropimg, loadres
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class ChooseSkillSolver(SceneGraphSolver):
|
||||
class ChooseSkillSolver(BaseSolver):
|
||||
solver_name = "选择干员技能"
|
||||
|
||||
def run(self, skill: int):
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
import cv2
|
||||
|
||||
from mower.utils import config
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.image import cropimg
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class ChooseSquadSolver(SceneGraphSolver):
|
||||
class ChooseSquadSolver(BaseSolver):
|
||||
solver_name = "选择编队"
|
||||
|
||||
def run(self, squad: int):
|
||||
|
|
|
@ -12,6 +12,7 @@ from mower.utils.graph import SceneGraphSolver
|
|||
from mower.utils.image import cmatch, cropimg, loadres, thres2
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
profession_pos = {
|
||||
"PIONEER": ((30, 150), (40, 160)),
|
||||
|
@ -30,7 +31,7 @@ skill_pos = (
|
|||
)
|
||||
|
||||
|
||||
class ChooseSupportSolver(SceneGraphSolver):
|
||||
class ChooseSupportSolver(BaseSolver):
|
||||
solver_name = "选择助战干员"
|
||||
|
||||
def run(self, opers: list = [], mode: Literal["normal", "rogue"] = "normal"):
|
||||
|
@ -150,7 +151,7 @@ class ChooseSupportSolver(SceneGraphSolver):
|
|||
if self.animation():
|
||||
return
|
||||
if self.retry_times < 0:
|
||||
self.scene_graph_step(Scene.OPERATOR_SELECT)
|
||||
SceneGraphSolver().step(Scene.OPERATOR_SELECT)
|
||||
return
|
||||
if not self.check_profession_focus():
|
||||
self.tap(profession_pos[self.profession])
|
||||
|
|
|
@ -5,12 +5,12 @@ from mower.solvers.fight.battle_choose import BattleChooseSolver
|
|||
from mower.solvers.navigation import NavigationSolver
|
||||
from mower.utils import config
|
||||
from mower.utils.email import send_message
|
||||
from mower.utils.graph.utils import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class CopyWorksSolver(SceneGraphSolver):
|
||||
class CopyWorksSolver(BaseSolver):
|
||||
solver_name = "自动抄作业列表"
|
||||
|
||||
def run(self):
|
||||
|
|
|
@ -7,16 +7,16 @@ from skimage.metrics import structural_similarity
|
|||
from mower.solvers.navigation import NavigationSolver
|
||||
from mower.utils import config
|
||||
from mower.utils.email import send_message
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.image import cmatch, cropimg, loadres
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
from .auto_fight import AutoFight
|
||||
from .battle_choose import BattleChooseSolver
|
||||
|
||||
|
||||
class CreditFight(SceneGraphSolver):
|
||||
class CreditFight(BaseSolver):
|
||||
solver_name = "信用作战"
|
||||
|
||||
def run(self):
|
||||
|
|
|
@ -12,9 +12,10 @@ from mower.utils.graph.utils import SceneGraphSolver
|
|||
from mower.utils.image import cropimg
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class RIIC_ChooseSolver(SceneGraphSolver, BaseMixin):
|
||||
class RIIC_ChooseSolver(BaseSolver, BaseMixin):
|
||||
solver_name = "基建选人"
|
||||
|
||||
def run(self, room: str, agents: list, wait_time: float = 0) -> bool:
|
||||
|
@ -221,9 +222,9 @@ class RIIC_ChooseSolver(SceneGraphSolver, BaseMixin):
|
|||
else:
|
||||
self.tap((500, 970))
|
||||
elif scene == Scene.INFRA_ARRANGE_ORDER:
|
||||
self.scene_graph_step(Scene.RIIC_OPERATOR_SELECT)
|
||||
SceneGraphSolver().step(Scene.RIIC_OPERATOR_SELECT)
|
||||
elif scene == Scene.INFRA_ARRANGE_CONFIRM:
|
||||
self.scene_graph_step(Scene.RIIC_OPERATOR_SELECT)
|
||||
SceneGraphSolver().step(Scene.RIIC_OPERATOR_SELECT)
|
||||
elif scene in self.waiting_scene:
|
||||
self.waiting_solver()
|
||||
else:
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
from mower.solvers.infra.base_mixin import BaseMixin
|
||||
from mower.solvers.infra.enter_room import EnterRoomSolver
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
from .utils import clue_cls
|
||||
|
||||
|
||||
class DailySolver(SceneGraphSolver, BaseMixin):
|
||||
class DailySolver(BaseSolver, BaseMixin):
|
||||
solver_name = "每日线索领取"
|
||||
|
||||
def run(self) -> None:
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
from mower.solvers.infra.base_mixin import BaseMixin
|
||||
from mower.solvers.infra.enter_room import EnterRoomSolver
|
||||
from mower.utils import config
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class GetClueCountSolver(SceneGraphSolver, BaseMixin):
|
||||
class GetClueCountSolver(BaseSolver, BaseMixin):
|
||||
solver_name = "线索数量"
|
||||
|
||||
def run(self) -> int:
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
from mower.solvers.infra.base_mixin import BaseMixin
|
||||
from mower.solvers.infra.enter_room import EnterRoomSolver
|
||||
from mower.utils import config
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.image import cmatch, crop2content, cropimg, loadres, thres2
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.rapidocr import ocr_rec
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.vector import va
|
||||
|
||||
from .utils import clue_cls, clue_scope
|
||||
|
||||
|
||||
class GiveAwaySolver(SceneGraphSolver, BaseMixin):
|
||||
class GiveAwaySolver(BaseSolver, BaseMixin):
|
||||
solver_name = "传递线索"
|
||||
|
||||
def run(self, clue_count) -> None:
|
||||
|
|
|
@ -3,11 +3,11 @@ from datetime import timedelta
|
|||
from mower.solvers.infra.base_mixin import BaseMixin
|
||||
from mower.solvers.infra.enter_room import EnterRoomSolver
|
||||
from mower.utils import config
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class MessageBoard(SceneGraphSolver, BaseMixin):
|
||||
class MessageBoard(BaseSolver, BaseMixin):
|
||||
solver_name = "留言板"
|
||||
solver_max_duration = timedelta(minutes=2)
|
||||
|
||||
|
|
|
@ -3,14 +3,14 @@ from datetime import timedelta
|
|||
from mower.solvers.infra.base_mixin import BaseMixin
|
||||
from mower.solvers.infra.enter_room import EnterRoomSolver
|
||||
from mower.utils import config
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.image import cmatch, cropimg, loadres
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.vector import va
|
||||
|
||||
|
||||
class PartyTimeSolver(SceneGraphSolver, BaseMixin):
|
||||
class PartyTimeSolver(BaseSolver, BaseMixin):
|
||||
solver_name = "线索交流结束时间"
|
||||
solver_max_duration = timedelta(minutes=2)
|
||||
|
||||
|
|
|
@ -3,11 +3,11 @@ import cv2
|
|||
from mower.solvers.infra.base_mixin import BaseMixin
|
||||
from mower.solvers.infra.enter_room import EnterRoomSolver
|
||||
from mower.utils import config
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.image import crop2content, cropimg, loadres, thres2
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.rapidocr import ocr_rec
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.vector import va
|
||||
|
||||
from .utils import (
|
||||
|
@ -27,7 +27,7 @@ filter_receive = (1900, 45)
|
|||
filter_self = (1610, 70)
|
||||
|
||||
|
||||
class PlaceSolver(SceneGraphSolver, BaseMixin):
|
||||
class PlaceSolver(BaseSolver, BaseMixin):
|
||||
solver_name = "放置线索"
|
||||
|
||||
def run(self) -> None:
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
from mower.solvers.infra.base_mixin import BaseMixin
|
||||
from mower.solvers.infra.enter_room import EnterRoomSolver
|
||||
from mower.utils import config
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.image import cropimg
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.rapidocr import ocr_rec
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
from .utils import clue_cls, exit_pos
|
||||
|
||||
|
||||
class ReceiveSolver(SceneGraphSolver, BaseMixin):
|
||||
class ReceiveSolver(BaseSolver, BaseMixin):
|
||||
solver_name = "接收好友线索"
|
||||
|
||||
def run(self):
|
||||
|
|
|
@ -3,12 +3,12 @@ from mower.solvers.infra.enter_room import EnterRoomSolver
|
|||
from mower.utils import config
|
||||
from mower.utils import typealias as tp
|
||||
from mower.utils.digit_reader import get_drone
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class DroneSolver(SceneGraphSolver, BaseMixin):
|
||||
class DroneSolver(BaseSolver, BaseMixin):
|
||||
solver_name = "无人机加速"
|
||||
|
||||
def run(
|
||||
|
|
|
@ -6,6 +6,7 @@ from mower.utils import typealias as tp
|
|||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.translate import translate_room
|
||||
from mower.utils.vector import sm, va
|
||||
|
||||
|
@ -85,7 +86,7 @@ facility = {
|
|||
}
|
||||
|
||||
|
||||
class EnterRoomSolver(SceneGraphSolver, BaseMixin):
|
||||
class EnterRoomSolver(BaseSolver, BaseMixin):
|
||||
solver_name = "进入房间"
|
||||
|
||||
def run(self, room: str, detail: bool = True):
|
||||
|
@ -97,11 +98,19 @@ class EnterRoomSolver(SceneGraphSolver, BaseMixin):
|
|||
logger.info(f"{translate_room(room)}")
|
||||
self.room = room
|
||||
self.detail = detail
|
||||
self.avoid_bug_start_time = datetime.now()
|
||||
self.avoid_bug_start_time = None
|
||||
self.animation_start_time = None
|
||||
super().run()
|
||||
|
||||
def bug_timeout(self) -> bool:
|
||||
return datetime.now() > self.avoid_bug_start_time + timedelta(seconds=60)
|
||||
if self.avoid_bug_start_time is None:
|
||||
self.avoid_bug_start_time = datetime.now()
|
||||
return datetime.now() > self.avoid_bug_start_time + timedelta(minutes=3)
|
||||
|
||||
def animation_timeout(self) -> bool:
|
||||
if self.animation_start_time is None:
|
||||
self.animation_start_time = datetime.now()
|
||||
return datetime.now() > self.animation_start_time + timedelta(seconds=10)
|
||||
|
||||
@staticmethod
|
||||
def segment(central: tp.Scope) -> dict[str, tp.Rectangle]:
|
||||
|
@ -126,19 +135,20 @@ class EnterRoomSolver(SceneGraphSolver, BaseMixin):
|
|||
return
|
||||
if self.bug_timeout(): # yj的bug
|
||||
self.back()
|
||||
self.avoid_bug_start_time = datetime.now()
|
||||
self.avoid_bug_start_time = None
|
||||
return
|
||||
score, scope = config.recog.match2d("control_central")
|
||||
if score >= 0.7:
|
||||
pos = self.segment(scope)[self.room]
|
||||
self.ctap(pos, 1, id="enter_room")
|
||||
return
|
||||
else:
|
||||
self.cback(1, id="infra_back")
|
||||
elif self.animation_timeout():
|
||||
self.cback(3, id="infra_back")
|
||||
self.animation_start_time = None
|
||||
|
||||
elif scene in [Scene.CTRLCENTER_ASSISTANT, Scene.INFRA_DETAILS]:
|
||||
if self.detect_room() != self.room:
|
||||
self.cback(1, id="infra_back")
|
||||
self.cback(3, id="infra_back")
|
||||
return
|
||||
if not self.detail:
|
||||
if self.find("arrange_check_in_on") or self.find(
|
||||
|
@ -154,4 +164,4 @@ class EnterRoomSolver(SceneGraphSolver, BaseMixin):
|
|||
):
|
||||
self.ctap(pos, 1, id="enter_room")
|
||||
else:
|
||||
self.scene_graph_step(Scene.INFRA_MAIN)
|
||||
SceneGraphSolver().step(Scene.INFRA_MAIN)
|
||||
|
|
|
@ -2,12 +2,12 @@ import cv2
|
|||
import numpy as np
|
||||
|
||||
from mower.utils import config
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class RIIC_Filter(SceneGraphSolver):
|
||||
class RIIC_Filter(BaseSolver):
|
||||
solver_name = "排序"
|
||||
|
||||
def run(self, tag: str, ascending: bool = True) -> None:
|
||||
|
|
|
@ -6,8 +6,8 @@ from mower.solvers.infra.base_mixin import BaseMixin
|
|||
from mower.solvers.infra.enter_room import EnterRoomSolver
|
||||
from mower.utils import config
|
||||
from mower.utils import typealias as tp
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.image import cropimg, thres2
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
name_x = (1288, 1869)
|
||||
name_y = [(135, 326), (344, 535), (553, 744), (532, 723), (741, 932)]
|
||||
|
@ -20,7 +20,7 @@ time_y = [(270, 305), (480, 515), (690, 725), (668, 703), (877, 912)]
|
|||
time_p = [tuple(zip(time_x, y)) for y in time_y]
|
||||
|
||||
|
||||
class GetAgentFromRoomSolver(SceneGraphSolver, BaseMixin):
|
||||
class GetAgentFromRoomSolver(BaseSolver, BaseMixin):
|
||||
solver_name = "读取干员信息"
|
||||
|
||||
def run(self, room: str, read_agent_time=False):
|
||||
|
|
|
@ -4,12 +4,12 @@ from mower.solvers.infra.base_mixin import BaseMixin
|
|||
from mower.solvers.infra.enter_room import EnterRoomSolver
|
||||
from mower.utils import config
|
||||
from mower.utils import typealias as tp
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class GetOrderRemainingTimeSolver(SceneGraphSolver, BaseMixin):
|
||||
class GetOrderRemainingTimeSolver(BaseSolver, BaseMixin):
|
||||
solver_name = "订单剩余时间"
|
||||
|
||||
def run(self, room: str) -> int:
|
||||
|
|
|
@ -3,9 +3,10 @@ from mower.utils.graph import SceneGraphSolver
|
|||
from mower.utils.image import diff_ratio
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class Overview(SceneGraphSolver):
|
||||
class Overview(BaseSolver):
|
||||
solver_name = "进驻总览"
|
||||
|
||||
def transition(self):
|
||||
|
@ -22,4 +23,4 @@ class Overview(SceneGraphSolver):
|
|||
return True
|
||||
self.solver_update_before_transition = False
|
||||
else:
|
||||
self.scene_graph_step(Scene.INFRA_ARRANGE)
|
||||
SceneGraphSolver().step(Scene.INFRA_ARRANGE)
|
||||
|
|
|
@ -5,12 +5,12 @@ from mower.solvers.infra.enter_room import EnterRoomSolver
|
|||
from mower.utils import config
|
||||
from mower.utils import typealias as tp
|
||||
from mower.utils.email import send_message
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class ReloadSolver(SceneGraphSolver, BaseMixin):
|
||||
class ReloadSolver(BaseSolver, BaseMixin):
|
||||
solver_name = "搓玉补货"
|
||||
|
||||
def run(self, room) -> None:
|
||||
|
|
|
@ -13,6 +13,7 @@ from mower.utils.image import cropimg, thres2
|
|||
from mower.utils.log import logger
|
||||
from mower.utils.path import get_path
|
||||
from mower.utils.recognize import Scene, tp
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
Base = declarative_base()
|
||||
|
||||
|
@ -31,7 +32,7 @@ class Report(Base):
|
|||
合成玉订单数量 = Column(Integer)
|
||||
|
||||
|
||||
class ReportSolver(SceneGraphSolver):
|
||||
class ReportSolver(BaseSolver):
|
||||
solver_name = "基报读取"
|
||||
|
||||
def __init__(self) -> None:
|
||||
|
@ -67,7 +68,7 @@ class ReportSolver(SceneGraphSolver):
|
|||
if (scene := self.scene()) == Scene.RIIC_REPORT:
|
||||
return self.read_report()
|
||||
elif scene == Scene.CTRLCENTER_ASSISTANT:
|
||||
self.scene_graph_step(Scene.RIIC_REPORT)
|
||||
SceneGraphSolver().step(Scene.RIIC_REPORT)
|
||||
elif scene in self.waiting_scene:
|
||||
self.waiting_solver()
|
||||
else:
|
||||
|
|
|
@ -4,13 +4,13 @@ from mower.solvers.infra.filter import RIIC_Filter
|
|||
from mower.solvers.infra.riic_tag_choose import RIICTagChoose
|
||||
from mower.utils import config
|
||||
from mower.utils.character_recognize import operator_room_select
|
||||
from mower.utils.graph.utils import SceneGraphSolver
|
||||
from mower.utils.image import cropimg
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class RIIC_FreeFillSolver(SceneGraphSolver):
|
||||
class RIIC_FreeFillSolver(BaseSolver):
|
||||
def run(self) -> bool:
|
||||
self.agent = None
|
||||
self.filterd = False
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from mower.utils.graph.utils import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
professions = [
|
||||
"PIONEER",
|
||||
|
@ -14,7 +14,7 @@ professions = [
|
|||
]
|
||||
|
||||
|
||||
class RIICTagChoose(SceneGraphSolver):
|
||||
class RIICTagChoose(BaseSolver):
|
||||
def run(self, tag) -> None:
|
||||
self.tag = tag
|
||||
self.first_tag = None
|
||||
|
|
|
@ -6,8 +6,8 @@ from mower.solvers.infra.get_order_remaining_time import (
|
|||
)
|
||||
from mower.utils import config
|
||||
from mower.utils.digit_reader import get_drone
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
from .read_original_order_remaining_time import ReadOriginalOrderRemainTimeSolver
|
||||
from .wait_for_order import WaitForOrderSolver
|
||||
|
@ -15,7 +15,7 @@ from .wait_for_order import WaitForOrderSolver
|
|||
limit_time = 1800
|
||||
|
||||
|
||||
class RunOrderSolver(SceneGraphSolver):
|
||||
class RunOrderSolver(BaseSolver):
|
||||
solver_name = "跑单"
|
||||
|
||||
def run(
|
||||
|
|
|
@ -2,11 +2,11 @@ from mower.solvers.infra.base_mixin import BaseMixin
|
|||
from mower.solvers.infra.enter_room import EnterRoomSolver
|
||||
from mower.utils import config
|
||||
from mower.utils import typealias as tp
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class ReadOriginalOrderRemainTimeSolver(SceneGraphSolver, BaseMixin):
|
||||
class ReadOriginalOrderRemainTimeSolver(BaseSolver, BaseMixin):
|
||||
"""
|
||||
返回剩余时间,换算为秒
|
||||
"""
|
||||
|
|
|
@ -2,11 +2,11 @@ from datetime import datetime, timedelta
|
|||
|
||||
from mower.solvers.infra.base_mixin import BaseMixin
|
||||
from mower.solvers.infra.enter_room import EnterRoomSolver
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class WaitForOrderSolver(SceneGraphSolver, BaseMixin):
|
||||
class WaitForOrderSolver(BaseSolver, BaseMixin):
|
||||
def run(self, room, wait_time) -> None:
|
||||
self.room = room
|
||||
self.wait_start()
|
||||
|
|
|
@ -4,14 +4,14 @@ from mower.solvers.fight.battle_choose.battle_fill_choose import BattleFillChoos
|
|||
from mower.solvers.infra.base_mixin import BaseMixin
|
||||
from mower.utils import config
|
||||
from mower.utils.character_recognize import match_portrait
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.vector import ss
|
||||
|
||||
from .enter_activity import EnterActivitySolver
|
||||
|
||||
|
||||
class SwitchActivityUsersSolver(SceneGraphSolver, BaseMixin):
|
||||
class SwitchActivityUsersSolver(BaseSolver, BaseMixin):
|
||||
solver_name = "切换活动室使用者"
|
||||
|
||||
def run(self):
|
||||
|
|
|
@ -6,9 +6,10 @@ from mower.utils import config
|
|||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class EnterActivitySolver(SceneGraphSolver, BaseMixin):
|
||||
class EnterActivitySolver(BaseSolver, BaseMixin):
|
||||
solver_name = "进入活动室"
|
||||
activity_scope = {
|
||||
1: ((1521, 410), (1620, 443)),
|
||||
|
@ -61,4 +62,4 @@ class EnterActivitySolver(SceneGraphSolver, BaseMixin):
|
|||
return True
|
||||
|
||||
else:
|
||||
self.scene_graph_step(Scene.INFRA_MAIN)
|
||||
SceneGraphSolver().step(Scene.INFRA_MAIN)
|
||||
|
|
|
@ -8,6 +8,7 @@ from mower.utils.email import assistants_template, send_message
|
|||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
pos_name = ["控制中枢", "B1", "B2", "B3", "B4"]
|
||||
|
||||
|
@ -28,7 +29,7 @@ portrait_scope = [
|
|||
]
|
||||
|
||||
|
||||
class SwitchAssistantsSolver(SceneGraphSolver, BaseMixin):
|
||||
class SwitchAssistantsSolver(BaseSolver, BaseMixin):
|
||||
solver_name = "基建副手"
|
||||
|
||||
def run(self) -> None:
|
||||
|
@ -110,7 +111,7 @@ class SwitchAssistantsSolver(SceneGraphSolver, BaseMixin):
|
|||
self.ctap("choose_agent/battle_confirm", 3)
|
||||
|
||||
elif scene == Scene.CTRLCENTER_ASSISTANT:
|
||||
self.scene_graph_step(Scene.RIIC_REPORT)
|
||||
SceneGraphSolver().step(Scene.RIIC_REPORT)
|
||||
elif scene in self.waiting_scene:
|
||||
self.waiting_solver()
|
||||
else:
|
||||
|
|
|
@ -3,11 +3,12 @@ from mower.solvers.infra.enter_room import EnterRoomSolver
|
|||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
check_order_scope = {"lmb": ((750, 796), (803, 849)), "oru": ((1111, 796), (1164, 849))}
|
||||
|
||||
|
||||
class SwitchOrderSolver(SceneGraphSolver, BaseMixin):
|
||||
class SwitchOrderSolver(BaseSolver, BaseMixin):
|
||||
def run(self, room: str, tar_order: str):
|
||||
"""
|
||||
Args:
|
||||
|
@ -33,7 +34,7 @@ class SwitchOrderSolver(SceneGraphSolver, BaseMixin):
|
|||
self.tap((1500, 1000))
|
||||
elif scene == Scene.SWITCH_ORDER:
|
||||
if self.find("switch_order/check", scope=self.scope):
|
||||
self.scene_graph_step(Scene.ORDER_LIST)
|
||||
SceneGraphSolver().step(Scene.ORDER_LIST)
|
||||
else:
|
||||
self.tap(self.scope)
|
||||
|
||||
|
|
|
@ -8,9 +8,9 @@ from mower.solvers.infra.enter_room import EnterRoomSolver
|
|||
from mower.utils import config
|
||||
from mower.utils import typealias as tp
|
||||
from mower.utils.digit_reader import get_drone
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.image import cropimg, thres2
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
from .check_current_product import CheckCurrentProductSolver
|
||||
from .choose_product import ChooseProductSolver
|
||||
|
@ -32,7 +32,7 @@ production_time = {
|
|||
}
|
||||
|
||||
|
||||
class SwitchProductSolver(SceneGraphSolver, BaseMixin):
|
||||
class SwitchProductSolver(BaseSolver, BaseMixin):
|
||||
solver_name = "切换产物"
|
||||
|
||||
def run(self, room, tar_product, only_get_time=False):
|
||||
|
|
|
@ -2,13 +2,13 @@ from datetime import datetime, timedelta
|
|||
|
||||
from mower.solvers.infra.base_mixin import BaseMixin
|
||||
from mower.solvers.infra.enter_room import EnterRoomSolver
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
from .utils import product
|
||||
|
||||
|
||||
class CheckCurrentProductSolver(SceneGraphSolver, BaseMixin):
|
||||
class CheckCurrentProductSolver(BaseSolver, BaseMixin):
|
||||
solver_name = "检查当前产物"
|
||||
|
||||
def run(self, room) -> None:
|
||||
|
|
|
@ -5,10 +5,10 @@ from mower.solvers.infra.enter_room import EnterRoomSolver
|
|||
from mower.utils import config
|
||||
from mower.utils import typealias as tp
|
||||
from mower.utils.email import send_message
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.image import cmatch, cropimg, loadres
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
production_index = {
|
||||
"经验": [0, 1],
|
||||
|
@ -28,7 +28,7 @@ first_pos = [((180, 215 + 140 * i), (190, 225 + 140 * i)) for i in range(4)]
|
|||
second_pos = [(500 + 742 * j, 200 + 270 * i) for j in range(2) for i in range(4)]
|
||||
|
||||
|
||||
class ChooseProductSolver(SceneGraphSolver, BaseMixin):
|
||||
class ChooseProductSolver(BaseSolver, BaseMixin):
|
||||
solver_name = "选择产物"
|
||||
|
||||
def run(self, room, tar_product) -> bool:
|
||||
|
|
|
@ -2,11 +2,11 @@ from mower.solvers.infra.base_mixin import BaseMixin
|
|||
from mower.solvers.infra.enter_room import EnterRoomSolver
|
||||
from mower.utils import config
|
||||
from mower.utils import typealias as tp
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class GetRemainTimeSolver(SceneGraphSolver, BaseMixin):
|
||||
class GetRemainTimeSolver(BaseSolver, BaseMixin):
|
||||
solver_name = "获取剩余时间"
|
||||
|
||||
def run(
|
||||
|
|
|
@ -2,11 +2,11 @@ from datetime import datetime, timedelta
|
|||
|
||||
from mower.solvers.infra.base_mixin import BaseMixin
|
||||
from mower.solvers.infra.enter_room import EnterRoomSolver
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class WaitForProductSolver(SceneGraphSolver, BaseMixin):
|
||||
class WaitForProductSolver(BaseSolver, BaseMixin):
|
||||
solver_name = "等待产物完成"
|
||||
|
||||
def run(self, room, wait_time) -> None:
|
||||
|
|
|
@ -2,11 +2,12 @@ from mower.utils import config
|
|||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
collect = {"bill": "订单", "factory": "制造站产物", "trust": "信赖"}
|
||||
|
||||
|
||||
class TodoListSolver(SceneGraphSolver):
|
||||
class TodoListSolver(BaseSolver):
|
||||
solver_name = "收取产物"
|
||||
|
||||
def run(self):
|
||||
|
@ -25,7 +26,7 @@ class TodoListSolver(SceneGraphSolver):
|
|||
|
||||
elif scene == Scene.INFRA_TODOLIST:
|
||||
if self.success:
|
||||
self.scene_graph_step(Scene.INFRA_MAIN)
|
||||
SceneGraphSolver().step(Scene.INFRA_MAIN)
|
||||
for res, name in collect.items():
|
||||
score, pos = config.recog.match(f"todo_list/{res}")
|
||||
if score > 0.8:
|
||||
|
@ -35,4 +36,4 @@ class TodoListSolver(SceneGraphSolver):
|
|||
self.success = True
|
||||
|
||||
else:
|
||||
self.scene_graph_step(Scene.INFRA_MAIN)
|
||||
SceneGraphSolver().step(Scene.INFRA_MAIN)
|
||||
|
|
|
@ -4,9 +4,10 @@ from mower.utils import config
|
|||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class MailSolver(SceneGraphSolver):
|
||||
class MailSolver(BaseSolver):
|
||||
solver_name = "领取邮件"
|
||||
solver_max_duration = timedelta(minutes=2)
|
||||
|
||||
|
@ -34,4 +35,4 @@ class MailSolver(SceneGraphSolver):
|
|||
else:
|
||||
return True
|
||||
else:
|
||||
self.scene_graph_step(Scene.MAIL)
|
||||
SceneGraphSolver().step(Scene.MAIL)
|
||||
|
|
|
@ -2,9 +2,10 @@ from datetime import timedelta
|
|||
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class MissionSolver(SceneGraphSolver):
|
||||
class MissionSolver(BaseSolver):
|
||||
solver_name = "每日/每周任务"
|
||||
solver_max_duration = timedelta(minutes=2)
|
||||
|
||||
|
@ -35,4 +36,4 @@ class MissionSolver(SceneGraphSolver):
|
|||
return
|
||||
return True
|
||||
else:
|
||||
self.scene_graph_step(Scene.MISSION_DAILY)
|
||||
SceneGraphSolver().step(Scene.MISSION_DAILY)
|
||||
|
|
|
@ -9,6 +9,7 @@ from mower.utils.graph import SceneGraphSolver
|
|||
from mower.utils.image import cropimg, loadres
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.vector import va, vs
|
||||
|
||||
from .activity import ActivityNavigation
|
||||
|
@ -430,7 +431,7 @@ difficulty_str = [
|
|||
]
|
||||
|
||||
|
||||
class NavigationSolver(SceneGraphSolver):
|
||||
class NavigationSolver(BaseSolver):
|
||||
solver_name = "关卡导航"
|
||||
|
||||
def run(self, name: str, mode: Literal["auto", "copy"] = "auto") -> bool:
|
||||
|
@ -677,7 +678,7 @@ class NavigationSolver(SceneGraphSolver):
|
|||
if self.change_to is not None:
|
||||
logger.info(f"{self.name} 无法代理")
|
||||
self.success = False
|
||||
self.back_to_index()
|
||||
SceneGraphSolver.navigation(Scene.INDEX)
|
||||
return True
|
||||
if self.find("ope_agency_lock"):
|
||||
self.change_to = self.now_difficulty ^ 1
|
||||
|
@ -713,4 +714,4 @@ class NavigationSolver(SceneGraphSolver):
|
|||
elif scene == Scene.STORY_STAGE:
|
||||
self.tap("start_story")
|
||||
else:
|
||||
self.scene_graph_step(Scene.TERMINAL_MAIN)
|
||||
SceneGraphSolver().step(Scene.TERMINAL_MAIN)
|
||||
|
|
|
@ -7,6 +7,7 @@ from mower.utils import config
|
|||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.vector import va, vs
|
||||
|
||||
from .utils import generate_name
|
||||
|
@ -24,7 +25,7 @@ class classproperty:
|
|||
return self
|
||||
|
||||
|
||||
class ActivityNavigation(SceneGraphSolver):
|
||||
class ActivityNavigation(BaseSolver):
|
||||
solver_name = "活动关卡导航"
|
||||
|
||||
_location = {
|
||||
|
@ -143,4 +144,4 @@ class ActivityNavigation(SceneGraphSolver):
|
|||
self.tap("start_story")
|
||||
|
||||
else:
|
||||
self.scene_graph_step(Scene.TERMINAL_MAIN)
|
||||
SceneGraphSolver().step(Scene.TERMINAL_MAIN)
|
||||
|
|
|
@ -7,12 +7,13 @@ from mower.utils.graph import SceneGraphSolver
|
|||
from mower.utils.image import cropimg, loadres, template
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.vector import sa, vs
|
||||
|
||||
from .utils import generate_name
|
||||
|
||||
|
||||
class ActivityNavigation(SceneGraphSolver):
|
||||
class ActivityNavigation(BaseSolver):
|
||||
solver_name = "活动关卡导航"
|
||||
prefix = "RS"
|
||||
|
||||
|
@ -141,4 +142,4 @@ class ActivityNavigation(SceneGraphSolver):
|
|||
self.tap("start_story")
|
||||
|
||||
else:
|
||||
self.scene_graph_step(Scene.TERMINAL_MAIN)
|
||||
SceneGraphSolver().step(Scene.TERMINAL_MAIN)
|
||||
|
|
|
@ -7,11 +7,12 @@ from mower.utils.graph import SceneGraphSolver
|
|||
from mower.utils.image import cropimg, thres2
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
from .utils import last_letters
|
||||
|
||||
|
||||
class LastStageNavigation(SceneGraphSolver):
|
||||
class LastStageNavigation(BaseSolver):
|
||||
def run(
|
||||
self, name: str, mode: Literal["auto", "copy"] = "auto", switch_to_ex=False
|
||||
) -> bool:
|
||||
|
@ -20,7 +21,7 @@ class LastStageNavigation(SceneGraphSolver):
|
|||
self.mode = mode
|
||||
self.success = True
|
||||
if self.name != "":
|
||||
self.scene_graph_navigation(Scene.TERMINAL_MAIN)
|
||||
SceneGraphSolver().navigation(Scene.TERMINAL_MAIN)
|
||||
super().run()
|
||||
return self.success
|
||||
|
||||
|
@ -92,4 +93,4 @@ class LastStageNavigation(SceneGraphSolver):
|
|||
return True
|
||||
|
||||
else:
|
||||
self.scene_graph_step(Scene.TERMINAL_MAIN)
|
||||
SceneGraphSolver().step(Scene.TERMINAL_MAIN)
|
||||
|
|
|
@ -13,6 +13,7 @@ from mower.utils.image import cropimg, loadres, thres2
|
|||
from mower.utils.log import logger
|
||||
from mower.utils.rapidocr import ocr_rec
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.vector import va
|
||||
|
||||
profession_list = [
|
||||
|
@ -38,7 +39,7 @@ for name, data in agent_list.items():
|
|||
templates[data["profession"]][name] = tpl, msk, eng
|
||||
|
||||
|
||||
class OperatorSolver(SceneGraphSolver):
|
||||
class OperatorSolver(BaseSolver):
|
||||
def run(self):
|
||||
self.last_operator = ""
|
||||
self.repeat_count = 2
|
||||
|
@ -203,4 +204,4 @@ class OperatorSolver(SceneGraphSolver):
|
|||
else:
|
||||
if self.in_progress and scene != Scene.CONNECTING:
|
||||
self.wait += 0.01
|
||||
self.scene_graph_step(Scene.OPERATOR_MANAGEMENT)
|
||||
SceneGraphSolver().step(Scene.OPERATOR_MANAGEMENT)
|
||||
|
|
|
@ -9,12 +9,12 @@ import numpy as np
|
|||
from mower.utils import config
|
||||
from mower.utils import typealias as tp
|
||||
from mower.utils.csleep import MowerExit
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.image import cropimg, loadres, thres2
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.matcher import Matcher
|
||||
from mower.utils.rapidocr import ocr_rec
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
src_pts = np.float32([[0, 97], [1920, 97], [-400, 1080], [2320, 1080]])
|
||||
dst_pts = np.float32([[0, 0], [1920, 0], [0, 1000], [1920, 1000]])
|
||||
|
@ -41,7 +41,7 @@ class Map:
|
|||
return scope if score >= 0.5 else score
|
||||
|
||||
|
||||
class ReclamationAlgorithm(SceneGraphSolver):
|
||||
class ReclamationAlgorithm(BaseSolver):
|
||||
fast_tap_scenes = [Scene.RA_GUIDE_DIALOG]
|
||||
places = {
|
||||
"base": [[1623, 588], [1943, 906]],
|
||||
|
|
|
@ -14,6 +14,7 @@ from mower.utils.graph import SceneGraphSolver
|
|||
from mower.utils.image import cmatch, cropimg, loadres, thres2
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.vector import va
|
||||
|
||||
job_list = [
|
||||
|
@ -28,7 +29,7 @@ job_list = [
|
|||
]
|
||||
|
||||
|
||||
class RecruitSolver(SceneGraphSolver):
|
||||
class RecruitSolver(BaseSolver):
|
||||
solver_name = "公开招募"
|
||||
|
||||
def run(self):
|
||||
|
@ -168,7 +169,7 @@ class RecruitSolver(SceneGraphSolver):
|
|||
|
||||
elif scene == Scene.RECRUIT_TAGS:
|
||||
if self.pos_state[self.recruit_index] is False:
|
||||
self.scene_graph_step(Scene.RECRUIT_MAIN)
|
||||
SceneGraphSolver().step(Scene.RECRUIT_MAIN)
|
||||
if self.recruit_index in self.tags.keys():
|
||||
del self.tags[self.recruit_index]
|
||||
return
|
||||
|
@ -257,7 +258,7 @@ class RecruitSolver(SceneGraphSolver):
|
|||
# 可能按错了,回到公招主界面重开
|
||||
del self.tags[self.recruit_index]
|
||||
del self.agent_choose[self.recruit_index]
|
||||
self.scene_graph_step(Scene.RECRUIT_MAIN)
|
||||
SceneGraphSolver().step(Scene.RECRUIT_MAIN)
|
||||
return
|
||||
|
||||
# # start recruit
|
||||
|
@ -273,7 +274,7 @@ class RecruitSolver(SceneGraphSolver):
|
|||
elif scene == Scene.RECRUIT_AGENT:
|
||||
return self.recruit_result()
|
||||
else:
|
||||
self.scene_graph_step(Scene.RECRUIT_MAIN)
|
||||
SceneGraphSolver().step(Scene.RECRUIT_MAIN)
|
||||
|
||||
def recruit_result(self):
|
||||
# 存在读完一次没退完再读一次
|
||||
|
|
|
@ -5,6 +5,7 @@ from mower.utils.email import send_message
|
|||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
from .choose_next_node import ChooseNextNodeSolver, DianCiChooseNextNodeSolver
|
||||
from .choose_support_award import ChooseSupportAwardSolver
|
||||
|
@ -16,7 +17,7 @@ from .rogue_shop import RogueShopSolver
|
|||
from .utils.utils import detect_layer
|
||||
|
||||
|
||||
class RogueSolver(SceneGraphSolver):
|
||||
class RogueSolver(BaseSolver):
|
||||
solver_name = "肉鸽"
|
||||
|
||||
def run(self) -> bool:
|
||||
|
@ -87,7 +88,7 @@ class RogueSolver(SceneGraphSolver):
|
|||
NodeOptionSelectSolver().run()
|
||||
|
||||
elif scene in [Scene.ROGUE_LAYER_LOADING, Scene.ROGUE_NOTICE]:
|
||||
self.scene_graph_step(Scene.ROGUE_MAIN)
|
||||
SceneGraphSolver().step(Scene.ROGUE_MAIN)
|
||||
|
||||
elif scene in [
|
||||
Scene.ROGUE_SHOP,
|
||||
|
|
|
@ -6,6 +6,7 @@ from mower.utils.graph import SceneGraphSolver
|
|||
from mower.utils.image import cropimg, loadres, template
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.vector import sa, vs
|
||||
|
||||
from .lighten_load import LightenLoadSolver
|
||||
|
@ -15,7 +16,7 @@ from .utils.optimal_path import Path, get_optimal_path
|
|||
from .utils.utils import detect_layer, get_idea_num
|
||||
|
||||
|
||||
class ChooseNextNodeSolver(SceneGraphSolver):
|
||||
class ChooseNextNodeSolver(BaseSolver):
|
||||
solver_name = "选择下一个节点"
|
||||
|
||||
def run(self):
|
||||
|
@ -93,7 +94,7 @@ class ChooseNextNodeSolver(SceneGraphSolver):
|
|||
if self.animation(((0, 150), (1600, 880)), interval=0.1, ratio=0.1):
|
||||
return
|
||||
if len(data.next_step) == 0:
|
||||
self.scene_graph_step(Scene.ROGUE_MAIN)
|
||||
SceneGraphSolver().step(Scene.ROGUE_MAIN)
|
||||
return
|
||||
self.get_next_node_id()
|
||||
if not self.node_id or self.find("rogue/no_refresh_time"):
|
||||
|
@ -103,7 +104,7 @@ class ChooseNextNodeSolver(SceneGraphSolver):
|
|||
return
|
||||
scope = self.get_node_pos(self.node_id, ((200, 150), (960, 880)))
|
||||
if scope[1][0] - 100 < 0 or scope[0][0] > 960:
|
||||
self.scene_graph_step(Scene.ROGUE_MAIN)
|
||||
SceneGraphSolver().step(Scene.ROGUE_MAIN)
|
||||
return
|
||||
if not self.find("rogue/node_be_choosed", scope=sa(scope, (-150, 0))):
|
||||
self.tap(scope)
|
||||
|
@ -175,7 +176,7 @@ class DianCiChooseNextNodeSolver(ChooseNextNodeSolver):
|
|||
if self.animation(((0, 150), (1600, 880)), interval=0.1, ratio=0.1):
|
||||
return
|
||||
if len(data.next_step) == 0:
|
||||
self.scene_graph_step(Scene.ROGUE_MAIN)
|
||||
SceneGraphSolver().step(Scene.ROGUE_MAIN)
|
||||
return
|
||||
self.get_next_node_id()
|
||||
if not self.node_id or self.find("rogue/no_refresh_time"):
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
from .utils.utils import find_text
|
||||
|
||||
|
||||
class ChooseSupportAwardSolver(SceneGraphSolver):
|
||||
class ChooseSupportAwardSolver(BaseSolver):
|
||||
solver_name = "选择支援奖励"
|
||||
_award = [
|
||||
"更多补给品",
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class LightenLoadSolver(SceneGraphSolver):
|
||||
class LightenLoadSolver(BaseSolver):
|
||||
solver_name = "减轻负荷"
|
||||
|
||||
def run(self):
|
||||
|
@ -17,7 +18,7 @@ class LightenLoadSolver(SceneGraphSolver):
|
|||
if self.animation(interval=0.2):
|
||||
return
|
||||
if not self.find("rogue/Sarkaz_load/block"):
|
||||
self.scene_graph_step(Scene.ROGUE_MAIN)
|
||||
SceneGraphSolver().step(Scene.ROGUE_MAIN)
|
||||
return
|
||||
if self.find("rogue/Sarkaz_load/concentrate"):
|
||||
self.check = True
|
||||
|
|
|
@ -4,11 +4,12 @@ from mower.utils import config
|
|||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
from .utils.utils import find_text
|
||||
|
||||
|
||||
class NodeOptionSelectSolver(SceneGraphSolver):
|
||||
class NodeOptionSelectSolver(BaseSolver):
|
||||
solver_name = "节点选项选择"
|
||||
|
||||
@cached_property
|
||||
|
@ -63,6 +64,6 @@ class NodeOptionSelectSolver(SceneGraphSolver):
|
|||
elif scene in self.waiting_scene:
|
||||
self.waiting_solver()
|
||||
elif scene == Scene.ROGUE_NODE_LOADING:
|
||||
self.scene_graph_step(Scene.ROGUE_MAIN)
|
||||
SceneGraphSolver().step(Scene.ROGUE_MAIN)
|
||||
else:
|
||||
return True
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
from mower.utils import config
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
from . import data
|
||||
from .rogue_navi import RogueNaviSolver
|
||||
|
||||
|
||||
class RogueAbandonExploreSolver(SceneGraphSolver):
|
||||
class RogueAbandonExploreSolver(BaseSolver):
|
||||
solver_name = "放弃探索"
|
||||
|
||||
def run(self) -> bool:
|
||||
|
|
|
@ -4,12 +4,13 @@ from mower.utils import config
|
|||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.vector import va
|
||||
|
||||
from .utils.utils import find_text
|
||||
|
||||
|
||||
class RogueNaviSolver(SceneGraphSolver):
|
||||
class RogueNaviSolver(BaseSolver):
|
||||
solver_name = "肉鸽导航"
|
||||
_title = {
|
||||
"Phantom": "古堡笔记",
|
||||
|
@ -46,4 +47,4 @@ class RogueNaviSolver(SceneGraphSolver):
|
|||
self.success = True
|
||||
return True
|
||||
else:
|
||||
self.scene_graph_step(Scene.TERMINAL_LONGTERM)
|
||||
SceneGraphSolver().step(Scene.TERMINAL_LONGTERM)
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
from datetime import datetime, timedelta
|
||||
|
||||
from mower.utils.email import send_message
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
from .utils.utils import find_text
|
||||
|
||||
|
||||
class RogueSelectTeamSolver(SceneGraphSolver):
|
||||
class RogueSelectTeamSolver(BaseSolver):
|
||||
solver_name = "肉鸽选择分队"
|
||||
|
||||
def run(self, team: str) -> bool:
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
from mower.utils import config
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
from . import data
|
||||
from .rogue_abandon_explore import RogueAbandonExploreSolver
|
||||
from .utils.utils import get_money_num
|
||||
|
||||
|
||||
class RogueShopSolver(SceneGraphSolver):
|
||||
class RogueShopSolver(BaseSolver):
|
||||
solver_name = "诡意行商投资"
|
||||
|
||||
def run(self):
|
||||
|
|
|
@ -7,10 +7,10 @@ from mower.utils import config
|
|||
from mower.utils import typealias as tp
|
||||
from mower.utils.csleep import MowerExit
|
||||
from mower.utils.email import send_message
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.image import cropimg
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.vector import sa, va
|
||||
|
||||
|
||||
|
@ -20,7 +20,7 @@ def exp(card):
|
|||
return [i * p for i in data]
|
||||
|
||||
|
||||
class SecretFront(SceneGraphSolver):
|
||||
class SecretFront(BaseSolver):
|
||||
target = {
|
||||
"1A": [20, 20, 20],
|
||||
"2A": [60, 55, 45],
|
||||
|
|
|
@ -7,6 +7,7 @@ from mower.utils.graph import SceneGraphSolver
|
|||
from mower.utils.image import cropimg, thres2
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.vector import sa, va
|
||||
|
||||
card_w, card_h = 352, 354
|
||||
|
@ -19,7 +20,7 @@ for i in range(2):
|
|||
card_list.append((left + j * (card_w + gap), top + i * (card_h + gap)))
|
||||
|
||||
|
||||
class CreditShop(SceneGraphSolver):
|
||||
class CreditShop(BaseSolver):
|
||||
solver_name = "信用商店购物"
|
||||
|
||||
def number(
|
||||
|
@ -138,4 +139,4 @@ class CreditShop(SceneGraphSolver):
|
|||
else:
|
||||
self.tap("shop/cart")
|
||||
else:
|
||||
self.scene_graph_step(Scene.SHOP_CREDIT)
|
||||
SceneGraphSolver().step(Scene.SHOP_CREDIT)
|
||||
|
|
|
@ -21,9 +21,10 @@ from datetime import timedelta
|
|||
from mower.utils.email import notify
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class Headhunting(SceneGraphSolver):
|
||||
class Headhunting(BaseSolver):
|
||||
solver_name = "每日赠送单抽"
|
||||
solver_max_duration = timedelta(minutes=1)
|
||||
|
||||
|
@ -42,4 +43,4 @@ class Headhunting(SceneGraphSolver):
|
|||
notify("成功抽完赠送单抽")
|
||||
return True
|
||||
else:
|
||||
self.scene_graph_step(Scene.HEADHUNTING)
|
||||
SceneGraphSolver().step(Scene.HEADHUNTING)
|
||||
|
|
|
@ -20,15 +20,15 @@ import cv2
|
|||
|
||||
from mower.utils import config
|
||||
from mower.utils.email import notify
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.image import cropimg
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.vector import sa
|
||||
|
||||
activity_name = "月饼烘焙小教程·三"
|
||||
|
||||
|
||||
class MoonFestival(SceneGraphSolver):
|
||||
class MoonFestival(BaseSolver):
|
||||
def transition(self) -> bool:
|
||||
if (scene := self.scene()) == Scene.MATERIEL:
|
||||
self.sleep()
|
||||
|
|
|
@ -21,13 +21,14 @@ from datetime import timedelta
|
|||
from mower.utils.email import notify
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
from .utils import index_entry
|
||||
|
||||
activity_name = "龙门幸运墙"
|
||||
|
||||
|
||||
class Orundum(SceneGraphSolver):
|
||||
class Orundum(BaseSolver):
|
||||
solver_name = "幸运墙"
|
||||
solver_max_duration = timedelta(minutes=2)
|
||||
|
||||
|
@ -63,4 +64,4 @@ class Orundum(SceneGraphSolver):
|
|||
return True
|
||||
self.tap((960, 960))
|
||||
else:
|
||||
self.scene_graph_step(Scene.INDEX)
|
||||
SceneGraphSolver().step(Scene.INDEX)
|
||||
|
|
|
@ -28,10 +28,11 @@ from mower.utils.graph import SceneGraphSolver
|
|||
from mower.utils.image import crop2content, cropimg, loadres, thres2
|
||||
from mower.utils.rapidocr import ocr_rec
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.vector import sa, va, vs
|
||||
|
||||
|
||||
class Shop(SceneGraphSolver):
|
||||
class Shop(BaseSolver):
|
||||
solver_name = "活动商店购买"
|
||||
solver_max_duration = timedelta(minutes=5)
|
||||
|
||||
|
@ -84,7 +85,7 @@ class Shop(SceneGraphSolver):
|
|||
self.swipe_ext([(1600, 340), (300, 340), (300, 150)], [0.2, 0.3], 0, 0.1)
|
||||
elif scene == Scene.ACTIVITY_SHOP_BUY:
|
||||
if self.product is None:
|
||||
self.scene_graph_step(Scene.ACTIVITY_SHOP)
|
||||
SceneGraphSolver().step(Scene.ACTIVITY_SHOP)
|
||||
return
|
||||
if self.find("sign_in/shop/insufficient"):
|
||||
return True
|
||||
|
@ -108,4 +109,4 @@ class Shop(SceneGraphSolver):
|
|||
notify("活动商店时装购买")
|
||||
self.tap((960, 200))
|
||||
else:
|
||||
self.scene_graph_step(Scene.TERMINAL_MAIN)
|
||||
SceneGraphSolver().step(Scene.TERMINAL_MAIN)
|
||||
|
|
|
@ -24,11 +24,12 @@ from mower.utils.graph import SceneGraphSolver
|
|||
from mower.utils.image import cropimg
|
||||
from mower.utils.rapidocr import ocr_rec
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
activity_name = "集成战略限时任务"
|
||||
|
||||
|
||||
class SignIn(SceneGraphSolver):
|
||||
class SignIn(BaseSolver):
|
||||
solver_name = "签到活动"
|
||||
solver_max_duration = timedelta(minutes=2)
|
||||
|
||||
|
@ -91,4 +92,4 @@ class SignIn(SceneGraphSolver):
|
|||
self.skin_email = False
|
||||
self.tap((960, 200))
|
||||
else:
|
||||
self.scene_graph_step(Scene.INDEX)
|
||||
SceneGraphSolver().step(Scene.INDEX)
|
||||
|
|
|
@ -21,11 +21,12 @@ from datetime import timedelta
|
|||
from mower.utils.email import notify
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
task_name = "百灶食珍录"
|
||||
|
||||
|
||||
class Task(SceneGraphSolver):
|
||||
class Task(BaseSolver):
|
||||
solver_name = "活动奖励领取"
|
||||
solver_max_duration = timedelta(minutes=2)
|
||||
|
||||
|
@ -64,4 +65,4 @@ class Task(SceneGraphSolver):
|
|||
notify("活动干员领取")
|
||||
self.ctap((960, 540))
|
||||
else:
|
||||
self.scene_graph_step(Scene.TERMINAL_MAIN)
|
||||
SceneGraphSolver().step(Scene.TERMINAL_MAIN)
|
||||
|
|
|
@ -6,6 +6,7 @@ from mower.utils.email import send_message
|
|||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
from .sss_choose import SSSChooseSolver
|
||||
from .sss_fight import SSSFightSolver
|
||||
|
@ -14,7 +15,7 @@ from .sss_ope import SSSOpeSolver
|
|||
from .utils import is_full
|
||||
|
||||
|
||||
class SSSSolver(SceneGraphSolver):
|
||||
class SSSSolver(BaseSolver):
|
||||
solver_name = "保全作战"
|
||||
|
||||
def run(self) -> bool:
|
||||
|
@ -88,17 +89,17 @@ class SSSSolver(SceneGraphSolver):
|
|||
self.full = SSSOpeSolver().run()
|
||||
return self.full
|
||||
elif scene == Scene.SSS_DROP_AGENT_BEFORE_FIGHT:
|
||||
self.scene_graph_step(Scene.SSS_DEPLOY)
|
||||
SceneGraphSolver().step(Scene.SSS_DEPLOY)
|
||||
|
||||
elif scene == Scene.SSS_EXIT_CONFIRM:
|
||||
self.scene_graph_step(Scene.SSS_TERMINATED)
|
||||
SceneGraphSolver().step(Scene.SSS_TERMINATED)
|
||||
|
||||
elif scene == Scene.SSS_TERMINATED:
|
||||
self.scene_graph_navigation(Scene.SSS_MAIN)
|
||||
SceneGraphSolver().navigation(Scene.SSS_MAIN)
|
||||
|
||||
elif scene == Scene.SSS_ACCOMPLISHED:
|
||||
logger.info("保全作战通关或终止")
|
||||
self.scene_graph_step(Scene.SSS_TERMINATED)
|
||||
SceneGraphSolver().step(Scene.SSS_TERMINATED)
|
||||
|
||||
elif scene == Scene.SSS_SQUAD:
|
||||
if config.conf.sss.choose_agent:
|
||||
|
|
|
@ -4,11 +4,11 @@ from mower.solvers.fight.battle_choose.battle_agent_choose import (
|
|||
from mower.solvers.fight.battle_choose.battle_fill_choose import BattleFillChooseSolver
|
||||
from mower.solvers.fight.battle_choose.choose_support import ChooseSupportSolver
|
||||
from mower.utils import config
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class SSSChooseSolver(SceneGraphSolver):
|
||||
class SSSChooseSolver(BaseSolver):
|
||||
solver_name = "保全选人"
|
||||
|
||||
def run(self):
|
||||
|
|
|
@ -12,6 +12,7 @@ from mower.utils.image import cropimg, loadres, thres2
|
|||
from mower.utils.log import logger
|
||||
from mower.utils.rapidocr import ocr_rec
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.vector import ss, va
|
||||
|
||||
agent = [
|
||||
|
@ -27,7 +28,7 @@ agent = [
|
|||
]
|
||||
|
||||
|
||||
class SSSDROPSolver(SceneGraphSolver):
|
||||
class SSSDROPSolver(BaseSolver):
|
||||
solver_name = "保全增调干员或仪器"
|
||||
|
||||
def run(self) -> bool:
|
||||
|
@ -148,7 +149,7 @@ class SSSDROPSolver(SceneGraphSolver):
|
|||
return
|
||||
|
||||
elif scene == Scene.SSS_ABANDON_DROP_IN_FIGHT:
|
||||
self.scene_graph_step(Scene.OPERATOR_FIGHT)
|
||||
SceneGraphSolver().step(Scene.OPERATOR_FIGHT)
|
||||
|
||||
elif scene in self.waiting_scene:
|
||||
self.waiting_solver()
|
||||
|
|
|
@ -5,12 +5,13 @@ from mower.utils import config
|
|||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.log import logger
|
||||
from mower.utils.scene import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.tile_pos import Calc, find_level
|
||||
|
||||
from .sss_drop import SSSDROPSolver
|
||||
|
||||
|
||||
class SSSFightSolver(SceneGraphSolver, FightMixin):
|
||||
class SSSFightSolver(BaseSolver, FightMixin):
|
||||
solver_name = "保全战斗"
|
||||
|
||||
def run(
|
||||
|
@ -148,7 +149,7 @@ class SSSFightSolver(SceneGraphSolver, FightMixin):
|
|||
Scene.SSS_DROP_IN_FIGHT,
|
||||
]:
|
||||
if not SSSDROPSolver().run():
|
||||
self.scene_graph_navigation(Scene.SSS_DEPLOY)
|
||||
SceneGraphSolver().navigation(Scene.SSS_DEPLOY)
|
||||
return True
|
||||
self.clear_op()
|
||||
elif scene == Scene.SSS_ACTION:
|
||||
|
|
|
@ -7,6 +7,7 @@ from mower.utils.image import cmatch, cropimg, loadres
|
|||
from mower.utils.log import logger
|
||||
from mower.utils.rapidocr import ocr_rec
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
from mower.utils.vector import va
|
||||
|
||||
from .utils import is_full
|
||||
|
@ -26,7 +27,7 @@ ec_pos = [
|
|||
]
|
||||
|
||||
|
||||
class SSSNaviSolver(SceneGraphSolver):
|
||||
class SSSNaviSolver(BaseSolver):
|
||||
solver_name = "保全导航"
|
||||
|
||||
def run(self) -> bool:
|
||||
|
@ -105,4 +106,4 @@ class SSSNaviSolver(SceneGraphSolver):
|
|||
self.ctap("sss/check_ex", 3)
|
||||
|
||||
else:
|
||||
self.scene_graph_step(Scene.SSS_MAIN)
|
||||
SceneGraphSolver().step(Scene.SSS_MAIN)
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
from mower.utils import config
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
from .sss_navi import SSSNaviSolver
|
||||
from .utils import is_full
|
||||
|
||||
|
||||
class SSSOpeSolver(SceneGraphSolver):
|
||||
class SSSOpeSolver(BaseSolver):
|
||||
solver_name = "保全代理"
|
||||
|
||||
def run(self) -> bool:
|
||||
|
@ -41,7 +42,7 @@ class SSSOpeSolver(SceneGraphSolver):
|
|||
)
|
||||
< config.conf.sss.ope_limit_stage
|
||||
):
|
||||
self.scene_graph_step(Scene.SSS_START)
|
||||
SceneGraphSolver().step(Scene.SSS_START)
|
||||
self.check = True
|
||||
return
|
||||
self.tap("sss/ope/use")
|
||||
|
|
|
@ -2,9 +2,10 @@ from datetime import timedelta
|
|||
|
||||
from mower.utils.graph import SceneGraphSolver
|
||||
from mower.utils.recognize import Scene
|
||||
from mower.utils.solver import BaseSolver
|
||||
|
||||
|
||||
class TradeTokenSolver(SceneGraphSolver):
|
||||
class TradeTokenSolver(BaseSolver):
|
||||
solver_name = "信物兑换"
|
||||
solver_max_duration = timedelta(minutes=3)
|
||||
|
||||
|
@ -22,10 +23,10 @@ class TradeTokenSolver(SceneGraphSolver):
|
|||
elif self.find("shop/token_not_enough"):
|
||||
return True
|
||||
elif pos := self.find("shop/trade_token_button"):
|
||||
self.ctap(pos, 1)
|
||||
self.ctap(pos, 5)
|
||||
elif pos := self.find("shop/commendation"):
|
||||
self.tap(pos)
|
||||
else:
|
||||
self.swipe((200, 400), (0, 400))
|
||||
else:
|
||||
self.scene_graph_step(Scene.SHOP_TOKEN)
|
||||
SceneGraphSolver().step(Scene.SHOP_TOKEN)
|
||||
|
|
|
@ -4,6 +4,8 @@ from typing import Literal, get_args, get_origin
|
|||
from pydantic import BaseModel, model_validator
|
||||
from pydantic_core import PydanticUndefined
|
||||
|
||||
from mower.utils.scene import Scene
|
||||
|
||||
|
||||
class ConfModel(BaseModel):
|
||||
@model_validator(mode="before")
|
||||
|
@ -135,8 +137,8 @@ class EmulatorPart(ConfModel):
|
|||
"纵坐标"
|
||||
|
||||
class DroidCastConf(ConfModel):
|
||||
rotate: bool = False
|
||||
"将截图旋转180度"
|
||||
rotate: Literal[0, 90, 180, 270] = 0
|
||||
"截图旋转角度"
|
||||
|
||||
class DroidCastRawConf(ConfModel):
|
||||
orientation: Literal["portrait", "landscape"] = "landscape"
|
||||
|
@ -204,17 +206,6 @@ class ExtraPart(ConfModel):
|
|||
tray: bool = True
|
||||
"托盘图标"
|
||||
|
||||
class WaitingSceneConf(ConfModel):
|
||||
CONNECTING: tuple[int, int] = (1000, 15)
|
||||
UNKNOWN: tuple[int, int] = (0, 10)
|
||||
UNKNOWN_WITH_NAVBAR: tuple[int, int] = (0, 5)
|
||||
UNKNOWN_ROGUE: tuple[int, int] = (0, 5)
|
||||
LOADING: tuple[int, int] = (3000, 60)
|
||||
LOGIN_LOADING: tuple[int, int] = (3000, 30)
|
||||
LOGIN_MAIN_NOENTRY: tuple[int, int] = (3000, 30)
|
||||
OPERATOR_ONGOING: tuple[int, int] = (10000, 300)
|
||||
DOUBLE_CONFIRM: tuple[int, int] = (0, 5)
|
||||
|
||||
start_automatically: bool = False
|
||||
"启动后自动开始任务"
|
||||
webview: WebViewConf
|
||||
|
@ -225,7 +216,17 @@ class ExtraPart(ConfModel):
|
|||
"截图最短间隔(毫秒)"
|
||||
screenshot: float = 24
|
||||
"截图保留时长(小时)"
|
||||
waiting_scene_v2: WaitingSceneConf
|
||||
waiting_scene: dict[int, tuple[int, int]] = {
|
||||
Scene.CONNECTING: (1000, 20),
|
||||
Scene.UNKNOWN: (1000, 120),
|
||||
Scene.UNKNOWN_WITH_NAVBAR: (0, 10),
|
||||
Scene.UNKNOWN_ROGUE: (0, 10),
|
||||
Scene.LOADING: (3000, 120),
|
||||
Scene.LOGIN_LOADING: (3000, 120),
|
||||
Scene.LOGIN_MAIN_NOENTRY: (3000, 120),
|
||||
Scene.OPERATOR_ONGOING: (10000, 300),
|
||||
Scene.DOUBLE_CONFIRM: (0, 5),
|
||||
}
|
||||
"等待时间"
|
||||
telemetry: bool = True
|
||||
"上报数据"
|
||||
|
|
|
@ -226,7 +226,9 @@ class ADB:
|
|||
"""detect current focus app"""
|
||||
command = "dumpsys window | grep mCurrentFocus"
|
||||
line = self.adb_shell(command)
|
||||
return line.strip()[:-1].split(" ")[-1]
|
||||
current_focus = line.strip()[:-1].split(" ")[-1].split("/")[0]
|
||||
logger.debug(f"{current_focus=}")
|
||||
return current_focus
|
||||
|
||||
def check_current_focus(self) -> bool:
|
||||
"""check if the application is in the foreground"""
|
||||
|
@ -234,11 +236,7 @@ class ADB:
|
|||
start_time = datetime.now()
|
||||
while True:
|
||||
try:
|
||||
focus = self.current_focus()
|
||||
if focus not in [
|
||||
f"{config.conf.APPNAME}/{config.APP_ACTIVITY_NAME}",
|
||||
"com.hypergryph.arknights.bilibili/com.gsc.welcome.WelcomeActivity",
|
||||
]:
|
||||
if self.current_focus() != config.conf.APPNAME:
|
||||
if (datetime.now() - start_time).total_seconds() > 40:
|
||||
self.exit() # 应用卡死
|
||||
start_time = datetime.now()
|
||||
|
@ -367,7 +365,7 @@ class ADBMultiUser(ADB):
|
|||
|
||||
def current_focus(self) -> str:
|
||||
"""detect current focus app"""
|
||||
command = f"dumpsys activity activities | grep 'mFocusedApp' | grep 'u{self.user_id}' | grep -E '{config.conf.APPNAME}/{config.APP_ACTIVITY_NAME}|com.hypergryph.arknights.bilibili/com.gsc.welcome.WelcomeActivity'"
|
||||
command = f"dumpsys activity activities | grep 'mFocusedApp' | grep 'u{self.user_id}' | grep -E '{config.conf.APPNAME}'"
|
||||
res = self.adb_shell(command)
|
||||
return res
|
||||
|
||||
|
|
|
@ -106,8 +106,12 @@ class DroidCast:
|
|||
|
||||
def decode(self, data):
|
||||
img = bytes2img(data)
|
||||
if config.conf.droidcast.rotate:
|
||||
if config.conf.droidcast.rotate == 90:
|
||||
img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
|
||||
elif config.conf.droidcast.rotate == 180:
|
||||
img = cv2.rotate(img, cv2.ROTATE_180)
|
||||
elif config.conf.droidcast.rotate == 270:
|
||||
img = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)
|
||||
return img
|
||||
|
||||
@retry_droidcast
|
||||
|
|
|
@ -313,11 +313,7 @@ class Client:
|
|||
while True:
|
||||
try:
|
||||
focus = self.adb.adb_shell("dumpsys window | grep Window")
|
||||
if (
|
||||
f"{config.conf.APPNAME}/{config.APP_ACTIVITY_NAME}" not in focus
|
||||
and "com.hypergryph.arknights.bilibili/com.gsc.welcome.WelcomeActivity"
|
||||
not in focus
|
||||
):
|
||||
if config.conf.APPNAME not in focus:
|
||||
if (datetime.now() - start_time).total_seconds() > 40:
|
||||
self.exit() # 应用卡死
|
||||
start_time = datetime.now()
|
||||
|
|
|
@ -72,7 +72,7 @@ def exit_cancel(solver: BaseSolver):
|
|||
|
||||
@edge(Scene.MATERIEL, Scene.INDEX)
|
||||
def materiel(solver: BaseSolver):
|
||||
solver.tap((960, 960))
|
||||
solver.tap((960, 60))
|
||||
|
||||
|
||||
@edge(Scene.AGREEMENT_UPDATE, Scene.INDEX)
|
||||
|
|
|
@ -29,7 +29,7 @@ def todo_complete(solver: BaseSolver):
|
|||
@edge(Scene.CHOOSE_PRODUCT, Scene.FACTORY_ROOMS)
|
||||
@edge(Scene.DRONE_ACCELERATE, Scene.ORDER_LIST)
|
||||
def infra_back(solver: BaseSolver):
|
||||
solver.cback(1, id="infra_back")
|
||||
solver.cback(2, id="infra_back")
|
||||
|
||||
|
||||
@edge(Scene.RIIC_OPERATOR_SELECT, Scene.INFRA_DETAILS)
|
||||
|
|
|
@ -30,13 +30,18 @@ def edge(v_from: int, v_to: int, interval: int | None = None):
|
|||
|
||||
|
||||
class SceneGraphSolver(BaseSolver):
|
||||
def scene_graph_navigation(self, scene: int):
|
||||
"""按场景图跳转到指定场景"""
|
||||
solver_name = "场景图导航"
|
||||
|
||||
while self.scene() != scene:
|
||||
self.scene_graph_step(scene)
|
||||
def navigation(self, scene: int):
|
||||
self.target_scene = scene
|
||||
super().run()
|
||||
|
||||
def scene_graph_step(self, scene: int):
|
||||
def transition(self):
|
||||
if self.scene() == self.target_scene:
|
||||
return True
|
||||
self.step(self.target_scene)
|
||||
|
||||
def step(self, scene: int):
|
||||
"""waiting_solver()或按场景图跳转到指定场景只操作一步"""
|
||||
if scene not in DG.nodes:
|
||||
logger.error(f"{SceneComment[scene]}不在场景图中")
|
||||
|
@ -75,7 +80,7 @@ class SceneGraphSolver(BaseSolver):
|
|||
self.sleep()
|
||||
|
||||
def back_to_index(self):
|
||||
self.scene_graph_navigation(Scene.INDEX)
|
||||
self.navigation(Scene.INDEX)
|
||||
|
||||
def back_to_infrastructure(self):
|
||||
self.scene_graph_navigation(Scene.INFRA_MAIN)
|
||||
self.navigation(Scene.INFRA_MAIN)
|
||||
|
|
|
@ -60,7 +60,6 @@ from typing import Any, Callable, Literal, Optional, Tuple
|
|||
import cv2
|
||||
import numpy as np
|
||||
|
||||
from mower.data import scene_list
|
||||
from mower.utils import config
|
||||
from mower.utils import typealias as tp
|
||||
from mower.utils.csleep import MowerExit, csleep
|
||||
|
@ -160,7 +159,7 @@ class BaseSolver:
|
|||
if self.game_stuck_detection and self.transition_return == last_return:
|
||||
if self.game_stuck_begin is None:
|
||||
self.game_stuck_begin = datetime.now()
|
||||
elif datetime.now() - self.game_stuck_begin > timedelta(minutes=1):
|
||||
elif datetime.now() - self.game_stuck_begin > timedelta(minutes=3):
|
||||
notify("游戏卡死,尝试重启游戏", level="ERROR")
|
||||
config.device.exit()
|
||||
csleep(3)
|
||||
|
@ -679,9 +678,7 @@ class BaseSolver:
|
|||
self.game_stuck_detection = False
|
||||
scene = self.scene()
|
||||
start_time = datetime.now()
|
||||
sleep_time, wait_time = getattr(
|
||||
config.conf.waiting_scene_v2, scene_list[str(scene)]["label"]
|
||||
)
|
||||
sleep_time, wait_time = config.conf.waiting_scene[scene]
|
||||
stop_time = start_time + timedelta(seconds=wait_time)
|
||||
while datetime.now() < stop_time:
|
||||
self.sleep(sleep_time / 1000)
|
||||
|
|
|
@ -205,6 +205,13 @@ def shop_list():
|
|||
return list(shop_items.keys())
|
||||
|
||||
|
||||
@app.route("/scene")
|
||||
def scene_list():
|
||||
from mower.utils.scene import SceneComment
|
||||
|
||||
return SceneComment
|
||||
|
||||
|
||||
@app.route("/activity")
|
||||
def activity():
|
||||
from mower.solvers.navigation.activity import ActivityNavigation
|
||||
|
|
2
ui/dist/assets/Doc.css
vendored
2
ui/dist/assets/Doc.css
vendored
|
@ -1 +1 @@
|
|||
.loading[data-v-69c55212]{position:absolute;top:48px;font-size:28px}
|
||||
.loading[data-v-f9ae5a23]{position:absolute;top:48px;font-size:28px}
|
||||
|
|
2
ui/dist/assets/Doc.js
vendored
2
ui/dist/assets/Doc.js
vendored
|
@ -1 +1 @@
|
|||
import{bP as _,r as d,bR as i,bS as a,bQ as n,bU as s,A as r,bT as p,bX as u,bN as b,bV as f,bW as m,bo as g}from"./_plugin-vue_export-helper.js";import{b4 as h}from"./main.js";const v={key:0,class:"loading"},t="https://hedgedoc.zhaozuohong.vip/s/LfSzK2n0K",x={__name:"Doc",setup(y){const o=d(!0);return(N,e)=>{const c=g,l=h;return n(),i(l,{vertical:"",style:{width:"100%",height:"100%"},align:"center"},{default:a(()=>[s("div",null,[e[1]||(e[1]=r(" 《小刻也能学会的!Mower-NG简明教程!》 ")),p(c,{text:"",tag:"a",href:t,target:"_blank",type:"primary"},{default:a(()=>[r(u(t))]),_:1})]),s("iframe",{onLoad:e[0]||(e[0]=k=>o.value=!1),src:t,style:{width:"100%",height:"100%",border:"none"}},null,32),b(o)?(n(),f("div",v,"页面加载中……")):m("",!0)]),_:1})}}},w=_(x,[["__scopeId","data-v-69c55212"]]);export{w as default};
|
||||
import{bP as _,r as d,bR as i,bS as a,bQ as n,bU as s,A as r,bT as p,bX as u,bN as b,bV as f,bW as m,bo as g}from"./_plugin-vue_export-helper.js";import{b4 as h}from"./main.js";const v={key:0,class:"loading"},t="https://hedgedoc.zhaozuohong.vip/s/LfSzK2n0K",x={__name:"Doc",setup(y){const o=d(!0);return(N,e)=>{const c=g,l=h;return n(),i(l,{vertical:"",style:{width:"100%",height:"100%"},align:"center"},{default:a(()=>[s("div",null,[e[1]||(e[1]=r(" 《小刻也能学会的!Mower-NG简明教程!》 ")),p(c,{text:"",tag:"a",href:t,target:"_blank",type:"primary"},{default:a(()=>[r(u(t))]),_:1})]),s("iframe",{onLoad:e[0]||(e[0]=k=>o.value=!1),src:t,style:{width:"100%",height:"100%",border:"none"}},null,32),b(o)?(n(),f("div",v,"页面加载中……")):m("",!0)]),_:1})}}},w=_(x,[["__scopeId","data-v-f9ae5a23"]]);export{w as default};
|
||||
|
|
2
ui/dist/assets/DropDown.css
vendored
2
ui/dist/assets/DropDown.css
vendored
|
@ -1 +1 @@
|
|||
.button_row[data-v-9e1304bf]{margin-top:8px}.task_row[data-v-9e1304bf]{display:flex;align-items:center;gap:8px;width:100%}.task_row .n-input[data-v-9e1304bf]{width:140px}.outer[data-v-9e1304bf]{display:flex;flex-direction:row;align-items:center;gap:18px}.inner[data-v-9e1304bf]{display:flex;flex-direction:column;gap:8px}.task-col[data-v-9e1304bf]{display:flex;flex-direction:row;gap:8px;align-items:center}.n-dynamic-tags[data-v-9e1304bf]{align-items:center}.ml[data-v-9e1304bf]{margin-left:16px}.dropdown[data-v-01fc4d7e]{padding-left:var(--5dbb34be);padding-right:var(--5dbb34be)}
|
||||
.button_row[data-v-c3862e91]{margin-top:8px}.task_row[data-v-c3862e91]{display:flex;align-items:center;gap:8px;width:100%}.task_row .n-input[data-v-c3862e91]{width:140px}.outer[data-v-c3862e91]{display:flex;flex-direction:row;align-items:center;gap:18px}.inner[data-v-c3862e91]{display:flex;flex-direction:column;gap:8px}.task-col[data-v-c3862e91]{display:flex;flex-direction:row;gap:8px;align-items:center}.n-dynamic-tags[data-v-c3862e91]{align-items:center}.ml[data-v-c3862e91]{margin-left:16px}.dropdown[data-v-c4c4a151]{padding-left:var(--179f97e8);padding-right:var(--179f97e8)}
|
||||
|
|
2
ui/dist/assets/DropDown.js
vendored
2
ui/dist/assets/DropDown.js
vendored
File diff suppressed because one or more lines are too long
2
ui/dist/assets/Log.css
vendored
2
ui/dist/assets/Log.css
vendored
|
@ -1 +1 @@
|
|||
.log[data-v-5856289d]{overflow:hidden;flex:1}.task-table[data-v-5856289d]{position:relative;max-width:600px}.task-table th[data-v-5856289d]{padding:2px 16px}.task-table td[data-v-5856289d]{height:24px;padding:2px 8px}.task-table td[data-v-5856289d]:last-child{width:100%}.action-container[data-v-5856289d]{display:flex;align-items:center;gap:12px;z-index:15}.scroll-container[data-v-5856289d]{display:flex;align-items:center;gap:4px}.expand[data-v-5856289d]{flex-grow:1}.toggle-table-collapse-btn[data-v-5856289d]{position:absolute;top:0;right:0}.toggle-fullscreen-btn[data-v-5856289d]{position:absolute;top:0;right:38px}.log-bg[data-v-5856289d]{content:"";width:100%;height:100%;position:absolute;top:0;left:0;opacity:var(--18577cdc);background-image:url(/bg1.webp),url(/bg2.webp);background-repeat:no-repeat;background-size:var(--63e81660);background-position:var(--44a3ae78);pointer-events:none;z-index:14}.sc[data-v-5856289d]{max-width:480px;max-height:270px;border-radius:6px;z-index:15}.hljs-date{color:#f0a020!important;font-weight:700}.hljs-time{color:#2080f0!important;font-weight:700}.hljs-room{color:#18a058!important;font-weight:700}.hljs-operator{color:#d03050!important}.hljs-info{font-weight:700}.hljs-warning{color:#f0a020!important;font-weight:700}.hljs-error{color:#d03050!important;font-weight:700}.hljs-scene{font-style:italic}.log .n-scrollbar-content{overflow:hidden}.auto-scroll .n-scrollbar-container{overflow:hidden;position:relative}.auto-scroll .n-scrollbar-container .n-scrollbar-content{position:absolute;bottom:0}.auto-scroll .n-scrollbar-rail{display:none}
|
||||
.log[data-v-0f8c4b98]{overflow:hidden;flex:1}.task-table[data-v-0f8c4b98]{position:relative;max-width:600px}.task-table th[data-v-0f8c4b98]{padding:2px 16px}.task-table td[data-v-0f8c4b98]{height:24px;padding:2px 8px}.task-table td[data-v-0f8c4b98]:last-child{width:100%}.action-container[data-v-0f8c4b98]{display:flex;align-items:center;gap:12px;z-index:15}.scroll-container[data-v-0f8c4b98]{display:flex;align-items:center;gap:4px}.expand[data-v-0f8c4b98]{flex-grow:1}.toggle-table-collapse-btn[data-v-0f8c4b98]{position:absolute;top:0;right:0}.toggle-fullscreen-btn[data-v-0f8c4b98]{position:absolute;top:0;right:38px}.log-bg[data-v-0f8c4b98]{content:"";width:100%;height:100%;position:absolute;top:0;left:0;opacity:var(--7e3728b5);background-image:url(/bg1.webp),url(/bg2.webp);background-repeat:no-repeat;background-size:var(--2b827f97);background-position:var(--ca8d0482);pointer-events:none;z-index:14}.sc[data-v-0f8c4b98]{max-width:480px;max-height:270px;border-radius:6px;z-index:15}.hljs-date{color:#f0a020!important;font-weight:700}.hljs-time{color:#2080f0!important;font-weight:700}.hljs-room{color:#18a058!important;font-weight:700}.hljs-operator{color:#d03050!important}.hljs-info{font-weight:700}.hljs-warning{color:#f0a020!important;font-weight:700}.hljs-error{color:#d03050!important;font-weight:700}.hljs-scene{font-style:italic}.log .n-scrollbar-content{overflow:hidden}.auto-scroll .n-scrollbar-container{overflow:hidden;position:relative}.auto-scroll .n-scrollbar-container .n-scrollbar-content{position:absolute;bottom:0}.auto-scroll .n-scrollbar-rail{display:none}
|
||||
|
|
2
ui/dist/assets/Log.js
vendored
2
ui/dist/assets/Log.js
vendored
File diff suppressed because one or more lines are too long
2
ui/dist/assets/Plan.css
vendored
2
ui/dist/assets/Plan.css
vendored
|
@ -1 +1 @@
|
|||
.select-label[data-v-55b5b9f9]{width:44px}.type-select[data-v-55b5b9f9]{width:100px;margin-right:8px}.product-select[data-v-55b5b9f9]{width:180px;margin-right:8px}.operator-select[data-v-55b5b9f9]{width:220px}.replacement-select[data-v-55b5b9f9]{min-width:400px}.plan-container[data-v-55b5b9f9]{width:980px;min-width:980px;display:flex;flex-direction:column;gap:12px}.group[data-v-55b5b9f9]{width:160px}.facility-2[data-v-55b5b9f9]{width:124px;height:76px;margin:2px 3px}.facility-3[data-v-55b5b9f9]{width:175px;height:76px;margin:2px 3px}.facility-5[data-v-55b5b9f9]{width:277px;height:76px;margin:2px 3px}.avatars[data-v-55b5b9f9]{display:flex;gap:6px;z-index:5}.avatars img[data-v-55b5b9f9]{box-sizing:content-box;border-radius:2px;background:var(--de0aa790)}.facility-name[data-v-55b5b9f9]{margin-bottom:4px;text-align:center;line-height:1;display:flex;justify-content:space-around;z-index:5}.outer[data-v-55b5b9f9]{display:flex;margin:0 auto}.left_box[data-v-55b5b9f9]{display:flex;flex-direction:column;gap:4px;padding-top:82px;padding-right:2px}.left_box .left_contain[data-v-55b5b9f9]{display:grid;grid-template-columns:1fr 1fr 1fr;gap:4px}.left_box .left_contain>div[data-v-55b5b9f9]{box-sizing:border-box;width:175px;height:76px;cursor:pointer}.left_box .left_contain .info[data-v-55b5b9f9]{background-color:#2080f029;border-radius:3px;border:1px solid transparent;transition:all .3s;position:relative}.left_box .left_contain .info[data-v-55b5b9f9]:hover{background-color:#2080f038}.left_box .left_contain .info.true[data-v-55b5b9f9]{background-color:var(--n-color);border:1px solid rgb(32,128,240)}.left_box .left_contain .info .facility-name[data-v-55b5b9f9]{color:#2080f0}.left_box .left_contain .warning[data-v-55b5b9f9]{background-color:#f0a02029;border-radius:3px;border:1px solid transparent;transition:all .3s;position:relative}.left_box .left_contain .warning[data-v-55b5b9f9]:hover{background-color:#f0a02038}.left_box .left_contain .warning.true[data-v-55b5b9f9]{background-color:var(--n-color);border:1px solid rgb(240,160,32)}.left_box .left_contain .warning .facility-name[data-v-55b5b9f9]{color:#f0a020}.left_box .left_contain .primary[data-v-55b5b9f9]{background-color:#18a05829;border-radius:3px;border:1px solid transparent;transition:all .3s}.left_box .left_contain .primary[data-v-55b5b9f9]:hover{background-color:#18a05838}.left_box .left_contain .primary.true[data-v-55b5b9f9]{background-color:var(--n-color);border:1px solid rgb(24,160,88)}.left_box .left_contain .primary .facility-name[data-v-55b5b9f9]{color:#18a058}.mid_box[data-v-55b5b9f9]{display:flex;flex-direction:column}.waiting[data-v-55b5b9f9]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;border:1px dashed rgb(51,54,57);opacity:.6;transition:all .3s;cursor:pointer;border-radius:3px}.waiting[data-v-55b5b9f9]:hover{opacity:1;border:1px dashed rgb(54,173,106);color:#36ad6a}.waiting div[data-v-55b5b9f9]{text-align:center}.draggable[data-v-55b5b9f9]{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center}.product-bg[data-v-55b5b9f9]{content:"";position:absolute;top:0;left:0;width:173px;height:74px;opacity:var(--5c2bc2b4);background-repeat:no-repeat;background-size:100%;background-position:110px -20px;z-index:3;pointer-events:none}.avatar-wrapper[data-v-55b5b9f9]{position:relative}.workaholic[data-v-55b5b9f9]{position:absolute;content:"";top:0;left:0;width:45px;height:45px;opacity:.35;background-color:red;pointer-events:none}.n-base-selection-placeholder .n-avatar{display:none}.n-table[data-v-1ad93d71]{min-width:100%}.n-table th[data-v-1ad93d71]{width:124px;box-sizing:border-box}.label[data-v-1ad93d71]{display:flex;flex-direction:row;align-items:center;gap:6px}.dropdown-container{display:flex;align-items:center;margin-top:5px}.dropdown-label{flex:0 0 40%;max-width:125px}.dropdown-select{flex:1}.w-980[data-v-9b727755]{width:100%;max-width:980px}.mx-auto[data-v-9b727755]{margin:0 auto}.mt-12[data-v-9b727755]{margin-top:12px}.mb-12[data-v-9b727755]{margin-bottom:12px}.px-12[data-v-9b727755]{padding:0 12px}.mw-980[data-v-9b727755]{min-width:980px}.plan-bar[data-v-9b727755]{display:flex;flex-direction:row;flex-grow:0;gap:6px;padding:0 12px}
|
||||
.select-label[data-v-cce7645c]{width:44px}.type-select[data-v-cce7645c]{width:100px;margin-right:8px}.product-select[data-v-cce7645c]{width:180px;margin-right:8px}.operator-select[data-v-cce7645c]{width:220px}.replacement-select[data-v-cce7645c]{min-width:400px}.plan-container[data-v-cce7645c]{width:980px;min-width:980px;display:flex;flex-direction:column;gap:12px}.group[data-v-cce7645c]{width:160px}.facility-2[data-v-cce7645c]{width:124px;height:76px;margin:2px 3px}.facility-3[data-v-cce7645c]{width:175px;height:76px;margin:2px 3px}.facility-5[data-v-cce7645c]{width:277px;height:76px;margin:2px 3px}.avatars[data-v-cce7645c]{display:flex;gap:6px;z-index:5}.avatars img[data-v-cce7645c]{box-sizing:content-box;border-radius:2px;background:var(--4f6580d2)}.facility-name[data-v-cce7645c]{margin-bottom:4px;text-align:center;line-height:1;display:flex;justify-content:space-around;z-index:5}.outer[data-v-cce7645c]{display:flex;margin:0 auto}.left_box[data-v-cce7645c]{display:flex;flex-direction:column;gap:4px;padding-top:82px;padding-right:2px}.left_box .left_contain[data-v-cce7645c]{display:grid;grid-template-columns:1fr 1fr 1fr;gap:4px}.left_box .left_contain>div[data-v-cce7645c]{box-sizing:border-box;width:175px;height:76px;cursor:pointer}.left_box .left_contain .info[data-v-cce7645c]{background-color:#2080f029;border-radius:3px;border:1px solid transparent;transition:all .3s;position:relative}.left_box .left_contain .info[data-v-cce7645c]:hover{background-color:#2080f038}.left_box .left_contain .info.true[data-v-cce7645c]{background-color:var(--n-color);border:1px solid rgb(32,128,240)}.left_box .left_contain .info .facility-name[data-v-cce7645c]{color:#2080f0}.left_box .left_contain .warning[data-v-cce7645c]{background-color:#f0a02029;border-radius:3px;border:1px solid transparent;transition:all .3s;position:relative}.left_box .left_contain .warning[data-v-cce7645c]:hover{background-color:#f0a02038}.left_box .left_contain .warning.true[data-v-cce7645c]{background-color:var(--n-color);border:1px solid rgb(240,160,32)}.left_box .left_contain .warning .facility-name[data-v-cce7645c]{color:#f0a020}.left_box .left_contain .primary[data-v-cce7645c]{background-color:#18a05829;border-radius:3px;border:1px solid transparent;transition:all .3s}.left_box .left_contain .primary[data-v-cce7645c]:hover{background-color:#18a05838}.left_box .left_contain .primary.true[data-v-cce7645c]{background-color:var(--n-color);border:1px solid rgb(24,160,88)}.left_box .left_contain .primary .facility-name[data-v-cce7645c]{color:#18a058}.mid_box[data-v-cce7645c]{display:flex;flex-direction:column}.waiting[data-v-cce7645c]{width:100%;height:100%;display:flex;align-items:center;justify-content:center;border:1px dashed rgb(51,54,57);opacity:.6;transition:all .3s;cursor:pointer;border-radius:3px}.waiting[data-v-cce7645c]:hover{opacity:1;border:1px dashed rgb(54,173,106);color:#36ad6a}.waiting div[data-v-cce7645c]{text-align:center}.draggable[data-v-cce7645c]{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center}.product-bg[data-v-cce7645c]{content:"";position:absolute;top:0;left:0;width:173px;height:74px;opacity:var(--044f8a35);background-repeat:no-repeat;background-size:100%;background-position:110px -20px;z-index:3;pointer-events:none}.avatar-wrapper[data-v-cce7645c]{position:relative}.workaholic[data-v-cce7645c]{position:absolute;content:"";top:0;left:0;width:45px;height:45px;opacity:.35;background-color:red;pointer-events:none}.n-base-selection-placeholder .n-avatar{display:none}.n-table[data-v-ab1299ac]{min-width:100%}.n-table th[data-v-ab1299ac]{width:124px;box-sizing:border-box}.label[data-v-ab1299ac]{display:flex;flex-direction:row;align-items:center;gap:6px}.dropdown-container{display:flex;align-items:center;margin-top:5px}.dropdown-label{flex:0 0 40%;max-width:125px}.dropdown-select{flex:1}.w-980[data-v-20cb521b]{width:100%;max-width:980px}.mx-auto[data-v-20cb521b]{margin:0 auto}.mt-12[data-v-20cb521b]{margin-top:12px}.mb-12[data-v-20cb521b]{margin-bottom:12px}.px-12[data-v-20cb521b]{padding:0 12px}.mw-980[data-v-20cb521b]{min-width:980px}.plan-bar[data-v-20cb521b]{display:flex;flex-direction:row;flex-grow:0;gap:6px;padding:0 12px}
|
||||
|
|
4
ui/dist/assets/Plan.js
vendored
4
ui/dist/assets/Plan.js
vendored
File diff suppressed because one or more lines are too long
2
ui/dist/assets/RecordLine.css
vendored
2
ui/dist/assets/RecordLine.css
vendored
|
@ -1 +1 @@
|
|||
h2[data-v-feb23685]{margin:0;font-size:1.2rem;text-align:center}.page-title[data-v-feb23685]{text-align:center;font-size:24px;margin-bottom:20px}.report-card[data-v-feb23685]{position:relative;background-color:var(--n-color);padding:10px 20px 16px;height:300px;box-sizing:border-box;border-radius:8px}.report-card-expand[data-v-feb23685]{position:absolute;width:calc(100% - 24px);height:calc(100% - 24px);top:12px;left:12px;box-sizing:border-box;z-index:9}.toggle[data-v-feb23685]{position:absolute;top:10px}.toggle-size[data-v-feb23685]{right:10px}.toggle-width[data-v-feb23685]{left:10px}.line-outer-container[data-v-feb23685]{width:100%;overflow-x:scroll;flex:1}.line-inner-container[data-v-feb23685]{padding:0 12px 16px;height:100%;box-sizing:border-box}
|
||||
h2[data-v-1d70fb0d]{margin:0;font-size:1.2rem;text-align:center}.page-title[data-v-1d70fb0d]{text-align:center;font-size:24px;margin-bottom:20px}.report-card[data-v-1d70fb0d]{position:relative;background-color:var(--n-color);padding:10px 20px 16px;height:300px;box-sizing:border-box;border-radius:8px}.report-card-expand[data-v-1d70fb0d]{position:absolute;width:calc(100% - 24px);height:calc(100% - 24px);top:12px;left:12px;box-sizing:border-box;z-index:9}.toggle[data-v-1d70fb0d]{position:absolute;top:10px}.toggle-size[data-v-1d70fb0d]{right:10px}.toggle-width[data-v-1d70fb0d]{left:10px}.line-outer-container[data-v-1d70fb0d]{width:100%;overflow-x:scroll;flex:1}.line-inner-container[data-v-1d70fb0d]{padding:0 12px 16px;height:100%;box-sizing:border-box}
|
||||
|
|
2
ui/dist/assets/RecordLine.js
vendored
2
ui/dist/assets/RecordLine.js
vendored
|
@ -1 +1 @@
|
|||
import{u as V,C as R,a as j,L,T as q,b as H,P,c as I,p as O,d as T,e as F,f as $,A as K,g as Q,h as U}from"./record.js";import{bK as h,bL as v,bP as W,r as p,p as X,bV as A,bU as d,bT as a,bS as i,bQ as c,F as Z,b_ as G,bN as o,bR as f,c0 as J,bX as Y,bC as ee,bm as te,bo as oe}from"./_plugin-vue_export-helper.js";import{b8 as ne,b9 as re}from"./main.js";var _={},C;function ae(){if(C)return _;C=1,Object.defineProperty(_,"__esModule",{value:!0});const e=h(),n={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 24 24"};return _.default=(0,e.defineComponent)({name:"ArrowsDiagonal",render:function(r,t){return(0,e.openBlock)(),(0,e.createElementBlock)("svg",n,t[0]||(t[0]=[(0,e.createStaticVNode)('<g fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 4h4v4"></path><path d="M14 10l6-6"></path><path d="M8 20H4v-4"></path><path d="M4 20l6-6"></path></g>',1)]))}}),_}var se=ae();const le=v(se);var m={},y;function ie(){if(y)return m;y=1,Object.defineProperty(m,"__esModule",{value:!0});const e=h(),n={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 24 24"};return m.default=(0,e.defineComponent)({name:"ArrowsDiagonalMinimize2",render:function(r,t){return(0,e.openBlock)(),(0,e.createElementBlock)("svg",n,t[0]||(t[0]=[(0,e.createStaticVNode)('<g fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 10h-4V6"></path><path d="M20 4l-6 6"></path><path d="M6 14h4v4"></path><path d="M10 14l-6 6"></path></g>',1)]))}}),m}var ce=ie();const ue=v(ce);var g={},z;function pe(){if(z)return g;z=1,Object.defineProperty(g,"__esModule",{value:!0});const e=h(),n={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 24 24"};return g.default=(0,e.defineComponent)({name:"ArrowsHorizontal",render:function(r,t){return(0,e.openBlock)(),(0,e.createElementBlock)("svg",n,t[0]||(t[0]=[(0,e.createElementVNode)("g",{fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[(0,e.createElementVNode)("path",{d:"M7 8l-4 4l4 4"}),(0,e.createElementVNode)("path",{d:"M17 8l4 4l-4 4"}),(0,e.createElementVNode)("path",{d:"M3 12h18"})],-1)]))}}),g}var de=pe();const _e=v(de),me={class:"line-outer-container"},ge={__name:"RecordLine",setup(e){const n=V(),{getMoodRatios:u}=n;R.register(j,L,q,H,P,I,O,T,F,$,K,Q);const r=p(-1),t=p([]),w=p([]);X(async()=>{w.value=await u(),t.value=new Array(w.value.length).fill(100)});const E=p({responsive:!0,maintainAspectRatio:!1,scales:{x:{autoSkip:!0,type:"time",time:{unit:"day"}},y:{beginAtZero:!0,ticks:{min:0,max:24,stepSize:4}}},plugins:{datalabels:{display:!1}}});function B(s){t.value[s]==100?t.value[s]=300:t.value[s]==300?t.value[s]=700:t.value[s]=100}return(s,k)=>{const b=te,x=oe,S=re,D=ne;return c(),A("div",null,[k[0]||(k[0]=d("h1",{class:"page-title"},"干员心情折线表",-1)),a(D,{"x-gap":12,"y-gap":8,collapsed:!1,cols:"1 s:1 m:2 l:3 xl:4 2xl:5",responsive:"screen"},{default:i(()=>[(c(!0),A(Z,null,G(o(w),(M,l)=>(c(),f(S,{key:l,class:J(["report-card",{"report-card-expand":o(r)==l}])},{default:i(()=>[d("h2",null,Y(M.groupName),1),d("div",me,[d("div",{class:"line-inner-container",style:ee({width:o(t)[l]+"%"})},[a(o(U),{data:M.moodData,options:o(E)},null,8,["data","options"])],4)]),a(x,{class:"toggle toggle-size",size:"small",onClick:N=>r.value=o(r)==-1?l:-1,focusable:!1},{icon:i(()=>[a(b,null,{default:i(()=>[o(r)==l?(c(),f(o(ue),{key:0})):(c(),f(o(le),{key:1}))]),_:2},1024)]),_:2},1032,["onClick"]),a(x,{class:"toggle toggle-width",size:"small",onClick:N=>B(l),focusable:!1},{icon:i(()=>[a(b,null,{default:i(()=>[a(o(_e))]),_:1})]),_:2},1032,["onClick"])]),_:2},1032,["class"]))),128))]),_:1})])}}},ve=W(ge,[["__scopeId","data-v-feb23685"]]);export{ve as default};
|
||||
import{u as V,C as R,a as j,L,T as q,b as H,P,c as I,p as O,d as T,e as F,f as $,A as K,g as Q,h as U}from"./record.js";import{bK as h,bL as v,bP as W,r as p,p as X,bV as A,bU as d,bT as a,bS as i,bQ as c,F as Z,b_ as G,bN as o,bR as f,c0 as J,bX as Y,bC as ee,bm as te,bo as oe}from"./_plugin-vue_export-helper.js";import{b8 as ne,b9 as re}from"./main.js";var _={},C;function ae(){if(C)return _;C=1,Object.defineProperty(_,"__esModule",{value:!0});const e=h(),n={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 24 24"};return _.default=(0,e.defineComponent)({name:"ArrowsDiagonal",render:function(r,t){return(0,e.openBlock)(),(0,e.createElementBlock)("svg",n,t[0]||(t[0]=[(0,e.createStaticVNode)('<g fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 4h4v4"></path><path d="M14 10l6-6"></path><path d="M8 20H4v-4"></path><path d="M4 20l6-6"></path></g>',1)]))}}),_}var se=ae();const le=v(se);var m={},y;function ie(){if(y)return m;y=1,Object.defineProperty(m,"__esModule",{value:!0});const e=h(),n={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 24 24"};return m.default=(0,e.defineComponent)({name:"ArrowsDiagonalMinimize2",render:function(r,t){return(0,e.openBlock)(),(0,e.createElementBlock)("svg",n,t[0]||(t[0]=[(0,e.createStaticVNode)('<g fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 10h-4V6"></path><path d="M20 4l-6 6"></path><path d="M6 14h4v4"></path><path d="M10 14l-6 6"></path></g>',1)]))}}),m}var ce=ie();const ue=v(ce);var g={},z;function pe(){if(z)return g;z=1,Object.defineProperty(g,"__esModule",{value:!0});const e=h(),n={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 24 24"};return g.default=(0,e.defineComponent)({name:"ArrowsHorizontal",render:function(r,t){return(0,e.openBlock)(),(0,e.createElementBlock)("svg",n,t[0]||(t[0]=[(0,e.createElementVNode)("g",{fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[(0,e.createElementVNode)("path",{d:"M7 8l-4 4l4 4"}),(0,e.createElementVNode)("path",{d:"M17 8l4 4l-4 4"}),(0,e.createElementVNode)("path",{d:"M3 12h18"})],-1)]))}}),g}var de=pe();const _e=v(de),me={class:"line-outer-container"},ge={__name:"RecordLine",setup(e){const n=V(),{getMoodRatios:u}=n;R.register(j,L,q,H,P,I,O,T,F,$,K,Q);const r=p(-1),t=p([]),w=p([]);X(async()=>{w.value=await u(),t.value=new Array(w.value.length).fill(100)});const E=p({responsive:!0,maintainAspectRatio:!1,scales:{x:{autoSkip:!0,type:"time",time:{unit:"day"}},y:{beginAtZero:!0,ticks:{min:0,max:24,stepSize:4}}},plugins:{datalabels:{display:!1}}});function B(s){t.value[s]==100?t.value[s]=300:t.value[s]==300?t.value[s]=700:t.value[s]=100}return(s,k)=>{const b=te,x=oe,S=re,D=ne;return c(),A("div",null,[k[0]||(k[0]=d("h1",{class:"page-title"},"干员心情折线表",-1)),a(D,{"x-gap":12,"y-gap":8,collapsed:!1,cols:"1 s:1 m:2 l:3 xl:4 2xl:5",responsive:"screen"},{default:i(()=>[(c(!0),A(Z,null,G(o(w),(M,l)=>(c(),f(S,{key:l,class:J(["report-card",{"report-card-expand":o(r)==l}])},{default:i(()=>[d("h2",null,Y(M.groupName),1),d("div",me,[d("div",{class:"line-inner-container",style:ee({width:o(t)[l]+"%"})},[a(o(U),{data:M.moodData,options:o(E)},null,8,["data","options"])],4)]),a(x,{class:"toggle toggle-size",size:"small",onClick:N=>r.value=o(r)==-1?l:-1,focusable:!1},{icon:i(()=>[a(b,null,{default:i(()=>[o(r)==l?(c(),f(o(ue),{key:0})):(c(),f(o(le),{key:1}))]),_:2},1024)]),_:2},1032,["onClick"]),a(x,{class:"toggle toggle-width",size:"small",onClick:N=>B(l),focusable:!1},{icon:i(()=>[a(b,null,{default:i(()=>[a(o(_e))]),_:1})]),_:2},1032,["onClick"])]),_:2},1032,["class"]))),128))]),_:1})])}}},ve=W(ge,[["__scopeId","data-v-1d70fb0d"]]);export{ve as default};
|
||||
|
|
2
ui/dist/assets/RecordPie.css
vendored
2
ui/dist/assets/RecordPie.css
vendored
|
@ -1 +1 @@
|
|||
h2[data-v-b72a3df4]{margin-bottom:10px;font-size:1.2rem;text-align:center}.page-title[data-v-b72a3df4]{text-align:center;font-size:24px;margin-bottom:20px}
|
||||
h2[data-v-80502f5e]{margin-bottom:10px;font-size:1.2rem;text-align:center}.page-title[data-v-80502f5e]{text-align:center;font-size:24px;margin-bottom:20px}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue