Skip to content

Commit d76cd41

Browse files
committed
CCPartAnimSprite and CCSpritePart bindings
1 parent 5ddb5d6 commit d76cd41

1 file changed

Lines changed: 117 additions & 24 deletions

File tree

bindings/2.2074/GeometryDash.bro

Lines changed: 117 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2127,17 +2127,21 @@ class CCNodeContainer : cocos2d::CCNode {
21272127

21282128
[[link(android)]]
21292129
class CCPartAnimSprite : cocos2d::CCSprite {
2130-
// virtual ~CCPartAnimSprite();
2131-
CCPartAnimSprite() {
2130+
CCPartAnimSprite() = ios 0x83808 {
21322131
m_spritePartIDs = nullptr;
21332132
m_spriteFrame = nullptr;
21342133
m_hasChanged = false;
21352134
m_spriteParts = nullptr;
21362135
}
2136+
~CCPartAnimSprite() = win inline, m1 0x2f50a0, imac 0x362190, ios 0x836e0 {
2137+
CC_SAFE_RELEASE(m_spritePartIDs);
2138+
CC_SAFE_RELEASE(m_spriteFrame);
2139+
CC_SAFE_RELEASE(m_spriteParts);
2140+
}
21372141

2138-
static CCPartAnimSprite* createWithAnimDesc(char const*, cocos2d::CCTexture2D*, bool) = win inline {
2142+
static CCPartAnimSprite* createWithAnimDesc(char const* definition, cocos2d::CCTexture2D* texture, bool useTexture) = win inline, m1 0x2f346c, imac 0x360430, ios 0x8255c {
21392143
auto ret = new CCPartAnimSprite();
2140-
if (ret->initWithAnimDesc(p0, p1, p2)) {
2144+
if (ret->initWithAnimDesc(definition, texture, useTexture)) {
21412145
ret->autorelease();
21422146
return ret;
21432147
}
@@ -2154,17 +2158,73 @@ class CCPartAnimSprite : cocos2d::CCSprite {
21542158
virtual bool isFrameDisplayed(cocos2d::CCSpriteFrame*) = win 0x46330, imac 0x3619b0, m1 0x2f4814, ios 0x831c0;
21552159
virtual cocos2d::CCSpriteFrame* displayFrame() = win 0x46350, m1 0x2f482c, imac 0x3619d0, ios 0x831d8;
21562160

2157-
void changeTextureOfID(char const*, char const*);
2158-
int countParts();
2159-
void dirtify();
2160-
cocos2d::CCSprite* getSpriteForKey(char const*);
2161-
bool initWithAnimDesc(char const*, cocos2d::CCTexture2D*, bool) = win 0x45910;
2162-
void setColor(cocos2d::ccColor3B) = win 0x467c0;
2163-
void setFlipX(bool);
2164-
void setFlipY(bool);
2165-
void transformSprite(SpriteDescription*);
2166-
void tweenSpriteTo(SpriteDescription*, float);
2167-
void tweenToFrame(cocos2d::CCSpriteFrame*, float) = win 0x46360;
2161+
void changeTextureOfID(char const* key, char const* frame) = win inline, m1 0x02f431c, imac 0x3614b0, ios inline {
2162+
if (auto spritePart = static_cast<CCSpritePart*>(m_spritePartIDs->objectForKey(key))) {
2163+
if (frame) spritePart->updateDisplayFrame(frame);
2164+
else spritePart->resetTextureRect();
2165+
}
2166+
}
2167+
int countParts() = win inline, m1 0x2f4fb8, imac 0x3620c0, ios inline {
2168+
return this->getChildren()->count();
2169+
}
2170+
void dirtify() = win inline, m1 0x2f4fd4, imac 0x3620e0, ios inline {
2171+
CCObject* obj;
2172+
CCARRAY_FOREACH(this->getChildren(), obj) {
2173+
static_cast<cocos2d::CCSprite*>(obj)->setDirty(true);
2174+
}
2175+
}
2176+
CCSpritePart* getSpriteForKey(char const* key) = win inline, m1 0x2f45c8, imac 0x361750, ios 0x83028 {
2177+
return static_cast<CCSpritePart*>(m_spritePartIDs->objectForKey(key));
2178+
}
2179+
bool initWithAnimDesc(char const* definition, cocos2d::CCTexture2D* texture, bool useTexture) = win 0x45910, m1 0x2f3558, imac 0x360510, ios 0x825e8;
2180+
void setColor(cocos2d::ccColor3B color) = win 0x467c0, m1 0x2f4d18, imac 0x361e60, ios 0x8351c;
2181+
void setFlipX(bool flipX) = win inline, m1 0x2f4a48, imac 0x361bf0, ios 0x83370 {
2182+
auto currentFlipX = this->isFlipX();
2183+
if (currentFlipX != flipX) this->setScaleX(currentFlipX ? 0.f : 1.f);
2184+
CCSprite::setFlipX(flipX);
2185+
m_hasChanged = true;
2186+
}
2187+
void setFlipY(bool flipY) = win inline, m1 0x2f4aa0, imac 0x361c40, ios inline {
2188+
this->setScaleY(this->isFlipY() ? 0.f : 1.f);
2189+
CCSprite::setFlipY(flipY);
2190+
m_hasChanged = true;
2191+
}
2192+
void transformSprite(SpriteDescription* description) = win inline, m1 0x2f3ee0, imac 0x361050, ios 0x82c44 {
2193+
auto spritePart = static_cast<CCSpritePart*>(m_spriteParts->objectAtIndex(description->m_tag));
2194+
spritePart->stopAllActions();
2195+
spritePart->setPosition(description->m_position);
2196+
auto scaleX = description->m_scale.x;
2197+
if (description->m_flipped.x) scaleX = -scaleX;
2198+
auto scaleY = description->m_scale.y;
2199+
if (description->m_flipped.y) scaleY = -scaleY;
2200+
spritePart->setScaleX(scaleX);
2201+
spritePart->setScaleY(scaleY);
2202+
spritePart->setRotation(description->m_rotation);
2203+
if (description->m_usesCustomTag) {
2204+
spritePart->setDisplayFrame(description->m_texture);
2205+
spritePart->frameChanged(description->m_texture->getFrameName());
2206+
}
2207+
}
2208+
void tweenSpriteTo(SpriteDescription* description, float duration) = win inline, m1 0x2f4178, imac 0x361300, ios 0x82e84 {
2209+
auto spritePart = static_cast<CCSpritePart*>(m_spriteParts->objectAtIndex(description->m_tag));
2210+
spritePart->stopAllActions();
2211+
auto scaleX = description->m_scale.x;
2212+
if (description->m_flipped.x) scaleX = -scaleX;
2213+
auto scaleY = description->m_scale.y;
2214+
if (description->m_flipped.y) scaleY = -scaleY;
2215+
spritePart->runAction(cocos2d::CCMoveTo::create(duration, description->m_position));
2216+
spritePart->runAction(cocos2d::CCScaleTo::create(duration, scaleX, scaleY));
2217+
spritePart->runAction(cocos2d::CCRotateTo::create(duration, description->m_rotation));
2218+
if (description->m_usesCustomTag) {
2219+
spritePart->setDisplayFrame(description->m_texture);
2220+
spritePart->frameChanged(description->m_texture->getFrameName());
2221+
}
2222+
auto zValue = description->m_zValue;
2223+
if (spritePart->getZOrder() != zValue) {
2224+
this->reorderChild(spritePart, zValue);
2225+
}
2226+
}
2227+
void tweenToFrame(cocos2d::CCSpriteFrame* frame, float duration) = win 0x46360, m1 0x2f4834, imac 0x3619e0, ios 0x831e0;
21682228

21692229
cocos2d::CCDictionary* m_spritePartIDs;
21702230
cocos2d::CCSpriteFrame* m_spriteFrame;
@@ -2309,19 +2369,52 @@ class CCSpriteGrayscale : CCSpriteWithHue {
23092369
[[link(android)]]
23102370
class CCSpritePart : CCSpritePlus {
23112371
// virtual ~CCSpritePart();
2372+
CCSpritePart() = win 0x45820 {
2373+
m_isBeingUsed = false;
2374+
m_delegate = nullptr;
2375+
}
23122376

2313-
static CCSpritePart* create(cocos2d::CCTexture2D*);
2377+
static CCSpritePart* create(cocos2d::CCTexture2D* texture) = win inline, m1 0x2f3e2c, imac 0x360fa0, ios 0x82b9c {
2378+
auto ret = new CCSpritePart();
2379+
if (ret->initWithTexture(texture)) {
2380+
ret->autorelease();
2381+
return ret;
2382+
}
2383+
delete ret;
2384+
return nullptr;
2385+
}
23142386

23152387
virtual void setVisible(bool) = win 0x46a30, imac 0x362320, m1 0x2f51d8, ios 0x8375c;
23162388

2317-
static CCSpritePart* createWithSpriteFrameName(char const*);
2318-
void frameChanged(gd::string) = win 0x46980;
2319-
TodoReturn getBeingUsed();
2320-
TodoReturn hideInactive();
2321-
TodoReturn markAsNotBeingUsed();
2322-
TodoReturn resetTextureRect();
2323-
void setBeingUsed(bool);
2324-
TodoReturn updateDisplayFrame(gd::string);
2389+
static CCSpritePart* createWithSpriteFrameName(char const* frame) = win inline, m1 0x2f3cbc, imac 0x360e20, ios 0x82aa4 {
2390+
auto ret = new CCSpritePart();
2391+
if (ret->initWithSpriteFrameName(frame)) {
2392+
ret->autorelease();
2393+
return ret;
2394+
}
2395+
delete ret;
2396+
return nullptr;
2397+
}
2398+
void frameChanged(gd::string frame) = win 0x46980, m1 0x2f4060, imac 0x3611d0, ios 0x82dc4;
2399+
bool getBeingUsed() = win inline, m1 0x2f51d0, imac 0x362310, ios inline {
2400+
return m_isBeingUsed;
2401+
}
2402+
void hideInactive() = win inline, m1 0x2f47f8, imac 0x361990, ios inline {
2403+
if (!m_isBeingUsed) this->setVisible(false);
2404+
}
2405+
void markAsNotBeingUsed() = win inline, m1 0x2f47f0, imac 0x361980, ios inline {
2406+
m_isBeingUsed = false;
2407+
}
2408+
void resetTextureRect() = win inline, m1 0x2f44f0, imac 0x361680, ios inline {
2409+
this->setTextureRect({ 0.f, 0.f, 0.f, 0.f });
2410+
}
2411+
void setBeingUsed(bool beingUsed) = win inline, m1 0x2f4170, imac 0x3612f0, ios inline {
2412+
m_isBeingUsed = beingUsed;
2413+
}
2414+
void updateDisplayFrame(gd::string frame) = win inline, m1 0x2f4504, imac 0x3616a0, ios inline {
2415+
this->frameChanged(frame);
2416+
this->setDisplayFrame(cocos2d::CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(frame.c_str()));
2417+
}
23252418

23262419
bool m_isBeingUsed;
23272420
gd::string m_spriteFrameName;

0 commit comments

Comments
 (0)