WarpPI/core/src/main/java/it/cavallium/warppi/extra/mario/MarioEntity.java

86 lines
1.8 KiB
Java
Raw Normal View History

package it.cavallium.warppi.extra.mario;
2018-04-01 01:01:57 +02:00
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;
2018-05-12 21:18:29 +02:00
2018-04-01 01:01:57 +02:00
public MarioEntity(double x, double y, double forceX, double forceY, boolean onGround, boolean subjectToGravity) {
this.x = x;
this.y = y;
this.forceX = forceX;
this.forceY = forceY;
2018-05-12 21:18:29 +02:00
collisionDown = onGround;
2018-04-01 01:01:57 +02:00
this.subjectToGravity = subjectToGravity;
}
public void setPosition(double x, double y) {
this.x = x;
this.y = y;
}
public void setPosition(double x, double y, boolean onGround) {
this.x = x;
this.y = y;
2018-05-12 21:18:29 +02:00
collisionDown = onGround;
2018-04-01 01:01:57 +02:00
}
2018-05-12 21:18:29 +02:00
2018-04-01 01:01:57 +02:00
public double getX() {
return x;
}
2018-05-12 21:18:29 +02:00
2018-04-01 01:01:57 +02:00
public double getY() {
return y;
}
2018-05-12 21:18:29 +02:00
2018-04-01 01:01:57 +02:00
public boolean isOnGround() {
return collisionDown;
}
2018-05-12 21:18:29 +02:00
2018-04-01 01:01:57 +02:00
public void setOnGround(boolean onGround) {
2018-05-12 21:18:29 +02:00
collisionDown = onGround;
2018-04-01 01:01:57 +02:00
}
2018-05-12 21:18:29 +02:00
2018-04-01 01:01:57 +02:00
public void gameTick(double dt) {
2018-05-12 21:18:29 +02:00
x = computeFutureDX(dt);
y = computeFutureDY(dt);
forceX = computeFutureForceDX(dt);
forceY = computeFutureForceDY(dt);
2018-04-01 01:01:57 +02:00
}
2018-05-12 21:18:29 +02:00
2018-04-01 01:01:57 +02:00
public double computeFutureDX(double dt) {
2018-05-12 21:18:29 +02:00
return (x + dt * forceX) - x;
2018-04-01 01:01:57 +02:00
}
2018-05-12 21:18:29 +02:00
2018-04-01 01:01:57 +02:00
public double computeFutureDY(double dt) {
2018-05-12 21:18:29 +02:00
final double forceY = this.forceY;
2018-04-01 01:01:57 +02:00
double y = this.y;
if (!collisionDown) {
y += dt * forceY;
}
return y - this.y;
}
2018-05-12 21:18:29 +02:00
2018-04-01 01:01:57 +02:00
public double computeFutureForceDX(double dt) {
double forceX = this.forceX;
forceX *= 0.75;
return forceX - this.forceX;
}
2018-05-12 21:18:29 +02:00
2018-04-01 01:01:57 +02:00
public double computeFutureForceDY(double dt) {
double forceY = this.forceY;
2018-05-12 21:18:29 +02:00
if (subjectToGravity && !collisionDown) {
forceY -= dt * 1569.6 / 16f;
2018-04-01 01:01:57 +02:00
} else {
forceY *= 0.75;
}
return forceY - this.forceY;
}
}