diff --git a/Chikara/Config.cpp b/Chikara/Config.cpp index 7afc80f..f18f288 100644 --- a/Chikara/Config.cpp +++ b/Chikara/Config.cpp @@ -32,6 +32,7 @@ void Config::Load(std::string& path) { note_speed = GetFloat(reader, "Chikara", "NoteSpeed", note_speed); rainbow_speed = GetFloat(reader, "Chikara", "RainbowSpeed", rainbow_speed); start_delay = GetFloat(reader, "Chikara", "StartDelay", start_delay); + loader_buffer = GetFloat(reader, "Chikara", "LoaderBuffer", loader_buffer); config_path = path; } @@ -57,6 +58,7 @@ bool Config::Save() { WriteFloat(ini, "NoteSpeed", note_speed); WriteFloat(ini, "RainbowSpeed", rainbow_speed); WriteFloat(ini, "StartDelay", start_delay); + WriteFloat(ini, "LoaderBuffer", loader_buffer); fclose(ini); diff --git a/Chikara/Config.h b/Chikara/Config.h index ecdf514..e51a2d4 100644 --- a/Chikara/Config.h +++ b/Chikara/Config.h @@ -26,6 +26,7 @@ class Config { float note_speed = 0.15; float rainbow_speed = 100; float start_delay = 1; + float loader_buffer = 10; private: glm::vec3 GetVec3(INIReader& reader, const std::string& section, const std::string& name, glm::vec3& default_value); float GetFloat(INIReader& reader, const std::string& section, const std::string& name, float& default_value); diff --git a/Chikara/GlobalTime.cpp b/Chikara/GlobalTime.cpp index ba4fab5..a762de4 100644 --- a/Chikara/GlobalTime.cpp +++ b/Chikara/GlobalTime.cpp @@ -41,8 +41,8 @@ void GlobalTime::resume() void GlobalTime::changeSpeed(float speed) { - syncTime(); this->speed = speed; + syncTime(); } void GlobalTime::skipForward(float seconds) diff --git a/Chikara/Main.cpp b/Chikara/Main.cpp index bd8127c..0c548ff 100644 --- a/Chikara/Main.cpp +++ b/Chikara/Main.cpp @@ -60,6 +60,19 @@ void Main::run(int argc, wchar_t** argv) std::cout << "RPC Enabled: 0 (Discord Not Installed)" << std::endl; Config::GetConfig().discord_rpc = false; } + + try + { + if(Config::GetConfig().loader_buffer < 0) + { + Config::GetConfig().loader_buffer = 0; + Config::GetConfig().Save(); + } + } + catch (const std::exception& e) + { + //Config didn't exist, expecting it to just be 10; + } wchar_t* filename_temp = _wcsdup(filename.c_str()); midi = new Midi(filename_temp); diff --git a/Chikara/Midi.cpp b/Chikara/Midi.cpp index b01cf76..c6f8b9c 100644 --- a/Chikara/Midi.cpp +++ b/Chikara/Midi.cpp @@ -2,6 +2,7 @@ #include "Main.h" #include "Midi.h" #include "KDMAPI.h" +#include "Config.h" #include #include @@ -309,7 +310,7 @@ void Midi::LoaderThread() while(true) { memset(tracks_ended, 0, track_count); - while(seconds < renderer_time.load() + 10.0f) + while(seconds < renderer_time.load() + (Config::GetConfig().loader_buffer >= 0 ? Config::GetConfig().loader_buffer : 0)) { for(int i = 0; i < track_count; i++) { diff --git a/Chikara/Renderer.cpp b/Chikara/Renderer.cpp index abe9706..01e305c 100644 --- a/Chikara/Renderer.cpp +++ b/Chikara/Renderer.cpp @@ -2050,10 +2050,13 @@ void Renderer::ImGuiFrame(GlobalTime* _gt) ImGui::Checkbox("Toggle Discord Rich Presence*", &Config::GetConfig().discord_rpc); ImGui::SliderFloat("Start Delay (Seconds)*", &Config::GetConfig().start_delay, 0, 60); ImGui::SliderFloat("Note Speed", &Config::GetConfig().note_speed, 10, 0.01); + if(ImGui::SliderFloat("Note Buffer (Seconds)", &Config::GetConfig().loader_buffer, 1, 100)) if(Config::GetConfig().loader_buffer < 0) Config::GetConfig().loader_buffer = 0; ImGui::Checkbox("Rainbow Bar", &Config::GetConfig().rainbow_bar); ImGui::ColorEdit3("Background Color*", &Config::GetConfig().clear_color.r, ImGuiColorEditFlags_RGB); ImGui::ColorEdit3("Bar Color", &Config::GetConfig().bar_color.r, ImGuiColorEditFlags_RGB); // haha undefined behavior go Segmentation fault if(Config::GetConfig().rainbow_bar) ImGui::SliderFloat("Rainbow Speed", &Config::GetConfig().rainbow_speed, 1, 1000); + ImGui::Separator(); + ImGui::Text("Note: Increasing the Note Buffer increases ram usage"); ImGui::EndTabItem(); } if(ImGui::BeginTabItem("Playback"))