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
|
foldl' (flip doMagnetBuBu) bu . _oldMagnets . _lWorld . _cWorld
|
||||||
|
|
||||||
doMagnetBuBu :: Magnet -> Bullet -> Bullet
|
doMagnetBuBu :: Magnet -> Bullet -> Bullet
|
||||||
doMagnetBuBu mg bu = case _mgField mg of
|
doMagnetBuBu mg bu = if isclose
|
||||||
MagnetAlign | isclose -> bu
|
then case _mgField mg of
|
||||||
MagnetDeflect | isclose -> bu & buVel %~ vecTurnTo (4 * pi / (d+16)) bpos mgdeflectpos
|
MagnetAlign -> bu & buVel %~ vecTurnTo (10 * pi / (d+40)) bpos mgalignpos
|
||||||
_ -> bu
|
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
|
where
|
||||||
bvel = bu ^. buVel
|
bvel = bu ^. buVel
|
||||||
mpos = mg ^. mgPos
|
mpos = mg ^. mgPos
|
||||||
@@ -48,6 +52,9 @@ doMagnetBuBu mg bu = case _mgField mg of
|
|||||||
mgdeflectpos
|
mgdeflectpos
|
||||||
| isLHS mpos (mpos + bvel) bpos = bpos + vNormal (bpos - mpos)
|
| isLHS mpos (mpos + bvel) bpos = bpos + vNormal (bpos - mpos)
|
||||||
| otherwise = 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)
|
d = dist (bu ^. buPos) (mg ^. mgPos)
|
||||||
isclose = d < 100
|
isclose = d < 100
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ newtype MagnetUpdate = MagnetUpdateTimer Int
|
|||||||
data MagnetBuBu
|
data MagnetBuBu
|
||||||
= MagnetAlign
|
= MagnetAlign
|
||||||
| MagnetDeflect
|
| MagnetDeflect
|
||||||
|
| MagnetAttract
|
||||||
|
| MagnetRepulse
|
||||||
deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
deriving (Eq, Ord, Show, Read) --Generic, Flat)
|
||||||
|
|
||||||
data Magnet = Magnet
|
data Magnet = Magnet
|
||||||
|
|||||||
Reference in New Issue
Block a user