Skip to content

Commit c96c37f

Browse files
committed
add sounds for editorpauselayer actions
1 parent 127ad6b commit c96c37f

File tree

4 files changed

+141
-81
lines changed

4 files changed

+141
-81
lines changed

src/gd_hooks.cpp

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "sfx.hpp"
2+
#include "mod_hooker.hpp"
23
#include <Geode/modify/EditorUI.hpp>
34
#include <Geode/modify/LevelEditorLayer.hpp>
45
#include <Geode/modify/EditButtonBar.hpp>
@@ -400,6 +401,42 @@ class $modify(SFXEditorUI, EditorUI) {
400401
EditorUI::onPause(sender);
401402
sfx::queue(EditorSFX::Popup);
402403
}
404+
405+
$override
406+
void dynamicGroupUpdate(bool p0) {
407+
EditorUI::dynamicGroupUpdate(p0);
408+
sfx::queue(EditorSFX::ToggleButton);
409+
}
410+
411+
$override
412+
void assignNewGroups(bool groupY) {
413+
EditorUI::assignNewGroups(groupY);
414+
sfx::queue(EditorSFX::ToggleButton);
415+
}
416+
417+
$override
418+
void alignObjects(CCArray* objects, bool axisY) {
419+
std::vector<CCPoint> prevPositions;
420+
prevPositions.reserve(objects->count());
421+
422+
for (const auto& obj : CCArrayExt<GameObject*>(objects)) {
423+
prevPositions.push_back(obj->getPosition());
424+
}
425+
426+
EditorUI::alignObjects(objects, axisY);
427+
428+
for (size_t i = 0; i < objects->count(); i++) {
429+
auto obj = static_cast<GameObject*>(objects->objectAtIndex(i));
430+
431+
if (
432+
std::abs(prevPositions[i].x - obj->getPositionX()) > 0.01f ||
433+
std::abs(prevPositions[i].y - obj->getPositionY()) > 0.01f
434+
) {
435+
sfx::queue(EditorSFX::Move);
436+
break;
437+
}
438+
}
439+
}
403440
};
404441

405442
class $modify(SFXLevelEditorLayer, LevelEditorLayer) {
@@ -462,6 +499,12 @@ class $modify(SFXLevelEditorLayer, LevelEditorLayer) {
462499

463500
LevelEditorLayer::handleAction(isUndo, undoObjects);
464501
}
502+
503+
$override
504+
void resetUnusedColorChannels() {
505+
LevelEditorLayer::resetUnusedColorChannels();
506+
sfx::queue(EditorSFX::ToggleButton);
507+
}
465508
};
466509

467510
class $modify(SFXEditButtonBar, EditButtonBar) {
@@ -548,6 +591,22 @@ class $modify(SFXFMODAudioEngine, FMODAudioEngine) {
548591
};
549592

550593
class $modify(SFXEditorPauseLayer, EditorPauseLayer) {
594+
bool init(LevelEditorLayer* p0) {
595+
if (!EditorPauseLayer::init(p0)) return false;
596+
597+
// im too lazy to RE all the bindings for the checkboxes sorry
598+
599+
auto menu = getChildByID("options-menu");
600+
601+
for (const auto& item : menu->getChildrenExt()) {
602+
auto checkbox = typeinfo_cast<CCMenuItemToggler*>(item);
603+
if (!checkbox) continue;
604+
605+
setSFX(checkbox, EditorSFX::ToggleButton);
606+
}
607+
608+
return true;
609+
}
551610
$override
552611
void onExitEditor(CCObject* sender) {
553612
static_cast<SFXEditorUI*>(EditorUI::get())->unschedule(schedule_selector(SFXEditorUI::updateSFX));
@@ -587,6 +646,25 @@ class $modify(SFXEditorPauseLayer, EditorPauseLayer) {
587646
EditorPauseLayer::saveLevel();
588647
sfx::clearQueue();
589648
}
649+
650+
$override
651+
void onUnlockAllLayers(CCObject* sender) {
652+
if (m_editorLayer->m_lockedLayers.size() > 0) {
653+
sfx::queue(EditorSFX::Unlock);
654+
}
655+
656+
EditorPauseLayer::onUnlockAllLayers(sender);
657+
}
658+
659+
$override
660+
void uncheckAllPortals(CCObject* sender) {
661+
unsigned int prevGuideCount = m_editorLayer->m_drawGridLayer->m_guideObjects->count();
662+
EditorPauseLayer::uncheckAllPortals(sender);
663+
664+
if (prevGuideCount > m_editorLayer->m_drawGridLayer->m_guideObjects->count()) {
665+
sfx::queue(EditorSFX::ToggleButton);
666+
}
667+
}
590668
};
591669

592670
class $modify(SFXEditLevelLayer, EditLevelLayer) {

src/mod_hooker.cpp

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,16 @@
11
#include "mod_hooker.hpp"
2-
#include <Geode/modify/EditorUI.hpp>
32
#include <Geode/modify/CCLayerColor.hpp>
43
#include <Geode/modify/CCMenuItem.hpp>
54

6-
std::vector<std::function<void(EditorUI*)>> editorUIHooks;
75
std::unordered_map<std::string, std::function<void(FLAlertLayer*)>> popupHooks;
86

9-
void registerEditorUIHook(const std::string& modID, const std::function<void(EditorUI*)>& hookFunction) {
10-
if (!Loader::get()->isModLoaded(modID)) return;
11-
12-
log::debug("Registering EditorUI hook for mod: {}", modID);
13-
editorUIHooks.push_back(hookFunction);
14-
}
15-
167
void registerPopupHook(const std::string& popupName, const std::string& modID, const std::function<void(FLAlertLayer*)>& hookFunction) {
178
if (!Loader::get()->isModLoaded(modID)) return;
189

1910
log::debug("Registering popup hook for mod: {} on popup: {}", modID, popupName);
2011
popupHooks[popupName] = hookFunction;
2112
}
2213

23-
class $modify(EditorUI) {
24-
static void onModify(auto& self) {
25-
if (!self.setHookPriority("EditorUI::init", Priority::VeryLatePost)) {
26-
log::warn("Failed to set hook priority for EditorUI::init");
27-
}
28-
}
29-
30-
bool init(LevelEditorLayer* lel) {
31-
if (!EditorUI::init(lel)) return false;
32-
if (editorUIHooks.empty()) return true;
33-
34-
for (const auto& hookFunction : editorUIHooks) {
35-
hookFunction(this);
36-
}
37-
38-
return true;
39-
}
40-
};
41-
4214
class $modify(CCLayerColor) {
4315
bool initWithColor(const ccColor4B& color, float width, float height) {
4416
if (!CCLayerColor::initWithColor(color, width, height)) return false;
@@ -79,7 +51,7 @@ class $modify(CCMenuItem) {
7951
void activate() {
8052
CCMenuItem::activate();
8153

82-
auto callback = typeinfo_cast<CCSFXCallback*>(getUserObject("sfx-callback"_spr));
54+
auto callback = static_cast<CCSFXCallback*>(getUserObject("sfx-callback"_spr));
8355
if (!callback) return;
8456

8557
callback->execute(this);

src/mod_hooker.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
#include <Geode/Geode.hpp>
66
using namespace geode::prelude;
77

8-
void registerEditorUIHook(const std::string& modID, const std::function<void(EditorUI*)>& hookFunction);
98
void registerPopupHook(const std::string& popupName, const std::string& modID, const std::function<void(FLAlertLayer*)>& hookFunction);
109

1110
class CCSFXCallback : public CCObject {

src/mod_hooks.cpp

Lines changed: 62 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "sfx.hpp"
22
#include "mod_hooker.hpp"
3+
#include <Geode/modify/EditorUI.hpp>
34
#include <Geode/modify/MenuLayer.hpp>
45

56
#include <Geode/Geode.hpp>
@@ -10,61 +11,64 @@ using namespace geode::prelude;
1011
// setCallback, setSFX, etc. check if the node is valid first for you, but otherwise
1112
// always make sure to check if a node added by a mod is valid before using it
1213

13-
void registerModHooks() {
14-
registerEditorUIHook("hjfod.betteredit", [](EditorUI* self) {
15-
setSFX(
16-
self->querySelector("undo-menu > hjfod.betteredit/hide-ui-toggle"),
17-
EditorSFX::ToggleButton
18-
);
19-
setToggleSFX(
20-
self->m_scaleControl->querySelector("hjfod.betteredit/snap-lock"),
21-
EditorSFX::Lock, EditorSFX::Unlock
22-
);
23-
setToggleSFX(
24-
self->m_rotationControl->querySelector("hjfod.betteredit/snap-lock"),
25-
EditorSFX::Lock, EditorSFX::Unlock
26-
);
27-
setToggleSFX(
28-
self->m_rotationControl->querySelector("hjfod.betteredit/pos-lock"),
29-
EditorSFX::Lock, EditorSFX::Unlock
30-
);
31-
setSFX(
32-
self->m_scaleControl->querySelector("hjfod.betteredit/snap-lock-size"),
33-
EditorSFX::ToggleButton
34-
);
35-
setSFX(
36-
self->m_rotationControl->querySelector("hjfod.betteredit/snap-lock-size"),
37-
EditorSFX::ToggleButton
38-
);
39-
});
14+
class $modify(EditorUI) {
15+
static void onModify(auto& self) {
16+
if (!self.setHookPriority("EditorUI::init", Priority::VeryLatePost)) {
17+
log::warn("Failed to set hook priority for EditorUI::init");
18+
}
19+
}
4020

41-
registerEditorUIHook("razoom.object_groups", [](EditorUI* self) {
42-
for (auto editButtonBar : CCArrayExt<EditButtonBar*>(self->m_createButtonBars)) {
43-
for (auto page : CCArrayExt<ButtonPage*>(editButtonBar->m_pagesArray)) {
44-
auto menu = page->getChildByType<CCMenu>(0);
45-
if (!menu) continue;
21+
bool init(LevelEditorLayer* lel) {
22+
if (!EditorUI::init(lel)) return false;
23+
24+
if (Loader::get()->isModLoaded("hjfod.betteredit")) {
25+
setSFX(
26+
querySelector("undo-menu > hjfod.betteredit/hide-ui-toggle"),
27+
EditorSFX::ToggleButton
28+
);
29+
setToggleSFX(
30+
m_scaleControl->querySelector("hjfod.betteredit/snap-lock"),
31+
EditorSFX::Lock, EditorSFX::Unlock
32+
);
33+
setToggleSFX(
34+
m_rotationControl->querySelector("hjfod.betteredit/snap-lock"),
35+
EditorSFX::Lock, EditorSFX::Unlock
36+
);
37+
setToggleSFX(
38+
m_rotationControl->querySelector("hjfod.betteredit/pos-lock"),
39+
EditorSFX::Lock, EditorSFX::Unlock
40+
);
41+
setSFX(
42+
m_scaleControl->querySelector("hjfod.betteredit/snap-lock-size"),
43+
EditorSFX::ToggleButton
44+
);
45+
setSFX(
46+
m_rotationControl->querySelector("hjfod.betteredit/snap-lock-size"),
47+
EditorSFX::ToggleButton
48+
);
49+
}
4650

47-
for (auto child : CCArrayExt<CCNode*>(menu->getChildren())) {
48-
auto menuItem = typeinfo_cast<CreateMenuItem*>(child);
49-
if (!menuItem) continue;
51+
if (Loader::get()->isModLoaded("razoom.object_groups")) {
52+
for (auto editButtonBar : CCArrayExt<EditButtonBar*>(m_createButtonBars)) {
53+
for (auto page : CCArrayExt<ButtonPage*>(editButtonBar->m_pagesArray)) {
54+
auto menu = page->getChildByType<CCMenu>(0);
55+
if (!menu) continue;
5056

51-
if (child->getTag() == 0) {
52-
setSFX(menuItem, EditorSFX::SwitchTab);
57+
for (auto child : CCArrayExt<CCNode*>(menu->getChildren())) {
58+
auto menuItem = typeinfo_cast<CreateMenuItem*>(child);
59+
if (!menuItem) continue;
60+
61+
if (child->getTag() == 0) {
62+
setSFX(menuItem, EditorSFX::SwitchTab);
63+
}
5364
}
5465
}
5566
}
5667
}
57-
});
58-
59-
registerPopupHook("ObjectSelectPopup", "alphalaneous.creative_mode", [](FLAlertLayer* self) {
60-
auto tabsMenu = self->m_mainLayer->getChildByID("tabs-menu");
61-
if (!tabsMenu) return;
6268

63-
for (auto child : CCArrayExt<CCNode*>(tabsMenu->getChildren())) {
64-
setSFX(child, EditorSFX::SwitchTab);
65-
}
66-
});
67-
}
69+
return true;
70+
}
71+
};
6872

6973
class $modify(MenuLayer) {
7074
$override
@@ -73,10 +77,17 @@ class $modify(MenuLayer) {
7377

7478
static bool hooksRegistered = false;
7579

76-
if (!hooksRegistered) {
77-
registerModHooks();
78-
hooksRegistered = true;
79-
}
80+
if (hooksRegistered) return true;
81+
hooksRegistered = true;
82+
83+
registerPopupHook("ObjectSelectPopup", "alphalaneous.creative_mode", [](FLAlertLayer* self) {
84+
auto tabsMenu = self->m_mainLayer->getChildByID("tabs-menu");
85+
if (!tabsMenu) return;
86+
87+
for (auto child : CCArrayExt<CCNode*>(tabsMenu->getChildren())) {
88+
setSFX(child, EditorSFX::SwitchTab);
89+
}
90+
});
8091

8192
return true;
8293
}

0 commit comments

Comments
 (0)