feat(gs/xanthous): Creatures drop their items when they die
When a creature is killed, it now drops all the contents of its inventory on the ground. Change-Id: Ie95c397308ba2c9861f10e58b99c91c9cc759c56
This commit is contained in:
parent
a3d220b631
commit
604319850c
3 changed files with 24 additions and 4 deletions
|
@ -48,17 +48,18 @@ import Xanthous.Game.Draw (drawGame)
|
|||
import Xanthous.Game.Prompt hiding (Fire)
|
||||
import qualified Xanthous.Messages as Messages
|
||||
import Xanthous.Random
|
||||
import Xanthous.Util (removeVectorIndex)
|
||||
import Xanthous.Util (removeVectorIndex, useListOf)
|
||||
import Xanthous.Util.Inflection (toSentence)
|
||||
import Xanthous.Physics (throwDistance, bluntThrowDamage)
|
||||
import Xanthous.Data.EntityMap.Graphics (lineOfSight)
|
||||
import Xanthous.Data.EntityMap (EntityID)
|
||||
--------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------
|
||||
import Xanthous.Entities.Common
|
||||
( InventoryPosition, describeInventoryPosition, backpack
|
||||
, wieldableItem, wieldedItems, wielded, itemsWithPosition
|
||||
, removeItemFromPosition, asWieldedItem, inRightHand
|
||||
, wieldedItem
|
||||
, wieldedItem, items
|
||||
)
|
||||
import qualified Xanthous.Entities.Character as Character
|
||||
import Xanthous.Entities.Character hiding (pickUpItem)
|
||||
|
@ -462,7 +463,18 @@ damageCreature (creatureID, creature) dam = do
|
|||
if Creature.isDead creature'
|
||||
then do
|
||||
say ["combat", "killed"] msgParams
|
||||
floorItems <- useListOf
|
||||
$ entities
|
||||
. ix creatureID
|
||||
. positioned
|
||||
. _SomeEntity @Creature
|
||||
. inventory
|
||||
. items
|
||||
mCreaturePos <- preuse $ entities . ix creatureID . position
|
||||
entities . at creatureID .= Nothing
|
||||
for_ mCreaturePos $ \creaturePos ->
|
||||
entities . EntityMap.atPosition creaturePos
|
||||
%= (<> fromList (SomeEntity <$> floorItems))
|
||||
else entities . ix creatureID . positioned .= SomeEntity creature'
|
||||
pure creature'
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ import Xanthous.Data
|
|||
import Xanthous.Data.Entities
|
||||
import Xanthous.Entities.Creature.Hippocampus
|
||||
import Xanthous.Util.QuickCheck (GenericArbitrary(..))
|
||||
import Xanthous.Entities.Common (Inventory)
|
||||
import Xanthous.Entities.Common (Inventory, HasInventory(..))
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
data Creature = Creature
|
||||
|
|
|
@ -34,7 +34,7 @@ module Xanthous.Util
|
|||
, times, times_, endoTimes
|
||||
|
||||
-- * State utilities
|
||||
, modifyK, modifyKL
|
||||
, modifyK, modifyKL, useListOf
|
||||
|
||||
-- * Type-level programming utils
|
||||
, KnownBool(..)
|
||||
|
@ -311,6 +311,14 @@ modifyK k = get >>= k >>= put
|
|||
modifyKL :: MonadState s m => LensLike m s s a b -> (a -> m b) -> m ()
|
||||
modifyKL l k = get >>= traverseOf l k >>= put
|
||||
|
||||
-- | Use a list of all the targets of a 'Fold' in the current state
|
||||
--
|
||||
-- @@
|
||||
-- evalState (useListOf folded) === toList
|
||||
-- @@
|
||||
useListOf :: MonadState s m => Getting (Endo [a]) s a -> m [a]
|
||||
useListOf = gets . toListOf
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
-- | A newtype wrapper around 'Char' whose 'Enum' and 'Bounded' instances only
|
||||
|
|
Loading…
Reference in a new issue