diff options
| author | Andriy Cherniy <qugalet@m0e.space> | 2024-06-16 12:23:49 +0300 |
|---|---|---|
| committer | Andriy Cherniy <qugalet@m0e.space> | 2024-06-16 12:23:49 +0300 |
| commit | fdfd7040a283b15d7c2346b6a20bda64900244b1 (patch) | |
| tree | b01c75f7e4354d4259f0aeb30f081ca3b2b14312 /src/main/java/space/m0e/quga/oop/lab56maven/decisions | |
| parent | d0f951643060821673e060eea7376000418c457b (diff) | |
| download | oop-kursach-fdfd7040a283b15d7c2346b6a20bda64900244b1.tar.gz oop-kursach-fdfd7040a283b15d7c2346b6a20bda64900244b1.zip | |
20-22
Diffstat (limited to 'src/main/java/space/m0e/quga/oop/lab56maven/decisions')
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); + } + } + } +} |
