Package pi

Class Controller

java.lang.Object
pi.Controller
Direct Known Subclasses:
Game

public class Controller extends Object
Steuert das aktuelle Spiel bzw. Projekt.

Diese Klasse ist die Hauptklasse der Engine und dient nicht nur zur Steuerung des Spiels. Über statische Attribute kann auch auf die Konfiguration und die verschiedenen Ressourcen zugegriffen werden.

Die Klasse hat ausschließlich statische Attribute und Methoden.

Die Klassen Game und Controller sind identisch. Controller ist der neutralere Name und eignet sich besser für Projekte, die kein Spiel darstellen (z.B. Projekte zur Algorithmenvisualisierung oder Physik-Simulation).

Since:
0.42.0
Author:
Michael Andonie, Niklas Keller, Josef Friedrich
  • Field Details

    • config

      public static final Configuration config
      Bietet Zugriff auf das Konfigurationsobjekt der Engine.

      Dieses statische Attribut kann über einen statischen Import eingebunden werden:

       
       import static pi.Controller.config;
       
       
      Since:
      0.42.0
    • colors

      public static final ColorContainer colors
      Ein Speicher für Farben des Datentyps Color.

      Dieses statische Attribut kann über einen statischen Import eingebunden werden:

       
       import static pi.Controller.colors;
       
       
      Since:
      0.42.0
    • colorScheme

      public static final ColorSchemeContainer colorScheme
      Verwaltet eine Sammlung von Farbschemata und ermöglicht deren Verwaltung und Abruf anhand von Namen.

      Dieses statische Attribut kann über einen statischen Import eingebunden werden:

       
       import static pi.Controller.colorScheme;
       
       
      Since:
      0.42.0
    • fonts

      public static final FontContainer fonts
      Ein Speicher für Schriftarten des Datentyps Font.

      Dieses statische Attribut kann über einen statischen Import eingebunden werden:

       
       import static pi.Controller.fonts;
       
       
      Since:
      0.42.0
    • images

      public static final ImageContainer images
      Ein Speicher für Bilder des Datentyps BufferedImage.

      Dieses statische Attribut kann über einen statischen Import eingebunden werden:

       
       import static pi.Controller.images;
       
       
      Since:
      0.42.0
    • sounds

      public static final SoundContainer sounds
      Ein Speicher für Klänge des Datentyps Sound.

      Dieses statische Attribut kann über einen statischen Import eingebunden werden:

       
       import static pi.Controller.sounds;
       
       
      Since:
      0.42.0
    • dialog

      public static final DialogLauncher dialog
      Öffnet verschiedene Dialoge.
  • Constructor Details

    • Controller

      protected Controller()
      Der geschützte Konstruktor verhindert, dass Instanzen von dieser Klasse gemacht werden. Die Klassen, hat ausschließlich statischen Attributen und Methoden.
      Throws:
      UnsupportedOperationException
  • Method Details

    • title

      @API @Setter public static void title(String title)
      Setzt den Titel des Spielfensters.
      Parameters:
      title - Titel des Spielfensters.
    • start

      @API public static Scene start(Scene scene, int width, int height)
      Startet das Spiel in einem Fenster mit der angegebenen Breite, Höhe und Pixelvervielfältigung.
      Parameters:
      scene - Die Szene, mit der das Spiel gestartet wird.
      width - Die Breite des Zeichenbereichs in Pixel.
      height - Die Höhe des Zeichenbereichs in Pixel.
      Returns:
      Die Szene, mit der das Spiel gestartet wurde.
    • start

      public static Scene start(Consumer<Scene> sceneConsumer)
      Startet das Spiel in einem Fenster mit den Standard-Abmessungen (800x600 Pixel falls nicht anderweitig konfiguriert). Es wird automatische eine Szene erzeugt und diese zur weiteren Verwendung an eine Lambda-Funktion übergeben.
      
       Controller.start((scene) -> {
           Line line = new Line(1, 1, 4, 5);
           line.setColor("grün");
           scene.add(line);
       });
       
      Parameters:
      sceneConsumer - Eine Lamda-Funktion, die als Eingabe-Parameter die erzeugte Szene erhält.
      Returns:
      Die Szene, mit der das Spiel gestartet wurde.
    • start

      @API public static Scene start(Scene scene)
      Startet das Spiel in einem Fenster mit den Standard-Abmessungen (800x600 Pixel falls nicht anderweitig konfiguriert).
      Parameters:
      scene - Die Szene, mit der das Spiel gestartet wird.
      Returns:
      Die Szene, mit der das Spiel gestartet wurde.
    • start

      @API public static Scene start()
      Startet das Spiel in einem Fenster mit den Standard-Abmessungen (800x600 Pixel falls nicht anderweitig konfiguriert) und der Begrüßungsanimation.
      Returns:
      Die erzeugte Szene, mit der das Spiel gestartet wurde.
      See Also:
      • MainAnimation
    • startSafe

      public static Scene startSafe(Scene scene)
      Wenn das Spiel noch nicht läuft, wird das Spiel gestartet, ansonsten wird zur gegeben Szene gewechselt.
      Since:
      0.40.0
    • transitionToScene

      @API public static void transitionToScene(Scene scene)
      Wechselt die aktuelle Szene.
      Parameters:
      scene - Die Szene, zu der gewechselt werden soll. Wird null übergeben, wird eine neue Szene erstellt.
    • defaultControl

      @Getter public static DefaultListener defaultControl()
      Gibt die momentan registrierten, grundlegenden Maus- und Tastatur-Steuermöglichkeiten zurück.
      Returns:
      Die registrierten, grundlegenden Maus- und Tastatur-Steuermöglichkeiten.
    • defaultControl

      @Setter public static void defaultControl(DefaultListener control)
      Registriert grundlegende Maus- und Tastatur-Steuermöglichkeiten.
      Parameters:
      control - Die grundlegenden Maus- und Tastatur-Steuermöglichkeiten.
    • removeDefaultControl

      public static void removeDefaultControl()
      Meldet die grundlegenden Maus- und Tastatur-Steuermöglichkeiten ab.
      See Also:
    • addFrameUpdateListener

      public static FrameUpdateListener addFrameUpdateListener(FrameUpdateListener listener)
      Registriert einen statischen, d. h. globalen Beobachter, der auf Bildaktualisierungen reagiert.
      Parameters:
      listener - Der Beobachter, der auf Bildaktualisierungen reagiert.
      Returns:
      Der Rückgabewert ist mit dem Eingabeparameter identisch. Dieser Wert kann dann mit dem Datentyp FrameUpdateListener einer lokalen Variablen bzw. einem Attribut zugewiesen werden und später zum Abmelden verwendet werden.
    • removeFrameUpdateListener

      public static void removeFrameUpdateListener(FrameUpdateListener listener)
      Meldet einen statischen, d. h. globalen Beobachter ab, der auf Bildaktualisierungen reagiert.
      Parameters:
      listener - Der Beobachter, der auf Bildaktualisierungen reagiert.
    • addKeyStrokeListener

      public static void addKeyStrokeListener(KeyStrokeListener listener)
      Fügt einen statisch KeyStrokeListener hinzu, d. h. dieser KeyStrokeListener gilt global über das ganze Spiel und ist unabhängig von der aktuellen Szene.

      Der KeyStrokeListener kann auf mehrere Arten implementiert werden:

      1. Als normale Klasse:
        
         class MyKeyStrokelistener implements KeyStrokeListener
         {
             @Override
             public void onKeyDown(KeyEvent e)
             {
                 // Code here
             }
         }
         obj.addKeyStrokeListener(new MyKeyStrokelistener());
         
      2. Als anonyme Klasse:
        
         obj.addKeyStrokeListener(new KeyStrokeListener()
         {
             @Override
             public void onKeyDown(KeyEvent e)
             {
                 // Code here
             }
         });
         
      3. Oder als Lambda-Ausdruck:
        
         obj.addKeyStrokeListener(e -> {
             // Code here
         });
         
      Parameters:
      listener - Ein Objekt der Klasse KeyStrokeListener.
      See Also:
    • removeKeyStrokeListener

      public static void removeKeyStrokeListener(KeyStrokeListener listener)
      Entfernt einen statischen KeyStrokeListener vom Objekt, d. h. einen KeyStrokeListener, der global für das ganze Spiel gilt.
      Parameters:
      listener - Ein Objekt der Klasse KeyStrokeListener.
      See Also:
    • addMouseClickListener

      public static void addMouseClickListener(MouseClickListener listener)
    • removeMouseClickListener

      public static void removeMouseClickListener(MouseClickListener listener)
    • addMouseScrollListener

      public static void addMouseScrollListener(MouseScrollListener listener)
    • removeMouseScrollListener

      public static void removeMouseScrollListener(MouseScrollListener listener)
    • addSceneLaunchListener

      public static void addSceneLaunchListener(SceneLaunchListener listener)
    • removeSceneLaunchListener

      public static void removeSceneLaunchListener(SceneLaunchListener listener)
    • scene

      @API @Getter public static Scene scene()
      Gibt die gerade aktive Szene zurück.

      Falls noch keine Szene existiert, wird eine neue Szene erstellt.

      Returns:
      Die gerade aktive Szene.
    • startedScene

      @API @Getter public static Scene startedScene()
      Gibt die gerade aktive Szene zurück und startet diese Szene, falls sie noch nicht gestartet wurde.

      Falls noch keine Szene existiert, wird eine neue Szene erstellt.

      Returns:
      Die gerade aktive Szene.
      Since:
      0.42.0
    • isKeyPressed

      @API public static boolean isKeyPressed(int keyCode)
      Gibt an, ob eine bestimmte Taste derzeit gedrückt ist.
      Parameters:
      keyCode - Die zu testende Taste als Key-Code (also z.B. KeyEvent.VK_D).
      Returns:
      true, wenn die zu testende Taste gerade heruntergedrückt ist, sonst false.
      See Also:
    • isRunning

      @API public static boolean isRunning()
      Gibt an, ob die Engine gerade läuft. Die Engine läuft, sobald es ein sichtbares Fenster gibt. Dieses läuft, sobald start(Scene) ausgeführt wurde.
      Returns:
      true, wenn das Spiel läuft, sonst false.
    • windowSize

      @API @Setter public static void windowSize(int width, int height)
      Setzt die Größe des Engine-Fensters.
      Parameters:
      width - Die neue Breite des Engine-Fensters in Pixel.
      height - Die neue Höhe des Engine-Fensters in Pixel.
      See Also:
    • windowSize

      @API @Getter public static Vector windowSize()
      Gibt die Fenstergröße in Pixel aus.
      Returns:
      Ein Vektor-Objekt, dessen Höhe und Breite mit der Fensterhöhe und -breite übereinstimmt.
      See Also:
    • windowPosition

      @API @Setter public static void windowPosition(int x, int y)
      Setzt das Spielfenster an eine neue Position.

      Standardmäßig ist das Fenster mittig positioniert. Die Parameter x und y beziehen sich auf die linke obere Ecke der neuen Fenster-Position.

      Parameters:
      x - Die x-Koordinate der linken oberen Ecke des Fensters in Pixel.
      y - Die y-Koordinate der linken oberen Ecke des Fensters in Pixel.
      See Also:
    • windowPosition

      @Setter public static void windowPosition(Direction direction)
      Setzt das Spielfenster an eine neue Position.
      Parameters:
      direction - Wo das Spielfeld auf dem Bildschirm angezeigt werden sollen.
    • exit

      @API public static void exit()
      Beendet das Spiel.

      Das Fenster wird geschlossen, alle belegten Ressourcen werden freigegeben und die virtuelle Maschine wird beendet.

    • renderPanel

      @Getter public static RenderPanel renderPanel()
      Gibt die Zeichenfläche, in der alle Figuren eingezeichnet werden, zurück.
      Returns:
      Die Zeichenfläche, in der alle Figuren eingezeichnet werden.
      Since:
      0.38.0
    • window

      @Getter public static Frame window()
      Gibt das Spielfenster zurück.
      Returns:
      Das Spielfenster.
      Since:
      0.42.0
    • mousePosition

      @API @Getter public static Vector mousePosition()
      Gibt die Position der Maus in der aktuellen Szene als Vektor in Meter relativ zum Koordinatensystem zurück.

      Der Positions-Vektor ist in der Einheit Meter angegeben und bezieht sich auf einen Punkt des zu Grunde liegenden Koordinatensystems.

      Returns:
      Die Position der Maus in der aktuellen Szene als Vektor in Meter.
      See Also:
    • debug

      @API @Setter public static void debug(boolean value)
      Setzt, ob die Engine im Debug-Modus ausgeführt werden soll.
      Parameters:
      value - ist dieser Wert true, wird die Engine ab sofort im Debug-Modus ausgeführt. Hierdurch werden mehr Informationen beim Ausführen der Engine angegeben, zum Beispiel ein grafisches Raster und mehr Logging-Informationen. Dies ist hilfreich für das Debugging des eigenen Spiels.
      See Also:
    • isDebug

      @API public static boolean isDebug()
      Gibt an, ob die Engine gerade im Debug-Modus ausgeführt wird.
      Returns:
      ist dieser Wert true, wird die Engine gerade im Debug-Modus ausgeführt. Sonst ist der Wert false.
      See Also:
    • toggleDebug

      @API public static void toggleDebug()
      Schaltet je nach Zustand den Debug-Modus an oder aus. Ist der Debug-Modus an, wird er ausgeschaltet, ist er aus so wird er angeschaltet.
    • debug

      @API public static void debug()
      Aktiviert den Entwicklungsmodus.
      Since:
      0.27.0
    • takeScreenshot

      @API public static void takeScreenshot()
      Speichert ein Bildschirmfoto des aktuellen Spielfensters in den Ordner ~/engine-pi.
    • recordScreen

      @API public static void recordScreen()
      Schaltet die Bildschirmaufnahme (in Form von Einzelbildern) ein oder aus.
    • recordScreen

      @API public static void recordScreen(double duration)
      Parameters:
      duration - Die Dauer der Videoaufnahme in Sekunden.
      Since:
      0.42.0
    • instantMode

      @Setter @API public static void instantMode(boolean instantMode)
      Aktiviert oder deaktiviert den Instant-Modus.

      Im sogenannten Instant-Modus werden die erzeugten Figuren sofort einer Szene hinzugefügt und diese Szene wird dann umgehend gestartet.

      Der Instant-Modus der Engine Pi startet ein Spiel, ohne dass viel Code geschrieben werden muss.

      Parameters:
      instantMode - Der Aktivierungsstatus des Instant-Modus, also true falls der Instant-Modus aktiviert werden soll, sonst false.
      Since:
      0.42.0
      See Also:
    • windowDimension

      @Setter @API public static void windowDimension(int windowWidth, int windowHeight)
      Setzt die Abmessung, also die Breite und die Höhe, des Fensters in Pixel.
      Parameters:
      windowWidth - Die Breite des Fensters in Pixel.
      windowHeight - Die Höhe des Fensters in Pixel.
      Since:
      0.42.0
    • main

      public static void main(String[] args)