Tweak chase crit perception
This commit is contained in:
@@ -2,8 +2,10 @@
|
||||
module Dodge.Creature.Perception (
|
||||
perceptionUpdate,
|
||||
chaseCritPerceptionUpdate,
|
||||
visionCheck,
|
||||
) where
|
||||
|
||||
import Linear
|
||||
import Control.Lens
|
||||
import qualified Data.Map.Strict as M
|
||||
import Data.Maybe
|
||||
@@ -152,7 +154,8 @@ visionCheck cr tpos = doFloatFloat (_viFOV vi) ang * doFloatFloat (_viDist vi) d
|
||||
where
|
||||
vi = _cpVision $ _crPerception cr
|
||||
cpos = _crPos cr
|
||||
ang = angleVV (unitVectorAtAngle (_crDir cr)) (tpos - cpos)
|
||||
dirvec = unitVectorAtAngle (_crDir cr)
|
||||
ang = angleVV dirvec (tpos - (cpos - _crRad cr *^ dirvec))
|
||||
d = dist tpos cpos
|
||||
|
||||
|
||||
|
||||
@@ -14,6 +14,9 @@ module Dodge.Creature.ReaderUpdate (
|
||||
setViewPos,
|
||||
) where
|
||||
|
||||
import Dodge.Creature.Perception
|
||||
import qualified IntMapHelp as IM
|
||||
import Data.List (sortOn)
|
||||
import Control.Applicative
|
||||
import Control.Lens
|
||||
import Control.Monad
|
||||
@@ -51,11 +54,19 @@ setMvPos w cr = cr & crIntention . mvToPoint .~ mpos
|
||||
return $ tpos
|
||||
mpos = mtpos <|> _mvToPoint int
|
||||
|
||||
setViewPos :: Creature -> Creature
|
||||
setViewPos cr = cr & crIntention . viewPoint %~ (<|> mpos)
|
||||
setViewPos :: World -> Creature -> Creature
|
||||
setViewPos w cr = cr & crIntention . viewPoint %~ ((<|> mpos) . (attentionViewPoint w cr <|>))
|
||||
where
|
||||
mpos = listToMaybe (_soundsToInvestigate $ _crMemory cr)
|
||||
|
||||
attentionViewPoint :: World -> Creature -> Maybe Point2
|
||||
attentionViewPoint w cr = do
|
||||
attention <- cr ^? crPerception . cpAttention . getAttentiveTo
|
||||
cid <- (sortOn snd $ IM.toList attention) ^? ix 0 . _1
|
||||
tcr <- w ^? cWorld . lWorld . creatures . ix cid
|
||||
guard $ visionCheck cr (_crPos tcr) > 0
|
||||
return (_crPos tcr)
|
||||
|
||||
setTargetMv ::
|
||||
-- | Function for determining target
|
||||
(World -> Creature -> Maybe Creature) ->
|
||||
@@ -120,9 +131,10 @@ viewTarget w cr = case cr ^? crIntention . viewPoint . _Just of
|
||||
| hasLOSIndirect p (_crPos cr) w ->
|
||||
cr
|
||||
& crActionPlan . apAction
|
||||
%~ replaceNullWith
|
||||
( TurnToPoint p
|
||||
)
|
||||
.~ [TurnToPoint p]
|
||||
-- %~ replaceNullWith
|
||||
-- ( TurnToPoint p
|
||||
-- )
|
||||
& crIntention . viewPoint .~ Nothing
|
||||
| otherwise -> cr & crActionPlan . apAction %~ replaceNullWith (PathTo p)
|
||||
Nothing -> cr
|
||||
|
||||
@@ -12,7 +12,7 @@ data FloatFloat
|
||||
= FloatID
|
||||
| FloatFOV Float
|
||||
| FloatLessCheck Float
|
||||
| FloatDistLinearMaxMin Float Float Float
|
||||
| FloatDistLinearNearFar Float Float Float
|
||||
| FloatAbsCheckGreaterLess Float Float Float
|
||||
| FloatConst Float
|
||||
deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
||||
|
||||
@@ -92,8 +92,7 @@ defaultVision :: Vision
|
||||
defaultVision =
|
||||
Eyes
|
||||
{ _viFOV = FloatFOV 0.8
|
||||
--, _viDist = FloatLessCheck 500
|
||||
, _viDist = FloatDistLinearMaxMin 500 10 1
|
||||
, _viDist = FloatDistLinearNearFar 500 10 1
|
||||
}
|
||||
|
||||
defaultAudition :: Audition
|
||||
|
||||
@@ -12,7 +12,7 @@ doFloatFloat ff x = case ff of
|
||||
FloatLessCheck y
|
||||
| x > y -> 0
|
||||
| otherwise -> 1
|
||||
FloatDistLinearMaxMin maxd a b
|
||||
FloatDistLinearNearFar maxd a b
|
||||
| x > maxd -> 0
|
||||
| otherwise -> (a * (maxd - x) + b * (x - maxd)) / maxd
|
||||
FloatAbsCheckGreaterLess a y1 y2
|
||||
|
||||
@@ -16,7 +16,7 @@ updateHumanoid cr = case cr ^?! crType . humanoidAI of
|
||||
[ const doStrategyActions
|
||||
, performActions
|
||||
, const overrideMeleeCloseTarget
|
||||
, const setViewPos
|
||||
, setViewPos
|
||||
, setMvPos
|
||||
, chaseCritMv
|
||||
, chaseCritPerceptionUpdate [0]
|
||||
|
||||
Reference in New Issue
Block a user