Add more bullet deflection types
This commit is contained in:
+11
-4
@@ -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
|
||||
|
||||
|
||||
@@ -16,6 +16,8 @@ newtype MagnetUpdate = MagnetUpdateTimer Int
|
||||
data MagnetBuBu
|
||||
= MagnetAlign
|
||||
| MagnetDeflect
|
||||
| MagnetAttract
|
||||
| MagnetRepulse
|
||||
deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
||||
|
||||
data Magnet = Magnet
|
||||
|
||||
Reference in New Issue
Block a user