Skip to content

Commit e848432

Browse files
committed
fix: 更新版本号至8.2.83,修改错误处理方式,重构资源管理
1 parent 225210b commit e848432

17 files changed

Lines changed: 219 additions & 186 deletions

source/AutoTrack.cpp

Lines changed: 99 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "frame/capture/capture.bitblt.h"
1313
#include "resource/version.h"
1414

15+
#include "match/surf/SurfMatch.h"
1516

1617
AutoTrack::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;

source/ErrorCode.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,6 @@ class ErrorCode
3838

3939
inline bool clear_error_logs()
4040
{
41-
ErrorCode::getInstance() = { 0, "调用成功" };
41+
*ErrorCode::getSharedPtr() = { 0, "调用成功" };
4242
return true;
4343
}

source/genshin/cailb/minimap/genshin.cailb.minimap.cpp

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,27 @@
11
#include "pch.h"
22
#include "genshin.cailb.minimap.h"
3-
#include "../../../resources/Resources.h"
4-
bool match_minimap_cailb(const tianli::global::GenshinScreen& genshin_screen, tianli::global::GenshinMinimapCailb& out_genshin_minimap_cailb)
3+
bool match_minimap_cailb(const tianli::global::match_minimap_cailb_params& params, const tianli::global::GenshinScreen& genshin_screen, tianli::global::GenshinMinimapCailb& out_genshin_minimap_cailb)
54
{
6-
static std::vector<cv::Mat> split_minimap_cailb_template;
7-
static cv::Mat minimap_cailb_template;
8-
static cv::Mat minimap_cailb_template_handle_mode;
9-
static cv::Mat minimap_cailb_template_no_alpha;
10-
static cv::Mat minimap_cailb_template_no_alpha_handle_mode;
11-
static bool is_first = true;
12-
if (is_first)
13-
{
14-
cv::Mat minimap_cailb;
15-
cv::resize(Resources::getInstance().MinimapCailbTemplate, minimap_cailb, cv::Size(), 0.8, 0.8);
16-
cv::split(minimap_cailb, split_minimap_cailb_template);
17-
minimap_cailb_template = split_minimap_cailb_template[3];
18-
minimap_cailb_template_no_alpha = split_minimap_cailb_template[0];
19-
cv::resize(split_minimap_cailb_template[3], minimap_cailb_template_handle_mode, cv::Size(), 1 / 1.2, 1 / 1.2, cv::INTER_CUBIC);
20-
cv::resize(split_minimap_cailb_template[3], minimap_cailb_template_no_alpha_handle_mode, cv::Size(), 1.0 / 1.2, 1.0 / 1.2);
21-
is_first = false;
22-
}
235

246
auto giMinimapCailbRef = genshin_screen.img_minimap_cailb_maybe;
257
auto& rect_origin = genshin_screen.config.rect_minimap_cailb_maybe;
268
auto& is_handle_mode = genshin_screen.config.is_handle_mode;
279

28-
auto& template_not_handle_mode = split_minimap_cailb_template[3];
29-
auto& template_handle_mode = minimap_cailb_template_handle_mode;
10+
auto template_not_handle_mode = params.split_minimap_cailb_template[3];
11+
auto template_handle_mode = params.minimap_cailb_template_handle_mode;
3012

31-
if (giMinimapCailbRef.empty() || minimap_cailb_template_handle_mode.empty())
13+
if (giMinimapCailbRef.empty() || params.minimap_cailb_template_handle_mode.empty())
3214
return false;
33-
if (giMinimapCailbRef.cols < split_minimap_cailb_template[3].cols || giMinimapCailbRef.rows < split_minimap_cailb_template[3].rows)
15+
if (giMinimapCailbRef.cols < params.split_minimap_cailb_template[3].cols || giMinimapCailbRef.rows < params.split_minimap_cailb_template[3].rows)
3416
return false;
3517

3618
// 设置阈值取值 根据是否使用alpha图层
3719
double check_match_minimap_cailb_param = out_genshin_minimap_cailb.config.check_match_minimap_cailb_params;
3820
if (genshin_screen.config.is_used_alpha == false)
3921
{
4022
cv::cvtColor(genshin_screen.img_minimap_cailb_maybe, giMinimapCailbRef, cv::COLOR_RGBA2GRAY);
41-
template_not_handle_mode = minimap_cailb_template_no_alpha;
42-
template_handle_mode = minimap_cailb_template_no_alpha_handle_mode;
23+
template_not_handle_mode = params.minimap_cailb_template_no_alpha;
24+
template_handle_mode = params.minimap_cailb_template_no_alpha_handle_mode;
4325
check_match_minimap_cailb_param = out_genshin_minimap_cailb.config.check_match_minimap_cailb_params_no_alpha;
4426
}
4527

@@ -94,7 +76,7 @@ bool cailb_minimap_impl(const tianli::global::GenshinScreen& genshin_screen, tia
9476
if (genshin_screen.config.is_search_mode)
9577
{
9678
static tianli::global::GenshinMinimapCailb genshin_minimap_cailb;
97-
bool is_find_minimap_cailb = match_minimap_cailb(genshin_screen, genshin_minimap_cailb);
79+
bool is_find_minimap_cailb = match_minimap_cailb(*genshin_screen.minimap_cailb_params, genshin_screen, genshin_minimap_cailb);
9880
if (is_find_minimap_cailb == false)
9981
{
10082
return false;

source/genshin/cailb/minimap/genshin.cailb.minimap.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,30 @@
11
#pragma once
22
#include "global/global.genshin.h"
33

4+
#include "../../../resources/Resources.h"
5+
6+
namespace tianli::global
7+
{
8+
struct match_minimap_cailb_params
9+
{
10+
std::vector<cv::Mat> split_minimap_cailb_template;
11+
cv::Mat minimap_cailb_template;
12+
cv::Mat minimap_cailb_template_handle_mode;
13+
cv::Mat minimap_cailb_template_no_alpha;
14+
cv::Mat minimap_cailb_template_no_alpha_handle_mode;
15+
16+
void init(Resources& res)
17+
{
18+
cv::Mat minimap_cailb;
19+
cv::resize(res.MinimapCailbTemplate, minimap_cailb, cv::Size(), 0.8, 0.8);
20+
cv::split(minimap_cailb, split_minimap_cailb_template);
21+
minimap_cailb_template = split_minimap_cailb_template[3];
22+
minimap_cailb_template_no_alpha = split_minimap_cailb_template[0];
23+
cv::resize(split_minimap_cailb_template[3], minimap_cailb_template_handle_mode, cv::Size(), 1 / 1.2, 1 / 1.2, cv::INTER_CUBIC);
24+
cv::resize(split_minimap_cailb_template[3], minimap_cailb_template_no_alpha_handle_mode, cv::Size(), 1.0 / 1.2, 1.0 / 1.2);
25+
}
26+
};
27+
} // namespace tianli::global
428
namespace TianLi::Genshin::Cailb
529
{
630
bool cailb_minimap(const tianli::global::GenshinScreen& genshin_screen, tianli::global::GenshinMinimap& out_genshin_minimap);

0 commit comments

Comments
 (0)