diff --git a/.gitignore b/.gitignore index 1bff5ee6b..73463d11b 100644 --- a/.gitignore +++ b/.gitignore @@ -287,6 +287,7 @@ blcrack/cracker/webui/node_modules/ blcrack/cracker/webui/dist/ blcrack/cracker/webui/.vscode/ blcrack/cracker/webui/.idea/ +blcrack/cracker/ui/font.cpp 3rdparty/build/ 3rdparty/pkgs/ \ No newline at end of file diff --git a/blcrack/cracker/gen_embedded_ui_font.py b/blcrack/cracker/gen_embedded_ui_font.py new file mode 100644 index 000000000..79d53490e --- /dev/null +++ b/blcrack/cracker/gen_embedded_ui_font.py @@ -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() diff --git a/blcrack/cracker/ui/font.hpp b/blcrack/cracker/ui/font.hpp new file mode 100644 index 000000000..79ce3bc54 --- /dev/null +++ b/blcrack/cracker/ui/font.hpp @@ -0,0 +1,4 @@ +#ifndef FONT_HPP +#define FONT_HPP +extern unsigned char g_imgui_font_data[0x94d32c]; +#endif //FONT_HPP diff --git a/blcrack/cracker/ui/ui.cpp b/blcrack/cracker/ui/ui.cpp index 21544f592..a4a00d138 100644 --- a/blcrack/cracker/ui/ui.cpp +++ b/blcrack/cracker/ui/ui.cpp @@ -8,6 +8,7 @@ #include "imgui/imgui_impl_android.h" #include "imgui/imgui_impl_opengl3.h" #include "imgui/imgui_internal.h" +#include "font.hpp" CrackerUI::CrackerUI() {} @@ -22,6 +23,14 @@ void CrackerUI::init(EGLint width, EGLint height) { ImGui_ImplOpenGL3_Init(); 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_max = ImVec2(width, height); @@ -47,36 +56,36 @@ void CrackerUI::draw_menu() { } ImGui::SameLine(); - if(ImGui::Button("Refresh")) { + if(ImGui::Button("刷新")) { m_cracker_config = Cracker::Instance().get_config(); } ImGui::SameLine(); - if(ImGui::Button("Apply")) { + if(ImGui::Button("应用")) { Cracker::Instance().apply_config(m_cracker_config); } ImGui::SameLine(); - if(ImGui::Button("Close")) { + if(ImGui::Button("关闭UI")) { m_is_show_ui.store(false); } if(ImGui::BeginTabBar("MainTab")) { - if(ImGui::BeginTabItem("Misc")) { + if(ImGui::BeginTabItem("杂项")) { if(ImGui::BeginTable("MiscTable", 2)) { ImGui::TableNextColumn(); - ImGui::Checkbox("FastChapterMove", &CONFIG_FLAG(FAST_STAGE_MOVE_CRACK)); - ImGui::Checkbox("FastOpsiMove", &CONFIG_FLAG(OPSI_FAST_MOVE)); - ImGui::Checkbox("NoBBAnimation", &CONFIG_FLAG(NO_BB_ANIMATION)); - ImGui::Checkbox("NoEmotionWarning", &CONFIG_FLAG(NO_EMOTION_WARNING)); - ImGui::Checkbox("SkipBattleCelebrate", &CONFIG_FLAG(SKIP_BATTLE_CELEBRATE)); - ImGui::Checkbox("ExerciseMorePower", &CONFIG_FLAG(EXERCISE_MORE_POWER)); + ImGui::Checkbox("章节图快速移动", &CONFIG_FLAG(FAST_STAGE_MOVE_CRACK)); + ImGui::Checkbox("大世界快速移动", &CONFIG_FLAG(OPSI_FAST_MOVE)); + ImGui::Checkbox("移除战列子弹时间", &CONFIG_FLAG(NO_BB_ANIMATION)); + ImGui::Checkbox("移除低心情警告", &CONFIG_FLAG(NO_EMOTION_WARNING)); + ImGui::Checkbox("跳过战斗胜利庆祝", &CONFIG_FLAG(SKIP_BATTLE_CELEBRATE)); + ImGui::Checkbox("演习我方伤害增加 X %", &CONFIG_FLAG(EXERCISE_MORE_POWER)); ImGui::TableNextColumn(); - ImGui::Checkbox("NoShipPropertiesLimit", &CONFIG_FLAG(REMOVE_HARD_MODE_SHIP_PROPERTIES_LIMIT)); - ImGui::Checkbox("NoShipTypeLimit", &CONFIG_FLAG(REMOVE_HARD_MODE_SHIP_TYPE_LIMIT)); - ImGui::Checkbox("FastWave", &CONFIG_FLAG(FAST_WAVE)); - ImGui::Checkbox("MonsterKillSelf", &CONFIG_FLAG(MONSTER_KILL_SELF)); - ImGui::Checkbox("NoDamage", &CONFIG_FLAG(NO_DAMAGE)); - ImGui::Checkbox("ExerciseGodMod", &CONFIG_FLAG(EXERCISE_GOD_MOD)); + ImGui::Checkbox("移除困难图属性限制", &CONFIG_FLAG(REMOVE_HARD_MODE_SHIP_PROPERTIES_LIMIT)); + ImGui::Checkbox("移除困难图舰种限制", &CONFIG_FLAG(REMOVE_HARD_MODE_SHIP_TYPE_LIMIT)); + ImGui::Checkbox("快速出怪", &CONFIG_FLAG(FAST_WAVE)); + ImGui::Checkbox("怪自杀", &CONFIG_FLAG(MONSTER_KILL_SELF)); + ImGui::Checkbox("无伤害无击杀", &CONFIG_FLAG(NO_DAMAGE)); + ImGui::Checkbox("演习锁血", &CONFIG_FLAG(EXERCISE_GOD_MOD)); ImGui::EndTable(); } @@ -85,13 +94,13 @@ void CrackerUI::draw_menu() { ImGui::EndTabItem(); } - if(ImGui::BeginTabItem("Factor")) { - ImGui::Checkbox("Factor##GG", &CONFIG_FLAG(GG_FACTOR)); + if(ImGui::BeginTabItem("倍率")) { + ImGui::Checkbox("倍率##GG", &CONFIG_FLAG(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(); - if(ImGui::Button("Fill")) { + if(ImGui::Button("填充")) { FILL_SHIP_PROPERTY(armor); FILL_SHIP_PROPERTY(speed); FILL_SHIP_PROPERTY(antiaircraft); @@ -118,23 +127,23 @@ void CrackerUI::draw_menu() { if(ImGui::BeginTable("MiscTable", 2)) { ImGui::TableNextColumn(); - ImGui::Text("Armor"); + ImGui::Text("装甲类型"); ImGui::DragInt("##Armor", &SHIP_PROPERTY(armor)); - ImGui::Text("Speed"); + ImGui::Text("航速"); ImGui::DragInt("##Speed", &SHIP_PROPERTY(speed)); - ImGui::Text("AntiAircraft"); + ImGui::Text("防空"); ImGui::DragInt("##AntiAircraft", &SHIP_PROPERTY(antiaircraft)); ImGui::Text("OxyRecoveryBench"); ImGui::DragInt("##OxyRecoveryBench", &SHIP_PROPERTY(oxy_recovery_bench)); - ImGui::Text("Torpedo"); + ImGui::Text("雷击"); ImGui::DragInt("##Torpedo", &SHIP_PROPERTY(torpedo)); - ImGui::Text("Hit"); + ImGui::Text("命中"); ImGui::DragInt("##Hit", &SHIP_PROPERTY(hit)); - ImGui::Text("SonarRange"); + ImGui::Text("反潜范围"); ImGui::DragInt("##SonarRange", &SHIP_PROPERTY(sonarRange)); - ImGui::Text("AttackDuration"); + ImGui::Text("攻击间隔"); ImGui::DragInt("##AttackDuration", &SHIP_PROPERTY(attack_duration)); - ImGui::Text("RaidDistance"); + ImGui::Text("雷达范围"); ImGui::DragInt("##RaidDistance", &SHIP_PROPERTY(raid_distance)); ImGui::Text("OxyRecoverySurface"); ImGui::DragInt("##OxyRecoverySurface", &SHIP_PROPERTY(oxy_recovery_surface)); @@ -142,23 +151,23 @@ void CrackerUI::draw_menu() { ImGui::TableNextColumn(); ImGui::Text("OxyRecovery"); ImGui::DragInt("##OxyRecovery", &SHIP_PROPERTY(oxy_recovery)); - ImGui::Text("Dodge"); + ImGui::Text("机动"); ImGui::DragInt("##Dodge", &SHIP_PROPERTY(dodge)); - ImGui::Text("Luck"); + ImGui::Text("幸运"); ImGui::DragInt("##Luck", &SHIP_PROPERTY(luck)); - ImGui::Text("Reload"); + ImGui::Text("装填"); ImGui::DragInt("##Reload", &SHIP_PROPERTY(reload)); - ImGui::Text("OxyCost"); + ImGui::Text("氧气消耗"); ImGui::DragInt("##OxyCost", &SHIP_PROPERTY(oxy_cost)); - ImGui::Text("Durability"); + ImGui::Text("耐久"); ImGui::DragInt("##Durability", &SHIP_PROPERTY(durability)); - ImGui::Text("Air"); + ImGui::Text("航空"); ImGui::DragInt("##Air", &SHIP_PROPERTY(air)); - ImGui::Text("OxyMax"); + ImGui::Text("氧气"); ImGui::DragInt("##OxyMax", &SHIP_PROPERTY(oxy_max)); - ImGui::Text("Cannon"); + ImGui::Text("炮击"); ImGui::DragInt("##Cannon", &SHIP_PROPERTY(cannon)); - ImGui::Text("AntiSub"); + ImGui::Text("反潜"); ImGui::DragInt("##AntiSub", &SHIP_PROPERTY(antisub)); ImGui::EndTable(); @@ -166,15 +175,15 @@ void CrackerUI::draw_menu() { ImGui::EndTabItem(); } - if(ImGui::BeginTabItem("Speedup")) { - ImGui::Checkbox("Global Speedup", &CONFIG_FLAG(GLOBAL_SPEEDUP)); + if(ImGui::BeginTabItem("全局加速")) { + ImGui::Checkbox("全局加速##Global Speedup", &CONFIG_FLAG(GLOBAL_SPEEDUP)); 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::EndTabItem(); } - if(ImGui::BeginTabItem("Setting")) { - ImGui::Text("FontSize"); + if(ImGui::BeginTabItem("设置")) { + ImGui::Text("字体大小"); ImGui::InputFloat("##FontSizeRate", &m_font_size, 1.0, 1.0); ImGui::EndTabItem(); }