dev #25
					 2 changed files with 23 additions and 4 deletions
				
			
		|  | @ -37,6 +37,15 @@ hasAt pos level = match firstItem firstEntity | |||
|           firstItem   = find ((== pos) . getICoord) $ items level | ||||
|           getICoord i = (itemX i, itemY i) | ||||
| 
 | ||||
| getWithId :: String -> Level -> Maybe (Either Item Entity) | ||||
| getWithId id level = match firstItem firstEntity | ||||
|     where match :: Maybe Item -> Maybe Entity -> Maybe (Either Item Entity) | ||||
|           match (Just a) _ = Just $ Left a | ||||
|           match _ (Just a) = Just $ Right a | ||||
|           match _ _        = Nothing | ||||
|           firstEntity      = find ((== id) . entityId) $ entities level | ||||
|           firstItem        = find ((== id) . itemId) $ items level | ||||
| 
 | ||||
| directionOffsets :: Direction -> (X, Y) | ||||
| directionOffsets North  = ( 0,  1) | ||||
| directionOffsets East   = ( 1,  0) | ||||
|  |  | |||
|  | @ -4,10 +4,11 @@ module RPGEngine.Input.ActionSelection | |||
| 
 | ||||
| import RPGEngine.Input.Core (InputHandler, handleKey, composeInputHandlers, ListSelector (selection)) | ||||
| 
 | ||||
| import RPGEngine.Data (Game (..), State (..), Direction (..), Action (..), ItemId, EntityId) | ||||
| import RPGEngine.Data (Game (..), State (..), Direction (..), Action (..), ItemId, EntityId, Level (..), Player (inventory)) | ||||
| import Graphics.Gloss.Interface.IO.Game (Key(SpecialKey), SpecialKey (KeyUp, KeyDown)) | ||||
| import Graphics.Gloss.Interface.IO.Interact | ||||
|     ( SpecialKey(..), KeyState(..) ) | ||||
| import RPGEngine.Data.Level (getWithId) | ||||
| 
 | ||||
| ------------------------------ Exported ------------------------------ | ||||
| 
 | ||||
|  | @ -22,9 +23,10 @@ handleInputActionSelection = composeInputHandlers [ | |||
| ---------------------------------------------------------------------- | ||||
| 
 | ||||
| selectAction :: Game -> Game | ||||
| selectAction game@Game{ state = ActionSelection list selection continue } = newGame | ||||
| selectAction game@Game{ state = ActionSelection list selector continue } = newGame | ||||
|     where newGame = game{ state = execute selectedAction continue } | ||||
|           selectedAction = Leave | ||||
|           selectedAction = list !! index | ||||
|           index = selection selector | ||||
| selectAction g = g | ||||
| 
 | ||||
| -- TODO Lift this code from LevelSelection | ||||
|  | @ -52,8 +54,16 @@ execute (IncreasePlayerHp iid) s = increasePlayerHp iid s | |||
| execute _ s = s | ||||
| 
 | ||||
| -- Pick up the item with itemId and put it in the players inventory | ||||
| -- Should receive a Playing state | ||||
| pickUpItem :: ItemId -> State -> State | ||||
| pickUpItem _ s = s -- TODO | ||||
| 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 } | ||||
|           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 | ||||
| useItem :: ItemId -> State -> State -- TODO | ||||
|  |  | |||
		Reference in a new issue