Exemple #1
0
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();
    }
}
Exemple #3
0
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());
}
Exemple #4
0
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;
}
Exemple #6
0
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();
		}
	}
}
Exemple #7
0
//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;
}
Exemple #9
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;
  }
}
Exemple #10
0
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;
		//		 }
	}
}
Exemple #11
0
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) ) );

}