refactor(gs/xanthous): Define local field lens aliases in AI
This slightly improves how the module reads imo Change-Id: Ib1efcbbd5392ece6b46461e8075162f03846d421 Reviewed-on: https://cl.tvl.fyi/c/depot/+/3886 Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi>
This commit is contained in:
parent
ccb918ae97
commit
3a01398672
1 changed files with 13 additions and 8 deletions
|
@ -88,21 +88,21 @@ stepGormlak ticks pe@(Positioned pos creature) = do
|
|||
|
||||
dest <- maybe (selectDestination pos creature) pure
|
||||
. mfilter (\(Destination p _) -> p /= pos)
|
||||
$ creature ^. field @"_hippocampus" . destination
|
||||
$ creature ^. hippocampus . destination
|
||||
let progress' =
|
||||
dest ^. destinationProgress
|
||||
+ creatureType ^. Raw.speed . invertedRate |*| ticks
|
||||
+ creature ^. creatureType . Raw.speed . invertedRate |*| ticks
|
||||
if progress' < 1
|
||||
then pure
|
||||
$ pe'
|
||||
& positioned . field @"_hippocampus" . destination
|
||||
& positioned . hippocampus . destination
|
||||
?~ (dest & destinationProgress .~ progress')
|
||||
else do
|
||||
let newPos = dest ^. destinationPosition
|
||||
remainingSpeed = progress' - 1
|
||||
newDest <- selectDestination newPos creature
|
||||
<&> destinationProgress +~ remainingSpeed
|
||||
let pe'' = pe' & positioned . field @"_hippocampus" . destination ?~ newDest
|
||||
let pe'' = pe' & positioned . hippocampus . destination ?~ newDest
|
||||
collisionAt newPos >>= \case
|
||||
Nothing -> pure $ pe'' & position .~ newPos
|
||||
Just Stop -> pure pe''
|
||||
|
@ -111,10 +111,9 @@ stepGormlak ticks pe@(Positioned pos creature) = do
|
|||
when (any (entityIs @Character) ents) attackCharacter
|
||||
pure pe'
|
||||
where
|
||||
creatureType = creature ^. field @"_creatureType"
|
||||
vision = visionRadius creature
|
||||
attackCharacter = do
|
||||
attack <- choose $ creatureType ^. attacks
|
||||
attack <- choose $ creature ^. creatureType . attacks
|
||||
attackDescription <- Messages.render (attack ^. Raw.description)
|
||||
$ object []
|
||||
say ["combat", "creatureAttack"]
|
||||
|
@ -123,13 +122,13 @@ stepGormlak ticks pe@(Positioned pos creature) = do
|
|||
]
|
||||
character %= Character.damage (attack ^. Raw.damage)
|
||||
|
||||
yellAtCharacter = for_ (creature ^. field @"_creatureType" . language)
|
||||
yellAtCharacter = for_ (creature ^. creatureType . language)
|
||||
$ \lang -> do
|
||||
utterance <- fmap (<> "!") . word $ getLanguage lang
|
||||
creatureSaysText pe utterance
|
||||
|
||||
creatureGreeted :: Lens' entity Bool
|
||||
creatureGreeted = field @"_hippocampus" . greetedCharacter
|
||||
creatureGreeted = hippocampus . greetedCharacter
|
||||
|
||||
|
||||
-- | A creature sends some text
|
||||
|
@ -166,6 +165,12 @@ instance (IsCreature entity) => Brain (GormlakBrain entity) where
|
|||
. fmap _unGormlakBrain
|
||||
entityCanMove = const True
|
||||
|
||||
hippocampus :: HasField "_hippocampus" s t a b => Lens s t a b
|
||||
hippocampus = field @"_hippocampus"
|
||||
|
||||
creatureType :: HasField "_creatureType" s t a b => Lens s t a b
|
||||
creatureType = field @"_creatureType"
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
-- instance Brain Creature where
|
||||
|
|
Loading…
Reference in a new issue