From 9cac3e68c66292abdf5f31c9705aa082e04e54c8 Mon Sep 17 00:00:00 2001
From: altalk23 <45172705+altalk23@users.noreply.github.com>
Date: Sat, 24 Dec 2022 21:33:41 +0300
Subject: [PATCH 1/2] replace ::scene impls, closes #26

---
 bindings/GeometryDash.bro                   | 39 +++++++++++----------
 loader/include/Geode/cocos/cocoa/CCObject.h | 13 ++++---
 2 files changed, 27 insertions(+), 25 deletions(-)

diff --git a/bindings/GeometryDash.bro b/bindings/GeometryDash.bro
index 70e8459b..007bd48c 100644
--- a/bindings/GeometryDash.bro
+++ b/bindings/GeometryDash.bro
@@ -1078,14 +1078,12 @@ class EditButtonBar : cocos2d::CCNode {
 }
 
 class EditLevelLayer : cocos2d::CCLayer, FLAlertLayerProtocol, TextInputDelegate, UploadActionDelegate, UploadPopupDelegate, SetIDPopupDelegate {
-    static void scene(GJGameLevel* level) {
+    static cocos2d::CCScene* scene(GJGameLevel* level) {
         auto scene = cocos2d::CCScene::create();
-    
         scene->addChild(EditLevelLayer::create(level));
-    
-        cocos2d::CCDirector::sharedDirector()->replaceScene(
-            cocos2d::CCTransitionFade::create(.5f, scene)
-        );
+
+        AppDelegate::get()->m_runningScene = scene;
+        return scene;
     }
 
     static EditLevelLayer* create(GJGameLevel* level) = mac 0xe1e50, win 0x6f530, ios 0x82420;
@@ -3533,14 +3531,12 @@ class LeaderboardsLayer : cocos2d::CCLayer {
 }
 
 class LevelBrowserLayer : cocos2d::CCLayer {
-    static void scene(GJSearchObject* search) {
+    static cocos2d::CCScene* scene(GJSearchObject* search) {
         auto scene = cocos2d::CCScene::create();
-    
         scene->addChild(LevelBrowserLayer::create(search));
 
-        cocos2d::CCDirector::sharedDirector()->pushScene(
-            cocos2d::CCTransitionFade::create(.5f, scene)
-        );
+        AppDelegate::get()->m_runningScene = scene;
+        return scene;
     }
 
     bool init(GJSearchObject* search) = mac 0x2513f0, win 0x15a040;
@@ -3594,13 +3590,10 @@ class LevelEditorLayer : GJBaseGameLayer, LevelSettingsDelegate {
     }
     static cocos2d::CCScene* scene(GJGameLevel* level) {
         auto scene = cocos2d::CCScene::create();
-    
         scene->addChild(LevelEditorLayer::create(level));
-        scene->setObjType(cocos2d::kCCObjectTypeLevelEditorLayer);
-    
-        cocos2d::CCDirector::sharedDirector()->replaceScene(
-            cocos2d::CCTransitionFade::create(0.5f, scene)
-        );
+        scene->setObjType(CCObjectType::LevelEditorLayer);
+
+        AppDelegate::get()->m_runningScene = scene;
         return scene;
     }
 
@@ -3959,6 +3952,7 @@ class LoadingLayer : cocos2d::CCLayer {
     static cocos2d::CCScene* scene(bool fromReload) {
         auto scene = cocos2d::CCScene::create();
         scene->addChild(LoadingLayer::create(fromReload));
+
         return scene;
     }
 
@@ -4306,7 +4300,16 @@ class PlayLayer : GJBaseGameLayer, CCCircleWaveDelegate, CurrencyRewardDelegate,
     void resume() = mac 0x80480, win 0x20d5c0;
     void resumeAndRestart() = mac 0x80400, win 0x20d4c0;
     void saveRecordAction(bool, PlayerObject*) = mac 0x78750, win 0x20ad40;
-    static cocos2d::CCScene* scene(GJGameLevel*) = mac 0x6b500, win 0x1fb690;
+
+    static cocos2d::CCScene* scene(GJGameLevel* level) {
+        auto scene = cocos2d::CCScene::create();
+        scene->addChild(PlayLayer::create(level));
+        scene->setObjType(CCObjectType::PlayLayer);
+
+        AppDelegate::get()->m_runningScene = scene;
+        return scene;
+    }
+
     void setupLevelStart(LevelSettingsObject*) = mac 0x6f560, win 0x1fb780;
     void setupReplay(gd::string) = mac 0x7e1e0;
     void shakeCamera(float, float, float) = mac 0x744a0, win 0x1ff210;
diff --git a/loader/include/Geode/cocos/cocoa/CCObject.h b/loader/include/Geode/cocos/cocoa/CCObject.h
index cf0958ba..e6bd1135 100644
--- a/loader/include/Geode/cocos/cocoa/CCObject.h
+++ b/loader/include/Geode/cocos/cocoa/CCObject.h
@@ -48,11 +48,12 @@ NS_CC_BEGIN
  */
 
 RT_ADD(
-    typedef enum {
-        kCCObjectTypePlayLayer = 5,
-        kCCObjectTypeLevelEditorLayer = 6,
-        kCCObjectTypeMenuLayer = 15,
-    } CCObjectType;
+    // please someone tell we why in higher being(s)'s name rob did this
+    enum class CCObjectType {
+        PlayLayer = 5,
+        LevelEditorLayer = 6,
+        MenuLayer = 15,
+    };
 )
 
 class CCZone;
@@ -156,8 +157,6 @@ public:
         inline void setObjType(CCObjectType type) {
         	m_eObjType = type;
         }
-    
-        //i have no idea if vtable function order matters so 
     )
 
     friend class CCAutoreleasePool;

From ff1157aee1e546fd77d03f09a7d204320e4fdf42 Mon Sep 17 00:00:00 2001
From: altalk23 <45172705+altalk23@users.noreply.github.com>
Date: Sat, 24 Dec 2022 21:37:19 +0300
Subject: [PATCH 2/2] add cocos2d:: to ccobjectType because there isnt any
 namespace using in broma impls

---
 bindings/GeometryDash.bro | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/bindings/GeometryDash.bro b/bindings/GeometryDash.bro
index 007bd48c..1b9f0d49 100644
--- a/bindings/GeometryDash.bro
+++ b/bindings/GeometryDash.bro
@@ -3591,7 +3591,7 @@ class LevelEditorLayer : GJBaseGameLayer, LevelSettingsDelegate {
     static cocos2d::CCScene* scene(GJGameLevel* level) {
         auto scene = cocos2d::CCScene::create();
         scene->addChild(LevelEditorLayer::create(level));
-        scene->setObjType(CCObjectType::LevelEditorLayer);
+        scene->setObjType(cocos2d::CCObjectType::LevelEditorLayer);
 
         AppDelegate::get()->m_runningScene = scene;
         return scene;
@@ -4304,7 +4304,7 @@ class PlayLayer : GJBaseGameLayer, CCCircleWaveDelegate, CurrencyRewardDelegate,
     static cocos2d::CCScene* scene(GJGameLevel* level) {
         auto scene = cocos2d::CCScene::create();
         scene->addChild(PlayLayer::create(level));
-        scene->setObjType(CCObjectType::PlayLayer);
+        scene->setObjType(cocos2d::CCObjectType::PlayLayer);
 
         AppDelegate::get()->m_runningScene = scene;
         return scene;