module Dodge.Creature.SwarmCrit ( swarmCrit ) where import Dodge.Data import Dodge.Default import Dodge.Creature.Picture import Dodge.Creature.Boid --import Dodge.Creature.Test --import Dodge.Creature.ActionRat import Dodge.Creature.ImpulseRat --import Dodge.Creature.ChooseTarget --import Dodge.Creature.SetTarget import Dodge.Creature.Rationality import Dodge.Creature.ReaderUpdate import Dodge.Creature.AlertLevel import Dodge.Creature.State import Dodge.Creature.State.Data import Dodge.Picture.Layer --import Geometry import Picture --import Dodge.RandomHelp --import Data.Maybe --import qualified Data.IntMap.Strict as IM import Control.Lens import Control.Monad.Reader --import Control.Monad.State --import System.Random swarmCrit :: Creature swarmCrit = defaultCreature { _crUpdate = stateUpdate $ impulsiveAIR $ flockToPointUsing (encircleDistP 100) (meleeHeadingMove 0.1 0.1 (pi/4) 3.9) >=> return . (crMeleeCooldown . _Just %~ max 0 . subtract 1) >=> basicPerceptionUpdateR [0] >=> doStrategyActionsR >=> targetYouWhenCognizantR -- , doStrategyActions -- , targetYouWhenCognizant , _crHP = 1 , _crRad = 2 , _crMass = 2 , _crPict = basicCrPict yellow , _crCorpse = onLayer CorpseLayer $ color (greyN 0.5) $ circleSolid 2 , _crFaction = ColorFaction yellow , _crMeleeCooldown = Just 0 } --swarmCritMoveFunc :: Creature -> Point2 -> Creature -> Point2 --swarmCritMoveFunc tcr cenp cr -- | targBehindCrit -- where -- cpos = _crPos cr -- ypos = _crPos tcr