#4 Decreasehp
This commit is contained in:
parent
11eb00ea0b
commit
c3f7e47703
2 changed files with 39 additions and 5 deletions
|
@ -68,8 +68,23 @@ pickUpItem id s@Playing{ level = level, player = player } = newState
|
|||
pickUpItem _ _ = Error "Something went wrong while picking up an item"
|
||||
|
||||
-- Use an item
|
||||
useItem :: ItemId -> State -> State -- TODO
|
||||
useItem _ s = s -- TODO
|
||||
-- Should receive a Playing state
|
||||
useItem :: ItemId -> State -> State
|
||||
useItem iid s@Playing{ level = level, player = player} = newState
|
||||
where newState = s{ level = newLevel, player = newPlayer }
|
||||
-- Remove item from inventory if necessary
|
||||
(Just usingItem) = find ((== iid) . itemId) $ inventory player
|
||||
usedItem = decreaseDurability usingItem
|
||||
newInventory = filter (/= usingItem) $ inventory player
|
||||
newPlayer = player{ inventory = putItemBack usedItem newInventory }
|
||||
putItemBack Nothing inv = inv
|
||||
putItemBack (Just item) inv = item:inv
|
||||
-- Remove entity if necessary
|
||||
allEntities = entities level
|
||||
entitiesWithUseItem = filter (any ((== UseItem iid) . snd) . entityActions) allEntities
|
||||
attackedEntity = head entitiesWithUseItem
|
||||
newLevel = level{ entities = filter (/= attackedEntity) $ entities level}
|
||||
useItem _ _ = Error "Something went wrong while using an item"
|
||||
|
||||
-- Attack an entity using an item
|
||||
-- Should receive a Playing state
|
||||
|
@ -77,7 +92,7 @@ decreaseHp :: EntityId -> ItemId -> State -> State
|
|||
decreaseHp eid iid s@Playing{ level = level, player = player } = newState
|
||||
where newState = s{ level = newLevel, player = newPlayer }
|
||||
-- Change player
|
||||
(Just usingItem) = find ((== iid) . itemId) (inventory player)
|
||||
(Just usingItem) = find ((== iid) . itemId) $ inventory player
|
||||
usedItem = decreaseDurability usingItem
|
||||
newInventory = filter (/= usingItem) $ inventory player
|
||||
newPlayer = player{ inventory = putItemBack usedItem newInventory, playerHp = newHp }
|
||||
|
@ -89,7 +104,7 @@ decreaseHp eid iid s@Playing{ level = level, player = player } = newState
|
|||
(Just (Right attackedEntity)) = getWithId eid level
|
||||
newLevel = level{ entities = putEntityBack dealtWithEntity newEntities }
|
||||
newEntities = filter ((/= eid) . entityId) $ entities level
|
||||
dealtWithEntity = decreaseHealth attackedEntity damageDealAmount
|
||||
dealtWithEntity = decreaseHealth attackedEntity damageDealAmount
|
||||
putEntityBack Nothing list = list
|
||||
putEntityBack (Just ent) list = ent:list
|
||||
damageGetAmount = inverse (entityValue attackedEntity)
|
||||
|
|
Reference in a new issue