mirror of
https://github.com/0O0o0oOoO00/Alas.git
synced 2026-05-14 14:39:25 +08:00
add: pause lua state when setting better global speedup rate
This commit is contained in:
@@ -641,6 +641,10 @@ void Cracker::print_value(std::vector<std::string>& path) {
|
||||
}
|
||||
}
|
||||
|
||||
void Cracker::better_global_speedup_pause(bool is_need) {
|
||||
m_better_global_speedup_need_pause.store(is_need);
|
||||
}
|
||||
|
||||
void Cracker::load_lua_resources() {
|
||||
SPDLOG_INFO("Load lua resources");
|
||||
|
||||
@@ -966,6 +970,7 @@ void Cracker::hook_all_lua_functions() {
|
||||
m_state["ys"]["Battle"]["BattleState"]["ExitBattle"] = [this](sol::this_state L, Lua::VariadicArgs args) {
|
||||
m_original.ys_Battle_BattleState_ExitBattle(L, args);
|
||||
if (IS_ENABLED(BETTER_GLOBAL_SPEEDUP)) {
|
||||
better_global_speedup_pause(false);
|
||||
better_global_speedup_set_rate(m_better_global_speedup_rate.load());
|
||||
}
|
||||
};
|
||||
@@ -973,6 +978,7 @@ void Cracker::hook_all_lua_functions() {
|
||||
m_state["ys"]["Battle"]["BattleState"]["ScaleTimer"] = [this](sol::this_state L, Lua::VariadicArgs args) {
|
||||
m_original.ys_Battle_BattleState_ScaleTimer(L, args);
|
||||
if (IS_ENABLED(BETTER_GLOBAL_SPEEDUP)) {
|
||||
better_global_speedup_pause(false);
|
||||
better_global_speedup_set_rate(m_better_global_speedup_rate.load());
|
||||
}
|
||||
};
|
||||
@@ -1452,6 +1458,20 @@ void Cracker::hook_all_lua_functions() {
|
||||
}
|
||||
|
||||
void Cracker::better_global_speedup_set_rate(double rate) {
|
||||
if (m_better_global_speedup_need_pause.load()) {
|
||||
better_global_speedup_set_rate_with_pause(rate);
|
||||
} else {
|
||||
better_global_speedup_set_rate_without_pause(rate);
|
||||
}
|
||||
}
|
||||
|
||||
void Cracker::better_global_speedup_set_rate_with_pause(double rate) {
|
||||
LUA_STATUS_PAUSER_GUARD();
|
||||
m_state["ys"]["Battle"]["BattleConfig"]["BASIC_TIME_SCALE"] = rate;
|
||||
m_state["Time"]["timeScale"] = rate;
|
||||
}
|
||||
|
||||
void Cracker::better_global_speedup_set_rate_without_pause(double rate) {
|
||||
m_state["ys"]["Battle"]["BattleConfig"]["BASIC_TIME_SCALE"] = rate;
|
||||
m_state["Time"]["timeScale"] = rate;
|
||||
}
|
||||
|
||||
@@ -256,11 +256,16 @@ public:
|
||||
void print_table_field(std::vector<std::string>& path);
|
||||
void print_value(std::vector<std::string>& path);
|
||||
|
||||
void better_global_speedup_pause(bool is_need);
|
||||
|
||||
Config get_config();
|
||||
|
||||
void apply_config(Config& config);
|
||||
|
||||
private:
|
||||
void better_global_speedup_set_rate_with_pause(double rate);
|
||||
void better_global_speedup_set_rate_without_pause(double rate);
|
||||
|
||||
void load_cracker_with_pause();
|
||||
void load_cracker_without_pause();
|
||||
|
||||
@@ -436,6 +441,7 @@ private:
|
||||
std::atomic<float> m_global_speedup_rate = 1.0;
|
||||
std::atomic<double> m_better_global_speedup_rate = 1.0;
|
||||
LuaStatePauser m_lua_state_pauser;
|
||||
std::atomic<bool> m_better_global_speedup_need_pause = false;
|
||||
};
|
||||
|
||||
#endif //CRACKER_HPP
|
||||
|
||||
@@ -794,7 +794,9 @@ CrackerServer::CrackerServer() {
|
||||
|
||||
Post("/enable_better_global_speedup", [](const httplib::Request& req, httplib::Response& res) {
|
||||
try {
|
||||
Cracker::Instance().enable_better_global_speedup();
|
||||
auto& ins = Cracker::Instance();
|
||||
ins.better_global_speedup_pause(true);
|
||||
ins.enable_better_global_speedup();
|
||||
} catch (std::exception& e) {
|
||||
SPDLOG_ERROR("Enable better global speedup failed: {}", e.what());
|
||||
res.status = 500;
|
||||
@@ -808,7 +810,9 @@ CrackerServer::CrackerServer() {
|
||||
Json::Reader reader;
|
||||
Json::Value j;
|
||||
reader.parse(req.body, j);
|
||||
Cracker::Instance().update_better_global_speedup_rate(j["rate"].asDouble());
|
||||
auto& ins = Cracker::Instance();
|
||||
ins.better_global_speedup_pause(true);
|
||||
ins.update_better_global_speedup_rate(j["rate"].asDouble());
|
||||
} catch (std::exception& e) {
|
||||
SPDLOG_ERROR("Update better global speedup rate failed: {}", e.what());
|
||||
res.status = 500;
|
||||
@@ -819,7 +823,9 @@ CrackerServer::CrackerServer() {
|
||||
|
||||
Post("/disable_better_global_speedup", [](const httplib::Request& req, httplib::Response& res) {
|
||||
try {
|
||||
Cracker::Instance().disable_better_global_speedup();
|
||||
auto& ins = Cracker::Instance();
|
||||
ins.better_global_speedup_pause(true);
|
||||
ins.disable_better_global_speedup();
|
||||
} catch (std::exception& e) {
|
||||
SPDLOG_ERROR("Disable better global speedup failed: {}", e.what());
|
||||
res.status = 500;
|
||||
|
||||
@@ -85,7 +85,9 @@ void CrackerUI::draw_menu() {
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if(ImGui::Button("应用")) {
|
||||
Cracker::Instance(false).apply_config(m_cracker_config);
|
||||
auto& ins = Cracker::Instance(false);
|
||||
ins.better_global_speedup_pause(false);
|
||||
ins.apply_config(m_cracker_config);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if(ImGui::Button("关闭UI")) {
|
||||
|
||||
Reference in New Issue
Block a user