From 3401d742ca53dce6bb1464cc12f94d107cfc285d Mon Sep 17 00:00:00 2001 From: Andriy Cherniy Date: Mon, 17 Jun 2024 02:59:32 +0300 Subject: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA --- .../decisions/GoToDwarvesContainerDecision.java | 15 +++++ .../decisions/GoToThroneRoomDecision.java | 10 +++- .../decisions/GoToWorkstationDecision.java | 8 +++ .../lab56maven/decisions/GoTradingDecision.java | 59 +++++++++++++++++++ .../decisions/WorkAtWorkstationDecision.java | 67 ++++++++++++++++++++++ 5 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 src/main/java/space/m0e/quga/oop/lab56maven/decisions/GoTradingDecision.java create mode 100644 src/main/java/space/m0e/quga/oop/lab56maven/decisions/WorkAtWorkstationDecision.java (limited to 'src/main/java/space/m0e/quga/oop/lab56maven/decisions') 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 -- cgit v1.3-3-ga95d