-
jez04 authorede4537fa7
Player.java 2.19 KiB
package lab;
import java.util.Random;
import javafx.geometry.Point2D;
import javafx.geometry.Rectangle2D;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.scene.transform.Affine;
import javafx.scene.transform.Rotate;
public class Player extends WorldEntity implements Collisionable {
private static final Random RANDOM = new Random();
private Point2D speed;
private double speedSize = 50;
private double angle;
public Player(Level level, Point2D position, Point2D speed) {
super(level, position);
this.speed = speed;
}
public void drawInternal(GraphicsContext gc) {
Point2D center = position.add(10, 25);
double angle = speed.angle(1, 0);
if (speed.getY() < 0) {
angle = -angle;
}
Rotate rotateMatrix = Affine.rotate(angle, center.getX(), center.getY());
gc.setTransform(new Affine(rotateMatrix));
gc.setFill(Color.AQUA);
gc.setStroke(Color.GREEN);
gc.setLineWidth(5);
gc.fillRect(center.getX(), center.getY(), 50, 1);
gc.fillRoundRect(position.getX(), position.getY(), 20, 50, 20, 20);
gc.strokeRoundRect(position.getX(), position.getY(), 20, 50, 20, 20);
}
public void simulate(double delay) {
position = position.add(speed.multiply(delay / 1_000_000_000));
// speed = speed.multiply(0.9994);
}
@Override
public Rectangle2D getBoundingBox() {
return new Rectangle2D(position.getX(), position.getY(), 20, 50);
}
@Override
public boolean intersect(Rectangle2D another) {
return getBoundingBox().intersects(another);
}
@Override
public void hitBy(Collisionable another) {
if (another instanceof Monster) {
position = new Point2D(RANDOM.nextDouble(0, level.getWidth() * 0.4),
RANDOM.nextDouble(level.getHeight() * 0.5, level.getHeight()));
}
}
public void setSpeed(double speedSize) {
this.speedSize = speedSize;
updateSpeed();
}
private void updateSpeed() {
speed = new Point2D(Math.cos(angle) * speedSize, Math.sin(angle) * speedSize);
}
public void setAngle(double angle) {
this.angle = Math.toRadians(angle);
updateSpeed();
}
public void spawn() {
position = new Point2D(
RANDOM.nextDouble(0, level.getWidth()*0.5),
RANDOM.nextDouble(level.getHeight()*0.5, level.getHeight()*0.9));
}
}