packages feed

gemstone-0.2: Gemstone/Color.hs

module Gemstone.Color where

import Data.Traversable
import System.Random

import Graphics.Rendering.OpenGL

import Gemstone.Random

type RGB = Color3 GLubyte

-- | A color constructor.
makeColor :: GLubyte -> GLubyte -> GLubyte -> RGB
makeColor = Color3

red, green, blue :: RGB
red = Color3 255 0 0
green = Color3 0 255 0
blue = Color3 0 0 255

black, white :: RGB
black = Color3 0 0 0
white = Color3 255 255 255

skyBlue, grassGreen, stoneGray :: RGB
skyBlue = Color3 127 127 255
grassGreen = Color3 0 255 63
stoneGray = Color3 127 127 127

-- | Vary a color by a given amount, using the provide random number
--   generator.
varyColor :: GLubyte -> StdGen -> RGB -> (StdGen, RGB)
varyColor variance gen (Color3 r g b) = (gen', Color3 r' g' b')
    where
    (gen', [r', g', b']) = mapAccumL jitter gen zipped
    zipped = zip [r, g, b] $ repeat variance