86 lines
1.9 KiB
Java
86 lines
1.9 KiB
Java
|
package it.cavallium.warppi.extra.tetris;
|
||
|
|
||
|
public class MarioEntity {
|
||
|
protected double x;
|
||
|
protected double y;
|
||
|
public double forceX;
|
||
|
public double forceY;
|
||
|
public boolean collisionUp;
|
||
|
public boolean collisionDown;
|
||
|
public boolean collisionLeft;
|
||
|
public boolean collisionRight;
|
||
|
public boolean subjectToGravity;
|
||
|
|
||
|
public MarioEntity(final double x, final double y, final double forceX, final double forceY, final boolean onGround, final boolean subjectToGravity) {
|
||
|
this.x = x;
|
||
|
this.y = y;
|
||
|
this.forceX = forceX;
|
||
|
this.forceY = forceY;
|
||
|
collisionDown = onGround;
|
||
|
this.subjectToGravity = subjectToGravity;
|
||
|
}
|
||
|
|
||
|
public void setPosition(final double x, final double y) {
|
||
|
this.x = x;
|
||
|
this.y = y;
|
||
|
}
|
||
|
|
||
|
public void setPosition(final double x, final double y, final boolean onGround) {
|
||
|
this.x = x;
|
||
|
this.y = y;
|
||
|
collisionDown = onGround;
|
||
|
}
|
||
|
|
||
|
public double getX() {
|
||
|
return x;
|
||
|
}
|
||
|
|
||
|
public double getY() {
|
||
|
return y;
|
||
|
}
|
||
|
|
||
|
public boolean isOnGround() {
|
||
|
return collisionDown;
|
||
|
}
|
||
|
|
||
|
public void setOnGround(final boolean onGround) {
|
||
|
collisionDown = onGround;
|
||
|
}
|
||
|
|
||
|
public void gameTick(final double dt) {
|
||
|
x = computeFutureDX(dt);
|
||
|
y = computeFutureDY(dt);
|
||
|
forceX = computeFutureForceDX(dt);
|
||
|
forceY = computeFutureForceDY(dt);
|
||
|
}
|
||
|
|
||
|
public double computeFutureDX(final double dt) {
|
||
|
return x + dt * forceX - x;
|
||
|
}
|
||
|
|
||
|
public double computeFutureDY(final double dt) {
|
||
|
final double forceY = this.forceY;
|
||
|
double y = this.y;
|
||
|
if (!collisionDown) {
|
||
|
y += dt * forceY;
|
||
|
}
|
||
|
return y - this.y;
|
||
|
}
|
||
|
|
||
|
public double computeFutureForceDX(final double dt) {
|
||
|
double forceX = this.forceX;
|
||
|
forceX *= 0.75;
|
||
|
return forceX - this.forceX;
|
||
|
}
|
||
|
|
||
|
public double computeFutureForceDY(final double dt) {
|
||
|
double forceY = this.forceY;
|
||
|
if (subjectToGravity && !collisionDown) {
|
||
|
forceY -= dt * 1569.6 / 16f;
|
||
|
} else {
|
||
|
forceY *= 0.75;
|
||
|
}
|
||
|
return forceY - this.forceY;
|
||
|
}
|
||
|
}
|