#4 Increase playerhp
This commit is contained in:
		
							parent
							
								
									b108b2ed65
								
							
						
					
					
						commit
						f284413836
					
				
					 1 changed files with 27 additions and 10 deletions
				
			
		|  | @ -4,11 +4,12 @@ module RPGEngine.Input.ActionSelection | |||
| 
 | ||||
| import RPGEngine.Input.Core (InputHandler, handleKey, composeInputHandlers, ListSelector (selection)) | ||||
| 
 | ||||
| import RPGEngine.Data (Game (..), State (..), Direction (..), Action (..), ItemId, EntityId, Level (..), Player (inventory)) | ||||
| import RPGEngine.Data (Game (..), State (..), Direction (..), Action (..), ItemId, EntityId, Level (..), Player (inventory, playerHp, Player), Item (..), HP) | ||||
| import Graphics.Gloss.Interface.IO.Game (Key(SpecialKey), SpecialKey (KeyUp, KeyDown)) | ||||
| import Graphics.Gloss.Interface.IO.Interact | ||||
|     ( SpecialKey(..), KeyState(..) ) | ||||
| import RPGEngine.Data.Level (getWithId) | ||||
| import Data.Foldable (find) | ||||
| 
 | ||||
| ------------------------------ Exported ------------------------------ | ||||
| 
 | ||||
|  | @ -50,7 +51,8 @@ execute :: Action -> State -> State | |||
| execute (RetrieveItem id     ) s = pickUpItem id s | ||||
| execute (UseItem      id     ) s = useItem id s | ||||
| execute (DecreaseHp   eid iid) s = decreaseHp eid iid s | ||||
| execute (IncreasePlayerHp iid) s = increasePlayerHp iid s | ||||
| execute (IncreasePlayerHp iid) s = healedPlayer | ||||
|     where healedPlayer = s{ player = increasePlayerHp iid (player s)} | ||||
| execute _ s = s | ||||
| 
 | ||||
| -- Pick up the item with itemId and put it in the players inventory | ||||
|  | @ -58,14 +60,14 @@ execute _ s = s | |||
| pickUpItem :: ItemId -> State -> State | ||||
| pickUpItem id s@Playing{ level = level, player = player } = newState | ||||
|     where (Just (Left pickedUpItem)) = getWithId id level | ||||
|           newState     = s{ level = newLevel, player = newPlayer } | ||||
|           newLevel     = level{ items = filteredItems } | ||||
|           newState      = s{ level = newLevel, player = newPlayer } | ||||
|           newLevel      = level{ items = filteredItems } | ||||
|           filteredItems = filter (/= pickedUpItem) $ items level | ||||
|           newPlayer     = player{ inventory = newInventory } | ||||
|           newInventory  = pickedUpItem:inventory player | ||||
| pickUpItem _ _ = Error "Something went wrong while picking up an item" | ||||
| 
 | ||||
| -- Use an item on the player | ||||
| -- Use an item | ||||
| useItem :: ItemId -> State -> State -- TODO | ||||
| useItem _ s = s -- TODO | ||||
| 
 | ||||
|  | @ -79,8 +81,23 @@ decreaseHp _ _ s = s | |||
| -- TODO Break item if durability below zero | ||||
| 
 | ||||
| -- Heal a bit | ||||
| increasePlayerHp :: ItemId -> State -> State | ||||
| increasePlayerHp _ s = s | ||||
| -- TODO Increase playerHp | ||||
| -- TODO Decrease durability of item | ||||
| -- TODO Remove item if durability below zero | ||||
| -- Should receive a Player | ||||
| increasePlayerHp :: ItemId -> Player -> Player | ||||
| increasePlayerHp id p@Player{ playerHp = hp, inventory = inventory} = newPlayer | ||||
|     where newPlayer = p{ playerHp = newHp, inventory = newInventory newItem } | ||||
|           (Just usedItem) = find ((== id) . itemId) inventory | ||||
|           newItem  = decreaseDurability usedItem | ||||
|           newInventory (Just item) = item:filteredInventory | ||||
|           newInventory _           = filteredInventory | ||||
|           filteredInventory =filter (/= usedItem) inventory | ||||
|           newHp = changeHealth hp (itemValue usedItem) | ||||
| 
 | ||||
| decreaseDurability :: Item -> Maybe Item | ||||
| decreaseDurability item@Item{ useTimes = Nothing  } = Just item -- Infinite uses, never breaks | ||||
| decreaseDurability item@Item{ useTimes = Just val } | 0 < val - 1 = Just item{ useTimes = Just (val - 1) } | ||||
|                                                     | otherwise = Nothing -- Broken | ||||
| 
 | ||||
| -- Change given health by a given amount | ||||
| changeHealth :: HP -> HP -> HP | ||||
| changeHealth (Just health) (Just difference) = Just (health + difference) | ||||
| changeHealth health        _                 = health | ||||
		Reference in a new issue