mirror of
https://github.com/jneug/zeichenmaschine.git
synced 2026-10-12 09:56:33 +02:00
Viele weitere Beispielprojekt für verschiedene Anwendungen
This commit is contained in:
111
examples/zm_cookieclicker/NumberParticleEmitter.java
Normal file
111
examples/zm_cookieclicker/NumberParticleEmitter.java
Normal file
@@ -0,0 +1,111 @@
|
||||
import schule.ngb.zm.Drawable;
|
||||
import schule.ngb.zm.Updatable;
|
||||
import schule.ngb.zm.shapes.Text;
|
||||
|
||||
import java.awt.Graphics2D;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class NumberParticleEmitter implements Updatable, Drawable {
|
||||
|
||||
public class NumberParticle extends Text implements Updatable {
|
||||
|
||||
double velX = 0, velY = 0, accX = 0, accY = 0;
|
||||
|
||||
double life = 0;
|
||||
|
||||
public NumberParticle() {
|
||||
super(0, 0, "0");
|
||||
// life = particleLifespan;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isActive() {
|
||||
return (life <= 0);
|
||||
}
|
||||
|
||||
public void activate() {
|
||||
x = emitterX;
|
||||
y = emitterY;
|
||||
life = particleLifespan;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update( double delta ) {
|
||||
if( isActive() ) {
|
||||
velX += accX;
|
||||
velY += accY;
|
||||
x += velX;
|
||||
y += velY;
|
||||
|
||||
life -= delta;
|
||||
setFillColor(fillColor, (int) interpolate(0, 255, life / particleLifespan));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private int particlesPerSecond, maxParticles;
|
||||
|
||||
private double particleLifespan;
|
||||
|
||||
private ArrayList<NumberParticle> particles;
|
||||
|
||||
private int activeParticles = 0;
|
||||
|
||||
private double lastEmit = 0.0;
|
||||
|
||||
private double emitterX, emitterY;
|
||||
|
||||
public NumberParticleEmitter( double x, double y, int particlesPerSecond, double particleLifespan ) {
|
||||
emitterX = x;
|
||||
emitterY = y;
|
||||
|
||||
this.particlesPerSecond = particlesPerSecond;
|
||||
this.particleLifespan = particleLifespan;
|
||||
|
||||
maxParticles = (int) Math.ceil(particlesPerSecond * particleLifespan);
|
||||
particles = new ArrayList<>(maxParticles);
|
||||
|
||||
for( int i = 0; i < maxParticles; i++ ) {
|
||||
particles.add(new NumberParticle());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isVisible() {
|
||||
return activeParticles > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw( Graphics2D graphics ) {
|
||||
for( NumberParticle p : particles ) {
|
||||
if( p.isActive() ) {
|
||||
p.draw(graphics);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isActive() {
|
||||
return isVisible();
|
||||
}
|
||||
|
||||
public void emitParticle( int number ) {
|
||||
particles.add(new NumberParticle());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update( double delta ) {
|
||||
//lastEmit -= delta;
|
||||
|
||||
for( NumberParticle p : particles ) {
|
||||
if( p.isActive() ) {
|
||||
p.update(delta);
|
||||
} /*else if( lastEmit <= 0 ) {
|
||||
p.activate();
|
||||
lastEmit += 1/(double)particlesPerSecond;
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user