Skip to content

Commit 106e97c

Browse files
committed
optimizations + new option
1 parent edd7b90 commit 106e97c

11 files changed

Lines changed: 89 additions & 68 deletions

File tree

src/Utils.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
#include <util/Cursor.hpp>
77
#include <util/Jumpscares.hpp>
8-
#include <util/Menu.hpp>
98
#include <util/Options.hpp>
109
#include <util/Randng.hpp>
1110
#include <util/Themes.hpp>

src/hooks/InverseInput.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#include <Utils.h>
2+
3+
#include <Geode/Geode.hpp>
4+
5+
#include <Geode/modify/GJBaseGameLayer.hpp>
6+
7+
using namespace geode::prelude;
8+
using namespace horrible::prelude;
9+
10+
#define THIS_ID "inverse_input"
11+
12+
static auto const o = Option::create(THIS_ID)
13+
->setName("Inversed Inputs")
14+
->setDescription("You jump while you're not holding the button, and don't jump while you hold the button. In platformer, movement inputs are switched with each other.\n<cl>suggested by ItsZentry</c>")
15+
->setCategory(category::misc)
16+
->setSillyTier(SillyTier::Low)
17+
->autoRegister();
18+
19+
class $modify(InverseInputGJBaseGameLayer, GJBaseGameLayer) {
20+
HORRIBLE_DELEGATE_HOOKS(THIS_ID);
21+
22+
void handleButton(bool down, int button, bool isPlayer1) {
23+
if (!m_isPlatformer) return GJBaseGameLayer::handleButton(!down, button, isPlayer1);
24+
25+
switch (button) {
26+
default: [[fallthrough]]; // who nose
27+
28+
case 1: down = !down; break;
29+
case 2: button = 3; break; // left -> right
30+
case 3: button = 2; break; // right -> left
31+
};
32+
33+
GJBaseGameLayer::handleButton(down, button, isPlayer1);
34+
};
35+
};

src/hooks/randoms/Gravity.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class $modify(GravityPlayerObject, PlayerObject) {
2727
void updateJump(float p0) {
2828
auto f = m_fields.self();
2929

30-
float newGrav = std::round(randng::pc() * (2.5f) * 100.f) / 100.f;
30+
auto newGrav = std::round(randng::pc() * (2.5f) * 100.f) / 100.f;
3131
auto onGrnd = m_isOnGround || m_isOnGround2 || m_isOnGround3 || m_isOnGround4;
3232

3333
// Only set gravity if on flat ground (not on a slope) and not rotating

src/main.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include <ranges>
44

5+
#include <ui/Menu.h>
56
#include <ui/MenuButton.h>
67
#include <ui/SettingV3.h>
78

@@ -33,7 +34,10 @@ static std::vector<std::weak_ptr<Hook>> s_floatingBtnHooks;
3334

3435
$on_game(Loaded) {
3536
(void)thisMod->registerCustomSettingType("menu", &HorribleSettingV3::parse);
36-
if (auto fb = MenuButton::get()) OverlayManager::get()->addChild(fb);
37+
38+
if (auto om = OverlayManager::get()) {
39+
if (auto fb = MenuButton::get()) om->addChild(fb);
40+
};
3741

3842
listenForSettingChanges<bool>(
3943
setting::SafeMode,
@@ -111,7 +115,7 @@ class $modify(HISafeGJGameLevel, GJGameLevel) {
111115
HORRIBLE_HOOK_INTERNAL(s_safeModeHooks);
112116

113117
void savePercentage(int, bool, int, int, bool) {
114-
log::warn("Safe mode is enabled, progress will not be saved!");
118+
log::warn("Safe mode is enabled, so progress will not be saved!");
115119
};
116120
};
117121

@@ -121,7 +125,7 @@ class $modify(HISafePlayLayer, PlayLayer) {
121125

122126
// safe mode prevents level completion
123127
void levelComplete() {
124-
log::warn("Safe mode is enabled, progress will not be saved");
128+
log::warn("Safe mode is enabled, so progress will not be saved");
125129

126130
bool testMode = m_isTestMode;
127131

@@ -177,8 +181,9 @@ class $modify(HIFloatBtnPlayLayer, PlayLayer) {
177181

178182
void toggleButton(bool toggle = false) {
179183
log::trace("{} floating button", toggle ? "Showing" : "Hiding");
184+
180185
if (auto fb = MenuButton::get()) {
181-
auto toggleTo = thisMod->getSettingValue<bool>(setting::FloatingBtn) & (fb->showInLevel() || toggle);
186+
auto toggleTo = thisMod->getSettingValue<bool>(setting::FloatingBtn) && (fb->showInLevel() || toggle);
182187

183188
fb->setVisible(toggleTo);
184189
fb->setTouchEnabled(toggleTo);

src/ui/Menu.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,16 @@ namespace horrible {
4242

4343
static Menu* get() noexcept;
4444
};
45+
46+
// Menu-related utilities
47+
namespace menu {
48+
// Open the Horrible Menu mod option menu
49+
inline void open() {
50+
if (auto old = Menu::get()) {
51+
old->removeFromParent();
52+
} else if (auto popup = Menu::create()) {
53+
popup->show();
54+
};
55+
};
56+
};
4557
};

src/ui/src/MenuButton.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
#include <Utils.h>
44

5+
#include <ui/Menu.h>
6+
57
#include <Geode/Geode.hpp>
68

79
using namespace geode::prelude;

src/ui/src/SettingV3.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
#include <Utils.h>
44

5+
#include <ui/Menu.h>
6+
57
#include <Geode/Geode.hpp>
68

79
#include <Geode/ui/Button.hpp>

src/util/Menu.hpp

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/util/Randng.hpp

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,30 +20,27 @@ namespace horrible {
2020
};
2121

2222
/**
23-
* Get any number between 0 and 3000
23+
* Get any number between 0 and 2048
2424
* @note Recommended to balance chances when calling every frame
2525
*/
26-
template <
27-
typename T = uint16_t,
28-
typename = std::enable_if_t<std::is_integral_v<T>>>
29-
inline T tiny() {
30-
return get<T>(static_cast<T>(3000), static_cast<T>(0));
26+
inline uint16_t tiny() {
27+
return get<uint16_t>(2048, 0);
3128
};
3229

3330
// Get any number between 0 and 100
34-
template <
35-
typename T = uint8_t,
36-
typename = std::enable_if_t<std::is_integral_v<T>>>
37-
inline T fast() {
38-
return get<T>(static_cast<T>(100), static_cast<T>(0));
31+
inline uint8_t fast() {
32+
return get<uint8_t>(100, 0);
3933
};
4034

41-
// Get any percent decimal between 0 and 1
42-
template <
43-
typename F = float,
44-
typename = std::enable_if_t<std::is_floating_point_v<F>>>
45-
inline F pc() {
46-
return static_cast<F>(fast<int>()) / static_cast<F>(100);
35+
/**
36+
* Get any percent decimal between 0 and 1
37+
*
38+
* @param max The maximum number to get
39+
* @param min The minimum number to get
40+
*/
41+
inline float pc(uint8_t precision = 2) {
42+
auto factor = static_cast<float>(std::pow(10, precision));
43+
return std::round(get(1.f) * factor) / factor;
4744
};
4845
};
4946
};

src/util/src/Menu.cpp

Lines changed: 0 additions & 15 deletions
This file was deleted.

0 commit comments

Comments
 (0)