Refactor, try to limit dependencies
This commit is contained in:
@@ -1,36 +1,44 @@
|
||||
module Dodge.Tesla.Arc.Default where
|
||||
import Dodge.Data
|
||||
import RandomHelp
|
||||
import Geometry
|
||||
|
||||
import Dodge.Data.CrWlID
|
||||
import Data.List (sortOn)
|
||||
import Data.Maybe
|
||||
import Dodge.Base.Collide
|
||||
import Dodge.Data.ArcStep
|
||||
import Dodge.Data.World
|
||||
import Geometry
|
||||
import qualified IntMapHelp as IM
|
||||
import LensHelp
|
||||
import RandomHelp
|
||||
import Shape
|
||||
|
||||
import Data.Maybe
|
||||
import Data.List (sortOn)
|
||||
import qualified IntMapHelp as IM
|
||||
|
||||
defaultArcStep :: RandomGen g => ItemParams -> World -> ArcStep
|
||||
-> State g (Maybe ArcStep)
|
||||
defaultArcStep _ _ (ArcStep _ _ (CrID _)) = return Nothing
|
||||
defaultArcStep _ _ (ArcStep _ _ (WlID _)) = return Nothing
|
||||
defaultArcStep ::
|
||||
RandomGen g =>
|
||||
ItemParams ->
|
||||
World ->
|
||||
ArcStep ->
|
||||
State g (Maybe ArcStep)
|
||||
defaultArcStep _ _ (ArcStep _ _ (CrID _)) = return Nothing
|
||||
defaultArcStep _ _ (ArcStep _ _ (WlID _)) = return Nothing
|
||||
defaultArcStep itparams w (ArcStep p dir _) = do
|
||||
let csize = _arcSize itparams
|
||||
--rot <- takeOne [pi/4,negate pi/4]
|
||||
rot <- takeOne [0]
|
||||
let center = csize *.* rotateV rot (unitVectorAtAngle dir) +.+ p
|
||||
newp <- (center +.+) <$> randInCirc csize
|
||||
let mcr = listToMaybe
|
||||
. sortOn (dist center . _crPos)
|
||||
. filter (\cr -> dist center (_crPos cr) < csize)
|
||||
. IM.elems
|
||||
$ _creatures (_cWorld w)
|
||||
mwl = listToMaybe
|
||||
. sortOn (dist p . fst)
|
||||
. mapMaybe (\ q -> sequence $ collidePointWallsFilterStream (const True) p (center +.+ q) w)
|
||||
let mcr =
|
||||
listToMaybe
|
||||
. sortOn (dist center . _crPos)
|
||||
. filter (\cr -> dist center (_crPos cr) < csize)
|
||||
. IM.elems
|
||||
$ _creatures (_cWorld w)
|
||||
mwl =
|
||||
listToMaybe
|
||||
. sortOn (dist p . fst)
|
||||
. mapMaybe (\q -> sequence $ collidePointWallsFilterStream (const True) p (center +.+ q) w)
|
||||
-- collidePointWallsWall and wlsnearpoint
|
||||
$ polyCirc 6 csize
|
||||
f (q,wl) = ArcStep q dir (WlID $ _wlID wl)
|
||||
g cr = ArcStep (_crPos cr +.+ csize *.* unitVectorAtAngle dir) dir (CrID $ _crID cr)
|
||||
return . listToMaybe . sortOn (dist p . (^. asPos))
|
||||
$ ArcStep newp dir NothingID : catMaybes [fmap f mwl,fmap g mcr]
|
||||
$ polyCirc 6 csize
|
||||
f (q, wl) = ArcStep q dir (WlID $ _wlID wl)
|
||||
g cr = ArcStep (_crPos cr +.+ csize *.* unitVectorAtAngle dir) dir (CrID $ _crID cr)
|
||||
return . listToMaybe . sortOn (dist p . (^. asPos)) $
|
||||
ArcStep newp dir NothingID : catMaybes [fmap f mwl, fmap g mcr]
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
module Dodge.Tesla.Arc.Draw where
|
||||
|
||||
import Dodge.Data.TeslaArc
|
||||
import Geometry
|
||||
import Picture
|
||||
|
||||
drawTeslaArc :: TeslaArc -> Picture
|
||||
drawTeslaArc pt = setLayer BloomNoZWrite $ pictures
|
||||
[ setDepth 20.5 $ color (brightX 2 1 $ _taColor pt) $ thickLine 3 ps
|
||||
, setDepth 20 $ color (V4 0 0 0 0.5) $ thickLine 10 ps
|
||||
]
|
||||
drawTeslaArc pt =
|
||||
setLayer BloomNoZWrite $
|
||||
pictures
|
||||
[ setDepth 20.5 $ color (brightX 2 1 $ _taColor pt) $ thickLine 3 ps
|
||||
, setDepth 20 $ color (V4 0 0 0 0.5) $ thickLine 10 ps
|
||||
]
|
||||
where
|
||||
ps = _taPoints pt
|
||||
|
||||
|
||||
Reference in New Issue
Block a user