#4 Decreasehp

This commit is contained in:
Tibo De Peuter 2022-12-23 13:10:15 +01:00
parent 11eb00ea0b
commit c3f7e47703
2 changed files with 39 additions and 5 deletions

View file

@ -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)