From 462372141fa9856632b397bc9da6bd4a6b42cf84 Mon Sep 17 00:00:00 2001 From: The Motherfucking Bearodactyl Date: Thu, 25 Apr 2024 13:49:53 -0500 Subject: [PATCH] refactor - Move the rainbow trail shit to its own header/source file combo - Use a ternary for mirroring the players instead of if/else - Use a switch statement for HSVtoRGB instead of if/else if/else --- CMakeLists.txt | 4 +- mod.json | 2 +- src/main.cpp | 133 ++++++++++-------------------------------- src/pause_button.cpp | 2 +- src/rainbow_trail.cpp | 72 +++++++++++++++++++++++ src/rainbow_trail.hpp | 10 ++++ 6 files changed, 117 insertions(+), 106 deletions(-) create mode 100644 src/rainbow_trail.cpp create mode 100644 src/rainbow_trail.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c1ae08..ed23842 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,7 +12,9 @@ file(GLOB_RECURSE SOURCES src/*.cpp ) -add_library(${PROJECT_NAME} SHARED ${SOURCES}) +add_library(${PROJECT_NAME} SHARED ${SOURCES} + src/rainbow_trail.hpp + src/rainbow_trail.cpp) if (NOT DEFINED ENV{GEODE_SDK}) message(FATAL_ERROR "Unable to find Geode SDK! Please define GEODE_SDK environment variable to point to Geode") diff --git a/mod.json b/mod.json index d9d89b3..b0d0376 100644 --- a/mod.json +++ b/mod.json @@ -5,7 +5,7 @@ "mac": "2.200", "android": "2.205" }, - "version": "v1.0.12", + "version": "v1.0.13", "id": "the_bearodactyl.gay-wave-trail", "name": "Gay Wave Trail", "developer": "The Bearodactyl", diff --git a/src/main.cpp b/src/main.cpp index 2d84f37..403900e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,123 +4,50 @@ #include #include #include +#include "rainbow_trail.hpp" using namespace geode::prelude; -// thanks to shadowforce78 -void HSVtoRGBbutDifferentIGuess(float &fR, float &fG, float &fB, float &fH, - float &fS, float &fV) { - float fC = fV * fS; // Chroma - float fHPrime = fmod(fH / 60.0, 6); - float fX = fC * (1 - fabs(fmod(fHPrime, 2) - 1)); - float fM = fV - fC; - - if (0 <= fHPrime && fHPrime < 1) { - fR = fC; - fG = fX; - fB = 0; - } else if (1 <= fHPrime && fHPrime < 2) { - fR = fX; - fG = fC; - fB = 0; - } else if (2 <= fHPrime && fHPrime < 3) { - fR = 0; - fG = fC; - fB = fX; - } else if (3 <= fHPrime && fHPrime < 4) { - fR = 0; - fG = fX; - fB = fC; - } else if (4 <= fHPrime && fHPrime < 5) { - fR = fX; - fG = 0; - fB = fC; - } else if (5 <= fHPrime && fHPrime < 6) { - fR = fC; - fG = 0; - fB = fX; - } else { - fR = 0; - fG = 0; - fB = 0; - } - - fR += fM; - fG += fM; - fB += fM; -} - -// thanks to shadowforce78 -float g = 0; - -cocos2d::_ccColor3B getRainbow(float offset, float saturation) { - float R; - float G; - float B; - - float hue = fmod(g + offset, 360); - float sat = saturation / 100.0; - float vc = 1; - HSVtoRGBbutDifferentIGuess(R, G, B, hue, sat, vc); - - cocos2d::_ccColor3B out; - out.r = R * 255; - out.g = G * 255; - out.b = B * 255; - return out; -} - class $modify(PlayerObject) { - void flashPlayer(float p0, float p1, cocos2d::ccColor3B mainColor, cocos2d::ccColor3B secondColor) { - } + void flashPlayer(float p0, float p1, cocos2d::ccColor3B mainColor, cocos2d::ccColor3B secondColor) {} }; class $modify(PlayLayer) { - void postUpdate(float p0) { - PlayLayer::postUpdate(p0); - - float speed = Mod::get()->getSettingValue("speed"); - float saturation = Mod::get()->getSettingValue("saturation"); - bool mirror_players = Mod::get()->getSettingValue("mirror-players"); + void postUpdate(float p0) { + PlayLayer::postUpdate(p0); - if (g >= 360) { - g = 0; - } else { - g += speed / 10; - } - - auto rainbowColor = getRainbow(0, saturation); - auto rainbowColor2 = getRainbow(180, saturation); - auto rainbowColor3 = getRainbow(90, saturation); - bool enable = Mod::get()->getSettingValue("enable"); - bool noRegularTrail = Mod::get()->getSettingValue("no-reg-trail"); + float speed = Mod::get()->getSettingValue("speed"); + float saturation = Mod::get()->getSettingValue("saturation"); + bool mirror_players = Mod::get()->getSettingValue("mirror-players"); - if (m_player1->m_isDart && noRegularTrail) { - m_player1->m_regularTrail->setVisible(false); - } + if (RainbowTrail::g >= 360) { + RainbowTrail::g = 0; + } else { + RainbowTrail::g += speed / 10; + } - if (m_player2->m_isDart && noRegularTrail) { - m_player2->m_regularTrail->setVisible(false); - } + _ccColor3B rainbowColor = RainbowTrail::getRainbow(0, saturation); + _ccColor3B rainbowColor2 = RainbowTrail::getRainbow(180, saturation); + _ccColor3B rainbowColor3 = RainbowTrail::getRainbow(90, saturation); + bool enable = Mod::get()->getSettingValue("enable"); + bool noRegularTrail = Mod::get()->getSettingValue("no-reg-trail"); - if (enable == true) { - if (!mirror_players) { - if (m_player1->m_waveTrail) { - m_player1->m_waveTrail->setColor(rainbowColor); + if (m_player1->m_isDart && noRegularTrail) { + m_player1->m_regularTrail->setVisible(false); } - if (m_player2->m_waveTrail) { - m_player2->m_waveTrail->setColor(rainbowColor2); - } - } else { - if (m_player1->m_waveTrail) { - m_player1->m_waveTrail->setColor(rainbowColor); + if (m_player2->m_isDart && noRegularTrail) { + m_player2->m_regularTrail->setVisible(false); } - if (m_player2->m_waveTrail) { - m_player2->m_waveTrail->setColor(rainbowColor); + if (enable) { + if (m_player1->m_waveTrail) { + m_player1->m_waveTrail->setColor(rainbowColor); + } + + if (m_player2->m_waveTrail) { + m_player2->m_waveTrail->setColor(!mirror_players ? rainbowColor2 : rainbowColor); + } } - } } - } -}; +}; \ No newline at end of file diff --git a/src/pause_button.cpp b/src/pause_button.cpp index 0336698..98c4fc7 100644 --- a/src/pause_button.cpp +++ b/src/pause_button.cpp @@ -30,7 +30,7 @@ struct GayPauseLayer : Modify { ); settingsBtn->setID("gay-settings-button"_spr); - settingsBtn->setPosition(CCPoint{ 30, 30 }); + settingsBtn->setPosition(CCPoint{ 40, 40 }); ccmenu->addChild(settingsBtn); this->addChild(ccmenu); diff --git a/src/rainbow_trail.cpp b/src/rainbow_trail.cpp new file mode 100644 index 0000000..190e0a1 --- /dev/null +++ b/src/rainbow_trail.cpp @@ -0,0 +1,72 @@ +#include "rainbow_trail.hpp" + +#include + +void RainbowTrail::HSVtoRGBbutDifferentIGuess(float &fR, float &fG, float &fB, float &fH, float &fS, float &fV) { + float fC = fV * fS; // Chroma + float fHPrime = fmod(fH / 60.0, 6); + float fX = fC * (1 - fabs(fmod(fHPrime, 2) - 1)); + float fM = fV - fC; + + int hue_segment = static_cast(fHPrime); + switch (hue_segment) { + case 0: + fR = fC; + fG = fX; + fB = 0; + break; + case 1: + fR = fX; + fG = fC; + fB = 0; + break; + case 2: + fR = 0; + fG = fC; + fB = fX; + break; + case 3: + fR = 0; + fG = fX; + fB = fC; + break; + case 4: + fR = fX; + fG = 0; + fB = fC; + break; + case 5: + fR = fC; + fG = 0; + fB = fX; + break; + default: + fR = 0; + fG = 0; + fB = 0; + break; + } + + fR += fM; + fG += fM; + fB += fM; +} + +float RainbowTrail::g = 0; + +cocos2d::_ccColor3B RainbowTrail::getRainbow(float offset, float saturation) { + float R; + float G; + float B; + + float hue = fmod(g + offset, 360); + float sat = saturation / 100.0; + float vc = 1; + HSVtoRGBbutDifferentIGuess(R, G, B, hue, sat, vc); + + cocos2d::_ccColor3B out; + out.r = R * 255; + out.g = G * 255; + out.b = B * 255; + return out; +} \ No newline at end of file diff --git a/src/rainbow_trail.hpp b/src/rainbow_trail.hpp new file mode 100644 index 0000000..f86628d --- /dev/null +++ b/src/rainbow_trail.hpp @@ -0,0 +1,10 @@ +#pragma once + +#include + +class RainbowTrail { +public: + static void HSVtoRGBbutDifferentIGuess(float &fR, float &fG, float &fB, float &fH, float &fS, float &fV); + static cocos2d::_ccColor3B getRainbow(float offset, float saturation); + static float g; +};