Add file
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
module Dodge.Inventory.CheckSlots where
|
||||
import Dodge.Data
|
||||
import Dodge.Base.You
|
||||
|
||||
--import Control.Lens
|
||||
import qualified Data.IntMap.Strict as IM
|
||||
|
||||
-- | checks whether or not an item will fit in your inventory
|
||||
-- if so return Just the next slot to be used
|
||||
checkInvSlotsYou :: Item -> World -> Maybe Int
|
||||
checkInvSlotsYou it w
|
||||
| crNumFreeSlots ycr >= _itInvSize it
|
||||
= Just $ maybe 0 ((+1) . fst) $ IM.lookupMax inv
|
||||
| otherwise = Nothing
|
||||
where
|
||||
ycr = you w
|
||||
inv = _crInv ycr
|
||||
|
||||
crNumFreeSlots :: Creature -> Int
|
||||
crNumFreeSlots cr = _crInvCapacity cr - invSize (_crInv cr)
|
||||
|
||||
crInvSize :: Creature -> Int
|
||||
crInvSize = invSize . _crInv
|
||||
|
||||
invSize :: IM.IntMap Item -> Int
|
||||
invSize = sum . fmap _itInvSize
|
||||
@@ -0,0 +1,25 @@
|
||||
module Dodge.Inventory.PickUp where
|
||||
import Dodge.Data
|
||||
import Dodge.Inventory.CheckSlots
|
||||
|
||||
import Control.Lens
|
||||
import qualified Data.IntMap.Strict as IM
|
||||
|
||||
putItemInInvID :: Int -> Int -> World -> World
|
||||
putItemInInvID cid flid w = putItemInInv cid (_floorItems w IM.! flid) w
|
||||
|
||||
|
||||
{- | Pick up a specific item. -}
|
||||
putItemInInv :: Int -> FloorItem -> World -> World
|
||||
putItemInInv cid flit w = case maybeInvSlot of
|
||||
Nothing -> w
|
||||
Just i -> w
|
||||
& updateItLocation i
|
||||
& floorItems %~ IM.delete (_flItID flit)
|
||||
& creatures . ix cid . crInv %~ IM.insertWith (const $ itAmount +~ 1) i it
|
||||
where
|
||||
it = _flIt flit
|
||||
maybeInvSlot = checkInvSlotsYou it w
|
||||
updateItLocation invid w' = case _itID it of
|
||||
Nothing -> w'
|
||||
Just j -> w' & itemPositions . ix j .~ InInv 0 invid
|
||||
@@ -0,0 +1,6 @@
|
||||
module Dodge.Item.Instance
|
||||
( module Dodge.Item.Weapon
|
||||
, module Dodge.Item.Craftable
|
||||
) where
|
||||
import Dodge.Item.Weapon
|
||||
import Dodge.Item.Craftable
|
||||
Reference in New Issue
Block a user