module Graphics.LambdaCube.Light where

import Graphics.LambdaCube.Types

-- | Possible types of light sources.
data LightTypes
    = LT_POINT       -- ^ Point light sources give off light equally
                     -- in all directions, so they require only
                     -- position but no direction.
    | LT_DIRECTIONAL -- ^ Directional lights simulate parallel light
                     -- beams from a distant source, hence have
                     -- direction but no position.
    | LT_SPOTLIGHT   -- ^ Spotlights simulate a cone of light from a
                     -- source so require position and direction, plus
                     -- extra values for falloff.
    deriving (Eq,Ord,Show)

-- | Light source description.
data Light
    = Light
    { lgType                    :: LightTypes
    , lgDiffuse                 :: ColourValue
    , lgSpecular                :: ColourValue
    , lgDirection               :: Vec3
    , lgSpotOuter               :: FloatType
    , lgSpotFalloff             :: FloatType
    , lgRange                   :: FloatType
    , lgAttenuationConst        :: FloatType
    , lgAttenuationLinear       :: FloatType
    , lgAttenuationQuad         :: FloatType
    }
    deriving (Eq,Show)