25 lines
892 B
Haskell
25 lines
892 B
Haskell
module Dodge.SelectedClose (getSelectedCloseObj, interactWithCloseObj) where
|
|
|
|
import Control.Lens
|
|
import Dodge.Button.Event
|
|
import Dodge.Data.World
|
|
import Dodge.Inventory.Add
|
|
import NewInt
|
|
|
|
interactWithCloseObj :: Either FloorItem Button -> World -> World
|
|
interactWithCloseObj e w = worldEventFlags . at InventoryChange ?~ () $ case e of
|
|
(Left flit) -> pickUpItem 0 flit w
|
|
(Right but) -> doButtonEvent (but ^. btEvent) but w
|
|
|
|
getSelectedCloseObj :: World -> Maybe (Either FloorItem Button)
|
|
getSelectedCloseObj w = do
|
|
(i, j, _) <- w ^? hud . hudElement . diSelection . _Just
|
|
case i of
|
|
3 -> do
|
|
NInt k <- w ^? hud . closeItems . ix j
|
|
fmap Left $ w ^? cWorld . lWorld . floorItems . unNIntMap . ix k
|
|
5 -> do
|
|
k <- w ^? hud . closeButtons . ix j
|
|
fmap Right $ w ^? cWorld . lWorld . buttons . ix k
|
|
_ -> Nothing
|