Tweak "magnets" that affect bullet movement

This commit is contained in:
2024-12-24 10:48:28 +00:00
parent 02b2f9831f
commit fb1553bf3c
17 changed files with 226 additions and 257 deletions
+16 -2
View File
@@ -10,7 +10,6 @@ import Data.Maybe
import Dodge.Creature.Test
import Dodge.Data.World
import Dodge.EnergyBall
import Dodge.MagnetBuBu
import Dodge.Movement.Turn
import Dodge.WorldEvent.SpawnParticle
import Dodge.WorldEvent.ThingsHit
@@ -35,7 +34,22 @@ updateBullet w bu
applyMagnetsToBul :: Bullet -> World -> Bullet
applyMagnetsToBul bu =
foldl' (flip doMagnetBuBu) bu . _magnets . _lWorld . _cWorld
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 (50 * pi / d) bpos mgdeflectpos
_ -> bu
where
bvel = bu ^. buVel
mpos = mg ^. mgPos
bpos = bu ^. buPos
mgdeflectpos
| isLHS mpos (mpos + bvel) bpos = bpos + vNormal (bpos - mpos)
| otherwise = bpos - vNormal (bpos - mpos)
d = dist (bu ^. buPos) (mg ^. mgPos)
isclose = d < 100
updateBulVel :: Bullet -> Bullet
updateBulVel bt = case _buTrajectory bt of