public void update(float frameTime, List<CollisionSurface> listCollisionSurfaces, List<Manipulator> listManipulators) { Vector3f positionTemp = position.copy(); velocity.add(gravity); positionTemp.add(velocity * frameTime); remainingLife -= frameTime; foreach (CollisionSurface cs in listCollisionSurfaces) { if (cs.getActive() && cs.collisionDetect(position, positionTemp)) { velocity = cs.computeTrajectory(velocity); positionTemp = position.copy(); positionTemp.add(velocity * frameTime); } } foreach (Manipulator m in listManipulators) { if (m.getActive()) { Vector3f deltaVelocity = new Vector3f(0.0f, 0.0f, 0.0f); Color4f deltaColor = new Color4f(0.0f, 0.0f, 0.0f, 0.0f); float deltaLife = 0.0f; m.manipulate(this, deltaVelocity, deltaColor, ref deltaLife); velocity.add(deltaVelocity.stretch(frameTime)); color.add(deltaColor.multiply(frameTime)); remainingLife += deltaLife * frameTime; } } position.set(positionTemp); }
public Vector3f computeTrajectory(Vector3f vector) { Vector3f newTrajectory = new Vector3f(vector.x, 0 - vector.y, vector.z); newTrajectory.stretch(friction); return newTrajectory; }
public override Particle emit(ParticleFactory particleFactory) { Vector3f tmp = new Vector3f(0.5f - random.NextDouble(), 0.5f - random.NextDouble(), 0.5f - random.NextDouble()); tmp.stretch(new Vector3f((float)random.NextDouble() * side.x, (float)random.NextDouble() * side.y, (float)random.NextDouble() * side.z)); tmp.add(position); return particleFactory.createParticle(tmp, false, null); }
public override Particle emit(ParticleFactory particleFactory) { Vector3f tmp = new Vector3f(0.5f - random.NextDouble(), 0.5f - random.NextDouble(), 0.5f - random.NextDouble()); tmp.Normalize(); tmp.stretch(radius); tmp.add(position); return particleFactory.createParticle(tmp, false, null); }
public override void manipulate(Particle particle, Vector3f deltaVelocity, Color4f deltaColor, ref float deltaLife) { Vector3f tmp = this.position.diff(particle.position); float len2 = tmp.length2(); if (len2 > size2) return; else if (len2 < threshold2) { deltaVelocity.set(particle.velocity); deltaVelocity.stretch(strength); deltaVelocity.invert(); return; } len2 = size2 / len2; deltaVelocity.set(tmp); deltaVelocity.stretch(strength); deltaVelocity.stretch(len2); }
public override void manipulate(Particle particle, Vector3f deltaVelocity, Color4f deltaColor, ref float deltaLife) { deltaVelocity.set(particle.velocity); deltaVelocity.stretch(strength); deltaVelocity.invert(); }
public override void manipulate(Particle particle, Vector3f deltaVelocity, Color4f deltaColor, ref float deltaLife) { deltaVelocity.add(direction); deltaVelocity.stretch(strength); }