void CCTMXMapInfo::textHandler(void *ctx, const char *ch, int len) { CC_UNUSED_PARAM(ctx); CCTMXMapInfo *pTMXMapInfo = this; std::string pText((char*)ch,0,len); if (pTMXMapInfo->getStoringCharacters()) { std::string currentString = pTMXMapInfo->getCurrentString(); currentString += pText; pTMXMapInfo->setCurrentString(currentString.c_str()); } }
void CCTMXMapInfo::endElement(void *ctx, const char *name) { CC_UNUSED_PARAM(ctx); CCTMXMapInfo *pTMXMapInfo = this; std::string elementName = (char*)name; int len = 0; if(elementName == "data" && pTMXMapInfo->getLayerAttribs()&TMXLayerAttribBase64) { pTMXMapInfo->setStoringCharacters(false); CCTMXLayerInfo* layer = (CCTMXLayerInfo*)pTMXMapInfo->getLayers()->lastObject(); std::string currentString = pTMXMapInfo->getCurrentString(); unsigned char *buffer; len = base64Decode((unsigned char*)currentString.c_str(), (unsigned int)currentString.length(), &buffer); if( ! buffer ) { CCLOG("cocos2d: TiledMap: decode data error"); return; } if( pTMXMapInfo->getLayerAttribs() & (TMXLayerAttribGzip | TMXLayerAttribZlib) ) { unsigned char *deflated; CCSize s = layer->m_tLayerSize; // int sizeHint = s.width * s.height * sizeof(uint32_t); int sizeHint = (int)(s.width * s.height * sizeof(unsigned int)); int inflatedLen = ZipUtils::ccInflateMemoryWithHint(buffer, len, &deflated, sizeHint); CCAssert(inflatedLen == sizeHint, ""); inflatedLen = (size_t)&inflatedLen; // XXX: to avoid warnings in compiler delete [] buffer; buffer = NULL; if( ! deflated ) { CCLOG("cocos2d: TiledMap: inflate data error"); return; } layer->m_pTiles = (unsigned int*) deflated; } else { layer->m_pTiles = (unsigned int*) buffer; } pTMXMapInfo->setCurrentString(""); } else if (elementName == "map") { // The map element has ended pTMXMapInfo->setParentElement(TMXPropertyNone); } else if (elementName == "layer") { // The layer element has ended pTMXMapInfo->setParentElement(TMXPropertyNone); } else if (elementName == "objectgroup") { // The objectgroup element has ended pTMXMapInfo->setParentElement(TMXPropertyNone); } else if (elementName == "object") { // The object element has ended pTMXMapInfo->setParentElement(TMXPropertyNone); } }