summaryrefslogtreecommitdiff
path: root/src/main/java/space/m0e/quga/oop/lab56maven/threads
diff options
context:
space:
mode:
authorAndriy Cherniy <qugalet@m0e.space>2024-06-16 12:23:49 +0300
committerAndriy Cherniy <qugalet@m0e.space>2024-06-16 12:23:49 +0300
commitfdfd7040a283b15d7c2346b6a20bda64900244b1 (patch)
treeb01c75f7e4354d4259f0aeb30f081ca3b2b14312 /src/main/java/space/m0e/quga/oop/lab56maven/threads
parentd0f951643060821673e060eea7376000418c457b (diff)
downloadoop-kursach-fdfd7040a283b15d7c2346b6a20bda64900244b1.tar.gz
oop-kursach-fdfd7040a283b15d7c2346b6a20bda64900244b1.zip
20-22
Diffstat (limited to 'src/main/java/space/m0e/quga/oop/lab56maven/threads')
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/threads/DwarfThread.java52
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/threads/ImmigrantThread.java2
2 files changed, 48 insertions, 6 deletions
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/threads/DwarfThread.java b/src/main/java/space/m0e/quga/oop/lab56maven/threads/DwarfThread.java
index a662a6a..cffeeea 100644
--- a/src/main/java/space/m0e/quga/oop/lab56maven/threads/DwarfThread.java
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/threads/DwarfThread.java
@@ -2,11 +2,17 @@ package space.m0e.quga.oop.lab56maven.threads;
import javafx.application.Platform;
import space.m0e.quga.oop.lab56maven.Main;
+import space.m0e.quga.oop.lab56maven.decisions.Decision;
+import space.m0e.quga.oop.lab56maven.decisions.GoToDwarvesContainerDecision;
+import space.m0e.quga.oop.lab56maven.decisions.GoToThroneRoomDecision;
+import space.m0e.quga.oop.lab56maven.decisions.GoToWorkstationDecision;
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.micro.Dwarf;
import space.m0e.quga.oop.lab56maven.entities.micro.Immigrant;
+import java.util.Objects;
+import java.util.Random;
import java.util.concurrent.TimeUnit;
public class DwarfThread extends Thread {
@@ -14,6 +20,15 @@ public class DwarfThread extends Thread {
return dwarf;
}
+ private int timer = 0;
+ private Decision decision;
+ private static final String[] availableDecisions = new String[]{
+ "GoToWorkstation",
+ "GoToDwarvesContainer",
+// "GoToThroneRoom"
+ };
+ private static String lastDecision;
+
public void setDwarf(Dwarf dwarf) {
this.dwarf = dwarf;
}
@@ -33,13 +48,9 @@ public class DwarfThread extends Thread {
try {
TimeUnit.MILLISECONDS.sleep(10);
} catch (InterruptedException e) {
- throw new RuntimeException(e);
+ break;
}
-// Fortress fortress = dwarf.findNearestFortress();
-// if (fortress != null) {
-// Coordinates moveTo = dwarf.getCoordinatesToFortress(fortress);
-// dwarf.move(moveTo);
-// }
+ timer++;
if (dwarf.getFortress() == null) {
Fortress fortress = dwarf.findNearestFortress();
if (fortress != null) {
@@ -53,6 +64,35 @@ public class DwarfThread extends Thread {
});
}
}
+ } else {
+ if (decision == null) {
+ String decisionName = availableDecisions[new Random().nextInt(availableDecisions.length)];
+ while (Objects.equals(lastDecision, decisionName)) {
+ decisionName = availableDecisions[new Random().nextInt(availableDecisions.length)];
+ }
+ lastDecision = decisionName;
+ switch (decisionName) {
+ case "GoToWorkstation" -> {
+ if (dwarf.getAge() > 12 && dwarf.getAge() < 70) {
+ decision = new GoToWorkstationDecision(new Random().nextInt(timer + 200, timer + 500), dwarf);
+ }
+ }
+ case "GoToDwarvesContainer" -> {
+ decision = new GoToDwarvesContainerDecision(new Random().nextInt(timer + 200, timer + 500), dwarf);
+ }
+ case "GoToThroneRoom" -> {
+ if (dwarf.getAge() > 35 && dwarf.getAge() < 70) {
+ decision = new GoToThroneRoomDecision(new Random().nextInt(timer + 200, timer + 500), dwarf);
+ }
+ }
+ }
+ } else {
+ if (decision.getExecuteWhen() < timer) {
+ decision.cycle();
+ }
+ if (decision.isComplete())
+ decision = null;
+ }
}
}
}
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/threads/ImmigrantThread.java b/src/main/java/space/m0e/quga/oop/lab56maven/threads/ImmigrantThread.java
index 1eb8bbb..b3406d8 100644
--- a/src/main/java/space/m0e/quga/oop/lab56maven/threads/ImmigrantThread.java
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/threads/ImmigrantThread.java
@@ -42,6 +42,8 @@ public class ImmigrantThread extends Thread {
if (moveTo.isThere(immigrant)) {
Platform.runLater(() -> {
Dwarf dwarf = new Dwarf(immigrant, fortress);
+ dwarf.setThread(new DwarfThread(dwarf));
+ dwarf.getThread().start();
Main.immigrants.remove(immigrant);
Main.immigrants.add(dwarf);
fortress.add(dwarf);