An error occurred while loading the file. Please try again.
-
jez04 authored89b027d4
Level.java 2.32 KiB
package lab;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import javafx.geometry.Dimension2D;
import javafx.geometry.Point2D;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
public class Level {
private double width;
private double height;
private List<DrawableSimulable> entities;
private List<DrawableSimulable> entitiesToAdd = new ArrayList<>();
private List<DrawableSimulable> entitiesToRemove = new ArrayList<>();
private Player player;
public Level(double width, double height, int monsterCount) {
this.width = width;
this.height = height;
player = new Player(this, new Point2D(20, 250), new Point2D(100, -20));
entities = new ArrayList<>();
entities.add(new NicerObstacle(this, new Point2D(20, 150)));
entities.add(new Obstacle(this, new Point2D(300, 200), new Dimension2D(80, 40)));
entities.add(new Obstacle(this));
entities.add(player);
for (int i = 0; i < monsterCount; i++) {
entities.add(new Monster(this));
}
}
public void draw(GraphicsContext gc) {
gc.setFill(Color.WHITE);
gc.clearRect(0, 0, width, height);
for (DrawableSimulable entity : entities) {
entity.draw(gc);
}
}
public void simulate(double delay) {
for (DrawableSimulable entity : entities) {
entity.simulate(delay);
}
for (int i = 0; i < entities.size(); i++) {
if (entities.get(i) instanceof Collisionable c1) {
for (int j = i + 1; j < entities.size(); j++) {
if (entities.get(j) instanceof Collisionable c2) {
if (c1.intersect(c2.getBoundingBox())) {
c1.hitBy(c2);
c2.hitBy(c1);
}
}
}
}
}
entities.removeAll(entitiesToRemove);
entities.addAll(entitiesToAdd);
entitiesToAdd.clear();
entitiesToRemove.clear();
entities.sort(Comparator.comparing(DrawableSimulable::getZIndex));
// entities.sort(new Comparator<DrawableSimulable>() {
// @Override
// public int compare(DrawableSimulable o1, DrawableSimulable o2) {
// return Integer.compare(o1.getZIndex(), o2.getZIndex());
// }
// });
}
public double getWidth() {
return width;
}
public double getHeight() {
return height;
}
public Player getPlayer() {
return player;
}
public void add(DrawableSimulable entity) {
entitiesToAdd.add(entity);
}
public void remove(DrawableSimulable entity) {
entitiesToRemove.add(entity);
}
}