public void pre_step() { Vector3f ab = mathematik.Util.sub(mParticleA.position(), mParticleB.position()); Vector3f cb = mathematik.Util.sub(mParticleC.position(), mParticleB.position()); final float mCurrentAngle = ab.angle(cb); if (mCurrentAngle < mMinAngle) { final int TINY_FACTOR_MODELL = 0; final int TRIG_MODELL = 1; final int MAX_DISTANCE_MODELL = 2; final int mModell = TRIG_MODELL; switch (mModell) { case TINY_FACTOR_MODELL: { final float TINY_FACTOR = 1.1f; final float mDistance = mParticleA.position().distance(mParticleC.position()) * TINY_FACTOR; restlength(mDistance); } break; case TRIG_MODELL: { // a = sqrt ( b*b + c*c - 2bc*cosA ) final float b = ab.length(); final float c = cb.length(); final float mDistance = (float) Math.sqrt(b * b + c * c - 2 * b * c * (float) Math.cos(mMinAngle)); restlength(mDistance); } break; case MAX_DISTANCE_MODELL: { final float mDistance = mParticleA.position().distance(mParticleB.position()) + mParticleC.position().distance(mParticleB.position()); restlength(mDistance); } break; } active(true); } }
public void loop() { for (int i = 0; i < particles.length; i++) { /* check if particle is active. * if so, animate the particle, if not, reset the particle * to a random start position */ if (particles[i].isActive) { Vector3f myDirection = new Vector3f(event().mouseX, event().mouseY, 0); myDirection.sub(particles[i].position); final float myDistance = myDirection.length(); myDirection.scale(particles[i].speed / myDistance); particles[i].position.add(myDirection); particles[i].color.a = 1 - myDistance / (-1.5f * SPAWN_DEPTH); if (myDistance < 1) { particles[i].isActive = false; } } else { particles[i].isActive = true; particles[i].position.set( _myRandom.getFloat(-640, 640), _myRandom.getFloat(-480, 480), SPAWN_DEPTH); particles[i].color.a = 0; } /* map position to backup array */ positionbackuparray[i * 3 + 0] = particles[i].position.x; positionbackuparray[i * 3 + 1] = particles[i].position.y; positionbackuparray[i * 3 + 2] = particles[i].position.z; /* map color4f to backup array */ colorbackuparray[i * 4 + 0] = particles[i].color.r; colorbackuparray[i * 4 + 1] = particles[i].color.g; colorbackuparray[i * 4 + 2] = particles[i].color.b; colorbackuparray[i * 4 + 3] = particles[i].color.a; } }