void HeroPet::petFollowHero(cocos2d::Vec2 pos) { auto winSize = Director::getInstance()->getWinSize(); if (pos.x + 60 + getPet()->getContentSize().width < winSize.width) { getPet()->setPosition(Vec2(pos.x + 60 + getPet()->getContentSize().width, pos.y)); } else { getPet()->setPosition(Vec2(pos.x - 60 - getPet()->getContentSize().width, pos.y)); } }
void HeroPet::petAnimation() { char buff[16]; Vector<SpriteFrame *> frames; for (auto i = 1; i<=6; i++) { sprintf(buff, "hero_0%d.png", i); frames.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName(buff)); } Animation *pAnimation = Animation::createWithSpriteFrames(frames, 0.1f); getPet()->runAction(RepeatForever::create(Animate::create(pAnimation))); }
void StateSkill::execute(StateBase* parent) { BatCmdSkill* cmd = getCmd(); auto battleInfo = getBattleInfo(); auto ps = battleInfo->getPet(cmd->petUid); auto skill = ps->getSkillInfo(cmd->sid); ps->isActioned = true; if (ps->isDead || !ps->isBating) { return exitState(); } if (ps->isUnableAction) { return exitState(); } // 技能计算开始 // 生成技能运算公共数据 shared_ptr<FireSkill> fireInfo(new FireSkill); assign(fireInfo.get(), skill, skill->keySkill, 0); fireInfo->parent = nullptr; fireInfo->origin = battleInfo->topSkill() != nullptr ? battleInfo->topSkill().get() : nullptr; fireInfo->targets = fixedTargets(cmd->params, fireInfo.get(), skill->belongs.owner, skill->keySkill->target, 0); if (fireInfo->targets.size() == 0) { return exitState(); } // 压入栈 battleInfo->pushSkill(fireInfo); // 行动开始,可修改技能及目标 battleInfo->changeStage(Stage::ActionBegin); skill = fireInfo->skill; // 技能可能已被修改 // 技能释放 BatSeqSkill* s = new BatSeqSkill; s->petUid = fireInfo->firer; s->sid = fireInfo->skill->sid; s->params = fireInfo->targets; battleInfo->pushSeq(shared_ptr<ISeq>(s)); // 以次计算每个目标 // for (int i=0; i<fireInfo->targets.size(); i++) { // int dstuid = fireInfo->targets[i]; // // assign(fireInfo.get(), skill, skill->keySkill, dstuid); // createEffect(skill->keySkill->subType, skill->keySkill->subId)->execute(); // // if (!fireInfo->curr.isHit || fireInfo->isCancel) { // continue; // } // // // 计算次效果 // for (auto subsk : skill->keySkill->subs) { // shared_ptr<FireInfo> subfireInfo(new FireInfo); // subfireInfo->origin = fireInfo->origin; // subfireInfo->parent = fireInfo.get(); // fireInfo->children.push_back(subfireInfo); // // assign(subfireInfo.get(), skill, subsk.get(), dstuid); // pushSkill(subfireInfo); // // createEffect(subsk->subType, subsk->subId)->execute(); // // popSkill(); // } // // fireInfo->children.clear(); // } // // checkDead(fireInfo->targets); // // ps->onActioned(true); // // fireInfo->effect.cost.pp = 1; // changeStage(Stage::ActionEnd); // // if (keySkill->ppNum != -1) { // // BatSeqPP* pp = new BatSeqPP; // pp->petUid = fireInfo->firer; // pp->sid = fireInfo->sid; // pp->pp = fireInfo->effect.cost.pp; // pushSeq(BatSeqPtr(pp)); // } // // popSkill(); exitState(); }