summaryrefslogtreecommitdiff
path: root/src/main/java/space/m0e/quga/oop/lab56maven/decisions
diff options
context:
space:
mode:
authorAndriy Cherniy <qugalet@m0e.space>2024-06-17 02:59:32 +0300
committerAndriy Cherniy <qugalet@m0e.space>2024-06-17 02:59:32 +0300
commit3401d742ca53dce6bb1464cc12f94d107cfc285d (patch)
tree4640d50fbbb738e6ae63dac87c0ade6bd21a9523 /src/main/java/space/m0e/quga/oop/lab56maven/decisions
parentfdfd7040a283b15d7c2346b6a20bda64900244b1 (diff)
downloadoop-kursach-3401d742ca53dce6bb1464cc12f94d107cfc285d.tar.gz
oop-kursach-3401d742ca53dce6bb1464cc12f94d107cfc285d.zip
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Diffstat (limited to 'src/main/java/space/m0e/quga/oop/lab56maven/decisions')
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToDwarvesContainerDecision.java15
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToThroneRoomDecision.java10
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToWorkstationDecision.java8
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoTradingDecision.java59
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/decisions/WorkAtWorkstationDecision.java67
5 files changed, 158 insertions, 1 deletions
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
index 6ad8fad..4eb83c2 100644
--- a/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToDwarvesContainerDecision.java
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToDwarvesContainerDecision.java
@@ -1,6 +1,8 @@
package space.m0e.quga.oop.lab56maven.decisions;
+import javafx.application.Platform;
import space.m0e.quga.oop.lab56maven.entities.common.Coordinates;
+import space.m0e.quga.oop.lab56maven.entities.common.Item;
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;
@@ -19,6 +21,19 @@ public class GoToDwarvesContainerDecision extends Decision {
Coordinates nearCoordinates = new Coordinates(fortress.getGroup().getBoundsInParent().getCenterX(), fortress.getGroup().getBoundsInParent().getCenterY());
dwarf.move(nearCoordinates);
if (nearCoordinates.isThere(dwarf)) {
+ dwarf.getItems().entrySet().forEach(item -> {
+ switch (item.getKey()) {
+ case WOOD -> {
+ fortress.setWoodCount(fortress.getWoodCount() + item.getValue());
+ item.setValue(0);
+ }
+ case STONE -> {
+ fortress.setStoneCount(fortress.getStoneCount() + item.getValue());
+ item.setValue(0);
+ }
+ }
+ });
+ Platform.runLater(dwarf::updateItemLabel);
fortress.addToContainer(dwarf);
setComplete(true);
}
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
index ba44d08..cfadb5c 100644
--- a/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToThroneRoomDecision.java
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToThroneRoomDecision.java
@@ -1,6 +1,8 @@
package space.m0e.quga.oop.lab56maven.decisions;
import javafx.application.Platform;
+import javafx.scene.paint.Color;
+import javafx.scene.shape.Circle;
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;
@@ -29,14 +31,20 @@ public class GoToThroneRoomDecision extends Decision {
if (nearCoordinates.isThere(dwarf)) {
Platform.runLater(() -> {
Fortress fort = Main.fortresses.stream().filter(fortress -> fortress.getThroneRooms().contains(throneRoom)).collect(Collectors.toCollection(ArrayList::new)).get(0);
+ double lastX = dwarf.getX();
+ double lastY = dwarf.getY();
dwarf.getFortress().remove(dwarf);
+ Main.root.getChildren().remove(dwarf.getGroup());
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();
+ nobel.setX(lastX);
+ nobel.setY(lastY);
+ dwarf.getTimeline().stop();
+ nobel.getTimeline().play();
});
setComplete(true);
}
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
index 06f69e9..6dc4448 100644
--- a/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToWorkstationDecision.java
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoToWorkstationDecision.java
@@ -1,8 +1,10 @@
package space.m0e.quga.oop.lab56maven.decisions;
+import javafx.application.Platform;
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;
+import space.m0e.quga.oop.lab56maven.handlers.DwarfHandler;
public class GoToWorkstationDecision extends Decision {
@@ -17,11 +19,17 @@ public class GoToWorkstationDecision extends Decision {
public void cycle() {
Workstation near = dwarf.findNearestWorkstation();
if (near != null) {
+ System.out.println(near.getName());
+ Platform.runLater(dwarf::updateItemLabel);
dwarf.getFortress().removeFromContainer(dwarf);
Coordinates nearCoordinates = dwarf.getCoordinatesToWorkstation(near);
dwarf.move(nearCoordinates);
if (nearCoordinates.isThere(dwarf)) {
dwarf.setWorkstation(near);
+
+ DwarfHandler dwarfHandler = (DwarfHandler) dwarf.getHandler();
+ dwarfHandler.setDecision(new WorkAtWorkstationDecision(dwarfHandler.getTimer() + 1, dwarf));
+ near.getCountLabel().setText(String.valueOf(near.getDwarves().size()));
setComplete(true);
}
}
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoTradingDecision.java b/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoTradingDecision.java
new file mode 100644
index 0000000..493fb45
--- /dev/null
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoTradingDecision.java
@@ -0,0 +1,59 @@
+package space.m0e.quga.oop.lab56maven.decisions;
+
+import javafx.application.Platform;
+import space.m0e.quga.oop.lab56maven.entities.common.Coordinates;
+import space.m0e.quga.oop.lab56maven.entities.common.Item;
+import space.m0e.quga.oop.lab56maven.entities.macro.Fortress;
+import space.m0e.quga.oop.lab56maven.entities.micro.Dwarf;
+import space.m0e.quga.oop.lab56maven.handlers.DwarfHandler;
+
+public class GoTradingDecision extends Decision {
+
+ private Dwarf dwarf;
+
+ private Item tradingItem;
+ private int amountOfItem;
+
+ public GoTradingDecision(int executeWhen, Dwarf dwarf, Item tradingItem, int amountOfItem) {
+ super(executeWhen);
+ this.dwarf = dwarf;
+ this.tradingItem = tradingItem;
+ this.amountOfItem = amountOfItem;
+ }
+
+ @Override
+ public void cycle() {
+ Fortress near = dwarf.findNearestFortressToTrade(tradingItem, amountOfItem);
+ if (near != null) {
+ dwarf.getFortress().removeFromContainer(dwarf);
+ Coordinates nearCoordinates = dwarf.getCoordinatesToFortress(near);
+ dwarf.move(nearCoordinates);
+ if (nearCoordinates.isThere(dwarf)) {
+ dwarf.getItems().remove(tradingItem);
+ Item getItem = null;
+ switch (tradingItem) {
+ case WOOD -> {
+ near.setStoneCount(near.getStoneCount() - amountOfItem);
+ getItem = Item.STONE;
+ }
+ case STONE -> {
+ near.setWoodCount(near.getWoodCount() - amountOfItem);
+ getItem = Item.WOOD;
+ }
+ }
+ if (getItem != null) {
+ dwarf.getItems().put(getItem, amountOfItem);
+ }
+
+ Platform.runLater(dwarf::updateItemLabel);
+ DwarfHandler dwarfHandler = (DwarfHandler) dwarf.getHandler();
+ dwarfHandler.setDecision(new GoToDwarvesContainerDecision(dwarfHandler.getTimer() + 1, dwarf));
+ setComplete(true);
+ }
+ } else {
+ DwarfHandler dwarfHandler = (DwarfHandler) dwarf.getHandler();
+ dwarfHandler.setDecision(new GoToDwarvesContainerDecision(dwarfHandler.getTimer() + 1, dwarf));
+ setComplete(true);
+ }
+ }
+}
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/decisions/WorkAtWorkstationDecision.java b/src/main/java/space/m0e/quga/oop/lab56maven/decisions/WorkAtWorkstationDecision.java
new file mode 100644
index 0000000..79244d1
--- /dev/null
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/decisions/WorkAtWorkstationDecision.java
@@ -0,0 +1,67 @@
+package space.m0e.quga.oop.lab56maven.decisions;
+
+import javafx.application.Platform;
+import space.m0e.quga.oop.lab56maven.entities.common.Ability;
+import space.m0e.quga.oop.lab56maven.entities.common.Coordinates;
+import space.m0e.quga.oop.lab56maven.entities.common.Item;
+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;
+import space.m0e.quga.oop.lab56maven.handlers.DwarfHandler;
+
+import java.util.Random;
+
+public class WorkAtWorkstationDecision extends Decision {
+ private Dwarf dwarf;
+
+ private int timer = 0;
+
+ private static int endsAt = 1000;
+
+ public WorkAtWorkstationDecision(int executeWhen, Dwarf dwarf) {
+ super(executeWhen);
+ this.dwarf = dwarf;
+ }
+
+ @Override
+ public void cycle() {
+ timer += 10;
+ if (timer >= endsAt) {
+ Workstation workstation = dwarf.getWorkstation();
+ Fortress fortress = dwarf.getFortress();
+
+ int amount = new Random().nextInt(5,20);
+ switch (workstation.getRequiredAbility()) {
+ case MASONIST -> {
+ if (dwarf.getItems().containsKey(Item.PICKAXE) && dwarf.getItems().get(Item.PICKAXE) > 0)
+ amount *= 2;
+
+ if (fortress.getThroneRooms().stream().anyMatch(
+ throneRoom -> throneRoom.getNobels().stream().anyMatch(
+ nobel -> nobel.getAbility() == Ability.MASONIST))) {
+ amount *= 2;
+ }
+
+ fortress.setStoneCount(fortress.getStoneCount() + amount);
+ }
+ case WOODCUTTER -> {
+ if (dwarf.getItems().containsKey(Item.AXE) && dwarf.getItems().get(Item.AXE) > 0)
+ amount *= 2;
+
+ if (fortress.getThroneRooms().stream().anyMatch(
+ throneRoom -> throneRoom.getNobels().stream().anyMatch(
+ nobel -> nobel.getAbility() == Ability.MASONIST))) {
+ amount *= 2;
+ }
+ fortress.setWoodCount(fortress.getWoodCount() + amount);
+ }
+ }
+ Platform.runLater(dwarf::updateItemLabel);
+ DwarfHandler dwarfHandler = (DwarfHandler) dwarf.getHandler();
+ dwarfHandler.setDecision(new GoToDwarvesContainerDecision(dwarfHandler.getTimer() + 1, dwarf));
+ workstation.getDwarves().remove(dwarf);
+ workstation.getCountLabel().setText(String.valueOf(workstation.getDwarves().size()));
+ setComplete(true);
+ }
+ }
+} \ No newline at end of file