Package advanced.physics.util

Source Code of advanced.physics.util.UpdatePhysicsAction

package advanced.physics.util;

import org.jbox2d.common.Vec2;
import org.jbox2d.dynamics.Body;
import org.jbox2d.dynamics.World;
import org.mt4j.sceneManagement.IPreDrawAction;
import org.mt4j.util.math.Vector3D;

import advanced.physics.physicsShapes.IPhysicsComponent;


public class UpdatePhysicsAction implements IPreDrawAction {
  private World world;
  private float timeStep;
  private int constraintIterations;
  private float scale;
 

  public UpdatePhysicsAction(World world, float timeStep,  int constraintIterations, float scale) {
    super();
    this.world = world;
    this.timeStep = timeStep;
    this.constraintIterations = constraintIterations;
    this.scale = scale;
  }

  public void processAction() {
    try{
      //Take a timestep in the physics world
      world.step(timeStep, constraintIterations);
      for (Body body = world.getBodyList(); body != null; body = body.getNext()) {
        if (!body.isSleeping()){
          Vec2 newPos    = body.getPosition();
          body.wakeUp();
          float newAngle   = body.getAngle();
          if (body.getUserData() != null){
            if (body.getUserData() instanceof IPhysicsComponent){
              IPhysicsComponent shape = (IPhysicsComponent)body.getUserData();
              shape.setPositionGlobal(new Vector3D(newPos.x * scale, newPos.y * scale,0));
              shape.setCenterRotation(newAngle);
            }
          }
        }
      }
    }catch (Exception e) {
      System.err.println("Physics engine error during simulation - behaviour is now undefined!");
      e.printStackTrace();
    }
  }

  public boolean isLoop() {
    return true;
  }

}
TOP

Related Classes of advanced.physics.util.UpdatePhysicsAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.