content: module Panels.ItemPanel
      (GoStopState(..),
       GoStopButton(..),
       initGoStopButton,
       updateGoStopButton,
       setGoStopButton,
       toggleGoStopButton,
       drawGoStopButton,
       ItemPanel(ItemPanel),
       itemButtonList,
       goStopButton) where
  
  import Graphics.Rendering.OpenGL as GL
  import Nxt.Types
  import Nxt.Graphics
  import Items.Items
  import Settings.Path
  
  data GoStopState = GoState | StopState
  
  data GoStopButton = GoStopButton
      {
          goStopState         :: GoStopState,
          goStopButtonRect    :: Nxt.Types.Rect,
          goStopCooldown      :: Int,
          goButtonTexture     :: Nxt.Types.Texture,
          stopButtonTexture   :: Nxt.Types.Texture
      }
  
  -- initGoStopButton
  initGoStopButton :: IO GoStopButton
  initGoStopButton = do
      dataPath <- getDataDir
      goTex    <- Nxt.Graphics.loadTexture (dataPath ++ "/data/item-buttons/cat-go-button.png")
      stopTex  <- Nxt.Graphics.loadTexture (dataPath ++ "/data/item-buttons/cat-stop-button.png")
  
      let gsrect = Nxt.Types.Rect 870.0 0.0 128.0 90.0
  
      return (GoStopButton GoState gsrect 0 goTex stopTex)
  
  -- updateGoStopButton
  updateGoStopButton :: GoStopButton -> GoStopButton
  updateGoStopButton btn@(GoStopButton _ _ cooldown _ _) =
      if cooldown > 0
         then btn {goStopCooldown = cooldown - 1}
         else btn
  
  -- setGoStopButton
  setGoStopButton :: GoStopState -> GoStopButton -> GoStopButton
  setGoStopButton state btn =
      btn {goStopState = state}
  
  -- toggleGoStopButton - toggles only if cooldown is done
  toggleGoStopButton :: GoStopButton -> GoStopButton
  toggleGoStopButton btn@(GoStopButton _ _ 0 _ _) =
      case goStopState btn of
           GoState    -> btn {goStopState = StopState, goStopCooldown = 30}
           StopState  -> btn {goStopState = GoState, goStopCooldown = 30}
  toggleGoStopButton btn = btn
  
  -- drawGoStopButton
  drawGoStopButton :: GoStopButton -> IO ()
  drawGoStopButton (GoStopButton state gsrect _ goTex stopTex) =
      case state of
           GoState    -> Nxt.Graphics.drawTexture (rectX gsrect) (rectY gsrect) goTex (1.0::GLdouble)
           StopState  -> Nxt.Graphics.drawTexture (rectX gsrect) (rectY gsrect) stopTex (1.0::GLdouble)
  
  data ItemPanel = ItemPanel
      {
          itemButtonList  :: [ItemButton],
          goStopButton    :: GoStopButton
      }
  
  