Development #37
@@ -8,26 +8,22 @@
|
|||||||
|
|
||||||
import static pp.mdga.client.Util.linInt;
|
import static pp.mdga.client.Util.linInt;
|
||||||
|
|
||||||
public class FadeControl extends InitControl {
|
public class FadeControl extends ActionControl {
|
||||||
private float duration; // Duration of the fade effect
|
private float duration; // Duration of the fade effect
|
||||||
private float timeElapsed = 0;
|
private float timeElapsed = 0;
|
||||||
private boolean init = false;
|
private boolean init = false;
|
||||||
private float startAlpha;
|
private float startAlpha;
|
||||||
private float endAlpha;
|
private float endAlpha;
|
||||||
private Runnable actionAfter;
|
|
||||||
|
|
||||||
public FadeControl(float duration, float startAlpha, float endAlpha, Runnable actionAfter) {
|
public FadeControl(float duration, float startAlpha, float endAlpha, Runnable actionAfter) {
|
||||||
|
super(actionAfter);
|
||||||
this.duration = duration;
|
this.duration = duration;
|
||||||
this.startAlpha = startAlpha;
|
this.startAlpha = startAlpha;
|
||||||
this.endAlpha = endAlpha;
|
this.endAlpha = endAlpha;
|
||||||
this.actionAfter = actionAfter;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public FadeControl(float duration, float startAlpha, float endAlpha) {
|
public FadeControl(float duration, float startAlpha, float endAlpha) {
|
||||||
this.duration = duration;
|
this(duration, startAlpha, endAlpha, null);
|
||||||
this.startAlpha = startAlpha;
|
|
||||||
this.endAlpha = endAlpha;
|
|
||||||
this.actionAfter = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -47,7 +43,7 @@ protected void controlUpdate(float tpf) {
|
|||||||
t = 1;
|
t = 1;
|
||||||
init = false;
|
init = false;
|
||||||
spatial.removeControl(this);
|
spatial.removeControl(this);
|
||||||
if(actionAfter != null) actionAfter.run();
|
action();
|
||||||
}
|
}
|
||||||
|
|
||||||
float alpha = linInt(startAlpha, endAlpha, t); // Interpolate alpha
|
float alpha = linInt(startAlpha, endAlpha, t); // Interpolate alpha
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class MatrixAnimation extends InitControl {
|
public class MatrixAnimation extends ActionControl {
|
||||||
private MdgaApp app;
|
private MdgaApp app;
|
||||||
private static final Random RANDOM = new Random();
|
private static final Random RANDOM = new Random();
|
||||||
private Vector3f radarPos;
|
private Vector3f radarPos;
|
||||||
@@ -30,10 +30,10 @@ private enum MatrixState{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private MatrixState state;
|
private MatrixState state;
|
||||||
public MatrixAnimation(MdgaApp app, float duration, Vector3f radarPos, Runnable runnable){
|
public MatrixAnimation(MdgaApp app, Vector3f radarPos, Runnable runnable){
|
||||||
|
super(runnable);
|
||||||
this.app = app;
|
this.app = app;
|
||||||
this.radarPos = radarPos;
|
this.radarPos = radarPos;
|
||||||
this.runnable = runnable;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -90,8 +90,8 @@ public void run() {
|
|||||||
case MATRIX_OFF -> {
|
case MATRIX_OFF -> {
|
||||||
if(timeElapsed >= 0.5f){
|
if(timeElapsed >= 0.5f){
|
||||||
init = false;
|
init = false;
|
||||||
runnable.run();
|
|
||||||
spatial.removeControl(this);
|
spatial.removeControl(this);
|
||||||
|
action();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,8 +76,8 @@ private void shoot(){
|
|||||||
);
|
);
|
||||||
|
|
||||||
Spatial shell = createShell();
|
Spatial shell = createShell();
|
||||||
shell.addControl(new ShellControl(this::hitExplosion, shootPos, spatial.getLocalTranslation(), FLYING_HEIGHT, FLYING_DURATION));
|
|
||||||
app.getRootNode().attachChild(shell);
|
app.getRootNode().attachChild(shell);
|
||||||
|
shell.addControl(new ShellControl(this::hitExplosion, shootPos, spatial.getLocalTranslation(), FLYING_HEIGHT, FLYING_DURATION, app.getAssetManager()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Spatial createShell(){
|
private Spatial createShell(){
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
package pp.mdga.client.animation;
|
package pp.mdga.client.animation;
|
||||||
|
|
||||||
|
import com.jme3.asset.AssetManager;
|
||||||
|
import com.jme3.effect.ParticleEmitter;
|
||||||
|
import com.jme3.effect.ParticleMesh;
|
||||||
|
import com.jme3.material.Material;
|
||||||
|
import com.jme3.math.ColorRGBA;
|
||||||
import com.jme3.math.FastMath;
|
import com.jme3.math.FastMath;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import pp.mdga.client.InitControl;
|
import pp.mdga.client.InitControl;
|
||||||
@@ -10,13 +15,16 @@ public class ShellControl extends ActionControl {
|
|||||||
private final float height;
|
private final float height;
|
||||||
private final float duration;
|
private final float duration;
|
||||||
private Vector3f oldPos;
|
private Vector3f oldPos;
|
||||||
|
private ParticleEmitter emitter;
|
||||||
|
private AssetManager assetManager;
|
||||||
|
|
||||||
public ShellControl(Runnable runnable, Vector3f shootPos, Vector3f endPos, float height, float duration){
|
public ShellControl(Runnable runnable, Vector3f shootPos, Vector3f endPos, float height, float duration, AssetManager assetManager){
|
||||||
super(runnable);
|
super(runnable);
|
||||||
this.shootPos = shootPos;
|
this.shootPos = shootPos;
|
||||||
this.endPos = endPos;
|
this.endPos = endPos;
|
||||||
this.height = height;
|
this.height = height;
|
||||||
this.duration = duration;
|
this.duration = duration;
|
||||||
|
this.assetManager = assetManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -25,6 +33,9 @@ protected void initSpatial() {
|
|||||||
shootPos,
|
shootPos,
|
||||||
endPos,
|
endPos,
|
||||||
()->{
|
()->{
|
||||||
|
emitter.killAllParticles();
|
||||||
|
emitter.setParticlesPerSec(0);
|
||||||
|
emitter.removeFromParent();
|
||||||
spatial.removeControl(this);
|
spatial.removeControl(this);
|
||||||
spatial.removeFromParent();
|
spatial.removeFromParent();
|
||||||
action();
|
action();
|
||||||
@@ -34,6 +45,34 @@ protected void initSpatial() {
|
|||||||
false
|
false
|
||||||
));
|
));
|
||||||
oldPos = spatial.getLocalTranslation().clone();
|
oldPos = spatial.getLocalTranslation().clone();
|
||||||
|
createEmitter();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createEmitter() {
|
||||||
|
emitter = new ParticleEmitter("ShellTrail", ParticleMesh.Type.Triangle, 200);
|
||||||
|
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Particle.j3md");
|
||||||
|
mat.setTexture("Texture", assetManager.loadTexture("Images/particle/line.png")); // Nutze eine schmale, linienartige Textur
|
||||||
|
emitter.setMaterial(mat);
|
||||||
|
|
||||||
|
// Comic-Style Farben
|
||||||
|
emitter.setStartColor(new ColorRGBA(1f, 1f, 1f, 1f)); // Reinweiß
|
||||||
|
emitter.setEndColor(new ColorRGBA(1f, 1f, 1f, 0f)); // Transparent
|
||||||
|
|
||||||
|
// Partikelgröße und Lebensdauer
|
||||||
|
emitter.setStartSize(0.15f); // Startgröße
|
||||||
|
emitter.setEndSize(0.1f); // Endgröße
|
||||||
|
emitter.setLowLife(0.14f); // Sehr kurze Lebensdauer
|
||||||
|
emitter.setHighLife(0.14f);
|
||||||
|
|
||||||
|
emitter.setGravity(0, 0, 0); // Keine Gravitation
|
||||||
|
emitter.getParticleInfluencer().setInitialVelocity(new Vector3f(0, 0, 0));
|
||||||
|
emitter.getParticleInfluencer().setVelocityVariation(0f); // Kein Variationsspielraum
|
||||||
|
|
||||||
|
// Hohe Dichte für eine glatte Spur
|
||||||
|
emitter.setParticlesPerSec(500);
|
||||||
|
|
||||||
|
// Zur Shell hinzufügen
|
||||||
|
spatial.getParent().attachChild(emitter);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -44,5 +83,7 @@ protected void controlUpdate(float tpf) {
|
|||||||
spatial.rotate(FastMath.HALF_PI,0,0);
|
spatial.rotate(FastMath.HALF_PI,0,0);
|
||||||
}
|
}
|
||||||
oldPos = spatial.getLocalTranslation().clone();
|
oldPos = spatial.getLocalTranslation().clone();
|
||||||
|
|
||||||
|
emitter.setLocalTranslation(spatial.getLocalTranslation().clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -775,7 +775,7 @@ private void throwBomb(UUID uuid) {
|
|||||||
private void throwMatrix(UUID uuid) {
|
private void throwMatrix(UUID uuid) {
|
||||||
//app.getAcousticHandler().playSound(MdgaSound.MATRIX);
|
//app.getAcousticHandler().playSound(MdgaSound.MATRIX);
|
||||||
Spatial piece = pieces.get(uuid).getSpatial();
|
Spatial piece = pieces.get(uuid).getSpatial();
|
||||||
piece.addControl(new MatrixAnimation(app, 1, radarPos,()-> {
|
piece.addControl(new MatrixAnimation(app, radarPos,()-> {
|
||||||
piece.addControl(new FadeControl(1,1,0,
|
piece.addControl(new FadeControl(1,1,0,
|
||||||
() -> {
|
() -> {
|
||||||
throwPiece(uuid);
|
throwPiece(uuid);
|
||||||
|
|||||||
BIN
Projekte/mdga/client/src/main/resources/Images/particle/line.png
Normal file
BIN
Projekte/mdga/client/src/main/resources/Images/particle/line.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 140 B |
Reference in New Issue
Block a user