aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/Color.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Minecraft.World/Color.cpp')
-rw-r--r--Minecraft.World/Color.cpp97
1 files changed, 97 insertions, 0 deletions
diff --git a/Minecraft.World/Color.cpp b/Minecraft.World/Color.cpp
new file mode 100644
index 00000000..256e9017
--- /dev/null
+++ b/Minecraft.World/Color.cpp
@@ -0,0 +1,97 @@
+#include "stdafx.h"
+
+#include "Color.h"
+
+//Creates an opaque sRGB color with the specified red, green, and blue values in the range (0.0 - 1.0).
+//Alpha is defaulted to 1.0. The actual color used in rendering depends on finding the best match given the color space
+//available for a particular output device.
+//Parameters:
+//r - the red component
+//g - the green component
+//b - the blue component
+//Throws:
+//IllegalArgumentException - if r, g or b are outside of the range 0.0 to 1.0, inclusive
+Color::Color( float r, float g, float b)
+{
+ assert( r >= 0.0f && r <= 1.0f );
+ assert( g >= 0.0f && g <= 1.0f );
+ assert( b >= 0.0f && b <= 1.0f );
+
+ //argb
+ colour = ( (0xFF<<24) | ( (int)(r*255)<<16 ) | ( (int)(g*255)<<8 ) | ( (int)(b*255) ) );
+}
+
+Color::Color( int r, int g, int b)
+{
+ colour = ( (0xFF<<24) | ( (r&0xff)<<16 ) | ( (g&0xff)<<8 ) | ( (b&0xff) ) );
+}
+
+
+//Creates a Color object based on the specified values for the HSB color model.
+//The s and b components should be floating-point values between zero and one (numbers in the range 0.0-1.0).
+//The h component can be any floating-point number. The floor of this number is subtracted from it to create a fraction between 0 and 1.
+//This fractional number is then multiplied by 360 to produce the hue angle in the HSB color model.
+//
+//Parameters:
+//h - the hue component
+//s - the saturation of the color
+//b - the brightness of the color
+//Returns:
+//a Color object with the specified hue, saturation, and brightness.
+Color Color::getHSBColor(float hue, float saturation, float brightness)
+{
+ int r = 0, g = 0, b = 0;
+ if (saturation == 0)
+ {
+ r = g = b = (int) (brightness * 255.0f + 0.5f);
+ }
+ else
+ {
+ float h = (hue - (float)floor(hue)) * 6.0f;
+ float f = h - (float)floor(h);
+ float p = brightness * (1.0f - saturation);
+ float q = brightness * (1.0f - saturation * f);
+ float t = brightness * (1.0f - (saturation * (1.0f - f)));
+ switch ((int) h)
+ {
+ case 0:
+ r = (int) (brightness * 255.0f + 0.5f);
+ g = (int) (t * 255.0f + 0.5f);
+ b = (int) (p * 255.0f + 0.5f);
+ break;
+ case 1:
+ r = (int) (q * 255.0f + 0.5f);
+ g = (int) (brightness * 255.0f + 0.5f);
+ b = (int) (p * 255.0f + 0.5f);
+ break;
+ case 2:
+ r = (int) (p * 255.0f + 0.5f);
+ g = (int) (brightness * 255.0f + 0.5f);
+ b = (int) (t * 255.0f + 0.5f);
+ break;
+ case 3:
+ r = (int) (p * 255.0f + 0.5f);
+ g = (int) (q * 255.0f + 0.5f);
+ b = (int) (brightness * 255.0f + 0.5f);
+ break;
+ case 4:
+ r = (int) (t * 255.0f + 0.5f);
+ g = (int) (p * 255.0f + 0.5f);
+ b = (int) (brightness * 255.0f + 0.5f);
+ break;
+ case 5:
+ r = (int) (brightness * 255.0f + 0.5f);
+ g = (int) (p * 255.0f + 0.5f);
+ b = (int) (q * 255.0f + 0.5f);
+ break;
+ }
+ }
+
+
+ return Color( r, g, b );
+}
+
+int Color::getRGB()
+{
+ return colour;
+} \ No newline at end of file