99using namespace geode ::prelude;
1010using namespace AlphaUtils ;
1111
12- static std::vector<Ref<ObjectData>> s_objectArena;
13- static std::queue<uint32_t > s_freeArenaSlots;
12+ std::vector<Ref<ObjectData>>& getObjectArena () {
13+ static auto * arena = new std::vector<Ref<ObjectData>>();
14+ return *arena;
15+ }
16+
17+ std::queue<uint32_t >& getFreeSlots () {
18+ static auto * slots = new std::queue<uint32_t >();
19+ return *slots;
20+ }
1421
1522uint32_t allocateObjectData (ObjectData* data) {
16- if (!s_freeArenaSlots.empty ()) {
17- uint32_t id = s_freeArenaSlots.front (); s_freeArenaSlots.pop ();
18- s_objectArena[id] = data;
23+ auto & arena = getObjectArena ();
24+ auto & slots = getFreeSlots ();
25+ if (!slots.empty ()) {
26+ uint32_t id = slots.front (); slots.pop ();
27+ arena[id] = data;
1928 return id;
2029 } else {
21- s_objectArena .push_back (data);
22- return static_cast <uint32_t >(s_objectArena .size () - 1 );
30+ arena .push_back (data);
31+ return static_cast <uint32_t >(arena .size () - 1 );
2332 }
2433}
2534
2635void releaseObjectData (uint32_t id) {
27- if (id < s_objectArena.size () && s_objectArena[id]) {
28- s_objectArena[id] = nullptr ;
29- s_freeArenaSlots.push (id);
36+ auto & arena = getObjectArena ();
37+ auto & slots = getFreeSlots ();
38+ if (id < arena.size () && arena[id]) {
39+ arena[id] = nullptr ;
40+ slots.push (id);
3041 }
3142}
3243
@@ -53,8 +64,9 @@ void FieldCCObject::tryCreateData() {
5364
5465ObjectData* FieldCCObject::getObjectData () {
5566 tryCreateData ();
56- if (m_nLuaID < s_objectArena.size ()) {
57- return s_objectArena[m_nLuaID];
67+ auto & arena = getObjectArena ();
68+ if (m_nLuaID < arena.size ()) {
69+ return arena[m_nLuaID];
5870 }
5971 return nullptr ;
6072}
0 commit comments