Skip to content

Commit d44f683

Browse files
committed
优化CVar UI控件绑定
1 parent d17a39d commit d44f683

11 files changed

Lines changed: 852 additions & 882 deletions

File tree

0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.

bin/MulNX/CS2OBTool/CS2OBTool.dll

22 KB
Binary file not shown.

bin/MulNX/CS2OBTool/UISystem/Config/MulNXUIConfig.ini

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -96,19 +96,19 @@ Size=1920,1080
9696
Collapsed=0
9797

9898
[Window][UI个性配置]
99-
Pos=510,255
99+
Pos=1059,276
100100
Size=760,527
101101
Collapsed=0
102102
DockId=0x0000000D,1
103103

104104
[Window][摄像机系统]
105-
Pos=510,255
105+
Pos=1059,276
106106
Size=760,527
107107
Collapsed=0
108108
DockId=0x0000000D,2
109109

110110
[Window][游戏设置]
111-
Pos=510,255
111+
Pos=1059,276
112112
Size=760,527
113113
Collapsed=0
114114
DockId=0x0000000D,3
@@ -120,13 +120,13 @@ Collapsed=0
120120
DockId=0x00000002,3
121121

122122
[Window][MulNX控制]
123-
Pos=510,255
123+
Pos=1059,276
124124
Size=760,527
125125
Collapsed=0
126126
DockId=0x0000000D,10
127127

128128
[Window][首页]
129-
Pos=510,255
129+
Pos=1059,276
130130
Size=760,527
131131
Collapsed=0
132132
DockId=0x0000000D,0
@@ -149,22 +149,22 @@ Size=1159,801
149149
Collapsed=0
150150

151151
[Window][2D视觉]
152-
Pos=510,255
152+
Pos=1059,276
153153
Size=760,527
154154
Collapsed=0
155155
DockId=0x0000000D,4
156156

157157
[Window][3D视觉]
158-
Pos=510,255
158+
Pos=1059,276
159159
Size=760,527
160160
Collapsed=0
161161
DockId=0x0000000D,5
162162

163163
[Window][镜头参数]
164-
Pos=510,255
164+
Pos=1059,276
165165
Size=760,527
166166
Collapsed=0
167-
DockId=0x0000000D,9
167+
DockId=0x0000000D,7
168168

169169
[Window][视角控制]
170170
Pos=0,350
@@ -173,16 +173,16 @@ Collapsed=0
173173
DockId=0x00000002,4
174174

175175
[Window][视角视图]
176-
Pos=510,255
176+
Pos=1059,276
177177
Size=760,527
178178
Collapsed=0
179179
DockId=0x0000000D,6
180180

181181
[Window][声音控制]
182-
Pos=510,255
182+
Pos=1059,276
183183
Size=760,527
184184
Collapsed=0
185-
DockId=0x0000000D,7
185+
DockId=0x0000000D,8
186186

187187
[Window][ui.game_enhance]
188188
Pos=910,157
@@ -219,22 +219,22 @@ Collapsed=0
219219
DockId=0x00000009,0
220220

221221
[Window][音视频]
222-
Pos=510,255
222+
Pos=1059,276
223223
Size=760,527
224224
Collapsed=0
225225
DockId=0x0000000D,12
226226

227227
[Window][实体列表探测器]
228-
Pos=510,255
228+
Pos=1059,276
229229
Size=760,527
230230
Collapsed=0
231231
DockId=0x0000000D,11
232232

233233
[Window][高级功能]
234-
Pos=510,255
234+
Pos=1059,276
235235
Size=760,527
236236
Collapsed=0
237-
DockId=0x0000000D,8
237+
DockId=0x0000000D,9
238238

239239
[Window][语音控制]
240240
Pos=1241,132
@@ -279,7 +279,7 @@ Collapsed=0
279279
DockId=0x00000001,0
280280

281281
[Window][观战信息]
282-
Pos=510,255
282+
Pos=1059,276
283283
Size=760,527
284284
Collapsed=0
285285
DockId=0x0000000D,13
@@ -293,7 +293,7 @@ DockNode ID=0x00000003 Pos=455,184 Size=1378,716 Split=X Selected=0x448D10F
293293
DockNode ID=0x0000000A Pos=820,750 Size=685,394 Split=X
294294
DockNode ID=0x0000000B Parent=0x0000000A SizeRef=1042,407 Selected=0x2D59FDA6
295295
DockNode ID=0x0000000C Parent=0x0000000A SizeRef=606,407 Selected=0x4DB1B67D
296-
DockNode ID=0x0000000D Pos=510,255 Size=760,527 Selected=0xF532E098
296+
DockNode ID=0x0000000D Pos=1059,276 Size=760,527 Selected=0xC12FA4B6
297297
DockSpace ID=0x633F05CB Window=0xFB32D03B Pos=0,0 Size=1920,1080 Split=Y Selected=0xC52A91C6
298298
DockNode ID=0x00000001 Parent=0x633F05CB SizeRef=1920,39 Selected=0x38DB91B6
299299
DockNode ID=0x00000002 Parent=0x633F05CB SizeRef=1920,1039 CentralNode=1

bin/MulNX/Log/Log_CS2Injector.txt

Lines changed: 100 additions & 100 deletions
Large diffs are not rendered by default.

bin/MulNX/Log/Log_CS2OBTool.txt

Lines changed: 643 additions & 643 deletions
Large diffs are not rendered by default.

source/MulNX/Base/UI/UI.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#pragma once
2-
32
#include <MulNXThirdParty/imgui_d11/imgui.h>
43
#include <MulNXThirdParty/imgui_d11/imgui_stdlib.h>
54
#include <MulNX/Base/Math/Math.hpp>

source/MulNXExtensions/CS2/Intro/CSModuleBase.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22
#include <Intro/CSController/CSController.hpp>
33
#include <MulNXUtils/WinExt/HookMixin.hpp>
4+
#include <Intro/HookConsole/CSConMixin.hpp>
45

56
class PlayerHub;
67
class HookView;
@@ -19,7 +20,7 @@ class ICSModule {
1920
};
2021

2122
template <typename T>
22-
class CSModuleMixin : public ICSModule, public HookMixin<T> {
23+
class CSModuleMixin : public ICSModule, public HookMixin<T>, public CSConMixin<T> {
2324
class CS2Paths {
2425
public:
2526
// Counter-Strike Global Offensive
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#pragma once
2+
#include <MulNX/Base/UI/UI.hpp>
3+
4+
template <size_t n>
5+
struct CSConvarName {
6+
char data[n]{};
7+
consteval CSConvarName(const char(&str)[n]) {
8+
std::copy_n(str, n, data);
9+
}
10+
constexpr operator const char* () const { return data; }
11+
};
12+
13+
template<typename T>
14+
class CSConMixin {
15+
T* This() { return static_cast<T*>(this); }
16+
protected:
17+
template<CSConvarName name>
18+
auto ConvarSliderInt(const std::string& UIName, const int& min, const int& max) {
19+
static auto* pVar = This()->CS2Con->GetCvar(std::string(name))->template GetPtr<int>();
20+
return ImGui::SliderInt(UIName.c_str(), pVar, min, max);
21+
}
22+
23+
template<CSConvarName name>
24+
auto ConvarSliderFloat(const std::string& UIName, const float& min, const float& max) {
25+
static auto* pVar = This()->CS2Con->GetCvar(std::string(name))->template GetPtr<float>();
26+
return ImGui::SliderFloat(UIName.c_str(), pVar, min, max);
27+
}
28+
29+
template<CSConvarName name>
30+
auto ConvarCheckbox(const std::string& UIName) {
31+
static auto* pVar = This()->CS2Con->GetCvar(std::string(name))->template GetPtr<bool>();
32+
return ImGui::Checkbox(UIName.c_str(), pVar);
33+
}
34+
};

source/MulNXExtensions/CS2/Outro/GameSettingsManager/GameSettingsManager.cpp

Lines changed: 47 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
#include "GameSettingsManager.hpp"
2-
#include <MulNX/Base/UI/UI.hpp>
32

43
bool GameSettingsManager::Window() {
54
auto w = MulNX::UI::RAIIWindow(I18n("ui.game_settings").c_str());
65

7-
ImGui::Checkbox("作弊模式", this->settings.sv_cheats);
8-
ImGui::SliderInt("FPS上限", this->settings.fps_max, 0, 1000);
9-
ImGui::SliderFloat("游戏速度", this->settings.host_timescale, 0.001f, 10.000f);
10-
ImGui::Checkbox("真实视角", this->settings.cl_demo_predict);
6+
ConvarCheckbox<"sv_cheats">("作弊模式");
7+
ConvarSliderFloat<"fps_max">("FPS上限", 0, 1000);
8+
ConvarSliderFloat<"host_timescale">("游戏速度", 0.001f, 10.000f);
9+
ConvarCheckbox<"cl_demo_predict">("真实视角");
1110

1211
ImGui::SeparatorText("CS2控制台");
1312
if (ImGui::Button("解限所有CS2控制台变量")) {
@@ -39,25 +38,25 @@ bool GameSettingsManager::Window() {
3938
}
4039

4140
bool GameSettingsManager::SoundMenu() {
42-
ImGui::Checkbox("游戏窗口失去焦点时静音", this->settings.snd_mute_losefocus);
41+
ConvarCheckbox<"snd_mute_losefocus">("游戏窗口失去焦点时静音");
4342

4443
ImGui::SeparatorText("音乐设置");
45-
ImGui::SliderFloat("主菜单音量", this->settings.snd_menumusic_volume, 0.0f, 1.0f, "%.2f");
46-
ImGui::SliderFloat("回合开始音量", this->settings.snd_roundstart_volume, 0.0f, 1.0f, "%.2f");
47-
ImGui::SliderFloat("回合开始行动音量", this->settings.snd_roundaction_volume, 0.0f, 1.0f, "%.2f");
48-
ImGui::SliderFloat("回合结束音量", this->settings.snd_roundend_volume, 0.0f, 1.0f, "%.2f");
49-
ImGui::SliderFloat("MVP音量", this->settings.snd_mvp_volume, 0.0f, 1.0f, "%.2f");
50-
ImGui::SliderFloat("炸弹/人质音量", this->settings.snd_mapobjective_volume, 0.0f, 1.0f, "%.2f");
51-
ImGui::SliderFloat("十秒警告音量", this->settings.snd_tensecondwarning_volume, 0.0f, 1.0f, "%.2f");
52-
ImGui::SliderFloat("死亡视角音量", this->settings.snd_deathcamera_volume, 0.0f, 1.0f, "%.2f");
53-
ImGui::Checkbox("当双方团队成员都存活时关闭MVP音乐", this->settings.snd_mute_mvp_music_live_players);
44+
ConvarSliderFloat<"snd_menumusic_volume">("主菜单音量", 0.0f, 1.0f);
45+
ConvarSliderFloat<"snd_roundstart_volume">("回合开始音量", 0.0f, 1.0f);
46+
ConvarSliderFloat<"snd_roundaction_volume">("回合开始行动音量", 0.0f, 1.0f);
47+
ConvarSliderFloat<"snd_roundend_volume">("回合结束音量", 0.0f, 1.0f);
48+
ConvarSliderFloat<"snd_mvp_volume">("MVP音量", 0.0f, 1.0f);
49+
ConvarSliderFloat<"snd_mapobjective_volume">("炸弹/人质音量", 0.0f, 1.0f);
50+
ConvarSliderFloat<"snd_tensecondwarning_volume">("十秒警告音量", 0.0f, 1.0f);
51+
ConvarSliderFloat<"snd_deathcamera_volume">("死亡视角音量", 0.0f, 1.0f);
52+
ConvarCheckbox<"snd_mute_mvp_music_live_players">("当双方团队成员都存活时关闭MVP音乐");
5453

5554
return true;
5655
}
5756

5857
bool GameSettingsManager::DofMenu() {
5958
ImGui::SeparatorText("景深控制");
60-
ImGui::Checkbox("启用景深", this->settings.r_dof_override);
59+
ConvarCheckbox<"r_dof_override">("启用景深");
6160

6261
bool DOFChange = false;
6362
DOFChange |= ImGui::SliderFloat("聚焦距离", &this->FocusDistance, 0, 5000);
@@ -67,40 +66,40 @@ bool GameSettingsManager::DofMenu() {
6766
MulNX::Math::DOFParam Param;
6867
MulNX::Math::CalculateDOFParameters(this->FocusDistance, this->CrispRadius, this->BlurDistance, Param);
6968

70-
*this->settings.r_dof_override_near_blurry = Param.NearBlurry;// 近模糊
71-
*this->settings.r_dof_override_near_crisp = Param.NearCrisp;// 近清晰
72-
*this->settings.r_dof_override_far_crisp = Param.FarCrisp;// 远清晰
73-
*this->settings.r_dof_override_far_blurry = Param.FarBlurry;// 远模糊
69+
*this->r_dof_override_near_blurry = Param.NearBlurry;// 近模糊
70+
*this->r_dof_override_near_crisp = Param.NearCrisp;// 近清晰
71+
*this->r_dof_override_far_crisp = Param.FarCrisp;// 远清晰
72+
*this->r_dof_override_far_blurry = Param.FarBlurry;// 远模糊
7473
}
7574

7675
ImGui::SeparatorText("调整上方参数,自动计算并应用以下参数:");
7776

78-
ImGui::SliderFloat("r_dof_override_far_blurry", this->settings.r_dof_override_far_blurry, 0, 5000);
79-
ImGui::SliderFloat("r_dof_override_far_crisp", this->settings.r_dof_override_far_crisp, 0, 5000);
80-
ImGui::SliderFloat("r_dof_override_near_crisp", this->settings.r_dof_override_near_crisp, 0, 5000);
81-
ImGui::SliderFloat("r_dof_override_near_blurry", this->settings.r_dof_override_near_blurry, 0, 5000);
77+
ImGui::SliderFloat("r_dof_override_far_blurry", this->r_dof_override_far_blurry, 0, 5000);
78+
ImGui::SliderFloat("r_dof_override_far_crisp", this->r_dof_override_far_crisp, 0, 5000);
79+
ImGui::SliderFloat("r_dof_override_near_crisp", this->r_dof_override_near_crisp, 0, 5000);
80+
ImGui::SliderFloat("r_dof_override_near_blurry", this->r_dof_override_near_blurry, 0, 5000);
8281
ImGui::Separator();
83-
ImGui::SliderFloat("r_dof_override_tilt_to_ground", this->settings.r_dof_override_tilt_to_ground, 0, 5000);
82+
ConvarSliderFloat<"r_dof_override_tilt_to_ground">("r_dof_override_tilt_to_ground", 0, 5000);
8483

8584
return true;
8685
}
8786

8887
bool GameSettingsManager::GameHudMenu() {
8988
ImGui::SeparatorText("游戏HUD设置");
9089

91-
ImGui::Checkbox("显示HUD", this->settings.cl_drawhud);
92-
ImGui::Checkbox("只渲染击杀信息", this->settings.cl_draw_only_deathnotices);
93-
ImGui::SliderInt("展示FPS", this->settings.cl_showfps, 0, 3, "%d");
94-
ImGui::SliderInt("展示Tick", this->settings.cl_showtick, 0, 3, "%d");
95-
ImGui::SliderInt("TrueView控制", this->settings.cl_trueview_show_status, 0, 2);
96-
ImGui::SliderInt("观战X光", this->settings.spec_show_xray, 0, 100);
90+
ConvarCheckbox<"cl_drawhud">("显示HUD");
91+
ConvarCheckbox<"cl_draw_only_deathnotices">("只渲染击杀信息");
92+
ConvarSliderInt<"cl_showfps">("展示FPS", 0, 3);
93+
ConvarSliderInt<"cl_showtick">("展示Tick", 0, 3);
94+
ConvarSliderInt<"cl_trueview_show_status">("TrueView控制", 0, 2);
95+
ConvarSliderInt<"spec_show_xray">("观战X光", 0, 100);
9796

98-
ImGui::Checkbox("强制雷达渲染", this->settings.cl_drawhud_force_radar);
99-
ImGui::Checkbox("在观战时使用方形雷达", this->settings.cl_radar_square_when_spectating);
100-
ImGui::Checkbox("永远使用方形雷达", this->settings.cl_radar_square_always);
101-
ImGui::Checkbox("雷达在观战时显示所有人", this->settings.cl_radar_show_all_players_when_spectating);
97+
ConvarCheckbox<"cl_drawhud_force_radar">("强制雷达渲染");
98+
ConvarCheckbox<"cl_radar_square_when_spectating">("在观战时使用方形雷达");
99+
ConvarCheckbox<"cl_radar_square_always">("永远使用方形雷达");
100+
ConvarCheckbox<"cl_radar_show_all_players_when_spectating">("雷达在观战时显示所有人");
102101

103-
ImGui::Checkbox("准星", this->settings.crosshair);
102+
ConvarCheckbox<"crosshair">("准星");
104103
if (ImGui::Button("切换Demo进度条UI显示")) {
105104
this->AsyncCommand("demoui");
106105
}
@@ -109,14 +108,18 @@ bool GameSettingsManager::GameHudMenu() {
109108

110109
bool GameSettingsManager::Init() {
111110
this->SubscribeSync("Hook/Source2Client002::Inited", [this](MulNX::Message& msg) {
112-
this->settings.Init(this->CS2Con);
113-
114-
*this->settings.cl_trueview_show_status = 0;
115-
*this->settings.cl_radar_show_all_players_when_spectating = false;
116-
*this->settings.cl_radar_square_always = false;
117-
*this->settings.cl_radar_square_when_spectating = false;
118-
*this->settings.cl_demo_predict = false;
119-
*this->settings.cl_spec_show_bindings = false;
111+
112+
this->r_dof_override_near_blurry = this->CS2Con->GetCvar("r_dof_override_near_blurry")->GetPtr<float>();
113+
this->r_dof_override_near_crisp = this->CS2Con->GetCvar("r_dof_override_near_crisp")->GetPtr<float>();
114+
this->r_dof_override_far_crisp = this->CS2Con->GetCvar("r_dof_override_far_crisp")->GetPtr<float>();
115+
this->r_dof_override_far_blurry = this->CS2Con->GetCvar("r_dof_override_far_blurry")->GetPtr<float>();
116+
117+
*this->CS2Con->GetCvar("cl_trueview_show_status")->GetPtr<int>() = 0;
118+
*this->CS2Con->GetCvar("cl_radar_show_all_players_when_spectating")->GetPtr<bool>() = false;
119+
*this->CS2Con->GetCvar("cl_radar_square_always")->GetPtr<bool>() = false;
120+
*this->CS2Con->GetCvar("cl_radar_square_when_spectating")->GetPtr<bool>() = false;
121+
*this->CS2Con->GetCvar("cl_demo_predict")->GetPtr<bool>() = false;
122+
*this->CS2Con->GetCvar("cl_spec_show_bindings")->GetPtr<bool>() = false;
120123

121124
this->SendUIRoot(this->GetName(), [this](auto&&...) {return this->Window();});
122125
this->UIRegisterCallback("UI.Sound", [this](auto&&...) {return this->SoundMenu();});

0 commit comments

Comments
 (0)