diff --git a/.clang-format b/.clang-format index 2aca20d6d..9159a5ebf 100644 --- a/.clang-format +++ b/.clang-format @@ -1,9 +1,9 @@ # https://clang.llvm.org/docs/ClangFormatStyleOptions.html # for clang-format 17.0.1 Language: Cpp -BasedOnStyle: 'WebKit' +BasedOnStyle: "WebKit" # AccessModifierOffset: 2 -AlignAfterOpenBracket: 'AlwaysBreak' +AlignAfterOpenBracket: "AlwaysBreak" AlignArrayOfStructures: None AlignConsecutiveAssignments: None AlignConsecutiveBitFields: None @@ -84,12 +84,12 @@ FixNamespaceComments: true # - foreach # - Q_FOREACH # - BOOST_FOREACH -# IfMacros: +# IfMacros: # - 'KJ_IF_MAYBE' IncludeBlocks: Preserve # IncludeCategories: -# IncludeIsMainRegex: -# IncludeIsMainSourceRegex: +# IncludeIsMainRegex: +# IncludeIsMainSourceRegex: IndentAccessModifiers: false IndentCaseBlocks: false IndentCaseLabels: false @@ -127,7 +127,7 @@ NamespaceIndentation: None # ObjCSpaceAfterProperty: # ObjCSpaceBeforeProtocolList: PackConstructorInitializers: Never -# PenaltyBreakAssignment: +# PenaltyBreakAssignment: # PenaltyBreakBeforeFirstCallParameter: # PenaltyBreakComment: # PenaltyBreakFirstLessLess: @@ -151,7 +151,7 @@ RemoveParentheses: Leave RemoveSemicolon: false RequiresClausePosition: OwnLine RequiresExpressionIndentation: OuterScope -SeparateDefinitionBlocks: Leave +SeparateDefinitionBlocks: Always ShortNamespaceLines: 1000 SortIncludes: CaseSensitive # SortJavaStaticImport: @@ -180,7 +180,7 @@ SpacesInLineCommentPrefix: SpacesInParens: Never SpacesInSquareBrackets: false Standard: c++20 -# StatementAttributeLikeMacros: +# StatementAttributeLikeMacros: # StatementMacros: TabWidth: 4 # TypeNames: diff --git a/3rdparty/include/meojson/common/array.hpp b/3rdparty/include/meojson/common/array.hpp index 7665e04ff..d7a54795b 100644 --- a/3rdparty/include/meojson/common/array.hpp +++ b/3rdparty/include/meojson/common/array.hpp @@ -47,6 +47,7 @@ class basic_array : _array_data(std::make_move_iterator(arr.begin()), std::make_move_iterator(arr.end())) { } + template < typename jsonization_t, std::enable_if_t<_utils::has_to_json_in_member::value, bool> = true> @@ -54,6 +55,7 @@ class basic_array : basic_array(value.to_json()) { } + template < typename jsonization_t, std::enable_if_t<_utils::has_to_json_in_templ_spec::value, bool> = true> @@ -65,17 +67,24 @@ class basic_array ~basic_array() noexcept = default; bool empty() const noexcept { return _array_data.empty(); } + size_t size() const noexcept { return _array_data.size(); } + bool contains(size_t pos) const { return pos < _array_data.size(); } + bool exists(size_t pos) const { return contains(pos); } + const basic_value& at(size_t pos) const; string_t dumps(std::optional indent = std::nullopt) const { return indent ? format(*indent) : to_string(); } + string_t to_string() const; + string_t format(size_t indent = 4) const { return format(indent, 0); } + template bool all() const; template typename collection_t = std::vector> @@ -124,6 +133,7 @@ class basic_array basic_array& operator=(const basic_array&) = default; basic_array& operator=(basic_array&&) noexcept = default; + template < typename value_t, std::enable_if_t>, bool> = true> @@ -133,6 +143,7 @@ class basic_array } bool operator==(const basic_array& rhs) const; + bool operator!=(const basic_array& rhs) const { return !(*this == rhs); } template < @@ -143,6 +154,7 @@ class basic_array { return as_collection(); } + template < typename jsonization_t, std::enable_if_t<_utils::has_from_json_in_member::value, bool> = @@ -155,6 +167,7 @@ class basic_array } return dst; } + template < typename jsonization_t, std::enable_if_t< diff --git a/3rdparty/include/meojson/common/exception.hpp b/3rdparty/include/meojson/common/exception.hpp index 016fb6480..9c0412d99 100644 --- a/3rdparty/include/meojson/common/exception.hpp +++ b/3rdparty/include/meojson/common/exception.hpp @@ -9,6 +9,7 @@ class exception : public std::exception { public: exception() = default; + exception(const std::string& msg) : _what(msg) { diff --git a/3rdparty/include/meojson/common/object.hpp b/3rdparty/include/meojson/common/object.hpp index 4f418cdf8..87d8c1538 100644 --- a/3rdparty/include/meojson/common/object.hpp +++ b/3rdparty/include/meojson/common/object.hpp @@ -46,6 +46,7 @@ class basic_object : _object_data(std::make_move_iterator(map.begin()), std::make_move_iterator(map.end())) { } + template < typename jsonization_t, std::enable_if_t<_utils::has_to_json_in_member::value, bool> = true> @@ -53,6 +54,7 @@ class basic_object : basic_object(value.to_json()) { } + template < typename jsonization_t, std::enable_if_t<_utils::has_to_json_in_templ_spec::value, bool> = true> @@ -64,17 +66,24 @@ class basic_object ~basic_object() = default; bool empty() const noexcept { return _object_data.empty(); } + size_t size() const noexcept { return _object_data.size(); } + bool contains(const string_t& key) const; + bool exists(const string_t& key) const { return contains(key); } + const basic_value& at(const string_t& key) const; string_t dumps(std::optional indent = std::nullopt) const { return indent ? format(*indent) : to_string(); } + string_t to_string() const; + string_t format(size_t indent = 4) const { return format(indent, 0); } + template bool all() const; template typename map_t = std::map> @@ -116,6 +125,7 @@ class basic_object basic_object& operator=(const basic_object&) = default; basic_object& operator=(basic_object&&) = default; + template < typename value_t, std::enable_if_t>, bool> = true> @@ -125,6 +135,7 @@ class basic_object } bool operator==(const basic_object& rhs) const; + bool operator!=(const basic_object& rhs) const { return !(*this == rhs); } template < @@ -135,6 +146,7 @@ class basic_object { return as_map(); } + template < typename jsonization_t, std::enable_if_t<_utils::has_from_json_in_member::value, bool> = @@ -147,6 +159,7 @@ class basic_object } return dst; } + template < typename jsonization_t, std::enable_if_t< diff --git a/3rdparty/include/meojson/common/value.hpp b/3rdparty/include/meojson/common/value.hpp index 9a56c5f00..9d7665a76 100644 --- a/3rdparty/include/meojson/common/value.hpp +++ b/3rdparty/include/meojson/common/value.hpp @@ -76,6 +76,7 @@ class basic_value : basic_value(basic_array(std::forward(collection))) { } + template < typename map_t, std::enable_if_t< @@ -96,6 +97,7 @@ class basic_value : basic_value(value.to_json()) { } + template < typename jsonization_t, std::enable_if_t<_utils::has_to_json_in_templ_spec::value, bool> = true> @@ -118,13 +120,21 @@ class basic_value ~basic_value(); bool valid() const noexcept { return _type != value_type::invalid; } + bool empty() const noexcept { return is_null(); } + bool is_null() const noexcept { return _type == value_type::null; } + bool is_number() const noexcept { return _type == value_type::number; } + bool is_boolean() const noexcept { return _type == value_type::boolean; } + bool is_string() const noexcept { return _type == value_type::string; } + bool is_array() const noexcept { return _type == value_type::array; } + bool is_object() const noexcept { return _type == value_type::object; } + template bool is() const noexcept; @@ -133,9 +143,13 @@ class basic_value bool contains(const string_t& key) const; bool contains(size_t pos) const; + bool exists(const string_t& key) const { return contains(key); } + bool exists(size_t pos) const { return contains(pos); } + value_type type() const noexcept { return _type; } + const basic_value& at(size_t pos) const; const basic_value& at(const string_t& key) const; @@ -185,12 +199,15 @@ class basic_value { return indent ? format(*indent) : to_string(); } + // return raw string string_t to_string() const; + string_t format(size_t indent = 4) const { return format(indent, 0); } basic_value& operator=(const basic_value& rhs); basic_value& operator=(basic_value&&) noexcept; + template < typename value_t, std::enable_if_t>, bool> = true> @@ -200,6 +217,7 @@ class basic_value } bool operator==(const basic_value& rhs) const; + bool operator!=(const basic_value& rhs) const { return !(*this == rhs); } const basic_value& operator[](size_t pos) const; @@ -224,18 +242,29 @@ class basic_value basic_value& operator+=(basic_array&& rhs); explicit operator bool() const { return as_boolean(); } + explicit operator int() const { return as_integer(); } + explicit operator unsigned() const { return as_unsigned(); } + explicit operator long() const { return as_long(); } + explicit operator unsigned long() const { return as_unsigned_long(); } + explicit operator long long() const { return as_long_long(); } + explicit operator unsigned long long() const { return as_unsigned_long_long(); } + explicit operator float() const { return as_float(); } + explicit operator double() const { return as_double(); } + explicit operator long double() const { return as_long_double(); } + explicit operator string_t() const { return as_string(); } explicit operator basic_array() const { return as_array(); } + explicit operator basic_object() const { return as_object(); } template < @@ -246,6 +275,7 @@ class basic_value { return as_collection(); } + template < typename value_t, template typename map_t = std::map, @@ -254,6 +284,7 @@ class basic_value { return as_map(); } + template < typename jsonization_t, std::enable_if_t<_utils::has_from_json_in_member::value, bool> = @@ -266,6 +297,7 @@ class basic_value } return dst; } + template < typename jsonization_t, std::enable_if_t< diff --git a/3rdparty/include/meojson/parser/bitops.hpp b/3rdparty/include/meojson/parser/bitops.hpp index f30eea38d..c74dbbe51 100644 --- a/3rdparty/include/meojson/parser/bitops.hpp +++ b/3rdparty/include/meojson/parser/bitops.hpp @@ -2,12 +2,14 @@ #if __cplusplus >= 202002L || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L) #include + namespace json::_bitops { using std::countl_one; using std::countl_zero; using std::countr_one; using std::countr_zero; + inline constexpr bool is_little_endian() { return std::endian::native == std::endian::little; @@ -15,6 +17,7 @@ inline constexpr bool is_little_endian() } #else #include + namespace json::_bitops { #if defined(__GNUC__) || defined(__clang__) @@ -28,6 +31,7 @@ inline constexpr int countl_zero(uint32_t x) } return x == 0 ? 32 : __builtin_clzll(x); } + inline constexpr int countr_zero(uint32_t x) { if constexpr (sizeof(uint32_t) == sizeof(unsigned int)) { @@ -38,10 +42,12 @@ inline constexpr int countr_zero(uint32_t x) } return x == 0 ? 32 : __builtin_ctzll(x); } + inline constexpr int countl_zero(uint64_t x) { return x == 0 ? 64 : __builtin_clzll(x); } + inline constexpr int countr_zero(uint64_t x) { return x == 0 ? 64 : __builtin_ctzll(x); @@ -53,14 +59,17 @@ inline int countl_zero(uint32_t x) { return __lzcnt(x); } + inline int countr_zero(uint32_t x) { return _tzcnt_u32(x); } + inline int countl_zero(uint64_t x) { return (int)__lzcnt64(x); } + inline int countr_zero(uint64_t x) { return (int)_tzcnt_u64(x); @@ -71,16 +80,19 @@ inline constexpr int countl_zero(uint32_t x) unsigned long index = 0; return _BitScanReverse(&index, x) ? 31 - index : 32; } + inline constexpr int countr_zero(uint32_t x) { unsigned long index = 0; return _BitScanForward(&index, x) ? index : 32; } + inline constexpr int countl_zero(uint64_t x) { unsigned long index = 0; return _BitScanReverse64(&index, x) ? 63 - index : 64; } + inline constexpr int countr_zero(uint64_t x) { unsigned long index = 0; @@ -94,14 +106,17 @@ inline int countl_one(uint32_t x) { return countl_zero(~x); } + inline int countr_one(uint32_t x) { return countr_zero(~x); } + inline int countl_one(uint64_t x) { return countl_zero(~x); } + inline int countr_one(uint64_t x) { return countr_zero(~x); @@ -115,6 +130,7 @@ inline bool is_little_endian() uint32_t u32; uint8_t u8; } u = { 0x01020304 }; + return u.u8 == 4; } } // namespace json::_bitops diff --git a/3rdparty/include/meojson/parser/packed_bytes.hpp b/3rdparty/include/meojson/parser/packed_bytes.hpp index 96794b5e2..ebd5e798c 100644 --- a/3rdparty/include/meojson/parser/packed_bytes.hpp +++ b/3rdparty/include/meojson/parser/packed_bytes.hpp @@ -66,14 +66,19 @@ struct packed_bytes_trait_uint64 return is_zero_memberwise((x) ^ (UINT64_C(0x0101010101010101) * (n))); } - __packed_bytes_strong_inline static value_type bitwise_or(value_type a, value_type b) { return a | b; } + __packed_bytes_strong_inline static value_type bitwise_or(value_type a, value_type b) + { + return a | b; + } __packed_bytes_strong_inline static size_t first_nonzero_byte(value_type x) { - if (_bitops::is_little_endian()) + if (_bitops::is_little_endian()) { return _bitops::countr_zero(x) / 8; - else + } + else { return _bitops::countl_zero(x) / 8; + } } }; @@ -108,16 +113,22 @@ struct packed_bytes_trait_uint32 return is_zero_memberwise((x) ^ (~UINT32_C(0) / 255 * (n))); } - __packed_bytes_strong_inline static value_type bitwise_or(value_type a, value_type b) { return a | b; } + __packed_bytes_strong_inline static value_type bitwise_or(value_type a, value_type b) + { + return a | b; + } __packed_bytes_strong_inline static size_t first_nonzero_byte(value_type x) { - if (_bitops::is_little_endian()) + if (_bitops::is_little_endian()) { return _bitops::countr_zero(x) / 8; - else + } + else { return _bitops::countl_zero(x) / 8; + } } }; + template <> struct packed_bytes<8> { @@ -133,9 +144,14 @@ struct packed_bytes<4> template using packed_bytes_trait = typename packed_bytes::traits; -using packed_bytes_trait_max = - std::conditional_t::available, packed_bytes_trait<32>, - std::conditional_t::available, packed_bytes_trait<16>, - std::conditional_t::available, packed_bytes_trait<8>, - packed_bytes_trait<4>>>>; +using packed_bytes_trait_max = std::conditional_t< + packed_bytes_trait<32>::available, + packed_bytes_trait<32>, + std::conditional_t< + packed_bytes_trait<16>::available, + packed_bytes_trait<16>, + std::conditional_t< + packed_bytes_trait<8>::available, + packed_bytes_trait<8>, + packed_bytes_trait<4>>>>; } // namespace json::_packed_bytes diff --git a/3rdparty/include/meojson/parser/parser.hpp b/3rdparty/include/meojson/parser/parser.hpp index 316029d1d..5a87f46c8 100644 --- a/3rdparty/include/meojson/parser/parser.hpp +++ b/3rdparty/include/meojson/parser/parser.hpp @@ -596,6 +596,7 @@ inline value operator""_json(const char* str, size_t len) { return operator""_jvalue(str, len); } + inline wvalue operator""_json(const wchar_t* str, size_t len) { return operator""_jvalue(str, len); @@ -605,6 +606,7 @@ inline value operator""_jvalue(const char* str, size_t len) { return parse(std::string_view(str, len)).value_or(value()); } + inline wvalue operator""_jvalue(const wchar_t* str, size_t len) { return parse(std::wstring_view(str, len)).value_or(wvalue()); @@ -615,6 +617,7 @@ inline array operator""_jarray(const char* str, size_t len) auto val = parse(std::string_view(str, len)).value_or(value()); return val.is_array() ? val.as_array() : array(); } + inline warray operator""_jarray(const wchar_t* str, size_t len) { auto val = parse(std::wstring_view(str, len)).value_or(wvalue()); @@ -626,6 +629,7 @@ inline object operator""_jobject(const char* str, size_t len) auto val = parse(std::string_view(str, len)).value_or(value()); return val.is_object() ? val.as_object() : object(); } + inline wobject operator""_jobject(const wchar_t* str, size_t len) { auto val = parse(std::wstring_view(str, len)).value_or(wvalue()); diff --git a/3rdparty/include/meojson/reflection/jsonization.hpp b/3rdparty/include/meojson/reflection/jsonization.hpp index d048eade0..d859356ed 100644 --- a/3rdparty/include/meojson/reflection/jsonization.hpp +++ b/3rdparty/include/meojson/reflection/jsonization.hpp @@ -10,6 +10,7 @@ namespace json::_jsonization_helper struct next_is_optional_t { }; + struct va_arg_end { }; @@ -23,11 +24,13 @@ struct dumper result.emplace(key, var); return result; } + template json::value _to_json(const char*, next_is_optional_t, rest_t&&... rest) const { return _to_json(std::forward(rest)...); } + json::value _to_json(va_arg_end) const { return {}; } }; @@ -48,6 +51,7 @@ struct checker } return _check_json(in, error_key, std::forward(rest)...); } + template bool _check_json( const json::value& in, @@ -68,6 +72,7 @@ struct checker return _check_json(in, error_key, std::forward(rest)...); } + bool _check_json(const json::value&, std::string&, va_arg_end) const { return true; } }; @@ -90,6 +95,7 @@ struct loader return _from_json(in, error_key, std::forward(rest)...); } + template bool _from_json( const json::value& in, @@ -111,6 +117,7 @@ struct loader return _from_json(in, error_key, std::forward(rest)...); } + bool _from_json(const json::value&, std::string&, va_arg_end) const { return true; } }; } // namespace json::_jsonization_helper diff --git a/include/MaaFramework/MaaDef.h b/include/MaaFramework/MaaDef.h index 0c7afa734..6ca7607bd 100644 --- a/include/MaaFramework/MaaDef.h +++ b/include/MaaFramework/MaaDef.h @@ -31,6 +31,7 @@ typedef uint64_t MaaSize; typedef const char* MaaStringView; typedef int32_t MaaStatus; + enum MaaStatusEnum { MaaStatus_Invalid = 0, @@ -40,7 +41,9 @@ enum MaaStatusEnum MaaStatus_Failed = 4000, // MaaStatus_Timeout = 5000, }; + typedef int32_t MaaLoggingLevel; + enum MaaLoggingLevelEunm { MaaLoggingLevel_Off = 0, @@ -64,6 +67,7 @@ typedef void* MaaOptionValue; typedef uint64_t MaaOptionValueSize; typedef MaaOption MaaGlobalOption; + enum MaaGlobalOptionEnum { MaaGlobalOption_Invalid = 0, @@ -102,6 +106,7 @@ enum MaaGlobalOptionEnum }; typedef MaaOption MaaResOption; + enum MaaResOptionEnum { MaaResOption_Invalid = 0, @@ -150,6 +155,7 @@ enum MaaCtrlOptionEnum }; typedef MaaOption MaaInstOption; + enum MaaInstOptionEnum { MaaInstOption_Invalid = 0, @@ -210,6 +216,7 @@ enum MaaAdbControllerTypeEnum }; typedef int32_t MaaDbgControllerType; + enum MaaDbgControllerTypeEnum { MaaDbgController_Invalid = 0, @@ -219,6 +226,7 @@ enum MaaDbgControllerTypeEnum }; typedef int32_t MaaThriftControllerType; + enum MaaThriftControllerTypeEnum { MaaThriftController_Invalid = 0, @@ -251,6 +259,7 @@ enum MaaWin32ControllerTypeEnum // MaaWin32ControllerType_Screencap_DXGI_BackBuffer = 3 << 16, MaaWin32ControllerType_Screencap_DXGI_FramePool = 4 << 16, }; + typedef void* MaaWin32Hwnd; typedef void* MaaTransparentArg; diff --git a/include/MaaToolkit/Device/MaaToolkitDevice.h b/include/MaaToolkit/Device/MaaToolkitDevice.h index 8a319537f..2e908c596 100644 --- a/include/MaaToolkit/Device/MaaToolkitDevice.h +++ b/include/MaaToolkit/Device/MaaToolkitDevice.h @@ -16,10 +16,12 @@ extern "C" { #endif - /// \deprecated Use MaaToolkitPostFindDevice() and MaaToolkitWaitForFindDeviceToComplete() instead. + /// \deprecated Use MaaToolkitPostFindDevice() and MaaToolkitWaitForFindDeviceToComplete() + /// instead. MAA_DEPRECATED MAA_TOOLKIT_API MaaSize MaaToolkitFindDevice(); - /// \deprecated Use MaaToolkitPostFindDeviceWithAdb() and MaaToolkitWaitForFindDeviceToComplete() instead. + /// \deprecated Use MaaToolkitPostFindDeviceWithAdb() and + /// MaaToolkitWaitForFindDeviceToComplete() instead. MAA_DEPRECATED MAA_TOOLKIT_API MaaSize MaaToolkitFindDeviceWithAdb(MaaStringView adb_path); /** diff --git a/sample/cpp/main.cpp b/sample/cpp/main.cpp index 6ddf6b629..ddc7cba77 100644 --- a/sample/cpp/main.cpp +++ b/sample/cpp/main.cpp @@ -153,4 +153,4 @@ void register_my_action_by_exec_agent(MaaInstanceHandle maa_handle) "MyAct", "Python.exe", R"(["sample\\python\\exec_agent\\my_action.py"])"); -} +} \ No newline at end of file diff --git a/source/MaaAdbControlUnit/Base/ProcessArgvGenerator.cpp b/source/MaaAdbControlUnit/Base/ProcessArgvGenerator.cpp index 88fb3a071..f6a952722 100644 --- a/source/MaaAdbControlUnit/Base/ProcessArgvGenerator.cpp +++ b/source/MaaAdbControlUnit/Base/ProcessArgvGenerator.cpp @@ -21,6 +21,7 @@ std::optional ProcessArgvGenerator::create(const json::arr return ProcessArgvGenerator(std::move(raw)); } + std::optional ProcessArgvGenerator::gen(const Replacement& replacement) const { diff --git a/source/MaaAdbControlUnit/Base/ProcessArgvGenerator.h b/source/MaaAdbControlUnit/Base/ProcessArgvGenerator.h index a6a9595e0..49d140491 100644 --- a/source/MaaAdbControlUnit/Base/ProcessArgvGenerator.h +++ b/source/MaaAdbControlUnit/Base/ProcessArgvGenerator.h @@ -25,6 +25,7 @@ class ProcessArgvGenerator static std::optional create(const json::array& arr); ProcessArgvGenerator() = default; + explicit ProcessArgvGenerator(std::vector raw) : raw_(std::move(raw)) { diff --git a/source/MaaAdbControlUnit/Base/UnitBase.h b/source/MaaAdbControlUnit/Base/UnitBase.h index af2640e7d..1edaff60b 100644 --- a/source/MaaAdbControlUnit/Base/UnitBase.h +++ b/source/MaaAdbControlUnit/Base/UnitBase.h @@ -48,6 +48,7 @@ class ScreencapBase : public UnitBase public: virtual bool init(int swidth, int sheight) = 0; virtual void deinit() = 0; + virtual bool set_wh(int swidth, int sheight) { return screencap_helper_.set_wh(swidth, sheight); diff --git a/source/MaaAdbControlUnit/Input/AdbInput.h b/source/MaaAdbControlUnit/Input/AdbInput.h index de25affc1..3ab6404b6 100644 --- a/source/MaaAdbControlUnit/Input/AdbInput.h +++ b/source/MaaAdbControlUnit/Input/AdbInput.h @@ -14,7 +14,9 @@ class AdbTapInput : public TouchInputBase public: // from TouchInputAPI virtual bool init(int swidth, int sheight, int orientation) override; + virtual void deinit() override {} + virtual bool set_wh(int swidth, int sheight, int orientation) override; virtual bool click(int x, int y) override; @@ -39,6 +41,7 @@ class AdbKeyInput : public KeyInputBase public: // from KeyInputAPI virtual bool init() override { return true; } + virtual void deinit() override {} virtual bool press_key(int key) override; diff --git a/source/MaaAdbControlUnit/Input/MaatouchInput.h b/source/MaaAdbControlUnit/Input/MaatouchInput.h index 886d0a71a..2f456e261 100644 --- a/source/MaaAdbControlUnit/Input/MaatouchInput.h +++ b/source/MaaAdbControlUnit/Input/MaatouchInput.h @@ -19,6 +19,7 @@ class MaatouchInput TouchInputBase::children_.emplace_back(invoke_app_); KeyInputBase::children_.emplace_back(invoke_app_); } + virtual ~MaatouchInput() override = default; public: // from UnitBase @@ -29,6 +30,7 @@ class MaatouchInput TouchInputBase::set_replacement(argv_replace); KeyInputBase::set_replacement(argv_replace); } + virtual void merge_replacement(UnitBase::Replacement argv_replace, bool _override = true) override { @@ -38,7 +40,9 @@ class MaatouchInput public: // from TouchInputAPI virtual bool init(int swidth, int sheight, int orientation) override; + virtual void deinit() override {} + virtual bool set_wh(int swidth, int sheight, int orientation) override; public: // from KeyInputAPI @@ -51,6 +55,7 @@ class MaatouchInput { return _screen_to_touch(x, y); } + virtual std::pair screen_to_touch(double x, double y) override { return _screen_to_touch(x, y); diff --git a/source/MaaAdbControlUnit/Input/MinitouchInput.h b/source/MaaAdbControlUnit/Input/MinitouchInput.h index 5e06bdadf..344acca01 100644 --- a/source/MaaAdbControlUnit/Input/MinitouchInput.h +++ b/source/MaaAdbControlUnit/Input/MinitouchInput.h @@ -16,6 +16,7 @@ class MinitouchInput : public MtouchHelper { children_.emplace_back(invoke_app_); } + virtual ~MinitouchInput() override = default; public: // from UnitBase @@ -23,7 +24,9 @@ class MinitouchInput : public MtouchHelper public: // from TouchInputAPI virtual bool init(int swidth, int sheight, int orientation) override; + virtual void deinit() override {} + virtual bool set_wh(int swidth, int sheight, int orientation) override; protected: // from MtouchHelper @@ -31,6 +34,7 @@ class MinitouchInput : public MtouchHelper { return _screen_to_touch(x, y); } + virtual std::pair screen_to_touch(double x, double y) override { return _screen_to_touch(x, y); diff --git a/source/MaaAdbControlUnit/Manager/ControlUnitMgr.h b/source/MaaAdbControlUnit/Manager/ControlUnitMgr.h index b487cc7d6..2df6bf193 100644 --- a/source/MaaAdbControlUnit/Manager/ControlUnitMgr.h +++ b/source/MaaAdbControlUnit/Manager/ControlUnitMgr.h @@ -50,7 +50,9 @@ class ControlUnitMgr : public ControlUnitAPI void set_replacement(const UnitBase::Replacement& replacement); void set_touch_input_obj(std::shared_ptr obj) { touch_input_ = std::move(obj); } + void set_key_input_obj(std::shared_ptr obj) { key_input_ = std::move(obj); } + void set_screencap_obj(std::shared_ptr obj) { screencap_ = std::move(obj); } private: diff --git a/source/MaaAdbControlUnit/Screencap/Encode.h b/source/MaaAdbControlUnit/Screencap/Encode.h index 0dd167c9d..22e969e2b 100644 --- a/source/MaaAdbControlUnit/Screencap/Encode.h +++ b/source/MaaAdbControlUnit/Screencap/Encode.h @@ -16,6 +16,7 @@ class ScreencapEncode : public ScreencapBase public: // from ScreencapAPI virtual bool init(int swidth, int sheight) override; + virtual void deinit() override {} virtual std::optional screencap() override; diff --git a/source/MaaAdbControlUnit/Screencap/EncodeToFile.h b/source/MaaAdbControlUnit/Screencap/EncodeToFile.h index f6fb4f709..2712c1b42 100644 --- a/source/MaaAdbControlUnit/Screencap/EncodeToFile.h +++ b/source/MaaAdbControlUnit/Screencap/EncodeToFile.h @@ -16,6 +16,7 @@ class ScreencapEncodeToFileAndPull : public ScreencapBase public: // from ScreencapAPI virtual bool init(int swidth, int sheight) override; + virtual void deinit() override {} virtual std::optional screencap() override; diff --git a/source/MaaAdbControlUnit/Screencap/Minicap/MinicapBase.h b/source/MaaAdbControlUnit/Screencap/Minicap/MinicapBase.h index 0c6df15a8..68cb3bc60 100644 --- a/source/MaaAdbControlUnit/Screencap/Minicap/MinicapBase.h +++ b/source/MaaAdbControlUnit/Screencap/Minicap/MinicapBase.h @@ -17,6 +17,7 @@ class MinicapBase : public ScreencapBase children_.emplace_back(binary_); children_.emplace_back(library_); } + virtual ~MinicapBase() override = default; public: // from UnitBase diff --git a/source/MaaAdbControlUnit/Screencap/Minicap/MinicapDirect.cpp b/source/MaaAdbControlUnit/Screencap/Minicap/MinicapDirect.cpp index 013253e1c..67cf28e88 100644 --- a/source/MaaAdbControlUnit/Screencap/Minicap/MinicapDirect.cpp +++ b/source/MaaAdbControlUnit/Screencap/Minicap/MinicapDirect.cpp @@ -23,4 +23,5 @@ std::optional MinicapDirect::screencap() *res, std::bind(&ScreencapHelper::trunc_decode_jpg, &screencap_helper_, std::placeholders::_1)); } + MAA_CTRL_UNIT_NS_END \ No newline at end of file diff --git a/source/MaaAdbControlUnit/Screencap/Minicap/MinicapDirect.h b/source/MaaAdbControlUnit/Screencap/Minicap/MinicapDirect.h index 93720d9f9..4df37aa24 100644 --- a/source/MaaAdbControlUnit/Screencap/Minicap/MinicapDirect.h +++ b/source/MaaAdbControlUnit/Screencap/Minicap/MinicapDirect.h @@ -13,6 +13,7 @@ class MinicapDirect : public MinicapBase public: // from ScreencapAPI virtual void deinit() override {} + virtual std::optional screencap() override; }; diff --git a/source/MaaAdbControlUnit/Screencap/RawWithGzip.h b/source/MaaAdbControlUnit/Screencap/RawWithGzip.h index 1e8920156..83fb406b8 100644 --- a/source/MaaAdbControlUnit/Screencap/RawWithGzip.h +++ b/source/MaaAdbControlUnit/Screencap/RawWithGzip.h @@ -16,6 +16,7 @@ class ScreencapRawWithGzip : public ScreencapBase public: // from ScreencapAPI virtual bool init(int swidth, int sheight) override; + virtual void deinit() override {} virtual std::optional screencap() override; diff --git a/source/MaaAdbControlUnit/Screencap/ScreencapHelper.h b/source/MaaAdbControlUnit/Screencap/ScreencapHelper.h index a00aa9a60..5306891fe 100644 --- a/source/MaaAdbControlUnit/Screencap/ScreencapHelper.h +++ b/source/MaaAdbControlUnit/Screencap/ScreencapHelper.h @@ -13,7 +13,9 @@ class ScreencapHelper { public: bool set_wh(int w, int h); + int get_w() const { return width_; } + int get_h() const { return height_; } std::optional process_data( diff --git a/source/MaaDbgControlUnit/CarouselImage/CarouselImage.h b/source/MaaDbgControlUnit/CarouselImage/CarouselImage.h index 2f840d994..0691e0dc9 100644 --- a/source/MaaDbgControlUnit/CarouselImage/CarouselImage.h +++ b/source/MaaDbgControlUnit/CarouselImage/CarouselImage.h @@ -15,6 +15,7 @@ class CarouselImage : public ControlUnitAPI : path_(std::move(path)) { } + virtual ~CarouselImage() = default; public: // from ControlUnitAPI diff --git a/source/MaaDbgControlUnit/ReplayRecording/Record.h b/source/MaaDbgControlUnit/ReplayRecording/Record.h index 36dc75dfa..521871cb5 100644 --- a/source/MaaDbgControlUnit/ReplayRecording/Record.h +++ b/source/MaaDbgControlUnit/ReplayRecording/Record.h @@ -26,11 +26,13 @@ struct Record cv::Size resolution; std::string version; }; + struct ClickParam { int x = 0; int y = 0; }; + struct SwipeParam { int x1 = 0; @@ -39,6 +41,7 @@ struct Record int y2 = 0; int duration = 0; }; + struct TouchParam { int contact = 0; @@ -46,18 +49,22 @@ struct Record int y = 0; int pressure = 0; }; + struct PressKeyParam { int keycode = 0; }; + struct InputTextParam { std::string text; }; + struct AppParam { std::string package; }; + struct ScreencapParam { std::filesystem::path path; diff --git a/source/MaaDbgControlUnit/ReplayRecording/ReplayRecording.h b/source/MaaDbgControlUnit/ReplayRecording/ReplayRecording.h index ae352900a..be2ed33e1 100644 --- a/source/MaaDbgControlUnit/ReplayRecording/ReplayRecording.h +++ b/source/MaaDbgControlUnit/ReplayRecording/ReplayRecording.h @@ -16,6 +16,7 @@ class ReplayRecording : public ControlUnitAPI : recording_(std::move(recording)) { } + virtual ~ReplayRecording() = default; public: // from ControlUnitAPI diff --git a/source/MaaFramework/API/MaaInstance.cpp b/source/MaaFramework/API/MaaInstance.cpp index 8a710cb6a..a1970d53a 100644 --- a/source/MaaFramework/API/MaaInstance.cpp +++ b/source/MaaFramework/API/MaaInstance.cpp @@ -254,4 +254,4 @@ MaaControllerHandle MaaGetController(MaaInstanceHandle inst) return nullptr; } return inst->controller(); -} +} \ No newline at end of file diff --git a/source/MaaFramework/API/MaaTypes.h b/source/MaaFramework/API/MaaTypes.h index 21c56967f..ff2aff2cf 100644 --- a/source/MaaFramework/API/MaaTypes.h +++ b/source/MaaFramework/API/MaaTypes.h @@ -14,6 +14,7 @@ struct MaaInstanceSink { public: virtual ~MaaInstanceSink() = default; + virtual void post_stop() {} }; diff --git a/source/MaaFramework/Base/MessageNotifier.hpp b/source/MaaFramework/Base/MessageNotifier.hpp index 42841997c..aff06d36f 100644 --- a/source/MaaFramework/Base/MessageNotifier.hpp +++ b/source/MaaFramework/Base/MessageNotifier.hpp @@ -17,6 +17,7 @@ class MessageNotifier : public NonCopyable , callback_arg_(callback_arg) { } + void notify(std::string_view msg, const json::value& details = json::value()) { LogFunc << VAR_VOIDP(callback_) << VAR_VOIDP(callback_arg_) << VAR(msg) << VAR(details); diff --git a/source/MaaFramework/Buffer/ImageBuffer.hpp b/source/MaaFramework/Buffer/ImageBuffer.hpp index a128cae3f..bb23ab572 100644 --- a/source/MaaFramework/Buffer/ImageBuffer.hpp +++ b/source/MaaFramework/Buffer/ImageBuffer.hpp @@ -16,6 +16,7 @@ class ImageBuffer : public MaaImageBuffer virtual ~ImageBuffer() override = default; virtual bool empty() const override { return image_.empty(); } + virtual void clear() override { image_.release(); @@ -23,8 +24,11 @@ class ImageBuffer : public MaaImageBuffer } virtual void* raw_data() const override { return image_.data; } + virtual int32_t width() const override { return image_.cols; } + virtual int32_t height() const override { return image_.rows; } + virtual int32_t type() const override { return image_.type(); } virtual uint8_t* encoded() override diff --git a/source/MaaFramework/Buffer/StringBuffer.hpp b/source/MaaFramework/Buffer/StringBuffer.hpp index 1a48d0262..bad37209a 100644 --- a/source/MaaFramework/Buffer/StringBuffer.hpp +++ b/source/MaaFramework/Buffer/StringBuffer.hpp @@ -11,9 +11,11 @@ class StringBuffer : public MaaStringBuffer virtual ~StringBuffer() override = default; virtual bool empty() const override { return str_.empty(); } + virtual void clear() override { str_.clear(); } virtual const char* data() const override { return str_.data(); } + virtual size_t size() const override { return str_.size(); } virtual const std::string& get() const override { return str_; } diff --git a/source/MaaFramework/Controller/ControllerAgent.cpp b/source/MaaFramework/Controller/ControllerAgent.cpp index f8f331b04..0c5c913df 100644 --- a/source/MaaFramework/Controller/ControllerAgent.cpp +++ b/source/MaaFramework/Controller/ControllerAgent.cpp @@ -934,4 +934,4 @@ std::ostream& operator<<(std::ostream& os, const Action& action) return os; } -MAA_CTRL_NS_END +MAA_CTRL_NS_END \ No newline at end of file diff --git a/source/MaaFramework/Controller/ControllerAgent.h b/source/MaaFramework/Controller/ControllerAgent.h index 845572a5c..46613b1e9 100644 --- a/source/MaaFramework/Controller/ControllerAgent.h +++ b/source/MaaFramework/Controller/ControllerAgent.h @@ -23,6 +23,7 @@ struct ClickParam int x = 0; int y = 0; }; + struct SwipeParam { int x1 = 0; @@ -31,6 +32,7 @@ struct SwipeParam int y2 = 0; int duration = 0; }; + struct TouchParam { int contact = 0; @@ -38,14 +40,17 @@ struct TouchParam int y = 0; int pressure = 0; }; + struct PressKeyParam { int keycode = 0; }; + struct InputTextParam { std::string text; }; + struct AppParam { std::string package; diff --git a/source/MaaFramework/Instance/CacheMgr.hpp b/source/MaaFramework/Instance/CacheMgr.hpp index 22dc98079..6f476f393 100644 --- a/source/MaaFramework/Instance/CacheMgr.hpp +++ b/source/MaaFramework/Instance/CacheMgr.hpp @@ -16,6 +16,7 @@ class CacheMgr : public NonCopyable public: CacheMgr() = default; CacheMgr(CacheMgr&&) = default; + CacheMgr(Equal equal) : equal_(std::move(equal)) { diff --git a/source/MaaFramework/Instance/InstanceMgr.cpp b/source/MaaFramework/Instance/InstanceMgr.cpp index fa34fbe98..87aa24216 100644 --- a/source/MaaFramework/Instance/InstanceMgr.cpp +++ b/source/MaaFramework/Instance/InstanceMgr.cpp @@ -333,4 +333,4 @@ bool InstanceMgr::check_stop() return true; } -MAA_NS_END +MAA_NS_END \ No newline at end of file diff --git a/source/MaaFramework/Option/GlobalOptionMgr.cpp b/source/MaaFramework/Option/GlobalOptionMgr.cpp index 83cbf9b20..b8b29a6b3 100644 --- a/source/MaaFramework/Option/GlobalOptionMgr.cpp +++ b/source/MaaFramework/Option/GlobalOptionMgr.cpp @@ -127,4 +127,4 @@ bool GlobalOptionMgr::set_debug_message(MaaOptionValue value, MaaOptionValueSize return true; } -MAA_NS_END +MAA_NS_END \ No newline at end of file diff --git a/source/MaaFramework/Option/GlobalOptionMgr.h b/source/MaaFramework/Option/GlobalOptionMgr.h index 7143eb804..51dc8d545 100644 --- a/source/MaaFramework/Option/GlobalOptionMgr.h +++ b/source/MaaFramework/Option/GlobalOptionMgr.h @@ -20,9 +20,13 @@ class GlobalOptionMgr : public SingletonHolder public: const std::filesystem::path& log_dir() const { return log_dir_; } + bool save_draw() const { return save_draw_; } + bool show_hit_draw() const { return show_hit_draw_; } + bool recording() const { return recording_; } + bool debug_message() const { return debug_message_; } private: diff --git a/source/MaaFramework/Resource/PipelineResMgr.h b/source/MaaFramework/Resource/PipelineResMgr.h index fd44191ed..4f26ba58e 100644 --- a/source/MaaFramework/Resource/PipelineResMgr.h +++ b/source/MaaFramework/Resource/PipelineResMgr.h @@ -25,7 +25,9 @@ class PipelineResMgr : public NonCopyable const TaskData& get_task_data(const std::string& task_name); const std::vector& get_paths() const { return paths_; } + const TaskDataMap& get_task_data_map() const { return task_data_map_; } + std::vector get_task_list() const; public: diff --git a/source/MaaFramework/Resource/ResourceMgr.h b/source/MaaFramework/Resource/ResourceMgr.h index 3e656eb5b..9f49a8421 100644 --- a/source/MaaFramework/Resource/ResourceMgr.h +++ b/source/MaaFramework/Resource/ResourceMgr.h @@ -37,12 +37,19 @@ class ResourceMgr : public MaaResourceAPI public: const auto& pipeline_res() const { return pipeline_res_; } + auto& pipeline_res() { return pipeline_res_; } + const auto& ocr_res() const { return ocr_res_; } + auto& ocr_res() { return ocr_res_; } + const auto& onnx_res() const { return onnx_res_; } + auto& onnx_res() { return onnx_res_; } + const auto& template_res() const { return template_res_; } + auto& template_res() { return template_res_; } private: diff --git a/source/MaaFramework/Task/Actuator.h b/source/MaaFramework/Task/Actuator.h index f31f21b41..50bca5951 100644 --- a/source/MaaFramework/Task/Actuator.h +++ b/source/MaaFramework/Task/Actuator.h @@ -47,7 +47,9 @@ class Actuator { return inst_ ? inst_->inter_controller() : nullptr; } + InstanceStatus* status() { return inst_ ? inst_->inter_status() : nullptr; } + void sleep(unsigned ms) const; void sleep(std::chrono::milliseconds ms) const; diff --git a/source/MaaFramework/Task/PipelineTask.h b/source/MaaFramework/Task/PipelineTask.h index c353f35cb..3454e88b5 100644 --- a/source/MaaFramework/Task/PipelineTask.h +++ b/source/MaaFramework/Task/PipelineTask.h @@ -32,7 +32,9 @@ class PipelineTask : public MaaInstanceSink const std::string& entry() const { return entry_; } bool run(); + void set_taskid(int64_t id) { task_id_ = id; } + bool set_param(const json::value& param); private: @@ -61,11 +63,14 @@ class PipelineTask : public MaaInstanceSink private: MAA_RES_NS::ResourceMgr* resource() { return inst_ ? inst_->inter_resource() : nullptr; } + MAA_CTRL_NS::ControllerAgent* controller() { return inst_ ? inst_->inter_controller() : nullptr; } + InstanceStatus* status() { return inst_ ? inst_->inter_status() : nullptr; } + void notify(std::string_view msg, json::value detail = json::value()) { if (inst_) { @@ -74,6 +79,7 @@ class PipelineTask : public MaaInstanceSink } bool need_to_stop() const { return need_to_stop_; } + bool debug_mode() const; json::object basic_info(); std::filesystem::path dump_image(const cv::Mat& image) const; diff --git a/source/MaaFramework/Task/Recognizer.h b/source/MaaFramework/Task/Recognizer.h index cf5844a8a..a21160573 100644 --- a/source/MaaFramework/Task/Recognizer.h +++ b/source/MaaFramework/Task/Recognizer.h @@ -63,6 +63,7 @@ class Recognizer private: InstanceStatus* status() { return inst_ ? inst_->inter_status() : nullptr; } + MAA_RES_NS::ResourceMgr* resource() { return inst_ ? inst_->inter_resource() : nullptr; } private: diff --git a/source/MaaFramework/Task/SyncContext.h b/source/MaaFramework/Task/SyncContext.h index 4d35c592f..71f856459 100644 --- a/source/MaaFramework/Task/SyncContext.h +++ b/source/MaaFramework/Task/SyncContext.h @@ -14,8 +14,7 @@ MAA_TASK_NS_BEGIN -class SyncContext - : public MaaSyncContextAPI +class SyncContext : public MaaSyncContextAPI { public: explicit SyncContext(InstanceInternalAPI* inst); @@ -47,10 +46,12 @@ class SyncContext virtual json::value task_result(const std::string& task_name) const override; virtual MaaInstanceHandle instance() override { return dynamic_cast(inst_); } + virtual MaaResourceHandle resource() override { return instance() ? instance()->resource() : nullptr; } + virtual MaaControllerHandle controller() override { return instance() ? instance()->controller() : nullptr; diff --git a/source/MaaFramework/Vision/ColorMatcher.h b/source/MaaFramework/Vision/ColorMatcher.h index 0f4fb7e33..fd53aaa58 100644 --- a/source/MaaFramework/Vision/ColorMatcher.h +++ b/source/MaaFramework/Vision/ColorMatcher.h @@ -16,10 +16,12 @@ class ColorMatcher : public VisionBase MEO_JSONIZATION(box, count); }; + using ResultsVec = std::vector; public: void set_param(ColorMatcherParam param) { param_ = std::move(param); } + std::pair analyze() const; private: diff --git a/source/MaaFramework/Vision/CustomRecognizer.h b/source/MaaFramework/Vision/CustomRecognizer.h index aa4f249f4..fa09dd445 100644 --- a/source/MaaFramework/Vision/CustomRecognizer.h +++ b/source/MaaFramework/Vision/CustomRecognizer.h @@ -27,6 +27,7 @@ class CustomRecognizer : public VisionBase InstanceInternalAPI* inst); void set_param(CustomRecognizerParam param) { param_ = std::move(param); } + std::optional analyze() const; private: diff --git a/source/MaaFramework/Vision/FeatureMatcher.h b/source/MaaFramework/Vision/FeatureMatcher.h index 7813ac9de..2b9e1412b 100644 --- a/source/MaaFramework/Vision/FeatureMatcher.h +++ b/source/MaaFramework/Vision/FeatureMatcher.h @@ -30,6 +30,7 @@ class FeatureMatcher : public VisionBase public: void set_template(std::shared_ptr templ) { template_ = std::move(templ); } + void set_param(FeatureMatcherParam param) { param_ = std::move(param); } std::pair analyze() const; diff --git a/source/MaaFramework/Vision/NeuralNetworkClassifier.h b/source/MaaFramework/Vision/NeuralNetworkClassifier.h index 1965cb3a7..7d3153b1f 100644 --- a/source/MaaFramework/Vision/NeuralNetworkClassifier.h +++ b/source/MaaFramework/Vision/NeuralNetworkClassifier.h @@ -25,11 +25,14 @@ class NeuralNetworkClassifier : public VisionBase MEO_JSONIZATION(cls_index, label, box, score, raw, probs); }; + using ResultsVec = std::vector; public: void set_param(NeuralNetworkClassifierParam param) { param_ = std::move(param); } + void set_session(std::shared_ptr session) { session_ = std::move(session); } + std::pair analyze() const; private: diff --git a/source/MaaFramework/Vision/NeuralNetworkDetector.h b/source/MaaFramework/Vision/NeuralNetworkDetector.h index bbbb31005..a2b3f049f 100644 --- a/source/MaaFramework/Vision/NeuralNetworkDetector.h +++ b/source/MaaFramework/Vision/NeuralNetworkDetector.h @@ -23,11 +23,14 @@ class NeuralNetworkDetector : public VisionBase MEO_JSONIZATION(cls_index, label, box, score); }; + using ResultsVec = std::vector; public: void set_session(std::shared_ptr session) { session_ = std::move(session); } + void set_param(NeuralNetworkDetectorParam param) { param_ = std::move(param); } + std::pair analyze() const; private: diff --git a/source/MaaFramework/Vision/OCRer.h b/source/MaaFramework/Vision/OCRer.h index e3456bc8c..e7ddb3ff4 100644 --- a/source/MaaFramework/Vision/OCRer.h +++ b/source/MaaFramework/Vision/OCRer.h @@ -30,6 +30,7 @@ class OCRer : public VisionBase MEO_JSONIZATION(text, box, score); }; + using ResultsVec = std::vector; public: @@ -42,8 +43,11 @@ class OCRer : public VisionBase recer_ = std::move(recer); ocrer_ = std::move(ocrer); } + void set_status(InstanceStatus* status) { status_ = status; } + void set_param(OCRerParam param) { param_ = std::move(param); } + std::pair analyze() const; private: diff --git a/source/MaaFramework/Vision/TemplateComparator.h b/source/MaaFramework/Vision/TemplateComparator.h index aa51624e6..957e5426a 100644 --- a/source/MaaFramework/Vision/TemplateComparator.h +++ b/source/MaaFramework/Vision/TemplateComparator.h @@ -15,12 +15,14 @@ class TemplateComparator MEO_JSONIZATION(box, score); }; + using ResultsVec = std::vector; public: TemplateComparator() = default; void set_param(TemplateComparatorParam param) { param_ = std::move(param); } + ResultsVec analyze(const cv::Mat& lhs, const cv::Mat& rhs) const; private: diff --git a/source/MaaFramework/Vision/TemplateMatcher.h b/source/MaaFramework/Vision/TemplateMatcher.h index c5cb1874f..d5da69396 100644 --- a/source/MaaFramework/Vision/TemplateMatcher.h +++ b/source/MaaFramework/Vision/TemplateMatcher.h @@ -19,6 +19,7 @@ class TemplateMatcher : public VisionBase MEO_JSONIZATION(box, score); }; + using ResultsVec = std::vector; public: @@ -26,7 +27,9 @@ class TemplateMatcher : public VisionBase { templates_ = std::move(templates); } + void set_param(TemplateMatcherParam param) { param_ = std::move(param); } + std::pair analyze() const; private: diff --git a/source/MaaProjectInterface/CLI/main.cpp b/source/MaaProjectInterface/CLI/main.cpp index e0d48bbc9..bbbb4a3aa 100644 --- a/source/MaaProjectInterface/CLI/main.cpp +++ b/source/MaaProjectInterface/CLI/main.cpp @@ -36,4 +36,4 @@ int main(int argc, char** argv) interactor.interact(); return 0; -} +} \ No newline at end of file diff --git a/source/MaaToolkit/API/MaaToolkitConfig.cpp b/source/MaaToolkit/API/MaaToolkitConfig.cpp index 4ef10e7d0..0c9201c71 100644 --- a/source/MaaToolkit/API/MaaToolkitConfig.cpp +++ b/source/MaaToolkit/API/MaaToolkitConfig.cpp @@ -34,4 +34,4 @@ MaaBool MaaToolkitUninit() LogWarn << __FUNCTION__ << "is deprecated, don't use it."; return true; -} +} \ No newline at end of file diff --git a/source/MaaToolkit/API/MaaToolkitDevice.cpp b/source/MaaToolkit/API/MaaToolkitDevice.cpp index 44f5a3777..10ed48c8a 100644 --- a/source/MaaToolkit/API/MaaToolkitDevice.cpp +++ b/source/MaaToolkit/API/MaaToolkitDevice.cpp @@ -93,4 +93,4 @@ MaaAdbControllerType MaaToolkitGetDeviceAdbControllerType(MaaSize index) MaaStringView MaaToolkitGetDeviceAdbConfig(MaaSize index) { return device_mgr.get_devices()->at(index).adb_config.c_str(); -} +} \ No newline at end of file diff --git a/source/MaaToolkit/API/MaaToolkitExecAgent.cpp b/source/MaaToolkit/API/MaaToolkitExecAgent.cpp index cc9329869..da9ac12da 100644 --- a/source/MaaToolkit/API/MaaToolkitExecAgent.cpp +++ b/source/MaaToolkit/API/MaaToolkitExecAgent.cpp @@ -15,6 +15,7 @@ enum class ExecutorType Recognizer, Action, }; + std::ostream& operator<<(std::ostream& os, ExecutorType type) { switch (type) { diff --git a/source/MaaToolkit/AdbDevice/DeviceAPI.h b/source/MaaToolkit/AdbDevice/DeviceAPI.h index 7a33d40c6..f6741c358 100644 --- a/source/MaaToolkit/AdbDevice/DeviceAPI.h +++ b/source/MaaToolkit/AdbDevice/DeviceAPI.h @@ -1,8 +1,8 @@ #pragma once +#include #include #include -#include #include #include "Conf/Conf.h" @@ -34,6 +34,7 @@ struct Device return adb_config < rhs.adb_config; } } + bool operator==(const Device& rhs) const { return name == rhs.name && adb_path == rhs.adb_path && adb_serial == rhs.adb_serial diff --git a/source/MaaToolkit/AdbDevice/DeviceMgr.cpp b/source/MaaToolkit/AdbDevice/DeviceMgr.cpp index 1b9fe27b0..4503e0d23 100644 --- a/source/MaaToolkit/AdbDevice/DeviceMgr.cpp +++ b/source/MaaToolkit/AdbDevice/DeviceMgr.cpp @@ -168,4 +168,4 @@ MaaAdbControllerType DeviceMgr::check_adb_controller_type( return kInputType | kScreencapType; } -MAA_TOOLKIT_NS_END +MAA_TOOLKIT_NS_END \ No newline at end of file diff --git a/source/MaaToolkit/AdbDevice/DeviceMgrMacOS.cpp b/source/MaaToolkit/AdbDevice/DeviceMgrMacOS.cpp index 60188f1ae..1e5ad6690 100644 --- a/source/MaaToolkit/AdbDevice/DeviceMgrMacOS.cpp +++ b/source/MaaToolkit/AdbDevice/DeviceMgrMacOS.cpp @@ -151,4 +151,4 @@ std::filesystem::path get_adb_path(const EmulatorConstantData& emulator, os_pid MAA_TOOLKIT_NS_END -#endif +#endif \ No newline at end of file diff --git a/source/MaaToolkit/ExecAgent/ExecArgConverter.cpp b/source/MaaToolkit/ExecAgent/ExecArgConverter.cpp index 26af33f8a..558ece202 100644 --- a/source/MaaToolkit/ExecAgent/ExecArgConverter.cpp +++ b/source/MaaToolkit/ExecAgent/ExecArgConverter.cpp @@ -20,6 +20,7 @@ std::string ExecArgConverter::sync_context_to_arg(MaaSyncContextHandle sync_cont sync_contexts_.insert_or_assign(uuid, sync_context); return uuid; } + MaaSyncContextHandle ExecArgConverter::arg_to_sync_context(const std::string& arg) const { auto it = sync_contexts_.find(arg); diff --git a/source/MaaToolkit/ExecAgent/RecognizerExecAgent.h b/source/MaaToolkit/ExecAgent/RecognizerExecAgent.h index 6725694c1..3335b9ecb 100644 --- a/source/MaaToolkit/ExecAgent/RecognizerExecAgent.h +++ b/source/MaaToolkit/ExecAgent/RecognizerExecAgent.h @@ -32,6 +32,7 @@ class RecognizerExecAgent final cv::Rect box {}; std::string detail; }; + std::optional analyze( ExecData& data, MaaSyncContextHandle sync_context, diff --git a/source/MaaToolkit/Win32Window/Win32WindowFinder.h b/source/MaaToolkit/Win32Window/Win32WindowFinder.h index 3deef2895..e18414153 100644 --- a/source/MaaToolkit/Win32Window/Win32WindowFinder.h +++ b/source/MaaToolkit/Win32Window/Win32WindowFinder.h @@ -25,6 +25,7 @@ class Win32WindowFinder virtual size_t find_window(std::string_view class_name, std::string_view window_name) override; virtual size_t search_window(std::string_view class_name, std::string_view window_name) override; + virtual std::vector found_window() const override { return windows_; } virtual MaaWin32Hwnd get_cursor_window() const override; diff --git a/source/MaaUtils/IOStream/ChildPipeIOStream.cpp b/source/MaaUtils/IOStream/ChildPipeIOStream.cpp index 5ce68bb07..71466ab21 100644 --- a/source/MaaUtils/IOStream/ChildPipeIOStream.cpp +++ b/source/MaaUtils/IOStream/ChildPipeIOStream.cpp @@ -83,4 +83,4 @@ std::string ChildPipeIOStream::read_once(size_t max_count) return std::string(buffer_.get(), read); } -MAA_NS_END +MAA_NS_END \ No newline at end of file diff --git a/source/MaaWin32ControlUnit/Input/SendMessageInput.h b/source/MaaWin32ControlUnit/Input/SendMessageInput.h index b03ee569f..6be73d993 100644 --- a/source/MaaWin32ControlUnit/Input/SendMessageInput.h +++ b/source/MaaWin32ControlUnit/Input/SendMessageInput.h @@ -16,6 +16,7 @@ class SendMessageInput : hwnd_(hwnd) { } + virtual ~SendMessageInput() override = default; public: // from TouchInputBase diff --git a/source/MaaWin32ControlUnit/Manager/ControlUnitMgr.h b/source/MaaWin32ControlUnit/Manager/ControlUnitMgr.h index 8e04a1570..3e3064793 100644 --- a/source/MaaWin32ControlUnit/Manager/ControlUnitMgr.h +++ b/source/MaaWin32ControlUnit/Manager/ControlUnitMgr.h @@ -44,7 +44,9 @@ class ControlUnitMgr : public ControlUnitAPI bool parse(const json::value& config); void set_touch_input_obj(std::shared_ptr obj) { touch_input_ = std::move(obj); } + void set_key_input_obj(std::shared_ptr obj) { key_input_ = std::move(obj); } + void set_screencap_obj(std::shared_ptr obj) { screencap_ = std::move(obj); } private: diff --git a/source/MaaWin32ControlUnit/Screencap/BackBufferScreencap.h b/source/MaaWin32ControlUnit/Screencap/BackBufferScreencap.h index 01d07d2f3..993d67dd9 100644 --- a/source/MaaWin32ControlUnit/Screencap/BackBufferScreencap.h +++ b/source/MaaWin32ControlUnit/Screencap/BackBufferScreencap.h @@ -13,6 +13,7 @@ class BackBufferScreencap : public ScreencapBase : hwnd_(hwnd) { } + virtual ~BackBufferScreencap() override; public: // from ScreencapBase diff --git a/source/MaaWin32ControlUnit/Screencap/FramePoolScreencap.h b/source/MaaWin32ControlUnit/Screencap/FramePoolScreencap.h index 764772b43..faae7ef66 100644 --- a/source/MaaWin32ControlUnit/Screencap/FramePoolScreencap.h +++ b/source/MaaWin32ControlUnit/Screencap/FramePoolScreencap.h @@ -29,6 +29,7 @@ class FramePoolScreencap : public ScreencapBase : hwnd_(hwnd) { } + virtual ~FramePoolScreencap() override; public: // from ScreencapBase diff --git a/source/MaaWin32ControlUnit/Screencap/GdiScreencap.h b/source/MaaWin32ControlUnit/Screencap/GdiScreencap.h index a5d8a32bc..4c4b3e9f2 100644 --- a/source/MaaWin32ControlUnit/Screencap/GdiScreencap.h +++ b/source/MaaWin32ControlUnit/Screencap/GdiScreencap.h @@ -12,6 +12,7 @@ class GdiScreencap : public ScreencapBase : hwnd_(hwnd) { } + virtual ~GdiScreencap() override = default; public: // from ScreencapBase diff --git a/source/include/ProjectInterface/Configurator.h b/source/include/ProjectInterface/Configurator.h index bb0a5b753..ae1768227 100644 --- a/source/include/ProjectInterface/Configurator.h +++ b/source/include/ProjectInterface/Configurator.h @@ -22,6 +22,7 @@ class Configurator const auto& interface_data() const { return data_; } const auto& configuration() const { return config_; } + auto& configuration() { return config_; } bool is_first_time_use() const { return first_time_use_; } diff --git a/source/include/Utils/JsonExt.hpp b/source/include/Utils/JsonExt.hpp index 9a839c73b..e6bd7d246 100644 --- a/source/include/Utils/JsonExt.hpp +++ b/source/include/Utils/JsonExt.hpp @@ -20,25 +20,31 @@ class jsonization { return MAA_NS::path_to_utf8_string(path); } + bool check_json(const json::value& json) const { return json.is_string(); } + bool from_json(const json::value& json, std::filesystem::path& path) const { path = MAA_NS::path(json.as_string()); return true; } }; + template <> class jsonization { public: json::value to_json(const std::wstring& wstr) const { return MAA_NS::from_u16(wstr); } + bool check_json(const json::value& json) const { return json.is_string(); } + bool from_json(const json::value& json, std::wstring& wstr) const { wstr = MAA_NS::to_u16(json.as_string()); return true; } }; + template <> class jsonization { @@ -47,10 +53,12 @@ class jsonization { return json::array { rect.x, rect.y, rect.width, rect.height }; } + bool check_json(const json::value& json) const { return json.is>() && json.as_array().size() == 4; } + bool from_json(const json::value& json, cv::Rect& rect) const { auto arr = json.as>(); diff --git a/source/include/Utils/Logger.h b/source/include/Utils/Logger.h index 3e7698323..1902e58f7 100644 --- a/source/include/Utils/Logger.h +++ b/source/include/Utils/Logger.h @@ -17,6 +17,7 @@ class MAA_UTILS_API Logger public: static Logger& get_instance(); + ~Logger() { close(); } Logger(const Logger&) = delete; @@ -29,26 +30,31 @@ class MAA_UTILS_API Logger { return stream(level::fatal, std::forward(args)...); } + template auto error(args_t&&... args) { return stream(level::error, std::forward(args)...); } + template auto warn(args_t&&... args) { return stream(level::warn, std::forward(args)...); } + template auto info(args_t&&... args) { return stream(level::info, std::forward(args)...); } + template auto debug(args_t&&... args) { return stream(level::debug, std::forward(args)...); } + template auto trace(args_t&&... args) { @@ -106,6 +112,7 @@ class LogScopeEnterHelper : stream_(Logger::get_instance().debug(std::forward(args)...)) { } + ~LogScopeEnterHelper() { stream_ << "| enter"; } LogStream& operator()() { return stream_; } @@ -122,6 +129,7 @@ class LogScopeLeaveHelper : args_(std::forward(args)...) { } + ~LogScopeLeaveHelper() { std::apply( diff --git a/source/include/Utils/LoggerUtils.h b/source/include/Utils/LoggerUtils.h index 985f8ab9c..5f042e9ef 100644 --- a/source/include/Utils/LoggerUtils.h +++ b/source/include/Utils/LoggerUtils.h @@ -83,7 +83,9 @@ class StringConverter { return path_to_utf8_string(path); } + std::string operator()(const std::wstring& wstr) const { return from_u16(wstr); } + std::string operator()(const cv::Mat& image) const { if (dumps_dir_.empty()) { @@ -156,8 +158,10 @@ class MAA_UTILS_API LogStream { stream_props(std::forward(args)...); } + LogStream(const LogStream&) = delete; LogStream(LogStream&&) noexcept = default; + ~LogStream() { std::unique_lock lock(mutex_); @@ -179,6 +183,7 @@ class MAA_UTILS_API LogStream } return *this; } + template LogStream& operator,(T&& value) { diff --git a/source/include/Utils/MessageNotifier.hpp b/source/include/Utils/MessageNotifier.hpp index c50b20cdb..d1b948c9a 100644 --- a/source/include/Utils/MessageNotifier.hpp +++ b/source/include/Utils/MessageNotifier.hpp @@ -17,6 +17,7 @@ class MessageNotifier : public NonCopyable , callback_arg_(callback_arg) { } + void notify(std::string_view msg, const json::value& details = json::value()) { LogFunc << VAR_VOIDP(callback_) << VAR_VOIDP(callback_arg_) << VAR(msg) << VAR(details); diff --git a/source/include/Utils/Platform.h b/source/include/Utils/Platform.h index 30a1cb93d..d8ba48932 100644 --- a/source/include/Utils/Platform.h +++ b/source/include/Utils/Platform.h @@ -31,6 +31,7 @@ inline std::filesystem::path path(std::string_view utf8_str) { return std::filesystem::path(to_osstring(utf8_str)).make_preferred(); } + MAA_UTILS_API std::string path_to_utf8_string(const std::filesystem::path& path); MAA_UTILS_API std::string path_to_ansi_string(const std::filesystem::path& path); MAA_UTILS_API std::string path_to_crt_string(const std::filesystem::path& path); @@ -57,6 +58,7 @@ struct ProcessInfo std::string name; bool operator<(const ProcessInfo& rhs) const { return pid < rhs.pid; } + bool operator==(const ProcessInfo& rhs) const { return pid == rhs.pid; } }; diff --git a/source/include/Utils/ScopeLeave.hpp b/source/include/Utils/ScopeLeave.hpp index 3494460d4..9df957251 100644 --- a/source/include/Utils/ScopeLeave.hpp +++ b/source/include/Utils/ScopeLeave.hpp @@ -12,6 +12,7 @@ class ScopeLeaveHelper : func_(func) { } + ~ScopeLeaveHelper() { func_(); } private: diff --git a/source/include/Utils/SingletonHolder.hpp b/source/include/Utils/SingletonHolder.hpp index b8fc377be..881db9eb9 100644 --- a/source/include/Utils/SingletonHolder.hpp +++ b/source/include/Utils/SingletonHolder.hpp @@ -16,6 +16,7 @@ class SingletonHolder : public NonCopyable static T unique_instance; return unique_instance; } + virtual ~SingletonHolder() = default; protected: