/* * Engine Alpha ist eine anfängerorientierte 2D-Gaming Engine. * * Copyright (c) 2011 - 2014 Michael Andonie and contributors. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package ea; import ea.internal.collision.Collider; import java.awt.*; /** * Beschreiben Sie hier die Klasse Rechteck. * * @author Michael Andonie */ @SuppressWarnings ( "serial" ) public class Rechteck extends Geometrie { /** * Die Laenge */ private float laenge; /** * Die Breite */ private float breite; /** * Konstruktor fuer Objekte der Klasse Rechteck * * @param x * Die X Position (Koordinate der linken oberen Ecke) des Rechtecks * @param y * Die X Position (Koordinate der linken oberen Ecke) des Rechtecks * @param breite * Die Breite des Rechtecks * @param hoehe * Die hoehe des Rechtecks */ public Rechteck (float x, float y, float breite, float hoehe) { super(x, y); this.breite = breite; this.laenge = hoehe; aktualisierenFirst(); } /** * Setzt beide Masse feur dieses Rechteck neu. * * @param breite * Die neue Breite des Rechtecks * @param hoehe * Die neue Hoehe des Rechtecks */ public void masseSetzen (int breite, int hoehe) { this.breite = breite; this.laenge = hoehe; aktualisieren(); } /** * Setzt die Breite fuer dieses Rechteck neu. * * @param breite * Die neue Breite des Rechtecks * * @see #hoeheSetzen(int) */ public void breiteSetzen (int breite) { this.breite = breite; aktualisieren(); } /** * Setzt die Hoehe fuer dieses Rechteck neu. * * @param hoehe * Die neue Hoehe des Rechtecks * * @see #breiteSetzen(int) */ public void hoeheSetzen (int hoehe) { this.laenge = hoehe; aktualisieren(); } /** * Zeichnet das Objekt. * * @param g * Das zeichnende Graphics-Objekt * @param r * Das BoundingRechteck, dass die Kameraperspektive Repraesentiert.<br /> Hierbei soll * zunaechst getestet werden, ob das Objekt innerhalb der Kamera liegt, und erst dann * gezeichnet werden. */ @Override public void zeichnen (Graphics2D g, BoundingRechteck r) { if (!r.schneidetBasic(this.dimension())) { return; } super.beforeRender(g, r); g.setColor(super.formen()[0].getColor()); g.fillRect((int) (position.x - r.x), (int) (position.y - r.y), (int) breite, (int) laenge); super.afterRender(g, r); } /** * {@inheritDoc} Collider wird direkt aus dem das <code>Raum</code>-Objekt umfassenden * <code>BoundingRechteck</code> erzeugt, dass über die <code>dimension()</code>-Methode * berechnet wird. */ @Override public Collider erzeugeCollider () { return erzeugeLazyCollider(); } /** * In dieser Methode werden saemtliche Dreiecke neu berechnet und die Referenz bei Aufruf in der * Superklasse hierauf gesetzt * * @return Ein Dreieck-Array mit allen, die Figur beschreibenden Dreiecken als Inhalt. */ @Override public Dreieck[] neuBerechnen () { Dreieck[] i = {new Dreieck(new Punkt(position.x, position.y), new Punkt(position.x + breite, position.y), new Punkt(position.x, position.y + laenge)), new Dreieck(new Punkt(position.x, position.y + laenge), new Punkt(position.x + breite, position.y + laenge), new Punkt(position.x + breite, position.y))}; return i; } }