Beispiel #1
0
  public void apply(final float theDeltaTime, final Physics theParticleSystem) {
    //        if (!mA.fixed() || !mB.fixed()) {
    float a2bX = mA.position().x - mB.position().x;
    float a2bY = mA.position().y - mB.position().y;
    float a2bZ = mA.position().z - mB.position().z;
    final float myInversDistance = fastInverseSqrt(a2bX * a2bX + a2bY * a2bY + a2bZ * a2bZ);
    final float myDistance = 1.0F / myInversDistance;

    if (myDistance == 0.0F) {
      a2bX = 0.0F;
      a2bY = 0.0F;
      a2bZ = 0.0F;
    } else {
      a2bX *= myInversDistance;
      a2bY *= myInversDistance;
      a2bZ *= myInversDistance;
    }

    final float mSpringForce = -(myDistance - mRestLength) * mSpringConstant;
    final float Va2bX = mA.velocity().x - mB.velocity().x;
    final float Va2bY = mA.velocity().y - mB.velocity().y;
    final float Va2bZ = mA.velocity().z - mB.velocity().z;
    final float mDampingForce = -mSpringDamping * (a2bX * Va2bX + a2bY * Va2bY + a2bZ * Va2bZ);
    final float r = mSpringForce + mDampingForce;
    a2bX *= r;
    a2bY *= r;
    a2bZ *= r;

    if (mOneWay) {
      if (!mB.fixed()) {
        mB.force().add(-2 * a2bX, -2 * a2bY, -2 * a2bZ);
      }
    } else {
      if (!mA.fixed()) {
        mA.force().add(a2bX, a2bY, a2bZ);
      }
      if (!mB.fixed()) {
        mB.force().add(-a2bX, -a2bY, -a2bZ);
      }
    }
    //        }
  }