159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/* 259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Copyright (c) 2009-2010 jMonkeyEngine All rights reserved. 359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Redistribution and use in source and binary forms, with or without 559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * modification, are permitted provided that the following conditions are met: 659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * 759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Redistributions of source code must retain the above copyright notice, 859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * this list of conditions and the following disclaimer. 959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 1059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Redistributions in binary form must reproduce the above copyright 1159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * notice, this list of conditions and the following disclaimer in the 1259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * documentation and/or other materials provided with the distribution. 1359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 1459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Neither the name of 'jMonkeyEngine' nor the names of its contributors 1559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * may be used to endorse or promote products derived from this software 1659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * without specific prior written permission. 1759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 1859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 1959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 2259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * POSSIBILITY OF SUCH DAMAGE. 2959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 3059b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapackage com.jme3.math; 3159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 3259b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.export.*; 3359b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.io.IOException; 3459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 3559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/** 3659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>ColorRGBA</code> defines a color made from a collection of red, green 3759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * and blue values. An alpha value determines is transparency. All values must 3859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * be between 0 and 1. If any value is set higher or lower than these 3959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * constraints they are clamped to the min or max. That is, if a value smaller 4059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * than zero is set the value clamps to zero. If a value higher than 1 is 4159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * passed, that value is clamped to 1. However, because the attributes r, g, b, 4259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * a are public for efficiency reasons, they can be directly modified with 4359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * invalid values. The client should take care when directly addressing the 4459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * values. A call to clamp will assure that the values are within the 4559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * constraints. 4659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 4759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @author Mark Powell 4859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @version $Id: ColorRGBA.java,v 1.29 2007/09/09 18:25:14 irrisor Exp $ 4959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 5059b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapublic final class ColorRGBA implements Savable, Cloneable, java.io.Serializable { 5159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 5259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta static final long serialVersionUID = 1; 5359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 5459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the color black (0,0,0). 5559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 5659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public static final ColorRGBA Black = new ColorRGBA(0f, 0f, 0f, 1f); 5759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 5859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the color white (1,1,1). 5959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 6059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public static final ColorRGBA White = new ColorRGBA(1f, 1f, 1f, 1f); 6159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 6259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the color gray (.2,.2,.2). 6359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 6459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public static final ColorRGBA DarkGray = new ColorRGBA(0.2f, 0.2f, 0.2f, 1.0f); 6559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 6659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the color gray (.5,.5,.5). 6759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 6859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public static final ColorRGBA Gray = new ColorRGBA(0.5f, 0.5f, 0.5f, 1.0f); 6959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 7059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the color gray (.8,.8,.8). 7159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 7259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public static final ColorRGBA LightGray = new ColorRGBA(0.8f, 0.8f, 0.8f, 1.0f); 7359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 7459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the color red (1,0,0). 7559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 7659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public static final ColorRGBA Red = new ColorRGBA(1f, 0f, 0f, 1f); 7759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 7859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the color green (0,1,0). 7959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 8059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public static final ColorRGBA Green = new ColorRGBA(0f, 1f, 0f, 1f); 8159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 8259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the color blue (0,0,1). 8359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 8459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public static final ColorRGBA Blue = new ColorRGBA(0f, 0f, 1f, 1f); 8559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 8659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the color yellow (1,1,0). 8759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 8859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public static final ColorRGBA Yellow = new ColorRGBA(1f, 1f, 0f, 1f); 8959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 9059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the color magenta (1,0,1). 9159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 9259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public static final ColorRGBA Magenta = new ColorRGBA(1f, 0f, 1f, 1f); 9359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 9459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the color cyan (0,1,1). 9559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 9659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public static final ColorRGBA Cyan = new ColorRGBA(0f, 1f, 1f, 1f); 9759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 9859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the color orange (251/255, 130/255,0). 9959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 10059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public static final ColorRGBA Orange = new ColorRGBA(251f / 255f, 130f / 255f, 0f, 1f); 10159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 10259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the color brown (65/255, 40/255, 25/255). 10359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 10459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public static final ColorRGBA Brown = new ColorRGBA(65f / 255f, 40f / 255f, 25f / 255f, 1f); 10559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 10659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the color pink (1, 0.68, 0.68). 10759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 10859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public static final ColorRGBA Pink = new ColorRGBA(1f, 0.68f, 0.68f, 1f); 10959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 11059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the black color with no alpha (0, 0, 0, 0); 11159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 11259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public static final ColorRGBA BlackNoAlpha = new ColorRGBA(0f, 0f, 0f, 0f); 11359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 11459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * The red component of the color. 11559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 11659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public float r; 11759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 11859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * The green component of the color. 11959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 12059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public float g; 12159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 12259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the blue component of the color. 12359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 12459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public float b; 12559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 12659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the alpha component of the color. 0 is transparent and 1 is opaque 12759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 12859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public float a; 12959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 13059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 13159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Constructor instantiates a new <code>ColorRGBA</code> object. This 13259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * color is the default "white" with all values 1. 13359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 13459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 13559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public ColorRGBA() { 13659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta r = g = b = a = 1.0f; 13759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 13859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 13959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 14059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Constructor instantiates a new <code>ColorRGBA</code> object. The 14159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * values are defined as passed parameters. These values are then clamped 14259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * to insure that they are between 0 and 1. 14359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param r the red component of this color. 14459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param g the green component of this color. 14559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param b the blue component of this color. 14659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param a the alpha component of this color. 14759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 14859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public ColorRGBA(float r, float g, float b, float a) { 14959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.r = r; 15059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.g = g; 15159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.b = b; 15259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.a = a; 15359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 15459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 15559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 15659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Copy constructor creates a new <code>ColorRGBA</code> object, based on 15759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * a provided color. 15859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param rgba the <code>ColorRGBA</code> object to copy. 15959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 16059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public ColorRGBA(ColorRGBA rgba) { 16159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.a = rgba.a; 16259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.r = rgba.r; 16359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.g = rgba.g; 16459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.b = rgba.b; 16559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 16659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 16759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 16859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 16959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>set</code> sets the RGBA values of this color. The values are then 17059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * clamped to insure that they are between 0 and 1. 17159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 17259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param r the red component of this color. 17359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param g the green component of this color. 17459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param b the blue component of this color. 17559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param a the alpha component of this color. 17659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return this 17759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 17859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public ColorRGBA set(float r, float g, float b, float a) { 17959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.r = r; 18059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.g = g; 18159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.b = b; 18259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.a = a; 18359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return this; 18459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 18559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 18659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 18759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>set</code> sets the values of this color to those set by a parameter 18859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * color. 18959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 19059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param rgba ColorRGBA the color to set this color to. 19159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return this 19259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 19359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public ColorRGBA set(ColorRGBA rgba) { 19459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (rgba == null) { 19559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta r = 0; 19659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta g = 0; 19759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta b = 0; 19859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta a = 0; 19959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } else { 20059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta r = rgba.r; 20159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta g = rgba.g; 20259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta b = rgba.b; 20359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta a = rgba.a; 20459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 20559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return this; 20659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 20759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 20859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 20959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>clamp</code> insures that all values are between 0 and 1. If any 21059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * are less than 0 they are set to zero. If any are more than 1 they are 21159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * set to one. 21259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 21359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 21459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void clamp() { 21559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (r < 0) { 21659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta r = 0; 21759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } else if (r > 1) { 21859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta r = 1; 21959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 22059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 22159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (g < 0) { 22259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta g = 0; 22359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } else if (g > 1) { 22459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta g = 1; 22559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 22659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 22759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (b < 0) { 22859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta b = 0; 22959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } else if (b > 1) { 23059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta b = 1; 23159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 23259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 23359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (a < 0) { 23459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta a = 0; 23559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } else if (a > 1) { 23659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta a = 1; 23759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 23859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 23959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 24059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 24159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 24259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>getColorArray</code> retrieves the color values of this object as 24359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * a four element float array. 24459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return the float array that contains the color elements. 24559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 24659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public float[] getColorArray() { 24759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return new float[]{r, g, b, a}; 24859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 24959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 25059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 25159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Stores the current r/g/b/a values into the tempf array. The tempf array must have a 25259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * length of 4 or greater, or an array index out of bounds exception will be thrown. 25359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param store The array of floats to store the values into. 25459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return The float[] after storage. 25559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 25659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public float[] getColorArray(float[] store) { 25759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta store[0] = r; 25859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta store[1] = g; 25959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta store[2] = b; 26059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta store[3] = a; 26159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return store; 26259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 26359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 26459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public float getAlpha() { 26559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return a; 26659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 26759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 26859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public float getRed() { 26959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return r; 27059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 27159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 27259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public float getBlue() { 27359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return b; 27459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 27559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 27659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public float getGreen() { 27759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return g; 27859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 27959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 28059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 28159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Sets this color to the interpolation by changeAmnt from this to the finalColor 28259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * this=(1-changeAmnt)*this + changeAmnt * finalColor 28359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param finalColor The final color to interpolate towards 28459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param changeAmnt An amount between 0.0 - 1.0 representing a precentage 28559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * change from this towards finalColor 28659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 28759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void interpolate(ColorRGBA finalColor, float changeAmnt) { 28859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.r = (1 - changeAmnt) * this.r + changeAmnt * finalColor.r; 28959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.g = (1 - changeAmnt) * this.g + changeAmnt * finalColor.g; 29059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.b = (1 - changeAmnt) * this.b + changeAmnt * finalColor.b; 29159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.a = (1 - changeAmnt) * this.a + changeAmnt * finalColor.a; 29259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 29359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 29459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 29559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Sets this color to the interpolation by changeAmnt from beginColor to finalColor 29659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * this=(1-changeAmnt)*beginColor + changeAmnt * finalColor 29759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param beginColor The begining color (changeAmnt=0) 29859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param finalColor The final color to interpolate towards (changeAmnt=1) 29959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param changeAmnt An amount between 0.0 - 1.0 representing a precentage 30059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * change from beginColor towards finalColor 30159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 30259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void interpolate(ColorRGBA beginColor, ColorRGBA finalColor, float changeAmnt) { 30359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.r = (1 - changeAmnt) * beginColor.r + changeAmnt * finalColor.r; 30459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.g = (1 - changeAmnt) * beginColor.g + changeAmnt * finalColor.g; 30559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.b = (1 - changeAmnt) * beginColor.b + changeAmnt * finalColor.b; 30659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.a = (1 - changeAmnt) * beginColor.a + changeAmnt * finalColor.a; 30759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 30859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 30959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 31059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 31159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>randomColor</code> is a utility method that generates a random 31259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * color. 31359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 31459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return a random color. 31559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 31659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public static ColorRGBA randomColor() { 31759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta ColorRGBA rVal = new ColorRGBA(0, 0, 0, 1); 31859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta rVal.r = FastMath.nextRandomFloat(); 31959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta rVal.g = FastMath.nextRandomFloat(); 32059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta rVal.b = FastMath.nextRandomFloat(); 32159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return rVal; 32259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 32359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 32459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 32559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Multiplies each r/g/b/a of this color by the r/g/b/a of the given color and 32659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * returns the result as a new ColorRGBA. Used as a way of combining colors and lights. 32759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param c The color to multiply. 32859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return The new ColorRGBA. this*c 32959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 33059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public ColorRGBA mult(ColorRGBA c) { 33159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return new ColorRGBA(c.r * r, c.g * g, c.b * b, c.a * a); 33259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 33359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 33459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 33559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Multiplies each r/g/b/a of this color by the given scalar and 33659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * returns the result as a new ColorRGBA. Used as a way of making colors dimmer 33759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * or brighter.. 33859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param scalar The scalar to multiply. 33959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return The new ColorRGBA. this*scalar 34059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 34159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public ColorRGBA mult(float scalar) { 34259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return new ColorRGBA(scalar * r, scalar * g, scalar * b, scalar * a); 34359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 34459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 34559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 34659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Multiplies each r/g/b/a of this color by the r/g/b/a of the given color and 34759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * returns the result as a new ColorRGBA. Used as a way of combining colors and lights. 34859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param scalar scalar to multiply with 34959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return The new ColorRGBA. this*c 35059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 35159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public ColorRGBA multLocal(float scalar) { 35259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.r *= scalar; 35359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.g *= scalar; 35459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.b *= scalar; 35559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.a *= scalar; 35659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return this; 35759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 35859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 35959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 36059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Adds each r/g/b/a of this color by the r/g/b/a of the given color and 36159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * returns the result as a new ColorRGBA. 36259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param c The color to add. 36359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return The new ColorRGBA. this+c 36459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 36559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public ColorRGBA add(ColorRGBA c) { 36659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return new ColorRGBA(c.r + r, c.g + g, c.b + b, c.a + a); 36759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 36859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 36959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 37059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Multiplies each r/g/b/a of this color by the r/g/b/a of the given color and 37159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * returns the result as a new ColorRGBA. Used as a way of combining colors and lights. 37259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param c The color to multiply. 37359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return The new ColorRGBA. this*c 37459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 37559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public ColorRGBA addLocal(ColorRGBA c) { 37659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta set(c.r + r, c.g + g, c.b + b, c.a + a); 37759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return this; 37859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 37959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 38059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 38159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>toString</code> returns the string representation of this color. 38259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * The format of the string is:<br> 38359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <Class Name>: [R=RR.RRRR, G=GG.GGGG, B=BB.BBBB, A=AA.AAAA] 38459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return the string representation of this color. 38559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 38659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public String toString() { 38759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return "Color[" + r + ", " + g + ", " + b + ", " + a + "]"; 38859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 38959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 39059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta @Override 39159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public ColorRGBA clone() { 39259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta try { 39359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return (ColorRGBA) super.clone(); 39459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } catch (CloneNotSupportedException e) { 39559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta throw new AssertionError(); // can not happen 39659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 39759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 39859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 39959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 40059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Saves this ColorRGBA into the given float[] object. 40159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 40259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param floats 40359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * The float[] to take this ColorRGBA. If null, a new float[4] is 40459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * created. 40559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return The array, with R, G, B, A float values in that order 40659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 40759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public float[] toArray(float[] floats) { 40859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (floats == null) { 40959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta floats = new float[4]; 41059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 41159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta floats[0] = r; 41259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta floats[1] = g; 41359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta floats[2] = b; 41459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta floats[3] = a; 41559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return floats; 41659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 41759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 41859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 41959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>equals</code> returns true if this color is logically equivalent 42059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * to a given color. That is, if the values of the two colors are the same. 42159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * False is returned otherwise. 42259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param o the object to compare againts. 42359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return true if the colors are equal, false otherwise. 42459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 42559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public boolean equals(Object o) { 42659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (!(o instanceof ColorRGBA)) { 42759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 42859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 42959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 43059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (this == o) { 43159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return true; 43259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 43359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 43459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta ColorRGBA comp = (ColorRGBA) o; 43559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (Float.compare(r, comp.r) != 0) { 43659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 43759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 43859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (Float.compare(g, comp.g) != 0) { 43959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 44059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 44159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (Float.compare(b, comp.b) != 0) { 44259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 44359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 44459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (Float.compare(a, comp.a) != 0) { 44559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return false; 44659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 44759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return true; 44859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 44959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 45059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 45159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * <code>hashCode</code> returns a unique code for this color object based 45259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * on it's values. If two colors are logically equivalent, they will return 45359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the same hash code value. 45459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return the hash code value of this color. 45559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 45659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public int hashCode() { 45759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta int hash = 37; 45859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta hash += 37 * hash + Float.floatToIntBits(r); 45959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta hash += 37 * hash + Float.floatToIntBits(g); 46059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta hash += 37 * hash + Float.floatToIntBits(b); 46159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta hash += 37 * hash + Float.floatToIntBits(a); 46259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return hash; 46359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 46459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 46559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void write(JmeExporter e) throws IOException { 46659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta OutputCapsule capsule = e.getCapsule(this); 46759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta capsule.write(r, "r", 0); 46859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta capsule.write(g, "g", 0); 46959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta capsule.write(b, "b", 0); 47059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta capsule.write(a, "a", 0); 47159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 47259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 47359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void read(JmeImporter e) throws IOException { 47459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta InputCapsule capsule = e.getCapsule(this); 47559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta r = capsule.readFloat("r", 0); 47659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta g = capsule.readFloat("g", 0); 47759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta b = capsule.readFloat("b", 0); 47859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta a = capsule.readFloat("a", 0); 47959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 48059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 48159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public byte[] asBytesRGBA() { 48259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta byte[] store = new byte[4]; 48359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta store[0] = (byte) ((int) (r * 255) & 0xFF); 48459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta store[1] = (byte) ((int) (g * 255) & 0xFF); 48559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta store[2] = (byte) ((int) (b * 255) & 0xFF); 48659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta store[3] = (byte) ((int) (a * 255) & 0xFF); 48759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return store; 48859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 48959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 49059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public int asIntARGB() { 49159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta int argb = (((int) (a * 255) & 0xFF) << 24) 49259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta | (((int) (r * 255) & 0xFF) << 16) 49359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta | (((int) (g * 255) & 0xFF) << 8) 49459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta | (((int) (b * 255) & 0xFF)); 49559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return argb; 49659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 49759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 49859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public int asIntRGBA() { 49959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta int rgba = (((int) (r * 255) & 0xFF) << 24) 50059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta | (((int) (g * 255) & 0xFF) << 16) 50159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta | (((int) (b * 255) & 0xFF) << 8) 50259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta | (((int) (a * 255) & 0xFF)); 50359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return rgba; 50459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 50559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 50659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public int asIntABGR() { 50759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta int abgr = (((int) (a * 255) & 0xFF) << 24) 50859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta | (((int) (b * 255) & 0xFF) << 16) 50959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta | (((int) (g * 255) & 0xFF) << 8) 51059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta | (((int) (r * 255) & 0xFF)); 51159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return abgr; 51259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 51359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 51459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void fromIntARGB(int color) { 51559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta a = ((byte) (color >> 24) & 0xFF) / 255f; 51659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta r = ((byte) (color >> 16) & 0xFF) / 255f; 51759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta g = ((byte) (color >> 8) & 0xFF) / 255f; 51859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta b = ((byte) (color) & 0xFF) / 255f; 51959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 52059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 52159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void fromIntRGBA(int color) { 52259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta r = ((byte) (color >> 24) & 0xFF) / 255f; 52359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta g = ((byte) (color >> 16) & 0xFF) / 255f; 52459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta b = ((byte) (color >> 8) & 0xFF) / 255f; 52559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta a = ((byte) (color) & 0xFF) / 255f; 52659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 52759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 52859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 52959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Transform the current ColorRGBA to a Vector3f using 53059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * x = r, y = g, z = b. The Alpha value is not used. 53159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 53259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * This method is useful to use for shaders assignment. 53359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return A Vector3f containing the RGB value of current color definition. 53459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 53559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public Vector3f toVector3f() { 53659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return new Vector3f(r, g, b); 53759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 53859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 53959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 54059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Transform the current ColorRGBA to a Vector4f using 54159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * x = r, y = g, z = b, w = a. 54259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 54359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * This method is useful to use for shaders assignment. 54459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return A Vector4f containing the RGBA value of current color definition. 54559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 54659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public Vector4f toVector4f() { 54759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return new Vector4f(r, g, b, a); 54859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 54959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta} 550