99#include < Geode/loader/Log.hpp>
1010#include < Geode/loader/Mod.hpp>
1111#include " ImGui.hpp"
12- #include " nodes/DragButton.hpp"
1312
1413template <>
1514struct matjson ::Serialize<Settings> {
@@ -35,6 +34,7 @@ struct matjson::Serialize<Settings> {
3534 assign (value[" button_y" ], s.buttonPos .y );
3635 assign (value[" button_editor" ], s.buttonInEditor );
3736 assign (value[" button_game" ], s.buttonInGame );
37+ assign (value[" button_enabled" ], s.buttonEnabled );
3838 assign (value[" tree_drag_reorder" ], s.treeDragReorder );
3939
4040 return Ok (s);
@@ -57,6 +57,7 @@ struct matjson::Serialize<Settings> {
5757 { " button_y" , settings.buttonPos .y },
5858 { " button_editor" , settings.buttonInEditor },
5959 { " button_game" , settings.buttonInGame },
60+ { " button_enabled" , settings.buttonEnabled },
6061 { " tree_drag_reorder" , settings.treeDragReorder }
6162 });
6263 }
@@ -70,11 +71,9 @@ DevTools* DevTools::get() {
7071}
7172
7273void DevTools::loadSettings () { m_settings = Mod::get ()->getSavedValue <Settings>(" settings" ); }
73- void DevTools::saveSettings () {
74- m_settings.buttonPos = DragButton::get ()->getPosition ();
75- Mod::get ()->setSavedValue (" settings" , m_settings);
76- }
74+ void DevTools::saveSettings () { Mod::get ()->setSavedValue (" settings" , m_settings); }
7775Settings DevTools::getSettings () { return m_settings; }
76+ void DevTools::setBallPosition (CCPoint pos) { m_settings.buttonPos = std::move (pos); }
7877
7978bool DevTools::shouldPopGame () const {
8079 return m_visible && m_settings.GDInWindow ;
@@ -116,6 +115,38 @@ void DevTools::addCustomCallback(std::function<void(CCNode*)> callback) {
116115 m_customCallbacks.push_back (std::move (callback));
117116}
118117
118+ DragButton* DevTools::getDragButton () {
119+ return m_dragButton;
120+ }
121+
122+ void DevTools::setupDragButton () {
123+ auto spr = CircleButtonSprite::createWithSprite (" devtools.png" _spr, 1 , CircleBaseColor::Green, CircleBaseSize::MediumAlt);
124+ spr->setScale (.8f );
125+ m_dragButton = DragButton::create (spr, [this ](){
126+ this ->toggle ();
127+ });
128+ m_dragButton->setPosition (m_settings.buttonPos );
129+ m_dragButton->setZOrder (10000 );
130+ m_dragButton->setID (" devtools-button" _spr);
131+ SceneManager::get ()->keepAcrossScenes (m_dragButton);
132+ }
133+
134+ void DevTools::removeDragButton () {
135+ if (m_dragButton) {
136+ SceneManager::get ()->forget (m_dragButton);
137+ m_dragButton->removeFromParent ();
138+ m_dragButton = nullptr ;
139+ }
140+ }
141+
142+ bool DevTools::isButtonEnabled () {
143+ #ifdef GEODE_IS_MOBILE
144+ return true ;
145+ #else
146+ return m_settings.buttonEnabled ;
147+ #endif
148+ }
149+
119150// Scroll when dragging empty space
120151void mobileScrollBehavior () {
121152 auto * ctx = ImGui::GetCurrentContext ();
0 commit comments