From fdfd7040a283b15d7c2346b6a20bda64900244b1 Mon Sep 17 00:00:00 2001 From: Andriy Cherniy Date: Sun, 16 Jun 2024 12:23:49 +0300 Subject: 20-22 --- .../quga/oop/lab56maven/threads/DwarfThread.java | 52 +++++++++++++++++++--- .../oop/lab56maven/threads/ImmigrantThread.java | 2 + 2 files changed, 48 insertions(+), 6 deletions(-) (limited to 'src/main/java/space/m0e/quga/oop/lab56maven/threads') 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); -- cgit v1.3-3-ga95d