SHARE
TWEET

Untitled

a guest Nov 8th, 2016 73 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. private void applySteering (float delta) {
  2.         float newOrientation = 0;
  3.         boolean anyAccelerations = false;
  4.         // Update position and linear velocity. Velocity is trimmed to maximum speed
  5.         if(!steeringOutput.linear.isZero()){
  6.             Vector2 force = steeringOutput.linear.scl(delta);
  7.  
  8.             body.applyForceToCenter(force, true);
  9.             anyAccelerations = true;
  10.         }
  11.        
  12.         if(steeringOutput.angular != 0)
  13.         {
  14.             body.applyTorque(steeringOutput.angular * delta, true);
  15.             anyAccelerations = true;
  16.         }
  17.         else
  18.         {
  19.             Vector2 linVel = getLinearVelocity();
  20.             if(!linVel.isZero()){
  21.                 newOrientation = (float) (vectorToAngle(linVel) + (Math.PI / 2));
  22.                 body.setAngularVelocity((newOrientation - getAngularVelocity()) * delta);
  23.                 body.setTransform(body.getPosition(), newOrientation);
  24.             }
  25.         }
  26.        
  27.         if(anyAccelerations){
  28.             Vector2 velocity = body.getLinearVelocity();
  29.             float currentSpeedSquare = velocity.len2();
  30.             if(currentSpeedSquare > maxLinearSpeed * maxLinearSpeed){
  31.                 body.setLinearVelocity(velocity.scl(maxLinearSpeed / (float) Math.sqrt(currentSpeedSquare)));
  32.  
  33.             }
  34.             if(body.getAngularVelocity() > maxAngularSpeed){
  35.                 body.setAngularVelocity(maxAngularSpeed);
  36.             }
  37.         }
  38.         if(!isPathfinding()){ //to prevent pushing ai into walls
  39.             if(steeringOutput.linear.x == 0 && steeringOutput.linear.y == 0 && getTarget() == null)
  40.             {
  41.                 if(Collision.collidesLeft(positionMap.get(entity), collisionMap.get(entity), velocityMap.get(entity),entity))
  42.                 {              
  43.                     bodyMap.get(entity).body.setType(BodyDef.BodyType.KinematicBody);
  44.                     bodyMap.get(entity).body.setLinearVelocity(1, 0);
  45.                 }
  46.                 else if(Collision.collidesRight(positionMap.get(entity), collisionMap.get(entity), velocityMap.get(entity),entity))
  47.                 {
  48.                     bodyMap.get(entity).body.setType(BodyDef.BodyType.KinematicBody);
  49.                     bodyMap.get(entity).body.setLinearVelocity(-1, 0);
  50.                 }
  51.                 else if(Collision.collidesBottom(positionMap.get(entity), collisionMap.get(entity), velocityMap.get(entity),entity))
  52.                 {
  53.                     bodyMap.get(entity).body.setType(BodyDef.BodyType.KinematicBody);
  54.                     bodyMap.get(entity).body.setLinearVelocity(0, 1);
  55.                 }
  56.                 else if(Collision.collidesTop(positionMap.get(entity), collisionMap.get(entity), velocityMap.get(entity),entity))
  57.                 {
  58.                     bodyMap.get(entity).body.setType(BodyDef.BodyType.KinematicBody);
  59.                     bodyMap.get(entity).body.setLinearVelocity(0, -1);
  60.                 }
  61.                 else
  62.                 {
  63.                     bodyMap.get(entity).body.setType(BodyDef.BodyType.DynamicBody);
  64.                     bodyMap.get(entity).body.setLinearVelocity(0, 0);
  65.                 }
  66.             }
  67.             else
  68.             {
  69.                 if(steeringOutput.linear.x < 0)
  70.                 {
  71.                     if(Collision.collidesLeft(positionMap.get(entity), collisionMap.get(entity), velocityMap.get(entity),entity))
  72.                     {              
  73.                         bodyMap.get(entity).body.setLinearVelocity(0, 0);
  74.                         bodyMap.get(entity).body.applyForceToCenter(-steeringOutput.linear.x, 0, true);
  75.                     }
  76.                 }
  77.                 else if(steeringOutput.linear.x > 0)
  78.                 {
  79.                     if(Collision.collidesRight(positionMap.get(entity), collisionMap.get(entity), velocityMap.get(entity),entity))
  80.                     {
  81.                         bodyMap.get(entity).body.setLinearVelocity(0, 0);
  82.                         bodyMap.get(entity).body.applyForceToCenter(-steeringOutput.linear.x, 0, true);
  83.                     }
  84.        
  85.                 }
  86.                 if(steeringOutput.linear.y < 0)
  87.                 {
  88.                     if(Collision.collidesBottom(positionMap.get(entity), collisionMap.get(entity), velocityMap.get(entity),entity))
  89.                     {
  90.                         bodyMap.get(entity).body.setLinearVelocity(0, 0);
  91.                         bodyMap.get(entity).body.applyForceToCenter(0, -steeringOutput.linear.y, true);
  92.                     }
  93.                 }
  94.                 else if(steeringOutput.linear.y > 0)
  95.                 {
  96.                     if(Collision.collidesTop(positionMap.get(entity), collisionMap.get(entity), velocityMap.get(entity),entity))
  97.                     {
  98.                         bodyMap.get(entity).body.setLinearVelocity(0, 0);
  99.                         bodyMap.get(entity).body.applyForceToCenter(0, -steeringOutput.linear.y, true);
  100.                     }
  101.                 }
  102.             }
  103.         }
  104.     }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top