Esempio n. 1
0
void SimObject::calculateSprings(SimObject* anotherObject, double delta,
	double springMaxDistance, double springDistance, double springDamping, double springForce) {

	double distance = distanceBetween(this, anotherObject);
	if(distance == 0) return;
	if(springMaxDistance > 0 && distance > springMaxDistance) {
		springConnections.erase(std::remove(springConnections.begin(), springConnections.end(), anotherObject), springConnections.end());
		anotherObject->incomingSpringConnectionsCount--;
		return;
	}
	double offset = distance - springDistance;
	double relativeSpeedX = anotherObject->getVelX() - getVelX();
	double relativeSpeedY = anotherObject->getVelY() - getVelY();
	//TODO remake damping
	double relativeSpeed = sqrt(relativeSpeedX*relativeSpeedX + relativeSpeedY*relativeSpeedY);
	double dampingForce = relativeSpeed * springDamping;
	double dampingForceX, dampingForceY;
	if(relativeSpeed != 0) {
		dampingForceX = relativeSpeedX / relativeSpeed * dampingForce;
		dampingForceY = relativeSpeedY / relativeSpeed * dampingForce;
	} else {
		dampingForceX = 0;
		dampingForceY = 0;
	}
	double force;
	force = offset * springForce - dampingForce;
	double forceX = (anotherObject->getX() - getX()) / distance * force + dampingForceX;
	double forceY = (anotherObject->getY() - getY()) / distance * force + dampingForceY;
	double velX = getVelX();
	double velY = getVelY();
	velX += forceX / getMass() * delta;
	velY += forceY / getMass() * delta;
	setVelX(velX);
	setVelY(velY);
}
Esempio n. 2
0
void SimObject::calculateGravity(SimObject* anotherObject, double delta, double gravityRadialForce) {
	double distance = distanceBetween(this, anotherObject);
	if(distance == 0) return;
	double force = gravityRadialForce * getMass() * anotherObject->getMass() / (distance*distance);
	double forceX = (anotherObject->getX() - getX()) / distance * force;
	double forceY = (anotherObject->getY() - getY()) / distance * force;
	double velX = getVelX();
	double velY = getVelY();
	velX += forceX / getMass() * delta;
	velY += forceY / getMass() * delta;
	setVelX(velX);
	setVelY(velY);
}
Esempio n. 3
0
void CShip::draw(sf::RenderWindow* window, float interpolation) {

	float iX = getX() + (getVelX() * interpolation);
	float iY = getY() + (getVelY() * interpolation);

	// Calculate point ahead of ship to point to
	float rads = getRotation()/3.14*180;
	float px = iX-30*std::cos(rads);
	float py = iY-30*std::sin(rads);

	sprite.setPosition(iX, iY);
	// Set rotation at the point
	sprite.setRotation( -std::atan2(px - iX, py - iY)*180/3.14);
	window->draw(sprite);
}
Esempio n. 4
0
void SimObject::setVelY(double velY) {
	rigidBody->setLinearVelocity(btVector3(getVelX(), velY, 0));
}
Esempio n. 5
0
//changement de sprite
void Avatar::setSlide(Uint8* keystates) {
     if( compteurAnim.get_ticks() > cycleWalk ) {
         switch(typeAnim) {
            case 6 :
              if (keystates[ SDLK_RIGHT ]) {
                  if (numSlide >= 5) {
                      numSlide = 0 ;
                  } else {
                      numSlide++  ;
                  }
              }
              if (keystates[ SDLK_LEFT ]) {
                  if (numSlide >= 11 || numSlide < 6 ) {
                      numSlide = 6 ;
                  } else {
                      numSlide++ ;
                  }
              }
              if (!keystates[ SDLK_LEFT ] && !keystates[ SDLK_RIGHT ] && !keystates[ SDLK_UP ]) {
                  if ( numSlide < 6 ) {
                      numSlide = 12 ;
                  }
                  if ( 12 <= numSlide &&  numSlide < 18 ) {
                      numSlide ++ ;
                  }
                  if ( 18 == numSlide) {
                      numSlide = 12  ;
                  }
                  if ( 6 <= numSlide && numSlide < 12 ) {
                      numSlide = 19 ;
                  }
                  if ( 19 <= numSlide &&  numSlide < 23 ) {
                      numSlide ++ ;
                  }
                  if ( 23 <= numSlide) {
                      
                      if ( numSlide == 24) {
                         numSlide = 13  ;
                      } else {
                         numSlide = 19  ;    
                      }
                  }
              }
              if ((!getSurPlateforme()) && (!getAuSol())) {
                  if(getVelX() < 0 || 19 <= numSlide && numSlide < 23 ) {
                       numSlide = 26 ;
                  } else {
                       numSlide = 24  ; 
                  }
              }        
              compteurAnim.start();
              break ;
              
           case 4 :
              if( compteurAnim.get_ticks() > cycleWalk ) {
                
                    if (numSlide >= 3) {
                       numSlide = 0 ;
                   } else {
                       numSlide++  ;
                   }
                 }
              
              compteurAnim.start();
              break ;
        }           
    }
}