/* * 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 java.awt.*; import java.io.Serializable; /** * Die Klasse Farbe ermöglicht ein sehr einfaches Handling mit allen Farben. Sie basiert auf der * Klasse <code>java.awt.Color</code>, erweitert diese jedoch aufgrund ihrer vielen finalen * Eigenschaften nicht, sondern arbeitet mit einer Referenz auf ein solches Objekt. * <p/> * <b>Ein Verwendungsbeispiel:</b> <pre> // Ein Rechteck Rechteck rechteck = new Rechteck(20, 20, * 100, 200); * <p/> * // Die Farbe erstellen, die das Rechteck erhalten soll (ein helles Grau) Farbe farbe = new * Farbe(200, 200, 200); * <p/> * // Die Farbe dem Rechteck uebergeben rechteck.farbeSetzen(farbe); * <p/> * // Das Rechteck an der Wurzel (hierzu siehe Klasse Knoten und Klasse Game) der Game-Klasse * anmelden, // um ihn auch im Fenster sehen zu koennen! wurzel.add(rechteck); * <p/> * // Geschachtelte Form, so empfiehlt es sich meistens eher (da platzsparender): * rechteck.farbeSetzen(new Farbe(200, 200, 200)); </pre> * * @author Michael Andonie */ public final class Farbe implements Serializable { /** * Der Wert dieser Farbe */ private final Color wert; /** * Vereinfachter Konstruktor.<br /> Erstellt eine Farbe mit dem uebergebenen RGB-Wert, die * vollkommen <b>undurchsichtig</b> ist.<br /> Fuer eine Erklaerung der RGB/Alpha-Werte, siehe * den Komplizierteren Konstruktor. * * @param r * Der Rot-Anteil dieser Farbe (zwischen 0 und 255) * @param g * Der Gruen-Anteil dieser Farben(zwischen 0 und 255) * @param b * Der Blau-Anteil dieser Farbe (zwischen 0 und 255) * * @see #Farbe(int, int, int, int) */ public Farbe (int r, int g, int b) { this(r, g, b, 255); } /** * Konstruktor fuer die Klasse Farbe, hier wird der Farbe der RGB-Wert zugeordnet, dies sind die * 3 Zahlen <b>zwischen 0 und 255</b>, die jeweils die Menge der Komplementaerfarbe in der * ganzen Farbe angeben. Ist der Wert 255 ist der Anteil der Farbe sehr stark, ist er 0, ist der * Anteil leer.<br /> Weiterhin laesst sich auch der Alpha-Wert dieser Farbe bestimmen. Dies * bietet die grossartige Moeglichkeit auch durchsichtige Farben zu erstellen (zB fuer * Glaswaende). Der Alpha-Wert funktioniert sso, wie die R/G/B-Werte, er nimmt eine Zahl * zwischen 0 und 255 ein, wobei bei 255 die Farbe vollkommen undurchsichtig ist, und bei 0 * unsichtbar. * * @param r * Der Rot-Anteil dieser Farbe (zwischen 0 und 255) * @param g * Der Gruen-Anteil dieser Farben(zwischen 0 und 255) * @param b * Der Blau-Anteil dieser Farbe (zwischen 0 und 255) * @param alpha * Die Alpha-Helligkeit der Farbe (zwischen 0 und 255) */ public Farbe (int r, int g, int b, int alpha) { wert = DateiManager.ausListe(new Color(r, g, b, alpha)); } /** * Sonder-Konstruktor. Dieser wird nur Intern gebraucht. * * @param c * Das JAVA-Farbobjekt, das diese Farbe beinhalten soll. */ public Farbe (Color c) { this.wert = c; } /** * Gibt ein <code>Farbe</code>-Objekt aus, dass die selben Eigenschaften wie eine der * EA-Standardfarben hat. * * @param s * Der Name der Farbe. * * @return Das Farb-Objekt, das diese Farbe beinhaltet. * * @see Raum#zuFarbeKonvertieren(String) */ public static final Farbe vonString (String s) { return new Farbe(Raum.zuFarbeKonvertieren(s)); } /** * Gibt den Wert der Farbe aus. * * @return Der Wert der Farbe als Color-Objekt */ public Color wert () { return wert; } /** * Gibt eine Farbe mit dem Halben Alpha-Wert dieser zurueck. * * @return eine Farbe desselbe Farbtons wie diese, jedoch doppelt so durchsichtig wie diese. */ public Farbe halbesAlpha () { return new Farbe(wert.getRed(), wert.getGreen(), wert.getBlue(), wert.getAlpha() / 2); } /** * Gibt an, ob diese Farbe ueberhaupt nicht durchsichtig ist. * * @return <code>true</code>, wenn der Alpha-Wert der Farbe <b>nicht 255</b> ist, sonst * automatisch <code>false</code>. */ public boolean undurchsichtig () { return wert.getAlpha() == 255; } }