SpaceInvaders-0.13.3: src/RenderLandscape.hs
{-
******************************************************************************
* I N V A D E R S *
* *
* Module: RenderLandscape *
* Purpose: Rendering of the fixed backdrop. *
* Author: Henrik Nilsson *
* *
* Copyright (c) Yale University, 2003 *
* *
******************************************************************************
-}
module RenderLandscape (
landscape -- :: HGL.Graphic
) where
import Data.Array
import Data.Point2 (Point2(..))
import qualified Graphics.HGL as HGL
import WorldGeometry
import Colors
import ColorBindings
------------------------------------------------------------------------------
-- Landscape rendering
------------------------------------------------------------------------------
landscape :: HGL.Graphic
landscape =
HGL.mkBrush (colorTable ! distantMountainColor) $ \dmcBrush ->
HGL.mkBrush (colorTable ! closeMountainColor) $ \cmcBrush ->
HGL.mkBrush (colorTable ! groundColor) $ \groundBrush ->
HGL.overGraphics
[ HGL.withBrush groundBrush $ HGL.polygon groundPoints,
HGL.withBrush cmcBrush $ HGL.polygon cmPoints,
HGL.withBrush dmcBrush $ HGL.polygon dmPoints
]
-- Points defining the distant mountain chain.
dmPoints :: [HGL.Point]
dmPoints = map relativeToGPoint
[ (0.00, 0.00),
(0.00, 0.62),
(0.11, 0.20),
(0.42, 0.33),
(0.51, 0.24),
(0.60, 0.37),
(0.68, 0.17),
(0.81, 0.26),
(0.94, 0.39),
(1.00, 0.50),
(1.00, 0.00)
]
-- Points defining the close mountain chanin.
cmPoints :: [HGL.Point]
cmPoints = map relativeToGPoint
[ (0.00, 0.00),
(0.15, 0.25),
(0.35, 0.00),
(0.80, 0.20),
(0.90, 0.00)
]
-- Points defining the ground.
groundPoints :: [HGL.Point]
groundPoints = map relativeToGPoint
[ (0.00, 0.00),
(0.00, 0.05),
(1.00, 0.05),
(1.00, 0.00)
]
relativeToGPoint :: (Double, Double) -> HGL.Point
relativeToGPoint (x,y) = (round (x * fromIntegral worldSizeX),
round ((1.0 - y) * fromIntegral worldSizeY))