diff --git a/src/Dodge/Bullet.hs b/src/Dodge/Bullet.hs index 98bd97995..3f74cd022 100644 --- a/src/Dodge/Bullet.hs +++ b/src/Dodge/Bullet.hs @@ -37,10 +37,14 @@ applyMagnetsToBul bu = foldl' (flip doMagnetBuBu) bu . _oldMagnets . _lWorld . _cWorld doMagnetBuBu :: Magnet -> Bullet -> Bullet -doMagnetBuBu mg bu = case _mgField mg of - MagnetAlign | isclose -> bu - MagnetDeflect | isclose -> bu & buVel %~ vecTurnTo (4 * pi / (d+16)) bpos mgdeflectpos - _ -> bu +doMagnetBuBu mg bu = if isclose + then case _mgField mg of + MagnetAlign -> bu & buVel %~ vecTurnTo (10 * pi / (d+40)) bpos mgalignpos + MagnetDeflect -> bu & buVel %~ vecTurnTo (10 * pi / (d+40)) bpos mgdeflectpos + MagnetAttract -> bu & buVel %~ vecTurnTo (10 * pi / (d+40)) bpos mpos + MagnetRepulse -> bu & buVel %~ vecTurnTo (10 * pi / (d+40)) bpos (2*bpos - mpos) + else bu + where bvel = bu ^. buVel mpos = mg ^. mgPos @@ -48,6 +52,9 @@ doMagnetBuBu mg bu = case _mgField mg of mgdeflectpos | isLHS mpos (mpos + bvel) bpos = bpos + vNormal (bpos - mpos) | otherwise = bpos - vNormal (bpos - mpos) + mgalignpos + | dotV bvel (bpos - mpos) > 0 = bpos - mpos + | otherwise = mpos - bpos d = dist (bu ^. buPos) (mg ^. mgPos) isclose = d < 100 diff --git a/src/Dodge/Data/Magnet.hs b/src/Dodge/Data/Magnet.hs index 3d26b5dbe..ddbf099d5 100644 --- a/src/Dodge/Data/Magnet.hs +++ b/src/Dodge/Data/Magnet.hs @@ -16,6 +16,8 @@ newtype MagnetUpdate = MagnetUpdateTimer Int data MagnetBuBu = MagnetAlign | MagnetDeflect + | MagnetAttract + | MagnetRepulse deriving (Eq, Ord, Show, Read) --Generic, Flat) data Magnet = Magnet