Skip to content

Commit 2ac16a5

Browse files
committed
Maybe resolve mac crash
1 parent e346f6d commit 2ac16a5

File tree

4 files changed

+27
-14
lines changed

4 files changed

+27
-14
lines changed

changelog.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# 1.1.2
2+
- Implement evil disable hook on exit thing that should maybe fix a MacOS crash idk, it could, we will have to see
3+
14
# 1.1.1
25
- Separate Node and Object modify macros
36
- $nodeModify now has a base class of CCNode

include/CCObject.h

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

33
#include <Geode/Geode.hpp>
44
#include <Geode/modify/CCObject.hpp>
5-
#include <Geode/modify/CCScriptEngineManager.hpp>
65
#include <Geode/cocos/cocoa/CCObject.h>
76
#include "Fields.h"
87

@@ -43,10 +42,6 @@ class DummyScriptEngineProtocol : public cocos2d::CCScriptEngineProtocol {
4342
bool parseConfig(ConfigType type, const gd::string& str) { return false; };
4443
};
4544

46-
struct ALPHA_UTILS_API_DLL MyCCScriptEngineManager : public geode::Modify<MyCCScriptEngineManager, cocos2d::CCScriptEngineManager> {
47-
static cocos2d::CCScriptEngineManager* sharedManager();
48-
};
49-
5045
class ObjectFieldContainer;
5146

5247
struct ALPHA_UTILS_API_DLL FieldCCObject : public cocos2d::CCObject {

mod.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
},
99
"id": "alphalaneous.alphas_geode_utils",
1010
"name": "Alpha's Geode Utils",
11-
"version": "v1.1.1",
11+
"version": "v1.1.2",
1212
"developer": "Alphalaneous",
1313
"description": "Miscellaneous utilities for Geode Modding",
1414
"api": {

src/hooks/CCObject.cpp

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "../../include/Fields.h"
66
#include <Geode/modify/CCObject.hpp>
77
#include <queue>
8+
#include <Geode/modify/CCScriptEngineManager.hpp>
89

910
using namespace geode::prelude;
1011
using namespace AlphaUtils;
@@ -34,14 +35,29 @@ void DummyScriptEngineProtocol::removeScriptObjectByCCObject(CCObject* pObj) {
3435
releaseObjectData(pObj->m_nLuaID);
3536
}
3637

37-
CCScriptEngineManager* MyCCScriptEngineManager::sharedManager() {
38-
auto ret = CCScriptEngineManager::sharedManager();
39-
if (!ret->m_pScriptEngine) {
40-
ret->setScriptEngine(new DummyScriptEngineProtocol());
38+
class $modify(MyCCScriptEngineManager, CCScriptEngineManager) {
39+
40+
static Hook* sharedEngineHook;
41+
42+
static void onModify(auto& self) {
43+
Result<Hook*> hookRes = self.getHook("cocos2d::CCScriptEngineManager::sharedManager");
44+
if (hookRes.isOk()) sharedEngineHook = hookRes.unwrap();
45+
std::atexit([] {
46+
if (sharedEngineHook) (void) sharedEngineHook->disable();
47+
});
4148
}
4249

43-
return ret;
44-
}
50+
static cocos2d::CCScriptEngineManager* sharedManager() {
51+
auto ret = CCScriptEngineManager::sharedManager();
52+
if (!ret->m_pScriptEngine) {
53+
ret->setScriptEngine(new DummyScriptEngineProtocol());
54+
}
55+
56+
return ret;
57+
}
58+
};
59+
60+
Hook* MyCCScriptEngineManager::sharedEngineHook = nullptr;
4561

4662
class $modify(CCObject) {
4763
CCObject* autorelease() {
@@ -100,5 +116,4 @@ CCObject* FieldCCObject::getUserObject(std::string const& id) {
100116
return meta->m_userObjects.at(id);
101117
}
102118
return nullptr;
103-
}
104-
119+
}

0 commit comments

Comments
 (0)