void NodeDoor::onInputChanged(int handleId){ Node::onInputChanged(handleId); if(handleId == inputState || handleId == inputStop){ if(hasHandleData(inputStop) && getInputHandleData(inputStop).b){ setDirection(0); } else{ if(hasHandleData(inputState) && getInputHandleData(inputState).b){ if((getSpeedX() == 0 || getXCenter() != getGoalX()) && (getSpeedY() == 0 || getYCenter() != getGoalY())){ setDirection(1); } } else if((getSpeedX() == 0 || getXCenter() != getInitX()) && (getSpeedY() == 0 || getYCenter() != getInitY())){ setDirection(-1); } } } else if(handleId == inputSpeed){ if(hasHandleData(inputSpeed)){ setSpeed(getInputHandleData(inputSpeed).f); recalculateMotionData(); } } // if(getActivation() > 0 && (getSpeedX() == 0 || getXCenter() != getGoalX()) && (getSpeedY() == 0 || getYCenter() != getGoalY())){ // setDirection(1); // } // else if(getActivation() == 0 && (getSpeedX() == 0 || getXCenter() != getInitX()) && (getSpeedY() == 0 || getYCenter() != getInitY())){ // setDirection(-1); // } }
void ShapeContainer::update() { setX(getX()+getSpeedX()); if (getX() > 10.00f) setSpeed(getSpeedX()*-1); if (getX() < -10.00f) setSpeed(getSpeedX()*-1); setY(getY()+getSpeedY()); setZ(getZ()+getSpeedZ()); setRotateValues(getRotateValueX()+getRotateSpeedValueX(), getRotateValueY()+getRotateSpeedValueY(), getRotateValueZ()+getRotateSpeedValueZ()); for(std::list<Shape*>::iterator i=shapeList.begin(); i != shapeList.end(); ++i) { (*i)->update(); } }
void Hamburger::draw(int s) { int initialSpeedX= getSpeedX(); setSpeed(s, getSpeedY()); // move along with screen if need be moveLeft(); Sprite::draw(s); setSpeed(initialSpeedX, getSpeedY()); }
void Footballer::draw(int s) { int initialSpeedX=getSpeedX(); setSpeed(s+initialSpeedX,getSpeedY()); // set relative speed moveLeft(); // our background scrolls left so this syncs up with it if need be Sprite::draw(s); setSpeed(initialSpeedX,getSpeedY()); // returns sprites actual speed to normal incrementCurrentClip(); // animates clips by going to next one checkCurrentClip(); }
Ponto Shooter::imaginaryRightfeet() { int t = feetTime; Ponto pe(0,0); if (onGround && abs(getSpeedX()) < 0.05) { pe.x = 8; pe.y = 0; } else if (onGround) { if (getSpeedX() < 0) t = -t; t *= 1.0+abs(getSpeedX()); pe.x = 6*cos(t/30.0); pe.y = 2.5*sin(t/30.0)-2.5; } else if (bypass) { pe.x = 4; pe.y = -19; } else { pe.x = 4; pe.y = -19; } return pe; }
void SpaceZombie::hit(float v1x, float v1y, float m1) { char msg[128]; sprintf(msg,"Before hit, direction: %f, %f", m_direction.x, m_direction.y); // CCLOG(msg); CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("music/crash1.wav"); updateState2(); if(m_state2 == en_Floating) { float v2x = getSpeedX(); float v2y = getSpeedY(); m_direction.x = -m_direction.x; m_direction.y = -m_direction.y; m_speed = kZombieSpeedFlyAway; m_sprite->stopAllActions(); m_sprite->runAction(createFlyAwayAction()); m_state1 = en_ZombieFlyAway; scoreChanged(); sprintf(msg,"After hit, direction: %f, %f", m_direction.x, m_direction.y); //CCLOG(msg); } else if(m_state2 == en_InShield) { m_hp -= m1; if(m_hp <= 0) { m_facingLeft = v1x < 0 ? true : false; scoreChanged(); performDead(); } } }
//Si speedX llega a ser 0 gritamos "PINCHÓ!" y sacamos del medio bool Ball::isGoingRight() { return getSpeedX() > 0; }
void Shooter::updateFeetTime() { if (onGround && abs(getSpeedX()) >= 0.05) feetTime++; else feetTime = 0; }
void Sprite::movePosXWithSpeed() { characterMovement.playerMoveInX = false || characterMovement.playerMoveInX; characterMovement.playerMoveInXInCurrentFrame = false; countX++; if ( countX > delayMovementSprite.at(getCurrentState()).x ) { countX = 0; handlerAnimation->changeDirectionY( getSpeedY() ); if ( Camera::getInstance()->isCameraLimit( getSpeedX()) ) { characterMovement.playerMoveInX = false; characterMovement.playerMoveInXInCurrentFrame = false; setSpeedX(0.0f); int animationDirection = getHandlerAnimation()->getAnimationDirection(); GLfloat correctPosition = 0.0f; switch( animationDirection ) { case SpriteData::RIGHT: { correctPosition = Collider::getInstance()->getLevelLength() - spriteCollisionBox->getWidth(); position.x = correctPosition - spriteCollisionBox->getOffset().x; break; } case SpriteData::LEFT: { correctPosition = -spriteCollisionBox->getX(); setNormalPositionX( correctPosition ); break; } } getCollisionBox()->setX( getPosX() + getCollisionBox()->getOffsetXBasedOnDirection(animationDirection), animationDirection ); return; } bool canMove = collisionHandler->checkPositionWithinLevelLength(*spriteCollisionBox, directionsMove, speed, handlerAnimation->getAnimationDirection()); if ( handlerAnimation->getAnimationDirection() == SpriteData::RIGHT ) { if ( canMove ) { if ( !directionsMove.canMoveXRight || getSpeedX() == 0.0f) { return; } characterMovement.playerMoveInX = true; characterMovement.playerMoveInXInCurrentFrame = true; rigidBody->applyNaturalPhysicForces(GamePhysics::X, &speed.x, &speed.y, getCurrentState(), handlerAnimation->getAnimationDirection(), getPreviousState()); collisionHandler->checkTileCollisionX(*getCollisionBox(), &speed.x, handlerAnimation->getAnimationDirection(), directionsMove); collisionHandler->checkStateCollisionXAxis(*this); isOnGround = collisionHandler->onTheGround(*getCollisionBox()); for(std::string::size_type i = 0; i < weaponCollisionBoxes.size(); i++) { weaponCollisionBoxes.at(i).setX( position.x, handlerAnimation->getAnimationDirection() ); } return; } } else if ( canMove ) { if ( !directionsMove.canMoveXLeft || getSpeedX() == 0.0f ) { return; } rigidBody->applyNaturalPhysicForces(GamePhysics::X, &speed.x, &speed.y, getCurrentState(), handlerAnimation->getAnimationDirection(), getPreviousState()); characterMovement.playerMoveInX = true; characterMovement.playerMoveInXInCurrentFrame = true; collisionHandler->checkTileCollisionX(*getCollisionBox(), &speed.x, handlerAnimation->getAnimationDirection(), directionsMove); collisionHandler->checkStateCollisionXAxis(*this); isOnGround = collisionHandler->onTheGround(*getCollisionBox()); for(std::string::size_type i = 0; i < weaponCollisionBoxes.size(); i++) { weaponCollisionBoxes.at(i).setX( position.x + (width - weaponCollisionBoxes.at(i).getOffset().x) - weaponCollisionBoxes.at(i).getWidth(), handlerAnimation->getAnimationDirection() ); } return; } characterMovement.playerMoveInX = false; speed.x = 0.0f; } }
Sint8 CGO_Player::movePlayerRel (Sint8 direction, Sint8 direction2) { Sint8 res = 0; Sint16 x1, y1, x2, y2; if (stateRun == XBLOCKED) { return -2; } else { // XSTAND || XWALK // if ( stateRun == XSTAND || stateRun == XWALK ) // { if (stateRun == XSTAND) setRunState(XWALK); // if ( this->direction != direction || stateAni == SSTAND ) // setAniDirState ( SWALK, direction ); x1 = getArrayMiddleX(); y1 = getArrayMiddleY(); switch (direction) { case AWEST: res = setPlayerRelXY(-getSpeedX(), 0); break; case AEAST: res = setPlayerRelXY(getSpeedX(), 0); break; case ANORTH: res = setPlayerRelXY(0, -getSpeedY()); break; case ASOUTH: res = setPlayerRelXY(0, getSpeedY()); break; default: return -90; break; } x2 = getArrayMiddleX(); y2 = getArrayMiddleY(); // printf("(%d,%d %d,%d) ", x1, y1, x2, y2); if (x1 == x2 && y1 == y2) { switch (direction2) { case AWEST: res = setPlayerRelXY(-getSpeedX(), 0); break; case AEAST: res = setPlayerRelXY(getSpeedX(), 0); break; case ANORTH: res = setPlayerRelXY(0, -getSpeedY()); break; case ASOUTH: res = setPlayerRelXY(0, getSpeedY()); break; default: if (this->direction != direction || stateAni == SSTAND) { // setAniDirState(SWALK, direction); // set from move() } return -10; break; } if (this->direction != direction2 || stateAni == SSTAND) { // setAniDirState(SWALK, direction2); // set from move() return res; } return -90; } else { // if ( x2 - x1 > 0 ) // { // cout << "> "; // } // else if ( x2 - x1 < 0) // { // cout << "< "; // } // // if ( y2 - y1 > 0 ) // { // cout << "v "; // } // else if ( y2 - y1 < 0 ) // { // cout << "^ "; // } if (this->direction != direction || stateAni == SSTAND) { // setAniDirState(SWALK, direction); // set from move() return res; } return -90; } return -90; // if ( this->direction != direction || stateAni == SSTAND ) // { // setAniDirState ( SWALK, direction ); // return res; // } // else // { // switch (direction2) // { // case AWEST: // res = setPlayerRelXY( -getSpeedX(), 0 ); // break; // case AEAST: // res = setPlayerRelXY( getSpeedX(), 0 ); // break; // case ANORTH: // res = setPlayerRelXY( 0, -getSpeedY() ); // break; // case ASOUTH: // res = setPlayerRelXY( 0, getSpeedY() ); // break; // default: // return -90; // break; // } // // if ( res != -1 || this->direction != direction || stateAni == SSTAND ) // { // setAniDirState ( SWALK, direction ); // } // return res; // } } }
Sint8 CGO_Player::setPlayerRelXY (Sint16 x, Sint16 y) { t_field f; /* if( (getArrayMiddleX() + x + BOX_W2) / BOX_W >= GA_W ) er.report(LOG_WARNING, "%s: X+ %d,%d,%d,%d\n", AT, getArrayX(), getArrayMiddleX(), x, (getArrayMiddleX() + x + BOX_W2)/BOX_W ); if( (getArrayMiddleX() + x - BOX_W2) / BOX_W < 0 ) er.report(LOG_WARNING, "%s: X- %d,%d,%d,%d\n", AT, getArrayX(), getArrayMiddleX(), x, (getArrayMiddleX() + x - BOX_W2)/BOX_W ); */ if (x > 0) { //if (getArrayX(getArrayMiddleX()) != getArrayX(getArrayMiddleX() + x + BOX_W2)) { f = ga->getBoardField(getArrayX(getArrayMiddleX() + x + BOX_W2), getArrayY(getArrayMiddleY())); if (f.occupancy != TBLANK || f.bomb == true) { setX(getArrayX(getArrayMiddleX()) * BOX_W); return -1; } else { // if ( abs( (getArrayMiddleY() % BOX_H) - BOX_H2 ) >= BOX_H2 - 1 ) // { // setY( getArrayY( getArrayMiddleY() ) * BOX_H ); // return -5; // } // if ( getArrayX( getArrayMiddleX() + BOX_W2 ) != getArrayX( getArrayMiddleX() + x + BOX_W2 ) ) // { // if ( ga->getBoardField( getArrayX( getArrayMiddleX() + x + BOX_W2 ), getArrayY( getArrayMiddleY() ) ).powerup >= 0 ) // { // setPowerup( ga->getBoardField( getArrayX( getArrayMiddleX() + x + BOX_W2 ), getArrayY( getArrayMiddleY() ) ).powerup ); // ga->setFieldValPowerup( getArrayX( getArrayMiddleX() + x + BOX_W2 ), getArrayY( getArrayMiddleY() ), -1 ); // } // } } } } if (x < 0) { //if (getArrayX(getArrayMiddleX()) != getArrayX(getArrayMiddleX() + x - BOX_W2)) { f = ga->getBoardField(getArrayX(getArrayMiddleX() + x - BOX_W2), getArrayY(getArrayMiddleY())); if (f.occupancy != TBLANK || f.bomb == true) { setX(getArrayX(getArrayMiddleX()) * BOX_W); return -1; } else { // if ( abs( (getArrayMiddleY() % BOX_H) - BOX_H2 ) >= BOX_H2 - 1 ) // { // setY( getArrayY( getArrayMiddleY() ) * BOX_H ); // return -5; // } // if ( getArrayX( getArrayMiddleX() - BOX_W2 ) != getArrayX( getArrayMiddleX() + x - BOX_W2 ) ) // { // if ( ga->getBoardField( getArrayX( getArrayMiddleX() + x - BOX_W2 ), getArrayY( getArrayMiddleY() ) ).powerup >= 0 ) // { // setPowerup( ga->getBoardField( getArrayX( getArrayMiddleX() + x - BOX_W2 ), getArrayY( getArrayMiddleY() ) ).powerup ); // ga->setFieldValPowerup( getArrayX( getArrayMiddleX() + x - BOX_W2 ), getArrayY( getArrayMiddleY() ), -1 ); // } // } } } } if (y > 0) { //if (getArrayY(getArrayMiddleY()) != getArrayY(getArrayMiddleY() + y + BOX_H2)) { f = ga->getBoardField(getArrayX(getArrayMiddleX()), getArrayY(getArrayMiddleY() + y + BOX_H2)); if (f.occupancy != TBLANK || f.bomb == true) { setY(getArrayY(getArrayMiddleY()) * BOX_H); return -1; } else { // if ( abs( (getArrayMiddleX() % BOX_W) - BOX_W2 ) >= BOX_W2 - 1 ) // { // setX( getArrayX( getArrayMiddleX() ) * BOX_W ); // return -5; // } // if ( getArrayY( getArrayMiddleY() + BOX_H2 ) != getArrayY( getArrayMiddleY() + y + BOX_H2 ) ) // { // if ( ga->getBoardField( getArrayX( getArrayMiddleX() ), getArrayY( getArrayMiddleY() + y + BOX_H2 ) ).powerup >= 0 ) // { // setPowerup( ga->getBoardField( getArrayX( getArrayMiddleX() ), getArrayY( getArrayMiddleY() + y + BOX_H2 ) ).powerup ); // ga->setFieldValPowerup( getArrayX( getArrayMiddleX() ), getArrayY( getArrayMiddleY() + y + BOX_H2 ), -1 ); // } // } } } } if (y < 0) { //if (getArrayY(getArrayMiddleY()) != getArrayY(getArrayMiddleY() + y - BOX_H2)) { f = ga->getBoardField(getArrayX(getArrayMiddleX()), getArrayY(getArrayMiddleY() + y - BOX_H2)); if (f.occupancy != TBLANK || f.bomb == true) { setY(getArrayY(getArrayMiddleY()) * BOX_H); return -1; } else { // if ( abs( (getArrayMiddleX() % BOX_W) - BOX_W2 ) >= BOX_W2 - 1 ) // { // setX( getArrayX( getArrayMiddleX() ) * BOX_W ); // return -5; // } // if ( getArrayY( getArrayMiddleY() - BOX_H2 ) != getArrayY( getArrayMiddleY() + y - BOX_H2 ) ) // { // if ( ga->getBoardField( getArrayX( getArrayMiddleX() ), getArrayY( getArrayMiddleY() + y - BOX_H2 ) ).powerup >= 0 ) // { // setPowerup( ga->getBoardField( getArrayX( getArrayMiddleX() ), getArrayY( getArrayMiddleY() + y - BOX_H2 ) ).powerup ); // ga->setFieldValPowerup( getArrayX( getArrayMiddleX() ), getArrayY( getArrayMiddleY() + y - BOX_H2 ), -1 ); // } // } } } } if (moveRel(x, y) != 0) return -1; if (ga->getBoardField(getArrayX(getArrayMiddleX()), getArrayY(getArrayMiddleY())).powerup >= 0) { incPowerup(ga->getBoardField(getArrayX(getArrayMiddleX()), getArrayY(getArrayMiddleY())).powerup); ga->setFieldValPowerup(getArrayX(getArrayMiddleX()), getArrayY(getArrayMiddleY()), -1); /* FIX!!!!!!!! if (ga->getRandomPowerups() <= 0) { render.changeAnimStateRandomPowerups(false); } else { if (ga->getRandomPowerups() == 1) { render.changeAnimStateRandomPowerups(true); } } */ } Sint16 modX, modY; Sint16 rdx, rdy; modX = getArrayMiddleX() % BOX_W; modY = getArrayMiddleY() % BOX_H; rdx = abs((getArrayMiddleX() % BOX_W) - BOX_W2) / getSpeedX(); rdy = abs((getArrayMiddleY() % BOX_H) - BOX_H2) / getSpeedY(); if (x != 0) { // if ( abs( (getArrayMiddleY() % BOX_H) - BOX_H2 ) == BOX_H2 ) // { // setX( getArrayX( getArrayMiddleX() ) * BOX_W ); // return -5; // } // if ( abs( (getArrayMiddleX() % BOX_W) - BOX_W2 ) == BOX_W2 ) // { // setY( getArrayY( getArrayMiddleY() ) * BOX_H ); // return -5; // } if (modY < BOX_H2) { if (getArrayMiddleY() + rdy > BOX_H2) { setY(getArrayY(getArrayMiddleY()) * BOX_H); return -4; } else { if (rdy == 0 && (getArrayMiddleY() % BOX_H2) > 0) { setY(getArrayY(getArrayMiddleY()) * BOX_H); return -3; } else { return moveRel(0, rdy); } } } else if (modY > BOX_H2) { if (getArrayMiddleY() - rdy < BOX_H2) { setY(getArrayY(getArrayMiddleY()) * BOX_H); return -4; } else { if (rdy == 0 && (getArrayMiddleY() % BOX_H2) > 0) { setY(getArrayY(getArrayMiddleY()) * BOX_H); return -3; } else { return moveRel(0, -rdy); } } } } if (y != 0) { // if ( abs( (getArrayMiddleX() % BOX_W) - BOX_W2 ) >= BOX_W2 ) // { // setY( getArrayY( getArrayMiddleY() ) * BOX_H ); // return -5; // } // if ( abs( (getArrayMiddleY() % BOX_H) - BOX_H2 ) >= BOX_H2 ) // { // setX( getArrayX( getArrayMiddleX() ) * BOX_W ); // return -5; // } if (modX < BOX_W2) { if (getArrayMiddleX() + rdx > BOX_W2) { setX(getArrayX(getArrayMiddleX()) * BOX_W); return -4; } else { if (rdx == 0 && (getArrayMiddleX() % BOX_W2) > 0) { setX(getArrayX(getArrayMiddleX()) * BOX_W); return -3; } else { return moveRel(rdx, 0); } } } else if (modX > BOX_W2) { if (getArrayMiddleX() - rdx < BOX_W2) { setX(getArrayX(getArrayMiddleX()) * BOX_W); return -4; } else { if (rdx == 0 && (getArrayMiddleX() % BOX_W2) > 0) { setX(getArrayX(getArrayMiddleX()) * BOX_W); return -3; } else { return moveRel(-rdx, 0); } } } } return -91; // if ( y != 0 ) // { // if ( getX() % 40 != 0 ) // setX( getArrayX() * 40 ); // } // if ( x < 0 ) // setY( getArrayY() * 36 + ( modY - modX ) ); // else // setY( getArrayY() * 36 + ( modY - (18+modX) ) ); }