refactor(gs/xanthous): Break out inventory into a common module
Creatures are going to have an inventory too now in addition to characters, so all the data types and lenses and stuff that define inventory need to be broken out into a separate module so the Creature entity can use them. Change-Id: I83f1c70d316afaaf2e75901f9dc28f79fd2cd31f Reviewed-on: https://cl.tvl.fyi/c/depot/+/3901 Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi>
This commit is contained in:
parent
3a01398672
commit
95ee86225b
8 changed files with 293 additions and 247 deletions
32
users/grfn/xanthous/test/Xanthous/Entities/CommonSpec.hs
Normal file
32
users/grfn/xanthous/test/Xanthous/Entities/CommonSpec.hs
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
--------------------------------------------------------------------------------
|
||||
module Xanthous.Entities.CommonSpec (main, test) where
|
||||
--------------------------------------------------------------------------------
|
||||
import Test.Prelude
|
||||
import Data.Vector.Lens (toVectorOf)
|
||||
--------------------------------------------------------------------------------
|
||||
import Xanthous.Entities.Common
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
main :: IO ()
|
||||
main = defaultMain test
|
||||
|
||||
test :: TestTree
|
||||
test = testGroup "Xanthous.Entities.CommonSpec"
|
||||
[ testGroup "Inventory"
|
||||
[ testProperty "items === itemsWithPosition . _2" $ \inv ->
|
||||
inv ^.. items === inv ^.. itemsWithPosition . _2
|
||||
, testGroup "removeItemFromPosition" $
|
||||
let rewield w inv =
|
||||
let (old, inv') = inv & wielded <<.~ w
|
||||
in inv' & backpack <>~ toVectorOf (wieldedItems . wieldedItem) old
|
||||
in [ (Backpack, \item -> backpack %~ (item ^. wieldedItem <|))
|
||||
, (LeftHand, rewield . inLeftHand)
|
||||
, (RightHand, rewield . inRightHand)
|
||||
, (BothHands, rewield . review doubleHanded)
|
||||
] <&> \(pos, addItem) ->
|
||||
testProperty (show pos) $ \inv item ->
|
||||
let inv' = addItem item inv
|
||||
inv'' = removeItemFromPosition pos (item ^. wieldedItem) inv'
|
||||
in inv'' ^.. items === inv ^.. items
|
||||
]
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue