void AnimationController::reset(const AnimationData& animdata) { elapsed = 0; frame = 0; alpha = static_cast<float>(animdata.getalpha(0)); alphastep = animdata.nextalpha(0, alpha) / (animdata.getdelay(0) / 16); }
/** @private */ AnimationData *XMLDataParser::parseAnimationData(const dragonBones::XMLElement *animationXML, ArmatureData *armatureData, uint frameRate) { AnimationData *animationData = new AnimationData(); animationData->name = animationXML->Attribute(ConstValues::A_NAME.c_str()); animationData->frameRate = frameRate; animationData->loop = int(animationXML->IntAttribute(ConstValues::A_LOOP.c_str())); animationData->setFadeInTime(Number(animationXML->DoubleAttribute(ConstValues::A_FADE_IN_TIME.c_str()))); animationData->duration = Number(animationXML->DoubleAttribute(ConstValues::A_DURATION.c_str())) / (Number)frameRate; animationData->scale = Number(animationXML->DoubleAttribute(ConstValues::A_SCALE.c_str())); if(strcmp(animationXML->Attribute(ConstValues::A_TWEEN_EASING.c_str()) , "NaN") == 0) { animationData->tweenEasing = NaN; } else { animationData->tweenEasing = Number(animationXML->DoubleAttribute(ConstValues::A_TWEEN_EASING.c_str())); } parseTimeline(animationXML, animationData, parseMainFrame, frameRate); TransformTimeline *timeline = 0; String timelineName; for(const dragonBones::XMLElement* timelineXML = animationXML->FirstChildElement(ConstValues::TIMELINE.c_str()) ; timelineXML ; timelineXML = timelineXML->NextSiblingElement(ConstValues::TIMELINE.c_str())) { timeline = parseTransformTimeline(timelineXML, animationData->duration, frameRate); timelineName = timelineXML->Attribute(ConstValues::A_NAME.c_str()); animationData->addTimeline(timeline, timelineName); } DBDataUtil::addHideTimeline(animationData, armatureData); DBDataUtil::transformAnimationData(animationData, armatureData); return animationData; }
const Texture* Npcdata::gettexture(string st, uint8_t frame) const { AnimationData* anim = animations.get(st); if (anim) { return anim->gettexture(frame); } else { return nullptr; } }
vector2d<int32_t> Npcdata::getdimensions(string st, uint8_t frame) const { AnimationData* anim = animations.get(st); if (anim != 0) { return anim->getdimensions(frame); } else { return vector2d<int32_t>(); } }
bool DataLoader::loadAnimationDataList(FILE *fp) { int tamanhoLista; fread(&tamanhoLista, 1, sizeof(int), fp); for(int i = 0; i < tamanhoLista; i++) { AnimationData *animationData = new AnimationData(); fread(&animationData->id, 1, sizeof(int), fp); animationData->fileName = std::string(loadString(fp)); animationData->name = std::string(loadString(fp)); fread(&animationData->colorkey_b, 1, sizeof(int), fp); fread(&animationData->colorkey_g, 1, sizeof(int), fp); fread(&animationData->colorkey_r, 1, sizeof(int), fp); fread(&animationData->frameLoop, 1, sizeof(int), fp); fread(&animationData->hasColorkey, 1, sizeof(bool), fp); fread(&animationData->hasLoop, 1, sizeof(bool), fp); int valor_horizontal_frame_number; fread(&valor_horizontal_frame_number, 1, sizeof(int), fp); animationData->setHorizontalFrameNumber(valor_horizontal_frame_number); fread(&animationData->horizontalSpacing, 1, sizeof(int), fp); fread(&animationData->order, 1, sizeof(int), fp); fread(&animationData->velocity, 1, sizeof(int), fp); int valor_vertical_frame_number; fread(&valor_vertical_frame_number, 1, sizeof(int), fp); animationData->setVerticalFrameNumber(valor_vertical_frame_number); fread(&animationData->verticalSpacing, 1, sizeof(int), fp); fread(&animationData->startX, 1, sizeof(int), fp); fread(&animationData->startY, 1, sizeof(int), fp); fread(&animationData->endX, 1, sizeof(int), fp); fread(&animationData->endY, 1, sizeof(int), fp); gameData->animationDataList->push_back(animationData); } return true; }
AnimationData *ResourceManager::loadAnimationData(std::string name) { // record the new reference this->animationDatas.addReference(name); // load if necessary if (this->animationDatas.getReferenceCount(name) == 1) { // try to load AnimationData *animationData = new AnimationData; if (!animationData->load(this->basePath + name)) { std::cerr << "Loading of animationData '" << name << "' failed!" << std::endl; delete animationData; animationData = NULL; } // storage this->animationDatas.storeResourceObject(name, animationData); } return this->animationDatas.retrieveResourceObject(name);; }
bool AnimationController::update(const AnimationData& animdata, uint16_t dpf) { if (animdata.getlastframe() > 0) { elapsed += dpf; alpha += alphastep; if (alpha < 0.f) alpha = 0.f; else if (alpha > 255.f) alpha = 255.f; uint16_t delay = animdata.getdelay(frame); if (elapsed > delay) { elapsed -= delay; frame = animdata.nextframe(frame); alphastep = (animdata.nextalpha(frame, alpha) * dpf) / delay; return frame == 0; } } return false; }
AnimationData* ObjectDataParser::parseAnimationData(Json::Value & animationObject, ArmatureData* armatureData, int frameRate) { AnimationData* animationData = new AnimationData(); if(animationObject[ConstValues::A_NAME].isString()){ animationData->name = animationObject[ConstValues::A_NAME].asCString(); }else if(animationObject[ConstValues::A_NAME].isInt()){ char temp[64]; sprintf(temp, "%d", animationObject[ConstValues::A_NAME].asInt()); animationData->name = temp; } animationData->frameRate = frameRate; animationData->loop = animationObject[ConstValues::A_LOOP].asInt(); animationData->setFadeInTime(animationObject[ConstValues::A_FADE_IN_TIME].asDouble()); animationData->setDuration(animationObject[ConstValues::A_DURATION].asDouble() / frameRate); animationData->setScale(animationObject[ConstValues::A_SCALE].asDouble()); if (animationObject.isMember(ConstValues::A_TWEEN_EASING)) { float tweenEase = animationObject[ConstValues::A_TWEEN_EASING].asDouble(); animationData->tweenEasing = tweenEase; } parseTimeline(animationObject, animationData, ObjectDataParser::parseMainFrame, frameRate); TransformTimeline* timeline = NULL; std::string timelineName; Json::Value & timelines = animationObject[ConstValues::TIMELINE]; for (uint i = 0; i < timelines.size(); i++) { Json::Value & timelineObject = timelines[i]; timeline = parseTransformTimeline(timelineObject, animationData->getDuration(), frameRate); timelineName = timelineObject[ConstValues::A_NAME].asCString(); animationData->addTimeline(timeline, timelineName); } //DBDataUtil::addHideTimeline(animationData, armatureData); DBDataUtil::transformAnimationData(animationData, armatureData); return animationData; }
bool Armature::init(const char *name) { bool bRet = false; do { removeAllChildren(); CC_SAFE_DELETE(_animation); _animation = new ArmatureAnimation(); _animation->init(this); CC_SAFE_DELETE(_boneDic); _boneDic = new Dictionary(); CC_SAFE_DELETE(_topBoneList); _topBoneList = new Array(); _topBoneList->init(); _blendFunc.src = CC_BLEND_SRC; _blendFunc.dst = CC_BLEND_DST; _name = name == NULL ? "" : name; ArmatureDataManager *armatureDataManager = ArmatureDataManager::getInstance(); if(_name.length() != 0) { _name = name; AnimationData *animationData = armatureDataManager->getAnimationData(name); CCASSERT(animationData, "AnimationData not exist! "); _animation->setAnimationData(animationData); ArmatureData *armatureData = armatureDataManager->getArmatureData(name); CCASSERT(armatureData, ""); _armatureData = armatureData; DictElement *_element = NULL; Dictionary *boneDataDic = &armatureData->boneDataDic; CCDICT_FOREACH(boneDataDic, _element) { Bone *bone = createBone(_element->getStrKey()); //! init bone's Tween to 1st movement's 1st frame do { MovementData *movData = animationData->getMovement(animationData->movementNames.at(0).c_str()); CC_BREAK_IF(!movData); MovementBoneData *movBoneData = movData->getMovementBoneData(bone->getName().c_str()); CC_BREAK_IF(!movBoneData || movBoneData->frameList.count() <= 0); FrameData *frameData = movBoneData->getFrameData(0); CC_BREAK_IF(!frameData); bone->getTweenData()->copy(frameData); bone->changeDisplayByIndex(frameData->displayIndex, false); } while (0); } update(0); updateOffsetPoint(); }
bool Armature::init(const std::string& name) { bool bRet = false; do { removeAllChildren(); CC_SAFE_DELETE(_animation); _animation = new ArmatureAnimation(); _animation->init(this); _boneDic.clear(); _topBoneList.clear(); _blendFunc = BlendFunc::ALPHA_NON_PREMULTIPLIED; _name = name; ArmatureDataManager *armatureDataManager = ArmatureDataManager::getInstance(); if(!_name.empty()) { AnimationData *animationData = armatureDataManager->getAnimationData(name); CCASSERT(animationData, "AnimationData not exist! "); _animation->setAnimationData(animationData); ArmatureData *armatureData = armatureDataManager->getArmatureData(name); CCASSERT(armatureData, ""); _armatureData = armatureData; for (auto& element : armatureData->boneDataDic) { Bone *bone = createBone(element.first.c_str()); //! init bone's Tween to 1st movement's 1st frame do { MovementData *movData = animationData->getMovement(animationData->movementNames.at(0).c_str()); CC_BREAK_IF(!movData); MovementBoneData *movBoneData = movData->getMovementBoneData(bone->getName().c_str()); CC_BREAK_IF(!movBoneData || movBoneData->frameList.size() <= 0); FrameData *frameData = movBoneData->getFrameData(0); CC_BREAK_IF(!frameData); bone->getTweenData()->copy(frameData); bone->changeDisplayWithIndex(frameData->displayIndex, false); } while (0); } update(0); updateOffsetPoint(); } else { _name = "new_armature"; _armatureData = ArmatureData::create(); _armatureData->name = _name; AnimationData *animationData = AnimationData::create(); animationData->name = _name; armatureDataManager->addArmatureData(_name.c_str(), _armatureData); armatureDataManager->addAnimationData(_name.c_str(), animationData); _animation->setAnimationData(animationData); } setGLProgramState(GLProgramState::getOrCreateWithGLProgramName(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR)); setCascadeOpacityEnabled(true); setCascadeColorEnabled(true); bRet = true; } while (0); return bRet; }
bool Armature::init(const char *name) { bool bRet = false; do { //cocos2d::CCLog("Armature (%s) create.", name); removeAllChildren(); CC_SAFE_DELETE(m_pAnimation); m_pAnimation = new Animation(); m_pAnimation->init(this); CC_SAFE_DELETE(m_pBoneDic); m_pBoneDic = new CCDictionary(); CC_SAFE_DELETE(m_pTopBoneList); m_pTopBoneList = new CCArray(); m_pTopBoneList->init(); m_sBlendFunc.src = CC_BLEND_SRC; m_sBlendFunc.dst = CC_BLEND_DST; m_strName = name == NULL ? "" : name; ArmatureDataManager *armatureDataManager = ArmatureDataManager::sharedArmatureDataManager(); if(m_strName.compare("") != 0) { m_strName = name; AnimationData* animationData = armatureDataManager->getAnimationData(name); CCAssert(animationData, "AnimationData not exist! "); m_pAnimation->setAnimationData(animationData); ArmatureData *armatureData = armatureDataManager->getArmatureData(name); CCAssert(armatureData, ""); m_pArmatureData = armatureData; CCDictElement *_element = NULL; CCDictionary *boneDataDic = &armatureData->boneDataDic; CCDICT_FOREACH(boneDataDic, _element) { Bone *bone = createBone(_element->getStrKey()); //! init bone's Tween to 1st movement's 1st frame do { MovementData *movData = animationData->getMovement(animationData->movementNames.at(0).c_str()); CC_BREAK_IF(!movData); MovementBoneData *movBoneData = movData->getMovementBoneData(bone->getName().c_str()); CC_BREAK_IF(!movBoneData || movBoneData->frameList.count() <= 0); FrameData *frameData = movBoneData->getFrameData(0); CC_BREAK_IF(!frameData); bone->getTweenData()->copy(frameData); bone->changeDisplayByIndex(frameData->displayIndex, false); } while (0); } update(0); updateOffsetPoint(); }
bool Armature::init(const char *name) { bool bRet = false; do { //cocos2d::CCLog("Armature (%s) create.", name); CC_SAFE_DELETE(m_pAnimation); m_pAnimation = Animation::create(this); CCAssert(m_pAnimation, "create Armature::m_pAnimation fail!"); m_pAnimation->retain(); CC_SAFE_DELETE(m_pBoneDic); m_pBoneDic = CCDictionary::create(); CCAssert(m_pBoneDic, "create Armature::m_pBoneDic fail!"); m_pBoneDic->retain(); m_sBlendFunc.src = CC_BLEND_SRC; m_sBlendFunc.dst = CC_BLEND_DST; m_strName = name == NULL ? "" : name; ArmatureDataManager *armatureDataManager = ArmatureDataManager::sharedArmatureDataManager(); if(m_strName.compare("") != 0) { m_strName = name; AnimationData* animationData = armatureDataManager->getAnimationData(name); CCAssert(animationData, "AnimationData not exist! "); m_pAnimation->setAnimationData(animationData); ArmatureData *armatureData = armatureDataManager->getArmatureData(name); CCAssert(armatureData, ""); m_pArmatureData = armatureData; CCDictElement *_element = NULL; CCDictionary *boneDataDic = &armatureData->boneDataDic; CCDICT_FOREACH(boneDataDic, _element) { Bone *bone = createBone(_element->getStrKey()); //! init bone's Tween to 1st movement's 1st frame do { MovementData *movData = animationData->getMovement(animationData->movementNames.at(0).c_str()); CC_BREAK_IF(!movData); MovementBoneData *movBoneData = movData->getMovementBoneData(bone->getName().c_str()); CC_BREAK_IF(!movBoneData || movBoneData->frameList.count() <= 0); FrameData *_frameData = movBoneData->getFrameData(0); CC_BREAK_IF(!_frameData); bone->getTweenData()->copy(_frameData); } while (0); } }