summaryrefslogtreecommitdiff
path: root/src/main/java/space/m0e/quga/oop/lab56maven/decisions
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/space/m0e/quga/oop/lab56maven/decisions')
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/decisions/Decision.java35
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToDwarvesContainerDecision.java26
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToThroneRoomDecision.java45
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToWorkstationDecision.java29
4 files changed, 135 insertions, 0 deletions
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/decisions/Decision.java b/src/main/java/space/m0e/quga/oop/lab56maven/decisions/Decision.java
new file mode 100644
index 0000000..a68f658
--- /dev/null
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/decisions/Decision.java
@@ -0,0 +1,35 @@
+package space.m0e.quga.oop.lab56maven.decisions;
+
+public abstract class Decision {
+
+ private int executeWhen;
+
+ public boolean isComplete() {
+ return isComplete;
+ }
+
+ public void setComplete(boolean complete) {
+ isComplete = complete;
+ }
+
+ private boolean isComplete = false;
+
+ public Decision(int executeWhen) {
+ this.executeWhen = executeWhen;
+ }
+
+ public int getExecuteWhen() {
+ return executeWhen;
+ }
+
+ public void setExecuteWhen(int executeWhen) {
+ this.executeWhen = executeWhen;
+ }
+
+ public abstract void cycle();
+
+ @Override
+ public String toString() {
+ return String.format("Decision [executeWhen=%d, isComplete=%b]", executeWhen, isComplete);
+ }
+}
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToDwarvesContainerDecision.java b/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToDwarvesContainerDecision.java
new file mode 100644
index 0000000..6ad8fad
--- /dev/null
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToDwarvesContainerDecision.java
@@ -0,0 +1,26 @@
+package space.m0e.quga.oop.lab56maven.decisions;
+
+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.Workstation;
+import space.m0e.quga.oop.lab56maven.entities.micro.Dwarf;
+
+public class GoToDwarvesContainerDecision extends Decision {
+ private Dwarf dwarf;
+
+ public GoToDwarvesContainerDecision(int executeWhen, Dwarf dwarf) {
+ super(executeWhen);
+ this.dwarf = dwarf;
+ }
+
+ @Override
+ public void cycle() {
+ Fortress fortress = dwarf.getFortress();
+ Coordinates nearCoordinates = new Coordinates(fortress.getGroup().getBoundsInParent().getCenterX(), fortress.getGroup().getBoundsInParent().getCenterY());
+ dwarf.move(nearCoordinates);
+ if (nearCoordinates.isThere(dwarf)) {
+ fortress.addToContainer(dwarf);
+ setComplete(true);
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToThroneRoomDecision.java b/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToThroneRoomDecision.java
new file mode 100644
index 0000000..ba44d08
--- /dev/null
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToThroneRoomDecision.java
@@ -0,0 +1,45 @@
+package space.m0e.quga.oop.lab56maven.decisions;
+
+import javafx.application.Platform;
+import space.m0e.quga.oop.lab56maven.Main;
+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.micro.Dwarf;
+import space.m0e.quga.oop.lab56maven.entities.micro.Nobel;
+
+import java.util.ArrayList;
+import java.util.stream.Collectors;
+
+public class GoToThroneRoomDecision extends Decision {
+ private Dwarf dwarf;
+
+ public GoToThroneRoomDecision(int executeWhen, Dwarf dwarf) {
+ super(executeWhen);
+ this.dwarf = dwarf;
+ }
+
+ @Override
+ public void cycle() {
+ ThroneRoom throneRoom = dwarf.findNearestThroneRoom();
+ if (throneRoom != null) {
+ dwarf.getFortress().removeFromContainer(dwarf);
+ Coordinates nearCoordinates = dwarf.getCoordinatesToThroneRoom(throneRoom);
+ dwarf.move(nearCoordinates);
+ if (nearCoordinates.isThere(dwarf)) {
+ Platform.runLater(() -> {
+ Fortress fort = Main.fortresses.stream().filter(fortress -> fortress.getThroneRooms().contains(throneRoom)).collect(Collectors.toCollection(ArrayList::new)).get(0);
+ dwarf.getFortress().remove(dwarf);
+ Nobel nobel = new Nobel(dwarf, throneRoom);
+ Main.immigrants.remove(dwarf);
+ Main.immigrants.add(nobel);
+ fort.add(nobel);
+ fort.removeFromContainer(nobel);
+ throneRoom.add(nobel);
+ dwarf.getThread().interrupt();
+ });
+ setComplete(true);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToWorkstationDecision.java b/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToWorkstationDecision.java
new file mode 100644
index 0000000..06f69e9
--- /dev/null
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToWorkstationDecision.java
@@ -0,0 +1,29 @@
+package space.m0e.quga.oop.lab56maven.decisions;
+
+import space.m0e.quga.oop.lab56maven.entities.common.Coordinates;
+import space.m0e.quga.oop.lab56maven.entities.macro.Workstation;
+import space.m0e.quga.oop.lab56maven.entities.micro.Dwarf;
+
+public class GoToWorkstationDecision extends Decision {
+
+ private Dwarf dwarf;
+
+ public GoToWorkstationDecision(int executeWhen, Dwarf dwarf) {
+ super(executeWhen);
+ this.dwarf = dwarf;
+ }
+
+ @Override
+ public void cycle() {
+ Workstation near = dwarf.findNearestWorkstation();
+ if (near != null) {
+ dwarf.getFortress().removeFromContainer(dwarf);
+ Coordinates nearCoordinates = dwarf.getCoordinatesToWorkstation(near);
+ dwarf.move(nearCoordinates);
+ if (nearCoordinates.isThere(dwarf)) {
+ dwarf.setWorkstation(near);
+ setComplete(true);
+ }
+ }
+ }
+}