Add more bullet deflection types

This commit is contained in:
2024-12-24 12:32:09 +00:00
parent d739a95197
commit a28ec07ffb
2 changed files with 13 additions and 4 deletions
+11 -4
View File
@@ -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
+2
View File
@@ -16,6 +16,8 @@ newtype MagnetUpdate = MagnetUpdateTimer Int
data MagnetBuBu
= MagnetAlign
| MagnetDeflect
| MagnetAttract
| MagnetRepulse
deriving (Eq, Ord, Show, Read) --Generic, Flat)
data Magnet = Magnet