diff options
| author | Andriy Cherniy <qugalet@m0e.space> | 2024-06-08 22:58:45 +0300 |
|---|---|---|
| committer | Andriy Cherniy <qugalet@m0e.space> | 2024-06-08 22:58:45 +0300 |
| commit | 249c10030fe27ef6a3a0afcacf53d4024143a054 (patch) | |
| tree | f0ef624783997f9b46be6057f12d05f5e0537e3b /src/main/java/space/m0e/quga/oop/lab56maven/Main.java | |
| download | oop-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.java | 133 |
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 |
