packages feed

4Blocks-0.2: Rendering/Well.hs

module Rendering.Well ( renderWell )

where

import Rendering.RGB
import Rendering.Block
import Rendering.Point

import Core.Well
import Core.ColouredPoint
import Core.Game

import Graphics.Rendering.Cairo

renderWell :: RGB -> RGB -> Point -> Point -> Game -> Render ()
renderWell shadowWellRGB outlineWellRGB offset blockSize game 
  = do mapM_ (renderWellBlock shadowWellRGB outlineWellRGB offset blockSize wellSize) wellBlocks
      where
        well = getWellFromGame game
        wellBlocks = getBlocksFromWell well
        wellSize = getSizeFromWell well
        
renderWellBlock :: RGB -> RGB -> Point -> Point -> Point -> ColouredPoint -> Render ()      
renderWellBlock shadowWellRGB outlineWellRGB (offsetX,offsetY) (blockSizeX,blockSizeY) (wellSizeX,wellSizeY) (x,y,c) 
  = if ((y >= 0) && (y <= (wellSizeY - 3)))
      then renderBlock (colourToRGB c) shadowWellRGB outlineWellRGB (actualX,actualY) (blockSizeX,blockSizeY)
      else return ()
    where actualX = renderingWellX x blockSizeX offsetX
          actualY = renderingWellY y blockSizeY offsetY wellSizeY

renderingWellX ::  Double -> Double -> Double -> Double
renderingWellX rawX blockSizeX offsetX = offsetX + (blockSizeX * rawX)

renderingWellY ::  Double -> Double -> Double -> Double -> Double
renderingWellY rawY blockSizeY offsetY wellSizeY = offsetY + (blockSizeY * (wellSizeY-3)) - (blockSizeY * rawY)