1
0
mirror of https://github.com/0O0o0oOoO00/Alas.git synced 2026-05-14 11:49:26 +08:00

add: add chinese support for ingame ui

This commit is contained in:
0O0o0oOoO00
2025-09-07 18:37:04 +08:00
parent e2e7510d08
commit ef7d01a87b
4 changed files with 85 additions and 42 deletions

1
.gitignore vendored
View File

@@ -287,6 +287,7 @@ blcrack/cracker/webui/node_modules/
blcrack/cracker/webui/dist/ blcrack/cracker/webui/dist/
blcrack/cracker/webui/.vscode/ blcrack/cracker/webui/.vscode/
blcrack/cracker/webui/.idea/ blcrack/cracker/webui/.idea/
blcrack/cracker/ui/font.cpp
3rdparty/build/ 3rdparty/build/
3rdparty/pkgs/ 3rdparty/pkgs/

View File

@@ -0,0 +1,29 @@
import os.path
def main():
with open("C:/Windows/Fonts/simhei.ttf", mode="rb") as f:
data = f.read()
with open("./ui/font.cpp", mode="w") as f:
f.write('''#include "font.hpp"\n''')
f.write(f"unsigned char g_imgui_font_data[{hex(len(data))}] = {{\n")
for i, item in enumerate(data):
f.write(f"{hex(item)}, ")
if i % 20 == 0 and i != 0:
f.write("\n")
f.write("\n};\n")
with open("./ui/font.hpp", mode="w") as f:
f.write("#ifndef FONT_HPP\n")
f.write("#define FONT_HPP\n")
f.write(f"extern unsigned char g_imgui_font_data[{hex(len(data))}];\n")
f.write("#endif //FONT_HPP\n")
if __name__ == "__main__":
os.chdir(os.path.dirname(__file__))
main()

View File

@@ -0,0 +1,4 @@
#ifndef FONT_HPP
#define FONT_HPP
extern unsigned char g_imgui_font_data[0x94d32c];
#endif //FONT_HPP

View File

@@ -8,6 +8,7 @@
#include "imgui/imgui_impl_android.h" #include "imgui/imgui_impl_android.h"
#include "imgui/imgui_impl_opengl3.h" #include "imgui/imgui_impl_opengl3.h"
#include "imgui/imgui_internal.h" #include "imgui/imgui_internal.h"
#include "font.hpp"
CrackerUI::CrackerUI() {} CrackerUI::CrackerUI() {}
@@ -22,6 +23,14 @@ void CrackerUI::init(EGLint width, EGLint height) {
ImGui_ImplOpenGL3_Init(); ImGui_ImplOpenGL3_Init();
ImGui::StyleColorsDark(); ImGui::StyleColorsDark();
io.Fonts->AddFontFromMemoryTTF(
g_imgui_font_data,
sizeof(g_imgui_font_data),
m_font_size,
nullptr,
io.Fonts->GetGlyphRangesChineseFull()
);
m_constrain_min = ImVec2(0, 0); m_constrain_min = ImVec2(0, 0);
m_constrain_max = ImVec2(width, height); m_constrain_max = ImVec2(width, height);
@@ -47,36 +56,36 @@ void CrackerUI::draw_menu() {
} }
ImGui::SameLine(); ImGui::SameLine();
if(ImGui::Button("Refresh")) { if(ImGui::Button("刷新")) {
m_cracker_config = Cracker::Instance().get_config(); m_cracker_config = Cracker::Instance().get_config();
} }
ImGui::SameLine(); ImGui::SameLine();
if(ImGui::Button("Apply")) { if(ImGui::Button("应用")) {
Cracker::Instance().apply_config(m_cracker_config); Cracker::Instance().apply_config(m_cracker_config);
} }
ImGui::SameLine(); ImGui::SameLine();
if(ImGui::Button("Close")) { if(ImGui::Button("关闭UI")) {
m_is_show_ui.store(false); m_is_show_ui.store(false);
} }
if(ImGui::BeginTabBar("MainTab")) { if(ImGui::BeginTabBar("MainTab")) {
if(ImGui::BeginTabItem("Misc")) { if(ImGui::BeginTabItem("杂项")) {
if(ImGui::BeginTable("MiscTable", 2)) { if(ImGui::BeginTable("MiscTable", 2)) {
ImGui::TableNextColumn(); ImGui::TableNextColumn();
ImGui::Checkbox("FastChapterMove", &CONFIG_FLAG(FAST_STAGE_MOVE_CRACK)); ImGui::Checkbox("章节图快速移动", &CONFIG_FLAG(FAST_STAGE_MOVE_CRACK));
ImGui::Checkbox("FastOpsiMove", &CONFIG_FLAG(OPSI_FAST_MOVE)); ImGui::Checkbox("大世界快速移动", &CONFIG_FLAG(OPSI_FAST_MOVE));
ImGui::Checkbox("NoBBAnimation", &CONFIG_FLAG(NO_BB_ANIMATION)); ImGui::Checkbox("移除战列子弹时间", &CONFIG_FLAG(NO_BB_ANIMATION));
ImGui::Checkbox("NoEmotionWarning", &CONFIG_FLAG(NO_EMOTION_WARNING)); ImGui::Checkbox("移除低心情警告", &CONFIG_FLAG(NO_EMOTION_WARNING));
ImGui::Checkbox("SkipBattleCelebrate", &CONFIG_FLAG(SKIP_BATTLE_CELEBRATE)); ImGui::Checkbox("跳过战斗胜利庆祝", &CONFIG_FLAG(SKIP_BATTLE_CELEBRATE));
ImGui::Checkbox("ExerciseMorePower", &CONFIG_FLAG(EXERCISE_MORE_POWER)); ImGui::Checkbox("演习我方伤害增加 X %", &CONFIG_FLAG(EXERCISE_MORE_POWER));
ImGui::TableNextColumn(); ImGui::TableNextColumn();
ImGui::Checkbox("NoShipPropertiesLimit", &CONFIG_FLAG(REMOVE_HARD_MODE_SHIP_PROPERTIES_LIMIT)); ImGui::Checkbox("移除困难图属性限制", &CONFIG_FLAG(REMOVE_HARD_MODE_SHIP_PROPERTIES_LIMIT));
ImGui::Checkbox("NoShipTypeLimit", &CONFIG_FLAG(REMOVE_HARD_MODE_SHIP_TYPE_LIMIT)); ImGui::Checkbox("移除困难图舰种限制", &CONFIG_FLAG(REMOVE_HARD_MODE_SHIP_TYPE_LIMIT));
ImGui::Checkbox("FastWave", &CONFIG_FLAG(FAST_WAVE)); ImGui::Checkbox("快速出怪", &CONFIG_FLAG(FAST_WAVE));
ImGui::Checkbox("MonsterKillSelf", &CONFIG_FLAG(MONSTER_KILL_SELF)); ImGui::Checkbox("怪自杀", &CONFIG_FLAG(MONSTER_KILL_SELF));
ImGui::Checkbox("NoDamage", &CONFIG_FLAG(NO_DAMAGE)); ImGui::Checkbox("无伤害无击杀", &CONFIG_FLAG(NO_DAMAGE));
ImGui::Checkbox("ExerciseGodMod", &CONFIG_FLAG(EXERCISE_GOD_MOD)); ImGui::Checkbox("演习锁血", &CONFIG_FLAG(EXERCISE_GOD_MOD));
ImGui::EndTable(); ImGui::EndTable();
} }
@@ -85,13 +94,13 @@ void CrackerUI::draw_menu() {
ImGui::EndTabItem(); ImGui::EndTabItem();
} }
if(ImGui::BeginTabItem("Factor")) { if(ImGui::BeginTabItem("倍率")) {
ImGui::Checkbox("Factor##GG", &CONFIG_FLAG(GG_FACTOR)); ImGui::Checkbox("倍率##GG", &CONFIG_FLAG(GG_FACTOR));
ImGui::DragInt("##Factor Rate", &m_cracker_config.gg_factor); ImGui::DragInt("##Factor Rate", &m_cracker_config.gg_factor);
ImGui::Checkbox("ShipProperties", &CONFIG_FLAG(GLOBAL_SHIP_PROPERTIES_CRACK)); ImGui::Checkbox("修改属性", &CONFIG_FLAG(GLOBAL_SHIP_PROPERTIES_CRACK));
ImGui::SameLine(); ImGui::SameLine();
if(ImGui::Button("Fill")) { if(ImGui::Button("填充")) {
FILL_SHIP_PROPERTY(armor); FILL_SHIP_PROPERTY(armor);
FILL_SHIP_PROPERTY(speed); FILL_SHIP_PROPERTY(speed);
FILL_SHIP_PROPERTY(antiaircraft); FILL_SHIP_PROPERTY(antiaircraft);
@@ -118,23 +127,23 @@ void CrackerUI::draw_menu() {
if(ImGui::BeginTable("MiscTable", 2)) { if(ImGui::BeginTable("MiscTable", 2)) {
ImGui::TableNextColumn(); ImGui::TableNextColumn();
ImGui::Text("Armor"); ImGui::Text("装甲类型");
ImGui::DragInt("##Armor", &SHIP_PROPERTY(armor)); ImGui::DragInt("##Armor", &SHIP_PROPERTY(armor));
ImGui::Text("Speed"); ImGui::Text("航速");
ImGui::DragInt("##Speed", &SHIP_PROPERTY(speed)); ImGui::DragInt("##Speed", &SHIP_PROPERTY(speed));
ImGui::Text("AntiAircraft"); ImGui::Text("防空");
ImGui::DragInt("##AntiAircraft", &SHIP_PROPERTY(antiaircraft)); ImGui::DragInt("##AntiAircraft", &SHIP_PROPERTY(antiaircraft));
ImGui::Text("OxyRecoveryBench"); ImGui::Text("OxyRecoveryBench");
ImGui::DragInt("##OxyRecoveryBench", &SHIP_PROPERTY(oxy_recovery_bench)); ImGui::DragInt("##OxyRecoveryBench", &SHIP_PROPERTY(oxy_recovery_bench));
ImGui::Text("Torpedo"); ImGui::Text("雷击");
ImGui::DragInt("##Torpedo", &SHIP_PROPERTY(torpedo)); ImGui::DragInt("##Torpedo", &SHIP_PROPERTY(torpedo));
ImGui::Text("Hit"); ImGui::Text("命中");
ImGui::DragInt("##Hit", &SHIP_PROPERTY(hit)); ImGui::DragInt("##Hit", &SHIP_PROPERTY(hit));
ImGui::Text("SonarRange"); ImGui::Text("反潜范围");
ImGui::DragInt("##SonarRange", &SHIP_PROPERTY(sonarRange)); ImGui::DragInt("##SonarRange", &SHIP_PROPERTY(sonarRange));
ImGui::Text("AttackDuration"); ImGui::Text("攻击间隔");
ImGui::DragInt("##AttackDuration", &SHIP_PROPERTY(attack_duration)); ImGui::DragInt("##AttackDuration", &SHIP_PROPERTY(attack_duration));
ImGui::Text("RaidDistance"); ImGui::Text("雷达范围");
ImGui::DragInt("##RaidDistance", &SHIP_PROPERTY(raid_distance)); ImGui::DragInt("##RaidDistance", &SHIP_PROPERTY(raid_distance));
ImGui::Text("OxyRecoverySurface"); ImGui::Text("OxyRecoverySurface");
ImGui::DragInt("##OxyRecoverySurface", &SHIP_PROPERTY(oxy_recovery_surface)); ImGui::DragInt("##OxyRecoverySurface", &SHIP_PROPERTY(oxy_recovery_surface));
@@ -142,23 +151,23 @@ void CrackerUI::draw_menu() {
ImGui::TableNextColumn(); ImGui::TableNextColumn();
ImGui::Text("OxyRecovery"); ImGui::Text("OxyRecovery");
ImGui::DragInt("##OxyRecovery", &SHIP_PROPERTY(oxy_recovery)); ImGui::DragInt("##OxyRecovery", &SHIP_PROPERTY(oxy_recovery));
ImGui::Text("Dodge"); ImGui::Text("机动");
ImGui::DragInt("##Dodge", &SHIP_PROPERTY(dodge)); ImGui::DragInt("##Dodge", &SHIP_PROPERTY(dodge));
ImGui::Text("Luck"); ImGui::Text("幸运");
ImGui::DragInt("##Luck", &SHIP_PROPERTY(luck)); ImGui::DragInt("##Luck", &SHIP_PROPERTY(luck));
ImGui::Text("Reload"); ImGui::Text("装填");
ImGui::DragInt("##Reload", &SHIP_PROPERTY(reload)); ImGui::DragInt("##Reload", &SHIP_PROPERTY(reload));
ImGui::Text("OxyCost"); ImGui::Text("氧气消耗");
ImGui::DragInt("##OxyCost", &SHIP_PROPERTY(oxy_cost)); ImGui::DragInt("##OxyCost", &SHIP_PROPERTY(oxy_cost));
ImGui::Text("Durability"); ImGui::Text("耐久");
ImGui::DragInt("##Durability", &SHIP_PROPERTY(durability)); ImGui::DragInt("##Durability", &SHIP_PROPERTY(durability));
ImGui::Text("Air"); ImGui::Text("航空");
ImGui::DragInt("##Air", &SHIP_PROPERTY(air)); ImGui::DragInt("##Air", &SHIP_PROPERTY(air));
ImGui::Text("OxyMax"); ImGui::Text("氧气");
ImGui::DragInt("##OxyMax", &SHIP_PROPERTY(oxy_max)); ImGui::DragInt("##OxyMax", &SHIP_PROPERTY(oxy_max));
ImGui::Text("Cannon"); ImGui::Text("炮击");
ImGui::DragInt("##Cannon", &SHIP_PROPERTY(cannon)); ImGui::DragInt("##Cannon", &SHIP_PROPERTY(cannon));
ImGui::Text("AntiSub"); ImGui::Text("反潜");
ImGui::DragInt("##AntiSub", &SHIP_PROPERTY(antisub)); ImGui::DragInt("##AntiSub", &SHIP_PROPERTY(antisub));
ImGui::EndTable(); ImGui::EndTable();
@@ -166,15 +175,15 @@ void CrackerUI::draw_menu() {
ImGui::EndTabItem(); ImGui::EndTabItem();
} }
if(ImGui::BeginTabItem("Speedup")) { if(ImGui::BeginTabItem("全局加速")) {
ImGui::Checkbox("Global Speedup", &CONFIG_FLAG(GLOBAL_SPEEDUP)); ImGui::Checkbox("全局加速##Global Speedup", &CONFIG_FLAG(GLOBAL_SPEEDUP));
ImGui::InputInt("##Global Speedup Rate", &m_cracker_config.global_speedup_rate); ImGui::InputInt("##Global Speedup Rate", &m_cracker_config.global_speedup_rate);
ImGui::Checkbox("Better Global Speedup", &CONFIG_FLAG(BETTER_GLOBAL_SPEEDUP)); ImGui::Checkbox("更好的全局加速", &CONFIG_FLAG(BETTER_GLOBAL_SPEEDUP));
ImGui::InputInt("##Better Global Speedup Rate", &m_cracker_config.better_global_speedup_rate); ImGui::InputInt("##Better Global Speedup Rate", &m_cracker_config.better_global_speedup_rate);
ImGui::EndTabItem(); ImGui::EndTabItem();
} }
if(ImGui::BeginTabItem("Setting")) { if(ImGui::BeginTabItem("设置")) {
ImGui::Text("FontSize"); ImGui::Text("字体大小");
ImGui::InputFloat("##FontSizeRate", &m_font_size, 1.0, 1.0); ImGui::InputFloat("##FontSizeRate", &m_font_size, 1.0, 1.0);
ImGui::EndTabItem(); ImGui::EndTabItem();
} }