module Items.Items (Item(Item), itemPos, itemTexture, itemEffect, itemName, ItemButton(ItemButton), itemButPos, itemButTexture, itemButDesc, itemButItem, itemButCount, itemRect, itemIntersects, drawItem, drawItemAt, drawItemBut, mouseOverItemBut) where import Graphics.Rendering.OpenGL as GL import Nxt.Graphics import Nxt.Types import Input.InputState hiding (mouseX, mouseY) import Cat.Cat data Item = Item { itemPos :: Nxt.Types.Vector2d, itemTexture :: Nxt.Types.Texture, itemEffect :: Cat -> Cat, itemName :: String } instance Eq Item where i1 == i2 = itemName i1 == itemName i2 i1 /= i2 = itemName i1 /= itemName i2 data ItemButton = ItemButton { itemButPos :: Nxt.Types.Vector2d, itemButTexture :: Nxt.Types.Texture, itemButDesc :: String, itemButItem :: Item, itemButCount :: Int } -- itemRect itemRect :: Item -> Nxt.Types.Rect itemRect (Item (x,y) t _ _) = Nxt.Types.Rect x y (fromIntegral $ textureWidth t) (fromIntegral $ textureHeight t) -- itemIntersects itemIntersects :: Item -> Item -> Bool itemIntersects item1 item2 = rectIntersect (itemRect item1) (itemRect item2) -- drawItemAt drawItemAt :: Double -> Double -> Item -> IO () drawItemAt x y (Item _ itemTex _ _) = do let x' = x - (fromIntegral $ textureWidth itemTex :: Double) / 2.0 y' = y - (fromIntegral $ textureHeight itemTex :: Double) / 2.0 Nxt.Graphics.drawTexture x' y' itemTex (1.0::GLdouble) -- drawItem drawItem :: Item -> IO () drawItem (Item (itemX, itemY) itemTex _ _) = Nxt.Graphics.drawTexture itemX itemY itemTex (1.0::GLdouble) -- drawItemBut drawItemBut :: ItemButton -> IO () drawItemBut (ItemButton (itemPosX, itemPosY) itemTex _ _ _) = Nxt.Graphics.drawTexture itemPosX itemPosY itemTex (1.0::GLdouble) -- mouseOverItemBut mouseOverItemBut :: MousePos -> ItemButton -> Bool mouseOverItemBut (MousePos mouseX mouseY) (ItemButton (itemX, itemY) itemTex _ _ _) = pointInRect (fromIntegral mouseX, fromIntegral mouseY) itemRectBut where itemRectBut = Nxt.Types.Rect itemX itemY (fromIntegral $ textureWidth itemTex) (fromIntegral $ textureHeight itemTex)