static void cxJumpStep(cxAny pav,cxFloat dt,cxFloat time) { cxJump this = pav; cxFloat frac = fmodf( time * this->jumps, 1.0f ); cxFloat y = this->height * 4 * frac * (1 - frac) + this->position.y * time; cxFloat x = this->position.x * time; cxVec2f diff; cxVec2f currPos = this->super.view->position; kmVec2Subtract(&diff, &currPos, &this->prevPos); kmVec2Add(&this->startPos, &diff, &this->startPos); cxVec2f nPos; kmVec2Add(&nPos, &this->startPos, &cxVec2fv(x, y)); this->prevPos = nPos; cxViewSetPos(this->super.view, nPos); }
/** * Returns the point mid-way between two others */ kmVec2* kmVec2MidPointBetween(kmVec2* pOut, const kmVec2* v1, const kmVec2* v2) { kmVec2 sum; kmVec2Add(&sum, v1, v2); pOut->x = sum.x / 2.0f; pOut->y = sum.y / 2.0f; return pOut; }
/** * Returns the point mid-way between two others */ kmVec2* kmVec2MidPointBetween(kmVec2* pOut, const kmVec2* v1, const kmVec2* v2) { kmVec2 diff; kmVec2Subtract(&diff, v2, v1); kmVec2Normalize(&diff, &diff); kmVec2Scale(&diff, &diff, kmVec2DistanceBetween(v1, v2) * 0.5); kmVec2Add(pOut, v1, &diff); return pOut; }
void BattleManagerScreen::onEntityEffectEvent( CCObject* e ) { GameEntityEffectEvt* evt = dynamic_cast<GameEntityEffectEvt*>(e); if(!evt) return; if( evt->name.compare("Death Grip") == 0 ) { CCLog("death grip"); kmVec2 pOrigin; kmVec2 pTarget; if( !GetEntityPosition(evt->origin, pOrigin) || !GetEntityPosition(evt->target, pTarget) ) { CCLog("aborting death grip evt due to invalid target(s)"); } kmVec2 toTarget; kmVec2Subtract(&toTarget, &pTarget, &pOrigin); kmVec2 u_toTarget; kmVec2Normalize(&u_toTarget, &toTarget); float leashDistance = 1; //one game unit kmVec2 dv; kmVec2Scale(&dv, &u_toTarget, leashDistance ); kmVec2 posEnd; kmVec2Add(&posEnd, &pOrigin, &dv); //convert back to screen coordinates kmVec2Scale(&posEnd, &posEnd, VIEW_UNIT_CONVERSION); GameEntityView* tView = getViewForEntity(evt->target); tView->setPosition(posEnd.x, posEnd.y); } }