summaryrefslogtreecommitdiff
path: root/src/main/java/space/m0e/quga/oop/lab56maven/Main.java
diff options
context:
space:
mode:
authorAndriy Cherniy <qugalet@m0e.space>2024-06-08 22:58:45 +0300
committerAndriy Cherniy <qugalet@m0e.space>2024-06-08 22:58:45 +0300
commit249c10030fe27ef6a3a0afcacf53d4024143a054 (patch)
treef0ef624783997f9b46be6057f12d05f5e0537e3b /src/main/java/space/m0e/quga/oop/lab56maven/Main.java
downloadoop-kursach-249c10030fe27ef6a3a0afcacf53d4024143a054.tar.gz
oop-kursach-249c10030fe27ef6a3a0afcacf53d4024143a054.zip
initial commit
Diffstat (limited to 'src/main/java/space/m0e/quga/oop/lab56maven/Main.java')
-rw-r--r--src/main/java/space/m0e/quga/oop/lab56maven/Main.java133
1 files changed, 133 insertions, 0 deletions
diff --git a/src/main/java/space/m0e/quga/oop/lab56maven/Main.java b/src/main/java/space/m0e/quga/oop/lab56maven/Main.java
new file mode 100644
index 0000000..b337de8
--- /dev/null
+++ b/src/main/java/space/m0e/quga/oop/lab56maven/Main.java
@@ -0,0 +1,133 @@
+package space.m0e.quga.oop.lab56maven;
+
+import javafx.application.Application;
+import javafx.application.Platform;
+import javafx.scene.Group;
+import javafx.scene.Scene;
+import javafx.scene.control.Alert;
+import javafx.scene.control.Label;
+import javafx.scene.input.KeyCode;
+import javafx.scene.layout.BorderPane;
+import javafx.scene.paint.Color;
+import javafx.scene.shape.Rectangle;
+import javafx.stage.Stage;
+import space.m0e.quga.oop.lab56maven.dialogs.InsertDialog;
+import space.m0e.quga.oop.lab56maven.entities.common.Ability;
+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.macro.Workstation;
+import space.m0e.quga.oop.lab56maven.entities.micro.Dwarf;
+import space.m0e.quga.oop.lab56maven.entities.micro.Immigrant;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+public class Main extends Application {
+ public static Group root = new Group();
+ public static ArrayList<Immigrant> immigrants = new ArrayList<>();
+ public static ArrayList<Fortress> fortresses = new ArrayList<>();
+ public static Label status = new Label();
+
+ @Override
+ public void start(Stage stage) throws IOException, InterruptedException {
+ Rectangle rect = new Rectangle(3000, 2000, Color.WHITE);
+
+ root.getChildren().add(rect);
+ Fortress fortress = new Fortress("Eartha", 200, 200, new ArrayList<>(List.of(new Workstation("Torgrus"))), new ArrayList<>(List.of(new ThroneRoom("Halzorga"))));
+ fortresses.add(fortress);
+
+ immigrants.add(new Immigrant("1", "0", 50, 0,0, Ability.MASONIST));
+ immigrants.getFirst().setX(100);
+ immigrants.getFirst().setY(100);
+
+// BorderPane borderPane = new BorderPane();
+// borderPane.setCenter(root);
+// borderPane.setTop(status);
+
+// root.setStyle("-fx-background-color:rgb(186,153,122,0.7);");
+ root.getChildren().add(status);
+ Scene scene = new Scene(root, 1500, 700);
+
+ scene.setOnKeyPressed(event -> {
+ switch (event.getCode()) {
+ case LEFT -> moveImmigrants(-10, 0);
+ case RIGHT -> moveImmigrants(10, 0);
+ case UP -> moveImmigrants(0, -10);
+ case DOWN -> moveImmigrants(0, 10);
+ case INSERT -> {
+ try {
+ InsertDialog.display();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ case DELETE -> {
+ Iterator<Immigrant> iterator = immigrants.iterator();
+ while (iterator.hasNext()) {
+ Immigrant immigrant = iterator.next();
+ if (immigrant.isActive()) {
+ iterator.remove();
+ root.getChildren().remove(immigrant.getGroup());
+ }
+ }
+ processImmigrants();
+ }
+
+ case ESCAPE -> {
+ immigrants.forEach(immigrant -> {
+ immigrant.setActive(false);
+ });
+ }
+
+ case TAB -> {
+ Alert alert = new Alert(Alert.AlertType.INFORMATION);
+ alert.setTitle("Object list");
+ alert.setHeaderText("Object list");
+ alert.setContentText(immigrants.stream().map(Immigrant::toString).collect(Collectors.joining("\n")));
+ alert.showAndWait();
+ }
+ }
+ });
+ stage.setTitle("Hello!");
+ stage.setScene(scene);
+ ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+ scheduler.scheduleWithFixedDelay(() -> immigrants.forEach(immigrant -> {
+ immigrant.getThread().start();
+ }), 1, 1, TimeUnit.SECONDS);
+
+
+ stage.show();
+
+ }
+
+ private void moveImmigrants(double dx, double dy) {
+ immigrants.forEach(immigrant -> {
+ if (immigrant.isActive()) {
+ Platform.runLater(() -> {
+ immigrant.setX(immigrant.getX() + dx);
+ immigrant.setY(immigrant.getY() + dy);
+ });
+ }
+ });
+ }
+
+ public static void processImmigrants() {
+ status.setText("Active:");
+ immigrants.forEach(immigrant -> {
+ if (immigrant.isActive()) {
+ status.setText(status.getText() + " " + immigrant.getFullName());
+ }
+ });
+ }
+
+ public static void main(String[] args) {
+ launch();
+ }
+} \ No newline at end of file