diff --git a/data/dodge.config.json b/data/dodge.config.json index e87cee742..0f99e2a23 100644 --- a/data/dodge.config.json +++ b/data/dodge.config.json @@ -1,8 +1,8 @@ { "_debug_booleans": [ "Show_ms_frame", - "Show_sound", - "Select_creature" + "Enable_debug", + "Collision_test" ], "_debug_view_clip_bounds": "NoRoomClipBoundaries", "_gameplay_rotate_to_wall": true, diff --git a/src/Dodge/Item/Weapon/Bullet.hs b/src/Dodge/Item/Weapon/Bullet.hs index eb5297c93..e5d1ade05 100644 --- a/src/Dodge/Item/Weapon/Bullet.hs +++ b/src/Dodge/Item/Weapon/Bullet.hs @@ -12,13 +12,11 @@ defaultBullet = Bullet { _buEffect = DestroyBullet , _buPayload = BulSpark --- , _buTrajectory = BasicBulletTrajectory , _buVel = V2 50 0 , _buDrag = 1 , _buPos = 0 , _buOldPos = 0 , _buWidth = 2 --- , _buTimer = 100 , _buDamages = basicBulDams } diff --git a/src/Dodge/Projectile/Update.hs b/src/Dodge/Projectile/Update.hs index a8e2b0517..e9af68907 100644 --- a/src/Dodge/Projectile/Update.hs +++ b/src/Dodge/Projectile/Update.hs @@ -1,24 +1,24 @@ --{-# OPTIONS_GHC -Wno-unused-imports #-} -module Dodge.Projectile.Update - ( updateProjectile - ) where +module Dodge.Projectile.Update ( + updateProjectile, +) where -import Control.Monad -import Dodge.Movement.Turn -import NewInt -import Dodge.Payload import Control.Lens +import Control.Monad +import Data.Foldable import Data.Maybe import Dodge.Base import Dodge.Data.World import Dodge.EnergyBall import Dodge.Item.Location +import Dodge.Movement.Turn +import Dodge.Payload import Dodge.SoundLogic import Dodge.WorldEvent.Cloud import Geometry import qualified IntMapHelp as IM +import NewInt import RandomHelp -import Data.Foldable updateProjectile :: Projectile -> World -> World updateProjectile pj w = foldl' (\w' pu -> upProjectile pu pj w') w (_prjUpdates pj) @@ -38,16 +38,16 @@ upProjectile pu pj = case pu of | otherwise -> id ReduceSpinPU x -> reduceSpinBy x (_prjID pj) DestroyPU mitid 0 -> destroyProjectile mitid (_prjID pj) --- the following requires that this is at the top of the update list, which is --- not ideal + -- the following requires that this is at the top of the update list, which is + -- not ideal DestroyPU _ _ -> cWorld . lWorld . projectiles . ix (_prjID pj) . prjUpdates . ix 0 . pjuTimer -~ 1 where time = _prjTimer pj act st et = time <= st && time >= et shellCollisionEffect :: Maybe (NewInt ItmInt) -> Projectile -> World -> World -shellCollisionEffect mscreenid = shellCollisionCheck - $ \pj -> explodeShell mscreenid (_prjID pj) +shellCollisionEffect mscreenid = shellCollisionCheck $ + \pj -> explodeShell mscreenid (_prjID pj) shellCollisionCheck :: (Projectile -> World -> World) -> Projectile -> World -> World shellCollisionCheck f pj w @@ -61,8 +61,9 @@ shellCollisionCheck f pj w newPos = oldPos +.+ _prjVel pj destroyProjectile :: Maybe (NewInt ItmInt) -> Int -> World -> World -destroyProjectile mitid pjid w = w & cWorld . lWorld . projectiles %~ IM.delete pjid - & removelink +destroyProjectile mitid pjid w = + w & cWorld . lWorld . projectiles %~ IM.delete pjid + & removelink where removelink = fromMaybe id $ do itid <- fmap _unNInt mitid @@ -70,7 +71,7 @@ destroyProjectile mitid pjid w = w & cWorld . lWorld . projectiles %~ IM.delete itm <- w ^? pointerToItemLocation loc . itUse . uaParams . apLinkedProjectile . _Just guard $ itm == pjid return $ pointerToItemLocation loc . itUse . uaParams . apLinkedProjectile .~ Nothing - + doThrust :: Projectile -> World -> World doThrust pj w = w @@ -78,7 +79,9 @@ doThrust pj w = & cWorld . lWorld . projectiles . ix i . prjVel %~ (\v -> accel +.+ frict *.* v) & soundContinue (ShellSound i) newPos missileLaunchS (Just 1) & makeFlamelet (oldPos -.- vel) (vel +.+ rotateV (pi + sparkD) accel) 3 10 - & shellTrailCloud trailage trailfadetime + & shellTrailCloud + trailage + trailfadetime (addZ 20 (oldPos +.+ r1 +.+ 30 *.* normalizeV (oldPos -.- newPos))) where trailage = fst . randomR (300, 500) $ _randGen w @@ -116,16 +119,17 @@ pjRemoteSetDirection ph pj w = case ph of HomeUsingRemoteScreen screenid -> let newdir | w ^? cWorld . lWorld . creatures . ix 0 . crManipulation . manObject . imSelectedItem - == w ^? cWorld . lWorld . itemLocations . ix (_unNInt screenid) . ilInvID - = (w ^. wCam . camRot) + argV (_mousePos (_input w)) + == w ^? cWorld . lWorld . itemLocations . ix (_unNInt screenid) . ilInvID = + (w ^. wCam . camRot) + argV (_mousePos (_input w)) | otherwise = _prjDir pj - in w & cWorld . lWorld . projectiles . ix (_prjID pj) . prjAcc + in w & cWorld . lWorld . projectiles . ix (_prjID pj) . prjAcc .~ magV (_prjAcc pj) *.* unitVectorAtAngle newdir HomeUsingTargeting itid -> fromMaybe w $ do tp <- w ^? pointerToItemID itid . itTargeting . itTgPos . _Just - return $ w & cWorld . lWorld . projectiles . ix (_prjID pj) . prjAcc + return $ + w & cWorld . lWorld . projectiles . ix (_prjID pj) . prjAcc %~ vecTurnTo 0.2 (_prjPos pj) tp - + --pjRemoteSetDirection mscreenid pj w = fromMaybe w $ do -- screenid <- fmap _unNInt mscreenid -- let newdir @@ -159,5 +163,5 @@ explodeShell mitid pjid w = & usePayload (_prjPayload thepj) (_prjPos thepj) (_prjVel thepj) & stopSoundFrom (ShellSound pjid) where --- itPoint = pointerToItemLocation $ w ^?! cWorld . lWorld . itemLocations . ix itid-- _itemLocations (_cWorld w) IM.! itid + -- itPoint = pointerToItemLocation $ w ^?! cWorld . lWorld . itemLocations . ix itid-- _itemLocations (_cWorld w) IM.! itid thepj = w ^?! cWorld . lWorld . projectiles . ix pjid diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index a30474459..f5c7e422c 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -26,7 +26,7 @@ import qualified IntMapHelp as IM import qualified Data.Map.Strict as M testStringInit :: Universe -> [String] -testStringInit _ = [] +testStringInit u = foldMap prettyShort $ u ^. uvWorld . cWorld . lWorld . projectiles -- (map (show . _ebPos) $ u ^. uvWorld . cWorld . lWorld . energyBalls) -- <> -- (foldMap prettyShort $ u ^. uvWorld . cWorld . lWorld . bullets)