From 3401d742ca53dce6bb1464cc12f94d107cfc285d Mon Sep 17 00:00:00 2001 From: Andriy Cherniy Date: Mon, 17 Jun 2024 02:59:32 +0300 Subject: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA --- .../java/space/m0e/quga/oop/lab56maven/Main.java | 103 +++++++++++++++++---- 1 file changed, 83 insertions(+), 20 deletions(-) (limited to 'src/main/java/space/m0e/quga/oop/lab56maven/Main.java') diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/Main.java b/src/main/java/space/m0e/quga/oop/lab56maven/Main.java index 25ba617..65a0f5d 100644 --- a/src/main/java/space/m0e/quga/oop/lab56maven/Main.java +++ b/src/main/java/space/m0e/quga/oop/lab56maven/Main.java @@ -1,21 +1,30 @@ package space.m0e.quga.oop.lab56maven; +import javafx.animation.AnimationTimer; +import javafx.animation.KeyFrame; +import javafx.animation.Timeline; import javafx.application.Application; import javafx.application.Platform; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; +import javafx.scene.SnapshotParameters; import javafx.scene.control.Alert; import javafx.scene.control.Label; -import javafx.scene.input.KeyCode; -import javafx.scene.layout.BorderPane; +import javafx.scene.image.ImageView; +import javafx.scene.image.WritableImage; import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; +import javafx.scene.transform.Scale; import javafx.stage.FileChooser; import javafx.stage.Stage; +import javafx.util.Duration; import space.m0e.quga.oop.lab56maven.dialogs.CountDialog; import space.m0e.quga.oop.lab56maven.dialogs.InsertDialog; import space.m0e.quga.oop.lab56maven.dialogs.SearchDialog; import space.m0e.quga.oop.lab56maven.entities.common.Ability; +import space.m0e.quga.oop.lab56maven.entities.common.MiniMap; import space.m0e.quga.oop.lab56maven.entities.common.Utils; import space.m0e.quga.oop.lab56maven.entities.macro.Fortress; import space.m0e.quga.oop.lab56maven.entities.macro.ThroneRoom; @@ -23,8 +32,8 @@ import space.m0e.quga.oop.lab56maven.entities.macro.Workstation; import space.m0e.quga.oop.lab56maven.entities.micro.Dwarf; import space.m0e.quga.oop.lab56maven.entities.micro.Immigrant; import space.m0e.quga.oop.lab56maven.entities.micro.Nobel; -import space.m0e.quga.oop.lab56maven.threads.DwarfThread; -import space.m0e.quga.oop.lab56maven.threads.ImmigrantThread; +import space.m0e.quga.oop.lab56maven.handlers.DwarfHandler; +import space.m0e.quga.oop.lab56maven.handlers.ImmigrantHandler; import java.io.*; import java.util.ArrayList; @@ -38,32 +47,54 @@ import java.util.stream.Collectors; public class Main extends Application { public static Group root = new Group(); + public static Group group = new Group(); public static ArrayList immigrants = new ArrayList<>(); public static ArrayList fortresses = new ArrayList<>(); public static Label status = new Label(); + public static MiniMap miniMap; + public static final double width = 3555; public static final double height = 2000; + public static ImageView imgviewmap; + public static Rectangle rectMinimap; + @Override public void start(Stage stage) throws IOException, InterruptedException { Rectangle rect = new Rectangle(width, height, Color.WHITE); -// rect.setStroke(Color.BLUE); -// rect.setStrokeWidth(10); FileChooser fileChooser = new FileChooser(); fileChooser.setInitialFileName("serial.csv"); root.getChildren().add(rect); - Fortress fortress = new Fortress("Eartha", 150, 150, new ArrayList<>(List.of(new Workstation("Torgrus"))), new ArrayList<>(List.of(new ThroneRoom("Halzorga")))); + Fortress fortress = new Fortress("Eartha", 150, 150, + new ArrayList<>(List.of( + new Workstation("Torgrus", Ability.MASONIST), + new Workstation("Abbacus", Ability.WOODCUTTER) + )), + new ArrayList<>(List.of( + new ThroneRoom("Halzorga")) + )); + + Fortress fortressTrade = new Fortress("Aboba", 1000, 150, + new ArrayList<>(List.of( + new Workstation("Torgrass", Ability.WOODCUTTER) + )), + new ArrayList<>(List.of( + ))); + fortresses.add(fortressTrade); fortresses.add(fortress); + fortressTrade.setWoodCount(999); - immigrants.add(new Immigrant("1", "0", 50, 0,0, Ability.MASONIST)); - immigrants.getFirst().setX(100); - immigrants.getFirst().setY(100); +// immigrants.add(new Immigrant("Melbil", "Lancerpaddle", 50, 100,100, Ability.WOODCUTTER)); +// immigrants.add(new Immigrant("Atír", "Razorpaddle", 50, 0,0, Ability.WOODCUTTER)); +// immigrants.add(new Immigrant("Onget", "Sabreletter", 52, 200,150, Ability.WOODCUTTER)); + immigrants.add(new Immigrant("Limul", "Rockrack", 52, 700,150, Ability.WOODCUTTER)); root.getChildren().add(status); - Scene scene = new Scene(root, width/4, height/4); + group.getChildren().add(root); + Scene scene = new Scene(group, width/4, height/4); scene.setOnKeyPressed(event -> { switch (event.getCode()) { @@ -181,7 +212,7 @@ public class Main extends Application { fortress1.remove((Dwarf) immigrant); }); } - immigrant.getThread().interrupt(); + immigrant.getTimeline().stop(); }); immigrants.clear(); StringBuilder finalDeserializeData = new StringBuilder(); @@ -195,20 +226,17 @@ public class Main extends Application { switch (params[0]) { case "Immigrant" -> { Immigrant immigrant = new Immigrant(data); - immigrant.setThread(new ImmigrantThread(immigrant)); - immigrant.getThread().start(); + immigrant.getTimeline().play(); immigrants.add(immigrant); } case "Dwarf" -> { Dwarf dwarf = new Dwarf(data); - dwarf.setThread(new DwarfThread(dwarf)); - dwarf.getThread().start(); + dwarf.getTimeline().play(); immigrants.add(dwarf); } case "Nobel" -> { Dwarf nobel = new Nobel(data); - nobel.setThread(new DwarfThread(nobel)); - nobel.getThread().start(); + nobel.getTimeline().play(); immigrants.add(nobel); } } @@ -235,14 +263,49 @@ public class Main extends Application { stage.setScene(scene); ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); scheduler.scheduleWithFixedDelay(() -> immigrants.forEach(immigrant -> { - immigrant.getThread().start(); + immigrant.getTimeline().play(); }), 1, 1, TimeUnit.SECONDS); +// isMiniMapVisible = !isMiniMapVisible; +// if (isMiniMapVisible){ +// +// mainGroup.getChildren().add(miniMap); +// mainGroup.getChildren().add(miniMap.rect); +// UpdateTimer.play(); +// } +// else{ +// mainGroup.getChildren().remove(miniMap); +// mainGroup.getChildren().remove(miniMap.rect); +// UpdateTimer.stop(); +// } + miniMap = new MiniMap(400, 225, stage.getWidth()/10, stage.getHeight()/10, root); + mapTimer = new Timeline(new KeyFrame(Duration.seconds(1), new EventHandler() + { + @Override + public void handle(ActionEvent event) + { + Platform.runLater(() -> { + miniMap.updateMap(); + miniMap.setHeight(height/10); + miniMap.setWidth(width/10); + miniMap.rect.setHeight(stage.getHeight()/10); + miniMap.rect.setWidth(stage.getWidth()/10); + }); - stage.show(); + miniMap.rect.setX(-root.getLayoutX() / 10); + miniMap.rect.setY(-root.getLayoutY() / 10); + } + })); + mapTimer.setCycleCount(Timeline.INDEFINITE); + group.getChildren().add(miniMap); + group.getChildren().add(miniMap.rect); + mapTimer.play(); + stage.show(); } + public static Timeline mapTimer; + private void moveImmigrants(double dx, double dy) { immigrants.forEach(immigrant -> { if (immigrant.isActive()) { -- cgit v1.3-3-ga95d