add spinning drop

This commit is contained in:
Luca Puderbach 2024-10-14 06:30:01 +02:00
parent 5dff2c271f
commit a798edf07f
4 changed files with 21 additions and 11 deletions

View File

@ -235,8 +235,8 @@ public class ParticleEffectFactory {
smokeEmitter.setLocalTranslation(0, 2f, 0);
smokeEmitter.setLowLife(1);
smokeEmitter.setHighLife(1);
smokeEmitter.getParticleInfluencer().setInitialVelocity(new Vector3f(0, .5f, 0));
smokeEmitter.setImagesX(15); // Assuming the smoke texture is a sprite sheet with 15 frames
smokeEmitter.getParticleInfluencer().setInitialVelocity(new Vector3f(0, 0, 0));
smokeEmitter.setImagesX(15);
Material mat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Particle.j3md");
mat.setTexture("Texture", app.getAssetManager().loadTexture("Effects/Smoke/Smoke.png"));
smokeEmitter.setMaterial(mat);

View File

@ -310,6 +310,7 @@ class SeaSynchronizer extends ShipMapSynchronizer {
private Spatial createTransporter(Battleship ship) {
final Spatial model = app.getAssetManager().loadModel(TRANSPORTER);
float rotationAngle = calculateRotationAngle(ship.getRot())+HALF_PI;
model.rotate(-HALF_PI, calculateRotationAngle(ship.getRot())+ PI, 0f);
model.scale(0.008f);
@ -319,10 +320,10 @@ class SeaSynchronizer extends ShipMapSynchronizer {
// Bei 0 oder 180 Grad wird auf der Z-Achse verschoben, bei 90 oder 270 Grad auf der X-Achse
if (rotationAngle == 0 || rotationAngle == FastMath.PI) {
// Verschiebe auf der Z-Achse und um 2f nach oben
translation = translation.add(0,0,1f); // Nach hinten auf der Z-Achse, und um 2f nach oben
translation = translation.subtract(0,0,1);
} else if (rotationAngle == FastMath.HALF_PI || rotationAngle == 3 * FastMath.HALF_PI) {
// Verschiebe auf der X-Achse und um 2f nach oben
translation = translation.add(1f,0,0); // Nach hinten auf der X-Achse, und um 2f nach oben
translation = translation.add(1,0,0);
}
model.setLocalTranslation(translation);

View File

@ -1,5 +1,7 @@
package pp.battleship.client.gui;
import com.jme3.math.FastMath;
import com.jme3.math.Quaternion;
import com.jme3.math.Vector3f;
import com.jme3.renderer.RenderManager;
import com.jme3.renderer.ViewPort;
@ -11,8 +13,8 @@ import com.jme3.scene.control.AbstractControl;
* It will gradually move the ship downwards and then remove it from the scene.
*/
class SinkingControl extends AbstractControl {
private static final float SINK_DURATION = 6f; // Duration of the sinking animation
private static final float SINK_SPEED = 0.8f; // Speed at which the ship sinks
private static final float SINK_DURATION = 2f; // Duration of the sinking animation
private static final float SINK_SPEED = 0.6f; // Speed at which the ship sinks
private float elapsedTime = 0;
private final Node shipNode;
@ -24,7 +26,7 @@ class SinkingControl extends AbstractControl {
public SinkingControl(Node shipNode) {
this.shipNode = shipNode;
}
float tiltAngle= 0;
/**
* Updated the Map to sink the ship
*
@ -37,13 +39,18 @@ class SinkingControl extends AbstractControl {
// Move the ship down over time
Vector3f currentPos = shipNode.getLocalTranslation();
shipNode.setLocalTranslation(currentPos.x+SINK_SPEED*tpf, currentPos.y - SINK_SPEED * tpf, currentPos.z+SINK_SPEED*tpf);
shipNode.setLocalTranslation(currentPos.x+SINK_SPEED*tpf, currentPos.y - SINK_SPEED * tpf*2, currentPos.z+SINK_SPEED*tpf*2);
// Check if sinking duration has passed
if (elapsedTime >= SINK_DURATION) {
// Remove the ship from the scene
shipNode.removeFromParent();
}
// Apply the tilt angle and rotation during sinking
float sinkingTiltAngle = FastMath.DEG_TO_RAD * tiltAngle * tpf;
float sinkingRotationAngle = FastMath.DEG_TO_RAD * 45f * tpf; // Additional rotation during sinking
Quaternion tiltRotation = new Quaternion().fromAngles(-sinkingTiltAngle, sinkingRotationAngle, 0);
spatial.setLocalRotation(tiltRotation);
}
@Override

View File

@ -78,7 +78,9 @@ public class SinkingShip extends AbstractControl {
float progress = Math.min((elapsedTime - burnTiltDuration) / sinkDuration, 1f);
// Apply the tilt angle (remains constant during sinking)
Quaternion tiltRotation = new Quaternion().fromAngles(-FastMath.DEG_TO_RAD * tiltAngle, 0, 0);
float sinkingTiltAngle = FastMath.DEG_TO_RAD * tiltAngle * progress;
float sinkingRotationAngle = FastMath.DEG_TO_RAD * 45f * progress; // Additional rotation during sinking
Quaternion tiltRotation = new Quaternion().fromAngles(-sinkingTiltAngle, sinkingRotationAngle, sinkingRotationAngle);
spatial.setLocalRotation(tiltRotation);
// Sink the ship by interpolating the Y position
@ -111,6 +113,6 @@ public class SinkingShip extends AbstractControl {
* Starts the sinking process for the ship.
*/
public void startSinking() {
// Nothing to do here as the control update handles the timing and sequence
// --> sinkingControl
}
}