Refactor, try to limit dependencies
This commit is contained in:
+33
-28
@@ -1,12 +1,13 @@
|
||||
module Dodge.CreatureEffect where
|
||||
import Dodge.Creature.Test
|
||||
import Dodge.Data
|
||||
import Geometry
|
||||
import Dodge.Base.Collide
|
||||
import Dodge.Path
|
||||
import qualified IntMapHelp as IM
|
||||
|
||||
import Data.Maybe
|
||||
import Dodge.Base.Collide
|
||||
import Dodge.Creature.Test
|
||||
import Dodge.Data.CreatureEffect
|
||||
import Dodge.Data.World
|
||||
import Dodge.Path
|
||||
import Geometry
|
||||
import qualified IntMapHelp as IM
|
||||
|
||||
doWdCrCr :: WdCrCr -> World -> Creature -> Creature
|
||||
doWdCrCr ce = case ce of
|
||||
@@ -38,8 +39,11 @@ doWdCrBl wcb = case wcb of
|
||||
WdCrTrue -> const $ const True
|
||||
WdCrBlfromCrBl cb -> \_ cr -> doCrBl cb cr
|
||||
WdCrNegate wcb' -> \w -> not . doWdCrBl wcb' w
|
||||
WdCrLOSTarget -> \w cr -> maybe False (\cid -> canSee (_crID cr) cid w)
|
||||
(_crID <$> _targetCr (_crIntention cr))
|
||||
WdCrLOSTarget -> \w cr ->
|
||||
maybe
|
||||
False
|
||||
(\cid -> canSee (_crID cr) cid w)
|
||||
(_crID <$> _targetCr (_crIntention cr))
|
||||
WdCrSafeDistFromTarget x -> \_ -> crSafeDistFromTarg x -- currently ignores walls etc
|
||||
|
||||
doCrBl :: CrBl -> Creature -> Bool
|
||||
@@ -74,21 +78,22 @@ doCrWdAc cw = case cw of
|
||||
CrWdBFSThenReturn t -> \cr w -> fromMaybe NoAction $ do
|
||||
n <- walkableNodeNear w (_crPos cr)
|
||||
let as = take 20 $ map PathTo $ bfsNodePoints n w
|
||||
return $ DoReplicate t $
|
||||
foldr DoActionThen NoAction as
|
||||
return $
|
||||
DoReplicate t $
|
||||
foldr DoActionThen NoAction as
|
||||
ChooseMovementSpreadGun -> chooseMovementSpreadGun
|
||||
ChooseMovementLtAuto -> chooseMovementLtAuto
|
||||
ChooseMovementLtAuto -> chooseMovementLtAuto
|
||||
|
||||
chooseMovementSpreadGun :: Creature -> World -> Action
|
||||
chooseMovementSpreadGun cr w
|
||||
| dist cpos p < 30 && safeAngleVV (p -.- cpos) (unitVectorAtAngle (_crDir cr)) > pi
|
||||
= DoImpulses [UseItem, MoveForward (-3)]
|
||||
| d < 30 = DoImpulses [UseItem,TurnToward p 0.06]
|
||||
| d < 60 = DoImpulses [UseItem,TurnToward p 0.06,MoveForward 3]
|
||||
| d < 100 = DoImpulses [TurnToward p 0.06, MoveForward 3 ]
|
||||
| d < 200 = DoImpulses [TurnToward p (0.06 + 0.002 *(d-100)), MoveForward 3 ]
|
||||
| otherwise
|
||||
= DoImpulses [TurnToward p 0.26, MoveForward 3]
|
||||
chooseMovementSpreadGun cr w
|
||||
| dist cpos p < 30 && safeAngleVV (p -.- cpos) (unitVectorAtAngle (_crDir cr)) > pi =
|
||||
DoImpulses [UseItem, MoveForward (-3)]
|
||||
| d < 30 = DoImpulses [UseItem, TurnToward p 0.06]
|
||||
| d < 60 = DoImpulses [UseItem, TurnToward p 0.06, MoveForward 3]
|
||||
| d < 100 = DoImpulses [TurnToward p 0.06, MoveForward 3]
|
||||
| d < 200 = DoImpulses [TurnToward p (0.06 + 0.002 * (d -100)), MoveForward 3]
|
||||
| otherwise =
|
||||
DoImpulses [TurnToward p 0.26, MoveForward 3]
|
||||
where
|
||||
d = dist cpos p
|
||||
cpos = _crPos cr
|
||||
@@ -96,13 +101,13 @@ chooseMovementSpreadGun cr w
|
||||
p = _crPos tcr
|
||||
|
||||
chooseMovementLtAuto :: Creature -> World -> Action
|
||||
chooseMovementLtAuto cr w
|
||||
| dist cpos p > 200 = DoImpulses [UseItem,TurnToward p 0.05 , MoveForward 3]
|
||||
| dist cpos p < 80 = DoImpulses [UseItem,TurnToward p 0.05, MoveForward (-3) ]
|
||||
| errorAngleVV 22 (p' -.- cpos) (unitVectorAtAngle (_crDir cr)) < 0.4
|
||||
= DoImpulses [UseItem,TurnToward p' 0.01, Move (V2 0 3)]
|
||||
| otherwise
|
||||
= DoImpulses [UseItem,TurnToward p' 0.05, Move (V2 0 3)]
|
||||
chooseMovementLtAuto cr w
|
||||
| dist cpos p > 200 = DoImpulses [UseItem, TurnToward p 0.05, MoveForward 3]
|
||||
| dist cpos p < 80 = DoImpulses [UseItem, TurnToward p 0.05, MoveForward (-3)]
|
||||
| errorAngleVV 22 (p' -.- cpos) (unitVectorAtAngle (_crDir cr)) < 0.4 =
|
||||
DoImpulses [UseItem, TurnToward p' 0.01, Move (V2 0 3)]
|
||||
| otherwise =
|
||||
DoImpulses [UseItem, TurnToward p' 0.05, Move (V2 0 3)]
|
||||
where
|
||||
cpos = _crPos cr
|
||||
tcr = _creatures (_cWorld w) IM.! 0
|
||||
@@ -112,5 +117,5 @@ chooseMovementLtAuto cr w
|
||||
|
||||
fleeFrom :: Creature -> Maybe Creature -> Action
|
||||
fleeFrom cr mtcr = case mtcr of
|
||||
Just tcr -> DoImpulses [MoveForward 3, TurnToward ((2 *.* _crPos cr) -.- _crPos tcr) (pi/4)]
|
||||
Just tcr -> DoImpulses [MoveForward 3, TurnToward ((2 *.* _crPos cr) -.- _crPos tcr) (pi / 4)]
|
||||
Nothing -> NoAction
|
||||
|
||||
Reference in New Issue
Block a user