From b6ece953c82aecf90789977075bf32d94b7afc26 Mon Sep 17 00:00:00 2001 From: justin Date: Fri, 27 Dec 2024 21:52:18 +0000 Subject: [PATCH] Unify launcher projectile creation --- src/Dodge/HeldUse.hs | 41 +++--------------------- src/Dodge/Projectile/Create.hs | 57 +--------------------------------- 2 files changed, 6 insertions(+), 92 deletions(-) diff --git a/src/Dodge/HeldUse.hs b/src/Dodge/HeldUse.hs index 2d1cc2dca..973c4972a 100644 --- a/src/Dodge/HeldUse.hs +++ b/src/Dodge/HeldUse.hs @@ -299,8 +299,8 @@ useLoadedAmmo itmtree cr (cme, w) (mzid, Just (mz, x, magtree)) = (,) (cme & cme MuzzleLaser -> shootLaser itmtree cr mz w MuzzleTesla -> shootTeslaArc itm cr mz w MuzzleTractor -> shootTractorBeam cr w - MuzzleRLauncher -> createProjectile magtree mz itmtree cr w - MuzzleGLauncher -> createGProjectile magtree mz itmtree cr w + MuzzleRLauncher -> createProjectile Rocket magtree mz itmtree cr w + MuzzleGLauncher -> createProjectile Grenade magtree mz itmtree cr w MuzzleNozzle{} -> useGasParams mid mz itm cr $ walkNozzle mzid mz itm cr w MuzzleShatter -> shootShatter itm cr w MuzzleDetector -> itemDetectorEffect itm cr w @@ -607,13 +607,14 @@ determineProjectileTracking magtree itmtree = fromMaybe NoHoming $ return $ HomeUsingTargeting (targetingtree ^. ldtValue . itID) createProjectile :: + ProjectileType -> LabelDoubleTree ComposeLinkType Item -> Muzzle -> LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World -createProjectile magtree muz itmtree cr = fromMaybe failsound $ do +createProjectile pjtype magtree muz itmtree cr = fromMaybe failsound $ do magid <- magtree ^? ldtValue . itLocation . ilInvID ammoitem <- cr ^? crInv . ix magid let homing = determineProjectileTracking magtree itmtree @@ -625,39 +626,7 @@ createProjectile magtree muz itmtree cr = fromMaybe failsound $ do aparams <- ((magtree ^? ldtLeft) >>= lookup AmmoPayloadLink >>= (^? ldtValue . itType . ibtAttach . shellPayload)) <|> ammoitem ^? itConsumables . magParams . ampPayload return $ - createGShell homing rdetonate rscreen issmokeless Rocket aparams muz cr - . startthesound - where - -- the sound should be moved to the projectile firing - startthesound = - soundMultiFrom - [CrWeaponSound (_crID cr) j | j <- [0 .. 3]] - (_crPos cr) - tap4S - Nothing - failsound w' = case w' ^? input . mouseButtons . ix SDL.ButtonLeft of - Just 0 -> soundStart (CrWeaponSound (_crID cr) 0) (_crPos cr) click1S Nothing w' - _ -> soundContinue (CrWeaponSound (_crID cr) 0) (_crPos cr) click1S Nothing w' - -createGProjectile :: - LabelDoubleTree ComposeLinkType Item -> - Muzzle -> - LabelDoubleTree ComposeLinkType Item -> - Creature -> - World -> - World -createGProjectile magtree muz itmtree cr = fromMaybe failsound $ do - magid <- magtree ^? ldtValue . itLocation . ilInvID - ammoitem <- cr ^? crInv . ix magid - let homing = determineProjectileTracking magtree itmtree - rdetonate = fmap (^. ldtValue . itID) $ - lookup RemoteDetonatorLink (magtree ^. ldtLeft) - rscreen = fmap (^. ldtValue . itID) $ - lookup RemoteScreenLink (magtree ^. ldtLeft) - aparams <- ((magtree ^? ldtLeft) >>= lookup AmmoPayloadLink >>= (^? ldtValue . itType . ibtAttach . shellPayload)) - <|> ammoitem ^? itConsumables . magParams . ampPayload - return $ - createGShell homing rdetonate rscreen False Grenade aparams muz cr + createShell homing rdetonate rscreen issmokeless pjtype aparams muz cr . startthesound where -- the sound should be moved to the projectile firing diff --git a/src/Dodge/Projectile/Create.hs b/src/Dodge/Projectile/Create.hs index 6b023339b..6798983dc 100644 --- a/src/Dodge/Projectile/Create.hs +++ b/src/Dodge/Projectile/Create.hs @@ -1,6 +1,5 @@ module Dodge.Projectile.Create ( --- createShell, - createGShell, + createShell, ) where import NewInt @@ -27,59 +26,6 @@ createShell :: ProjectileHoming -> ProjectileType -> Payload -> Muzzle -> Creature -> World -> World createShell homing mdetonator mscreen smokestatus pjtype payload muz cr w = w - & updatescreen - & updatedetonator - & cWorld . lWorld . projectiles . at i - ?~ Shell - { _prjPos = pos - , _prjZ = 20 - , _prjZVel = 0 - , _prjVel = rotateV dir (V2 1 0) + cr ^. crPos - cr ^. crOldPos - , _prjDraw = homingDrawType homing - , _prjID = i - , _prjAcc = rotateV dir (V2 3 0) - , _prjDir = dir - , _prjSpin = 0 - , _prjPayload = payload - , _prjTimer = lifespan - , _prjUpdates = - [ CollisionEffectPU (homing ^? phRemoteID) mdetonator mscreen - , TimePU - , StartSpinPU 335 (_crID cr) spinamount - , RemoteDirectionPU (lifespan - thrustdelay) 0 homing - , ThrustPU (lifespan - thrustdelay) 0 smokestatus - , ReduceSpinPU (1 - spindrag * 2 / 200) - ] - , _prjType = pjtype - } - where - lifespan = 350 - spindrag = 1 - spinamount = 2 - thrustdelay = 20 - updatedetonator = fromMaybe id $ do - screenid <- mdetonator - return $ pointerToItemID screenid . itUse . uaParams - . apProjectiles - .:~ i - updatescreen = fromMaybe id $ do - --screenid <- homing ^? phRemoteID - screenid <- mscreen - return $ pointerToItemID screenid . itUse . uaParams - . apLinkedProjectile - ?~ i - i = IM.newKey $ w ^. cWorld . lWorld . projectiles - dir = _crDir cr + _mzRot muz - pos = _crPos cr +.+ rotateV dir (_mzPos muz) - --- assumes the mscreen is in your inventory -createGShell :: ProjectileHoming - -> Maybe (NewInt ItmInt) - -> Maybe (NewInt ItmInt) - -> Bool - -> ProjectileType - -> Payload -> Muzzle -> Creature -> World -> World -createGShell homing mdetonator mscreen smokestatus pjtype payload muz cr w = w & updatescreen & updatedetonator & cWorld . lWorld . projectiles . at i @@ -123,7 +69,6 @@ createGShell homing mdetonator mscreen smokestatus pjtype payload muz cr w = w . apProjectiles .:~ i updatescreen = fromMaybe id $ do - --screenid <- homing ^? phRemoteID screenid <- mscreen return $ pointerToItemID screenid . itUse . uaParams . apLinkedProjectile