Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* 
   * Copyright 2011 Cologne University of Applied Sciences Licensed under the
   * Educational Community License, Version 2.0 (the "License"); you may
   * not use this file except in compliance with the License. You may
   * obtain a copy of the License at
   *
   * http://www.osedu.org/licenses/ECL-2.0
   *
   * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an "AS IS"
  * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
  * or implied. See the License for the specific language governing
  * permissions and limitations under the License.
  */
 package org.amcgala;
 
 
 import javax.swing.*;
 import java.awt.*;
 import java.util.List;
 import java.util.Map;
 
 import static com.google.common.base.Preconditions.checkArgument;

Die Hauptklasse des Frameworks, die die Hauptaufgaben übernimmt. Sie initialisiert die wichtigsten Datenstrukturen und ermöglicht ihren Zugriff. Folgende wichtige Funktionen werden vom Framework übernommen:
  • Laden von Szenen
  • Aktualisierung und Darstellung der aktiven Szene
  • Verwalten der InputHandler

Author(s):
Robert Giacinto
Version:
2.0
 
 public final class Framework {
 
     private static final Logger log = LoggerFactory.getLogger(Framework.class);
     private static Framework instance;
     private SceneGraph scenegraph;
     private Renderer renderer;
     private Camera camera;
     private Animator animator;
     private List<Visitorvisitors;
     private JFrame frame;
     private EventBus sceneEventBus;
     private EventBus frameworkEventBus;
     private Map<StringScenescenes;
     private Scene activeScene;
     private RenderVisitor renderVisitor;
     private UpdateVisitor updateVisitor;
     private Raytracer raytracer;
     private int currentSceneIndex;
     private boolean paused;
     private int width;
     private int height;

    
Erstellt ein neues Framework, das eine grafische Ausgabe in der Auflösung width x height hat.

Parameters:
width die Breite der Auflösung
height die Höhe der Auflösung
 
     private Framework(int widthint height) {
         .info("Initialising framework");
         this. = width;
         this. = height;
 
          = new HashMap<StringInputHandler>();
          = new EventBus("Framework Input Event Bus");
 
 
          = new EventBus();
 
          = new ArrayList<Visitor>(10);
          = new DefaultSceneGraph();
 
          = new HashMap<StringScene>();
 
         = new JFrame("amCGAla Framework");
        .setSize(widthheight);
        .setResizable(false);
        .setBackground(.);
        .setVisible(true);
        // TODO Zahlen weg und eine Konfigurationsdatei einführen!
         = new Animator(60, 60);
         = new UpdateVisitor();
        .add();
         = new RenderVisitor();
        .add();
         = new Raytracer();
        .addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                .post(new KeyPressedEvent(e));
                .post(new KeyPressedEvent(e));
            }
            @Override
            public void keyReleased(KeyEvent e) {
                .post(new KeyReleasedEvent(e));
                .post(new KeyReleasedEvent(e));
            }
        });
        .addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent e) {
                .post(new MouseClickedEvent(e));
                .post(new MouseClickedEvent(e));
            }
            @Override
            public void mousePressed(MouseEvent e) {
                .post(new MousePressedEvent(e));
                .post(new MousePressedEvent(e));
            }
            @Override
            public void mouseReleased(MouseEvent e) {
                .post(new MouseReleasedEvent(e));
                .post(new MouseReleasedEvent(e));
            }
            @Override
            public void mouseEntered(MouseEvent e) {
                .post(e);
                .post(e);
            }
            @Override
            public void mouseExited(MouseEvent e) {
                .post(e);
                .post(e);
            }
        });
            @Override
            public void mouseDragged(MouseEvent e) {
                .post(e);
                .post(e);
            }
            @Override
            public void mouseMoved(MouseEvent e) {
                .post(e);
                .post(e);
            }
        });
            @Override
            public void mouseWheelMoved(MouseWheelEvent e) {
                .post(e);
                .post(e);
            }
        });
    }

    
Erzeugt eine neue Instanz des Frameworks. Die Größe des Fensters kann über die Parameter width und height bestimmt werden. TODO Die sollte wieder weg oder private sein. Kann mich nicht mehr daran erinnern, wieso zwischen get und create unterschieden wird.

Parameters:
width die Breite des Fensters
height die Höhe des Fensters
Returns:
Referenz auf die Frameworksinstanz
    public static Framework createInstance(int widthint height) {
        checkArgument( == null"Es können keine weiteren Instanzen von Framework erzeugt werden!");
         = new Framework(widthheight);
        if (.getSceneCount() > 0) {
            .start();
        }
        return ;
    }

    
Gibt die bereits erzeugte Instanz des Frameworks zurück. Wurde noch keine erstellt, wird eine der Standardgröße 800x600 erstellt und zurückgegeben.

Returns:
Referenz auf die Frameworksinstanz
    public static Framework getInstance() {
        if ( == null) {
            return createInstance(800, 600);
        } else {
            return ;
        }
    }

    
Aktualisiert den Szenengraphen, in dem die einzelnen, registrierten Visitor den Szenengraphen besuchen.
    public void update() {
        if ( != null && !) {
            for (Visitor v : ) {
                .accept(v);
            }
        }
        if ( != null) {
            .traceScene();
        }
    }

    
Rendert den Szenengraphen mithilfe des registrierten Renderers.
    public void show() {
        if ( != null && !) {
            .show();
        }
    }

    
Startet das Framework und aktualisiert den Szenengraphen mithilfe eines Animators.
    private void start() {
        if ( == null) {
            update();
            show();
        } else {
            .setFramework(this);
            .start();
        }
    }

    
Pausiert die Aktualisierung des Frameworks.
    public void pause() {
        if ( != null) {
            .stop();
        }
    }

    
Fügt dem Framework eine neue Scene hinzu.

Parameters:
scene die neue Szene
    public void addScene(Scene scene) {
        checkArgument(!.containsKey(scene.getLabel()), "Es existiert bereits eine Szene mit dem gleichen Namen!");
        .put(scene.getLabel(), scene);
        if ( == null) {
            loadScene(scene);
            start();
        }
    }

    
Lädt eine bestimmte, schon im Framework gespeicherte Szene über das Label dieser Szene.

Parameters:
label das Label der Szene, die geladen werden soll
    public void loadScene(String label) {
        checkArgument(.containsKey(label), "Es existiert keine Szene mit diesem Namen!");
        Scene scene = .get(label);
        loadScene(scene);
    }

    
Das Framework lädt die Szene, indem org.amcgala.framework.camera.Camera, org.amcgala.framework.renderer.Renderer und org.amcgala.framework.scenegraph.SceneGraph aus der Szene geladen werden.

Parameters:
scene Szene, die geladen werden soll
    public void loadScene(Scene scene) {
        .info("loading scene: " + scene.getLabel());
         = true;
         = scene.getCamera();
        .setWidth(.getWidth());
        .setHeight(.getHeight());
         = scene.getRenderer();
        .setFrame();
         = scene.getSceneGraph();
        .setScene(scene);
         = scene.getEventBus();
         = scene;
         = false;
    }

    
Gibt die Referenz auf eine Szene zurück.

Parameters:
label das Label der Szene
Returns:
die Szene mit dem übergebenen Label
Throws:
java.lang.IllegalArgumentException wenn keine Szene mit dem übergebenen Label existiert
    public Scene getScene(String label) {
        checkArgument(.containsKey(label), "Es existiert keine Szene mit diesem Namen!");
        return .get(label);
    }

    
Ändert die Anzahl der Frames, die pro Sekunden berechnet werden sollen.

Parameters:
fps die Frames pro Sekunde
    public void setFPS(int fps) {
        .setFramesPerSecond(fps);
    }

    
Entfernt eine Szene aus dem Framework.

Parameters:
scene die Referenz der Szene, die entfernt werden soll
    public void removeScene(Scene scene) {
        checkArgument(.containsValue(scene), "Szene " + scene.getLabel() + " konnte nicht gefunden werden");
        checkArgument(!.equals(scene), "Aktive Szene kann nicht entfernt werden!");
        .remove(scene.getLabel());
    }

    
Entfernt eine Szene aus dem Framework.

Parameters:
label das Label der Szene, die entfernt werden soll
    public void removeScene(String label) {
        checkArgument(.containsKey(label), "Szene " + label + " konnte nicht gefunden werden");
        checkArgument(!.getLabel().equalsIgnoreCase(label), "Aktive Szene kann nicht entfernt werden!");
        .remove(label);
    }

    
Fügt dem Framework einen neuen org.amcgala.framework.event.InputHandler hinzu.

Parameters:
inputHandler der neue InputHandler
label der Bezeichner dieses InputHandlers
    public void addInputHandler(InputHandler inputHandlerString label) {
        .register(inputHandler);
        .put(labelinputHandler);
    }

    
Entfernt einen org.amcgala.framework.event.InputHandler aus dem Framework.

Parameters:
label der Bezeichner des InputHandlers, der entfernt werden soll
    public void removeInputHandler(String label) {
        checkArgument(.containsKey(label), "InputHandler mit Label " + label + " konnte nicht gefunden werden.");
        .remove(label);
    }

    
Gibt die gerade aktive Szene zurück.

Returns:
die aktive Szene
    public Scene getActiveScene() {
        return ;
    }

    
Setzt eine Scene als aktive Szene innerhalb des Frameworks. Existiert die übergebene Szene noch nicht in der Menge aller Szenen innerhalb des Frameworks, wird die Szene unter dem Label der Szene im Framework gespeichert bevor sie geladen wird.

Parameters:
scene die Szene, die geladen werden soll
    public void setActiveScene(Scene scene) {
        if (!.containsKey(scene.getLabel())) {
            .put(scene.getLabel(), scene);
        }
         = scene;
    }

    
Gibt die Anzahl der Szenen zurück, die vom Framework verwaltet werden.

Returns:
die Anzahl der Szenen im Framework
    public int getSceneCount() {
        return .size();
    }

    
Gibt die Breite des Fensters zurück.

Returns:
die Breite des Fensters
    public int getWidth() {
        return ;
    }

    
Gibt die Höhe des Fensters zurück.

Returns:
die Höhe des Fensters
    public int getHeight() {
        return ;
    }
New to GrepCode? Check out our FAQ X