1212#include " frame/capture/capture.bitblt.h"
1313#include " resource/version.h"
1414
15+ #include " match/surf/SurfMatch.h"
1516
1617AutoTrack::AutoTrack (ErrorCode& err, Resources& res) : err(err), res(res)
1718{
@@ -22,6 +23,12 @@ AutoTrack::AutoTrack(ErrorCode& err, Resources& res) : err(err), res(res)
2223
2324 genshin_handle.config .frame_source = std::make_shared<tianli::frame::capture::capture_bitblt>();
2425 genshin_handle.config .frame_source ->initialization ();
26+
27+ genshin_screen.minimap_cailb_params = std::make_shared<tianli::global::match_minimap_cailb_params>();
28+ genshin_screen.paimon_search_params = std::make_shared<tianli::global::check_paimon_search_params>();
29+
30+ genshin_minimap.matcher = std::make_shared<SurfMatch>(res);
31+
2532 genshin_avatar_position.config .pos_filter = std::make_shared<tianli::algorithms::filter::filter_kalman>();
2633}
2734
@@ -51,110 +58,109 @@ bool AutoTrack::uninit()
5158 return !genshin_minimap.is_init_finish ;
5259}
5360
61+ bool AutoTrack::SetHandle (long long int handle)
62+ {
63+ if (handle == 0 )
64+ {
65+ genshin_handle.config .is_auto_find_genshin = true ;
66+ return true ;
67+ }
68+ else
69+ {
70+ genshin_handle.config .is_auto_find_genshin = false ;
71+ genshin_handle.handle = (HWND)handle;
72+ }
73+ return IsWindow (genshin_handle.handle );
74+ }
5475
55- bool AutoTrack::SetHandle (long long int handle)
56- {
57- if (handle == 0 )
58- {
59- genshin_handle.config .is_auto_find_genshin = true ;
60- return true ;
61- }
62- else
63- {
64- genshin_handle.config .is_auto_find_genshin = false ;
65- genshin_handle.handle = (HWND)handle;
66- }
67- return IsWindow (genshin_handle.handle );
68- }
69-
70- bool AutoTrack::SetWorldCenter (double x, double y)
71- {
72- genshin_avatar_position.target_map_world_center .x = x;
73- genshin_avatar_position.target_map_world_center .y = y;
74- return true ;
75- }
76+ bool AutoTrack::SetWorldCenter (double x, double y)
77+ {
78+ genshin_avatar_position.target_map_world_center .x = x;
79+ genshin_avatar_position.target_map_world_center .y = y;
80+ return true ;
81+ }
7682
77- bool AutoTrack::SetWorldScale (double scale)
78- {
79- genshin_avatar_position.target_map_world_scale = scale;
80- return true ;
81- }
83+ bool AutoTrack::SetWorldScale (double scale)
84+ {
85+ genshin_avatar_position.target_map_world_scale = scale;
86+ return true ;
87+ }
8288
83- bool AutoTrack::startServe ()
84- {
85- return false ;
86- }
89+ bool AutoTrack::startServe ()
90+ {
91+ return false ;
92+ }
8793
88- bool AutoTrack::stopServe ()
89- {
90- return false ;
91- }
94+ bool AutoTrack::stopServe ()
95+ {
96+ return false ;
97+ }
9298
93- bool AutoTrack::SetDisableFileLog ()
94- {
95- err.disableWirteFile ();
96- return true ;
97- }
99+ bool AutoTrack::SetDisableFileLog ()
100+ {
101+ err.disableWirteFile ();
102+ return true ;
103+ }
98104
99- bool AutoTrack::SetEnableFileLog ()
100- {
101- err.enableWirteFile ();
102- return true ;
103- }
105+ bool AutoTrack::SetEnableFileLog ()
106+ {
107+ err.enableWirteFile ();
108+ return true ;
109+ }
104110
105- bool AutoTrack::DebugCapture ()
106- {
107- return DebugCapturePath (" Capture.png" , 12 );
108- }
111+ bool AutoTrack::DebugCapture ()
112+ {
113+ return DebugCapturePath (" Capture.png" , 12 );
114+ }
109115
110- bool AutoTrack::DebugCapturePath (const char * path_buff, int buff_size)
111- {
112- if (path_buff == NULL || buff_size < 1 )
113- {
114- err = { 251 , " 路径缓存区为空指针或是路径缓存区大小为小于1" };
115- return false ;
116- }
116+ bool AutoTrack::DebugCapturePath (const char * path_buff, int buff_size)
117+ {
118+ if (path_buff == NULL || buff_size < 1 )
119+ {
120+ err = { 251 , " 路径缓存区为空指针或是路径缓存区大小为小于1" };
121+ return false ;
122+ }
117123
118- if (genshin_screen.img_screen .empty ())
124+ if (genshin_screen.img_screen .empty ())
125+ {
126+ err = { 252 , " 画面为空" };
127+ return false ;
128+ }
129+ cv::Mat out_info_img = genshin_screen.img_screen .clone ();
130+ switch (genshin_handle.config .frame_source ->type )
131+ {
132+ case tianli::frame::frame_source::source_type::bitblt:
119133 {
120- err = { 252 , " 画面为空" };
121- return false ;
134+ // 绘制paimon Rect
135+ cv::rectangle (out_info_img, genshin_paimon.rect_paimon , cv::Scalar (0 , 0 , 255 ), 2 );
136+ // 绘制miniMap Rect
137+ cv::rectangle (out_info_img, genshin_minimap.rect_minimap , cv::Scalar (0 , 0 , 255 ), 2 );
138+ cv::Rect Avatar = genshin_minimap.rect_avatar ;
139+ Avatar.x += genshin_minimap.rect_minimap .x ;
140+ Avatar.y += genshin_minimap.rect_minimap .y ;
141+
142+ // 绘制avatar Rect
143+ cv::rectangle (out_info_img, Avatar, cv::Scalar (0 , 0 , 255 ), 2 );
144+ // 绘制UID Rect
145+ cv::rectangle (out_info_img, genshin_handle.rect_uid , cv::Scalar (0 , 0 , 255 ), 2 );
146+ break ;
122147 }
123- cv::Mat out_info_img = genshin_screen.img_screen .clone ();
124- switch (genshin_handle.config .frame_source ->type )
148+ case tianli::frame::frame_source::source_type::window_graphics:
125149 {
126- case tianli::frame::frame_source::source_type::bitblt:
127- {
128- // 绘制paimon Rect
129- cv::rectangle (out_info_img, genshin_paimon.rect_paimon , cv::Scalar (0 , 0 , 255 ), 2 );
130- // 绘制miniMap Rect
131- cv::rectangle (out_info_img, genshin_minimap.rect_minimap , cv::Scalar (0 , 0 , 255 ), 2 );
132- cv::Rect Avatar = genshin_minimap.rect_avatar ;
133- Avatar.x += genshin_minimap.rect_minimap .x ;
134- Avatar.y += genshin_minimap.rect_minimap .y ;
135-
136- // 绘制avatar Rect
137- cv::rectangle (out_info_img, Avatar, cv::Scalar (0 , 0 , 255 ), 2 );
138- // 绘制UID Rect
139- cv::rectangle (out_info_img, genshin_handle.rect_uid , cv::Scalar (0 , 0 , 255 ), 2 );
140- break ;
141- }
142- case tianli::frame::frame_source::source_type::window_graphics:
143- {
144- // 绘制paimon Rect
145- cv::rectangle (out_info_img, genshin_paimon.rect_paimon , cv::Scalar (0 , 0 , 255 ), 2 );
146- // 绘制miniMap Rect
147- cv::rectangle (out_info_img, genshin_minimap.rect_minimap , cv::Scalar (0 , 0 , 255 ), 2 );
148- cv::Rect Avatar = genshin_minimap.rect_avatar ;
149- Avatar.x += genshin_minimap.rect_minimap .x ;
150- Avatar.y += genshin_minimap.rect_minimap .y ;
151-
152- // 绘制avatar Rect
153- cv::rectangle (out_info_img, Avatar, cv::Scalar (0 , 0 , 255 ), 2 );
154- // 绘制UID Rect
155- cv::rectangle (out_info_img, genshin_handle.rect_uid , cv::Scalar (0 , 0 , 255 ), 2 );
156- }
150+ // 绘制paimon Rect
151+ cv::rectangle (out_info_img, genshin_paimon.rect_paimon , cv::Scalar (0 , 0 , 255 ), 2 );
152+ // 绘制miniMap Rect
153+ cv::rectangle (out_info_img, genshin_minimap.rect_minimap , cv::Scalar (0 , 0 , 255 ), 2 );
154+ cv::Rect Avatar = genshin_minimap.rect_avatar ;
155+ Avatar.x += genshin_minimap.rect_minimap .x ;
156+ Avatar.y += genshin_minimap.rect_minimap .y ;
157+
158+ // 绘制avatar Rect
159+ cv::rectangle (out_info_img, Avatar, cv::Scalar (0 , 0 , 255 ), 2 );
160+ // 绘制UID Rect
161+ cv::rectangle (out_info_img, genshin_handle.rect_uid , cv::Scalar (0 , 0 , 255 ), 2 );
157162 }
163+ }
158164
159165#if (_MSC_VER && _MSVC_LANG <= 201703L) || (!_MSC_VER && __cplusplus <= 201703L)
160166 std::string last_time_str = global::format (" {:%Y-%m-%d :%H:%M:%S}" , std::chrono::system_clock::to_time_t (genshin_screen.last_time ));
@@ -320,7 +326,7 @@ bool AutoTrack::GetUID(int& uid)
320326 }
321327
322328 tianli::global::uid_calculation_config config;
323- uid_calculation (giUIDRef, uid, config);
329+ uid_calculation (res, giUIDRef, uid, config);
324330 if (config.error )
325331 {
326332 err = config.err ;
@@ -397,7 +403,7 @@ bool AutoTrack::GetAllInfo(double& x, double& y, int& mapId, double& a, double&
397403 }
398404
399405 tianli::global::uid_calculation_config config;
400- uid_calculation (giUIDRef, uid, config);
406+ uid_calculation (res, giUIDRef, uid, config);
401407 if (config.error )
402408 {
403409 err = config.err ;
0 commit comments