summaryrefslogtreecommitdiff
path: root/src/main/java/space/m0e/quga/oop/lab56maven/entities
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/space/m0e/quga/oop/lab56maven/entities')
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/entities/common/Coordinates.java2
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/entities/macro/Fortress.java90
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/entities/macro/ThroneRoom.java4
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Dwarf.java61
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Immigrant.java28
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Nobel.java19
6 files changed, 111 insertions, 93 deletions
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/entities/common/Coordinates.java b/src/main/java/space/m0e/quga/oop/lab56maven/entities/common/Coordinates.java
index a68f178..b30a6d5 100644
--- a/src/main/java/space/m0e/quga/oop/lab56maven/entities/common/Coordinates.java
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/entities/common/Coordinates.java
@@ -28,6 +28,6 @@ public class Coordinates {
}
public boolean isThere(Immigrant immigrant) {
- return (int) immigrant.getX() == (int) this.x && (int) immigrant.getY() == (int) this.y;
+ return Math.abs(immigrant.getX() - this.x) < 2 && Math.abs(immigrant.getY() - this.y) < 2;
}
}
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/entities/macro/Fortress.java b/src/main/java/space/m0e/quga/oop/lab56maven/entities/macro/Fortress.java
index 5114992..9e74c6a 100644
--- a/src/main/java/space/m0e/quga/oop/lab56maven/entities/macro/Fortress.java
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/entities/macro/Fortress.java
@@ -1,5 +1,6 @@
package space.m0e.quga.oop.lab56maven.entities.macro;
+import javafx.application.Platform;
import javafx.scene.control.Alert;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
@@ -24,6 +25,11 @@ public class Fortress {
private Label countLabel = new Label();
ArrayList<Workstation> workstations = new ArrayList<>();
+
+ public ArrayList<ThroneRoom> getThroneRooms() {
+ return throneRooms;
+ }
+
ArrayList<ThroneRoom> throneRooms = new ArrayList<>();
ArrayList<Dwarf> dwarves = new ArrayList<>();
@@ -50,20 +56,12 @@ public class Fortress {
nameLabel.setStyle("-fx-text-fill: red; -fx-font-size: 16px;");
-// RowConstraints insideRow = new RowConstraints();
-// insideRow.setPrefHeight(200);
-// ColumnConstraints insideColumn = new ColumnConstraints();
-// insideColumn.setPrefWidth(200);
-// for (int i = 0; i < 3; i++) {
-// insideGroup.getRowConstraints().add(insideRow);
-// insideGroup.getColumnConstraints().add(insideColumn);
-// }
insideGroup.setBackground(new Background(new BackgroundImage(spriteImage, BackgroundRepeat.REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.CENTER, BackgroundSize.DEFAULT)));
insideGroup.setPrefColumns(2);
insideGroup.setPrefRows(2);
- insideGroup.setPrefTileHeight(200);
- insideGroup.setPrefTileWidth(200);
+ insideGroup.setPrefTileHeight(300);
+ insideGroup.setPrefTileWidth(300);
this.workstations = workstations;
this.throneRooms = throneRooms;
@@ -71,36 +69,14 @@ public class Fortress {
throneRooms.forEach(throneRoom -> insideGroup.getChildren().add(throneRoom.getGroup()));
insideGroup.getChildren().add(dwarvesContainer);
-// int col = 0;
-// int row = 0;
-// for (Workstation w : this.workstations) {
-// if (col > 3) {
-// col = 0;
-// row++;
-// }
-// insideGroup.add(w.getGroup(), col, row);
-// col++;
-// }
-//
-// for (ThroneRoom t : this.throneRooms) {
-// if (col > 3) {
-// col = 0;
-// row++;
-// }
-// insideGroup.add(t.getGroup(), col, row);
-// col++;
-// }
-//
-// insideGroup.add(dwarvesContainer, 2, 2);
-
- this.dwarvesContainer.setBorder(new Border(new BorderStroke(Color.RED, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, new BorderWidths(3))));
+// this.dwarvesContainer.setBorder(new Border(new BorderStroke(Color.RED, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, new BorderWidths(3))));
// dwarvesContainer.setMinSize(100 * 3, 100 * 3);
vBox.setLayoutX(x);
vBox.setLayoutY(y);
vBox.getChildren().addAll(nameLabel, insideGroup, countLabel);
- this.vBox.setBorder(new Border(new BorderStroke(Color.RED, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, new BorderWidths(3))));
+// this.vBox.setBorder(new Border(new BorderStroke(Color.RED, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, new BorderWidths(3))));
this.vBox.setOnMouseClicked(event -> {
switch (event.getButton()) {
@@ -126,24 +102,28 @@ public class Fortress {
public void remove(Dwarf dwarf) {
dwarves.remove(dwarf);
countLabel.setText(String.valueOf(dwarves.size()));
- dwarvesContainer.getChildren().remove(dwarf.getGroup());
- Main.root.getChildren().add(dwarf.getGroup());
+ if (dwarvesContainer.getChildren().contains(dwarf.getGroup()))
+ dwarvesContainer.getChildren().remove(dwarf.getGroup());
+ if (!Main.root.getChildren().contains(dwarf.getGroup()))
+ Main.root.getChildren().add(dwarf.getGroup());
}
- public void process() {
- ArrayList<Immigrant> migration = (ArrayList<Immigrant>) Main.immigrants.stream().filter(immigrant -> immigrant.getClass().equals(Immigrant.class) && immigrant.getCoordinatesToFortress(this).isThere(immigrant)).collect(Collectors.toList());
- migration.forEach(immigrant -> {
- Dwarf dwarf = new Dwarf(immigrant, this);
- Main.immigrants.add(dwarf);
- this.dwarves.add(dwarf);
- Main.root.getChildren().remove(immigrant.getGroup());
+ public void removeFromContainer(Dwarf dwarf) {
+ Platform.runLater(() -> {
+ if (dwarvesContainer.getChildren().contains(dwarf.getGroup())) {
+ dwarvesContainer.getChildren().remove(dwarf.getGroup());
+ Main.root.getChildren().add(dwarf.getGroup());
+ }
});
- Main.immigrants.removeAll(migration);
-
- countLabel.setText(String.valueOf(dwarves.size()));
+ }
- workstations.forEach(Workstation::process);
- throneRooms.forEach(ThroneRoom::process);
+ public void addToContainer(Dwarf dwarf) {
+ Platform.runLater(() -> {
+ if (Main.root.getChildren().contains(dwarf.getGroup())) {
+ Main.root.getChildren().remove(dwarf.getGroup());
+ dwarvesContainer.getChildren().add(dwarf.getGroup());
+ }
+ });
}
public double getX() {
@@ -166,4 +146,18 @@ public class Fortress {
return dwarves;
}
+ public String serialize() {
+ return String.join(",", new String[]{
+ this.getClass().getSimpleName(),
+ this.name,
+ String.valueOf(this.getX()),
+ String.valueOf(this.getY()),
+ "",
+ "",
+ "",
+ "",
+ "",
+ });
+ }
+
}
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/entities/macro/ThroneRoom.java b/src/main/java/space/m0e/quga/oop/lab56maven/entities/macro/ThroneRoom.java
index 7a51cb5..fa31908 100644
--- a/src/main/java/space/m0e/quga/oop/lab56maven/entities/macro/ThroneRoom.java
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/entities/macro/ThroneRoom.java
@@ -38,8 +38,8 @@ public class ThroneRoom {
Main.root.getChildren().add(vBox);
};
- public void process() {
- countLabel.setText(String.valueOf(nobels.size()));
+ public void add(Nobel nobel) {
+ nobels.add(nobel);
}
public ArrayList<Nobel> getNobels() {
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Dwarf.java b/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Dwarf.java
index 9c3008e..3197a99 100644
--- a/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Dwarf.java
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Dwarf.java
@@ -5,6 +5,7 @@ import space.m0e.quga.oop.lab56maven.Main;
import space.m0e.quga.oop.lab56maven.entities.common.Ability;
import space.m0e.quga.oop.lab56maven.entities.common.Coordinates;
import space.m0e.quga.oop.lab56maven.entities.macro.Fortress;
+import space.m0e.quga.oop.lab56maven.entities.macro.ThroneRoom;
import space.m0e.quga.oop.lab56maven.entities.macro.Workstation;
import space.m0e.quga.oop.lab56maven.threads.DwarfThread;
@@ -42,8 +43,6 @@ public class Dwarf extends Immigrant {
public Dwarf(String firstName, String lastName, int age, double x, double y, Ability ability) {
super(firstName, lastName, age, x, y, ability);
getSprite().setImage(spriteImage);
- this.setThread(new DwarfThread(this));
- this.getThread().start();
}
public Dwarf() {
@@ -58,6 +57,10 @@ public class Dwarf extends Immigrant {
this.fortress = fortress;
}
+ public Dwarf(String serializedData) {
+ super(serializedData);
+ }
+
public Workstation findNearestWorkstation() {
ArrayList<Workstation> searchWorkstations = (ArrayList<Workstation>) fortress.getWorkstations().stream().filter(w -> w.getDwarves().isEmpty()).collect(Collectors.toList());
searchWorkstations.sort((o1, o2) -> (int) ((Math.abs(o1.getGroup().getLayoutX() - this.getX()) + Math.abs(o1.getGroup().getLayoutY() - this.getY())) - ((Math.abs(o2.getGroup().getLayoutX() - this.getX()) + Math.abs(o2.getGroup().getLayoutY() - this.getY())))));
@@ -68,51 +71,27 @@ public class Dwarf extends Immigrant {
}
}
+ public ThroneRoom findNearestThroneRoom() {
+ ArrayList<ThroneRoom> searchThroneRooms = (ArrayList<ThroneRoom>) fortress.getThroneRooms().stream().filter(w -> w.getNobels().size() < 2).collect(Collectors.toList());
+ searchThroneRooms.sort((o1, o2) -> (int) ((Math.abs(o1.getGroup().getLayoutX() - this.getX()) + Math.abs(o1.getGroup().getLayoutY() - this.getY())) - ((Math.abs(o2.getGroup().getLayoutX() - this.getX()) + Math.abs(o2.getGroup().getLayoutY() - this.getY())))));
+ if (searchThroneRooms.isEmpty()) {
+ return null;
+ } else {
+ return searchThroneRooms.get(0);
+ }
+ }
+
public Coordinates getCoordinatesToWorkstation(Workstation workstation) {
double workstationX = workstation.getGroup().getLayoutX() + workstation.getGroup().getBoundsInParent().getWidth() - this.getGroup().getBoundsInParent().getWidth();
double workstationY = workstation.getGroup().getLayoutX() + workstation.getGroup().getBoundsInParent().getHeight() - this.getGroup().getBoundsInParent().getHeight();
return new Coordinates(workstationX, workstationY);
}
-// @Override
-// public void moveAI() {
-// if (fortress == null) {
-// fortress = findNearestFortress();
-// fortress.getDwarves().add(this);
-// }
-// if (!fortress.getGroup().getBoundsInParent().contains(this.getGroup().getBoundsInParent())) {
-// super.moveAI();
-// } else {
-// if (workstation == null) {
-// workstation = findNearestWorkstation();
-// if (workstation == null) {
-// super.moveAI();
-// } else {
-// Coordinates workstationToMove = this.getCoordinatesToWorkstation(workstation);
-// if (!workstationToMove.isThere(this)) {
-// double workstationX = workstationToMove.getX();
-// double workstationY = workstationToMove.getY();
-//
-// if (workstationX > this.getX()) {
-// this.setX(this.getX() + 1);
-// }
-//
-// if (workstationX < this.getX()) {
-// this.setX(this.getX() - 1);
-// }
-//
-// if (workstationY > this.getY()) {
-// this.setY(this.getY() + 1);
-// }
-//
-// if (workstationY < this.getY()) {
-// this.setY(this.getY() - 1);
-// }
-// }
-// }
-// }
-// }
-// }
+ public Coordinates getCoordinatesToThroneRoom(ThroneRoom throneRoom) {
+ double throneRoomX = throneRoom.getGroup().getLayoutX() + throneRoom.getGroup().getBoundsInParent().getWidth() - this.getGroup().getBoundsInParent().getWidth();
+ double throneRoomY = throneRoom.getGroup().getLayoutX() + throneRoom.getGroup().getBoundsInParent().getHeight() - this.getGroup().getBoundsInParent().getHeight();
+ return new Coordinates(throneRoomX, throneRoomY);
+ }
public void free() {
if (fortress == null) {
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Immigrant.java b/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Immigrant.java
index 77a9c63..2c86526 100644
--- a/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Immigrant.java
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Immigrant.java
@@ -91,6 +91,20 @@ public class Immigrant implements Comparable<Immigrant>, Cloneable {
this("Edzul", "Èrithbesmar", 35, 0, 0, Ability.values()[new Random().nextInt(Ability.values().length)]);
}
+ public Immigrant(String serializedData) {
+ this();
+ String[] params = serializedData.split(",");
+ this.setFirstName(params[1].split(" ")[0]);
+ this.setLastName(params[1].split(" ")[1]);
+ this.setX(Double.parseDouble(params[2]));
+ this.setY(Double.parseDouble(params[3]));
+ this.age = Integer.parseInt(params[4]);
+ this.setHp(Double.parseDouble(params[5]));
+ this.setMaxHp(Double.parseDouble(params[6]));
+ this.items = new ArrayList<>(List.of(params[7].split(";")));
+ this.ability = Ability.valueOf(params[8]);
+ }
+
public boolean isActive() {
return isActive;
}
@@ -337,4 +351,18 @@ public class Immigrant implements Comparable<Immigrant>, Cloneable {
return thread;
}
+ public String serialize() {
+ return String.join(",", new String[]{
+ this.getClass().getSimpleName(),
+ this.getFullName(),
+ String.valueOf(this.getX()),
+ String.valueOf(this.getY()),
+ String.valueOf(this.getAge()),
+ String.valueOf(this.getHp()),
+ String.valueOf(this.getMaxHp()),
+ String.join(";", this.getItems()),
+ this.ability.toString()
+ });
+ }
+
}
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Nobel.java b/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Nobel.java
index ed9ba7a..3de303d 100644
--- a/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Nobel.java
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/entities/micro/Nobel.java
@@ -2,12 +2,16 @@ package space.m0e.quga.oop.lab56maven.entities.micro;
import javafx.scene.image.Image;
import space.m0e.quga.oop.lab56maven.entities.common.Ability;
+import space.m0e.quga.oop.lab56maven.entities.macro.Fortress;
+import space.m0e.quga.oop.lab56maven.entities.macro.ThroneRoom;
+import java.util.ArrayList;
import java.util.Objects;
import java.util.Random;
-public class Nobel extends Immigrant {
+public class Nobel extends Dwarf {
public Image spriteImage = new Image(Objects.requireNonNull(Nobel.class.getResourceAsStream("nobel.png")));;
+ private ThroneRoom throneRoom;
public Nobel(String firstName, String lastName, int age, double x, double y, Ability ability) {
super(firstName, lastName, age, x, y, ability);
getSprite().setImage(spriteImage);
@@ -16,4 +20,17 @@ public class Nobel extends Immigrant {
public Nobel() {
this("Edzul", "Èrithbesmar", 35, 0, 0, Ability.values()[new Random().nextInt(Ability.values().length)]);
}
+
+ public Nobel(Immigrant immigrant, ThroneRoom throneRoom) {
+ this(immigrant.getFirstName(), immigrant.getLastName(), immigrant.getAge(), immigrant.getX(), immigrant.getY(), immigrant.getAbility());
+ this.setItems((ArrayList<String>) immigrant.getItems().clone());
+ this.setHp(this.getHp());
+ this.setMaxHp(this.getMaxHp());
+ this.throneRoom = throneRoom;
+ }
+
+ public Nobel(String serializedData) {
+ super(serializedData);
+ }
+
}