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/decisions/Decision.java | 35 +++++++++++++++++ .../decisions/GoToDwarvesContainerDecision.java | 26 +++++++++++++ .../decisions/GoToThroneRoomDecision.java | 45 ++++++++++++++++++++++ .../decisions/GoToWorkstationDecision.java | 29 ++++++++++++++ 4 files changed, 135 insertions(+) create mode 100644 src/main/java/space/m0e/quga/oop/lab56maven/decisions/Decision.java create mode 100644 src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToDwarvesContainerDecision.java create mode 100644 src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToThroneRoomDecision.java create mode 100644 src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToWorkstationDecision.java (limited to 'src/main/java/space/m0e/quga/oop/lab56maven/decisions') 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); + } + } + } +} -- cgit v1.3-3-ga95d