diff --git a/src/Dodge/Data/Item/Use/Consumption/Ammo.hs b/src/Dodge/Data/Item/Use/Consumption/Ammo.hs index e800aeac0..dbd840a2e 100644 --- a/src/Dodge/Data/Item/Use/Consumption/Ammo.hs +++ b/src/Dodge/Data/Item/Use/Consumption/Ammo.hs @@ -19,7 +19,7 @@ data ProjectileUpdate = ThrustPU {_pjuStart :: Int, _pjuEnd :: Int} | StartSpinPU {_pjuTime :: Int, _pjuCID :: Int, _pjuSpinAmound :: Int} | RemoteDirectionPU {_pjuStart :: Int, _pjuEnd :: Int} - | ApplyGravityPU +-- | ApplyGravityPU deriving (Show, Eq, Ord, Read) --Generic, Flat) data AmmoType diff --git a/src/Dodge/Projectile/Create.hs b/src/Dodge/Projectile/Create.hs index 207983e61..bab1aa21a 100644 --- a/src/Dodge/Projectile/Create.hs +++ b/src/Dodge/Projectile/Create.hs @@ -60,7 +60,7 @@ createShell mdetonator mscreen stab pjtype payload muz cr w = w RetiredProjectile -> 0 lifespan = 350 thrustorgrav = case pjtype of - Grenade {}-> [ApplyGravityPU] + Grenade {}-> [] Rocket{} -> [ThrustPU (lifespan - thrustdelay) 0] RetiredProjectile -> [] thrustdelay = 20 diff --git a/src/Dodge/Projectile/Update.hs b/src/Dodge/Projectile/Update.hs index 1b4c5eb15..7b262bd2f 100644 --- a/src/Dodge/Projectile/Update.hs +++ b/src/Dodge/Projectile/Update.hs @@ -28,6 +28,7 @@ updateProjectile pj w = . pjMovement pj . shellCollisionCheck pj + . doGravityPU pj $ foldl' (flip $ upProjectile pj) w (_pjUpdates pj) upProjectile :: Projectile -> ProjectileUpdate -> World -> World @@ -41,12 +42,17 @@ upProjectile pj pu = case pu of RemoteDirectionPU st et | act st et -> pjRemoteSetDirection (pj ^? pjType . rkHoming) pj | otherwise -> id - -- ReduceSpinPU x -> reduceSpinBy x (_pjID pj) - ApplyGravityPU -> applyGravityPU pj +-- ApplyGravityPU -> applyGravityPU pj where time = _pjTimer pj act st et = time <= st && time >= et +doGravityPU :: Projectile -> World -> World +doGravityPU pj + | Grenade GBounce {} <- pj ^. pjType = applyGravityPU pj + | Grenade GStick <- pj ^. pjType = applyGravityPU pj + | otherwise = id + applyGravityPU :: Projectile -> World -> World applyGravityPU pj w | newz <= 0 && abs (pj ^. pjZVel) < 1 = @@ -103,7 +109,7 @@ tryShellBounce (p, Right wl) pj w | Just GStick <- pj ^? pjType . gnHitEffect = w & cWorld . lWorld . projectiles . ix (_pjID pj) . pjType .~ Grenade (GStuckWall (wl ^. wlStructure)) - & cWorld . lWorld . projectiles . ix (_pjID pj) . pjUpdates %~ delete ApplyGravityPU +-- & cWorld . lWorld . projectiles . ix (_pjID pj) . pjUpdates %~ delete ApplyGravityPU & soundOriginIDsAt (ShellSound (pj ^. pjID)) [slapS, slap1S] (pj ^. pjPos) | Just x <- pj ^? pjType . gnHitEffect . bounceTolerance = if abs (dotV (pj ^. pjVel) (vNormal hitline)) < x @@ -126,7 +132,7 @@ tryShellBounce (p, Left cr) pj w (rotateV (- cr ^. crDir) (p - cr ^. crPos)) (pj ^. pjDir - cr ^. crDir) ) - & cWorld . lWorld . projectiles . ix (_pjID pj) . pjUpdates %~ delete ApplyGravityPU +-- & cWorld . lWorld . projectiles . ix (_pjID pj) . pjUpdates %~ delete ApplyGravityPU & soundOriginIDsAt (ShellSound (pj ^. pjID)) [slapS, slap1S] (pj ^. pjPos) tryShellBounce _ pj w = explodeShell pj w @@ -203,14 +209,16 @@ pjRemoteSetDirection ph pj w = case ph of pjMovement :: Projectile -> World -> World pjMovement pj w | Just GStuckWall{} <- pj ^? pjType . gnHitEffect = w - | Just (GStuckCreature crid p d) <- pj ^? pjType . gnHitEffect = fromMaybe w $ do - cpos <- w ^? cWorld . lWorld . creatures . ix crid . crPos - cdir <- w ^? cWorld . lWorld . creatures . ix crid . crDir - return $ - w & cWorld . lWorld . projectiles . ix (pj ^. pjID) . pjPos - .~ cpos + rotateV cdir p - & cWorld . lWorld . projectiles . ix (pj ^. pjID) . pjDir - .~ d + cdir + | Just (GStuckCreature crid p d) <- pj ^? pjType . gnHitEffect = fromMaybe + (w & cWorld . lWorld . projectiles . ix (pj ^. pjID) . pjType .~ Grenade GStick) + $ do + cpos <- w ^? cWorld . lWorld . creatures . ix crid . crPos + cdir <- w ^? cWorld . lWorld . creatures . ix crid . crDir + return $ + w & cWorld . lWorld . projectiles . ix (pj ^. pjID) . pjPos + .~ cpos + rotateV cdir p + & cWorld . lWorld . projectiles . ix (pj ^. pjID) . pjDir + .~ d + cdir | otherwise = w & cWorld . lWorld . projectiles . ix (pj ^. pjID) . pjSpin *~ 0.99 diff --git a/tags b/tags index 5047b5e35..7a9fa2693 100644 --- a/tags +++ b/tags @@ -75,7 +75,6 @@ AnTree src/Dodge/Annotation/Data.hs 19;" C Analyser src/Dodge/Placement/Instance/Analyser.hs 1;" m Annotation src/Dodge/Annotation/Data.hs 14;" t Annotation src/Dodge/Annotation.hs 3;" m -ApplyGravityPU src/Dodge/Data/Item/Use/Consumption/Ammo.hs 22;" C ArbitraryAction src/Dodge/Data/ActionPlan.hs 166;" C ArbitraryImpulse src/Dodge/Data/ActionPlan.hs 47;" C ArbitraryImpulseEffect src/Dodge/Data/ActionPlan.hs 48;" C @@ -3100,6 +3099,7 @@ _strideAmount src/Dodge/Data/Creature/Stance.hs 22;" f _strideLength src/Dodge/Data/Creature/Stance.hs 16;" f _stuckCrID src/Dodge/Data/Projectile.hs 55;" f _stuckCrOffset src/Dodge/Data/Projectile.hs 55;" f +_stuckCrRot src/Dodge/Data/Projectile.hs 55;" f _stuckWlID src/Dodge/Data/Projectile.hs 56;" f _subInventory src/Dodge/Data/HUD.hs 20;" f _swColor src/Dodge/Data/Shockwave.hs 18;" f @@ -3384,7 +3384,7 @@ applyCME src/Dodge/HeldUse.hs 145;" f applyCreatureDamage src/Dodge/Creature/Damage.hs 14;" f applyDamageEffect src/Dodge/Creature/Damage.hs 31;" f applyEventIO src/Loop.hs 89;" f -applyGravityPU src/Dodge/Projectile/Update.hs 50;" f +applyGravityPU src/Dodge/Projectile/Update.hs 56;" f applyIndividualDamage src/Dodge/Creature/Damage.hs 49;" f applyIndividualDamage' src/Dodge/Creature/Damage.hs 52;" f applyInvLock src/Dodge/HeldUse.hs 160;" f @@ -3948,7 +3948,7 @@ destroyMatS src/Dodge/Material/Sound.hs 7;" f destroyMcType src/Dodge/Machine/Destroy.hs 21;" f destroyMount src/Dodge/Block.hs 102;" f destroyMounts src/Dodge/Block.hs 99;" f -destroyProjectile src/Dodge/Projectile/Update.hs 128;" f +destroyProjectile src/Dodge/Projectile/Update.hs 139;" f detV src/Geometry/Vector.hs 93;" f detector src/Dodge/Item/Held/Utility.hs 41;" f detectorColor src/Dodge/Item/Draw/SPic.hs 437;" f @@ -4021,6 +4021,7 @@ doDrawing src/Dodge/Render.hs 35;" f doDrawing' src/Dodge/Render.hs 46;" f doFloatFloat src/Dodge/FloatFunction.hs 5;" f doGenFloat src/Dodge/HeldUse.hs 560;" f +doGravityPU src/Dodge/Projectile/Update.hs 50;" f doHeldUseEffect src/Dodge/HeldUse.hs 110;" f doInPlacements src/Dodge/Layout.hs 92;" f doIndividualPlacements src/Dodge/Layout.hs 117;" f @@ -4062,7 +4063,7 @@ doTerminalCommandEffect src/Dodge/Terminal.hs 135;" f doTestDrawing src/Dodge/Render.hs 42;" f doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f doTextInputOverUniverse src/Dodge/Update/Input/Text.hs 12;" f -doThrust src/Dodge/Projectile/Update.hs 138;" f +doThrust src/Dodge/Projectile/Update.hs 149;" f doTimeScroll src/Dodge/Update.hs 205;" f doTmTm src/Dodge/TmTm.hs 6;" f doTmWdWd src/Dodge/WorldEffect.hs 102;" f @@ -4269,7 +4270,7 @@ expandPolyCorners src/Dodge/LevelGen/StaticWalls.hs 103;" f expandToSquare src/Dodge/LevelGen/StaticWalls/Deprecated.hs 83;" f expireAndDamage src/Dodge/Bullet.hs 195;" f expireAndDamageFL src/Dodge/Flame.hs 47;" f -explodeShell src/Dodge/Projectile/Update.hs 211;" f +explodeShell src/Dodge/Projectile/Update.hs 226;" f explosionS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 416;" f explosiveBarrel src/Dodge/Creature/Inanimate.hs 29;" f extTrigLitPos src/Dodge/Placement/Instance/Button.hs 84;" f @@ -5155,8 +5156,8 @@ pipe src/Dodge/Item/Craftable.hs 32;" f pistol src/Dodge/Item/Held/Stick.hs 42;" f pistolCrit src/Dodge/Creature/PistolCrit.hs 12;" f pistolerRoom src/Dodge/Room/Room.hs 321;" f -pjMovement src/Dodge/Projectile/Update.hs 198;" f -pjRemoteSetDirection src/Dodge/Projectile/Update.hs 183;" f +pjMovement src/Dodge/Projectile/Update.hs 209;" f +pjRemoteSetDirection src/Dodge/Projectile/Update.hs 194;" f plBlock src/Dodge/Placement/PlaceSpot/Block.hs 18;" f plDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 22;" f plLineBlock src/Dodge/Placement/PlaceSpot/Block.hs 50;" f @@ -5671,7 +5672,7 @@ shardShape src/Dodge/Block/Debris.hs 181;" f shatterGun src/Dodge/Item/Held/Weapons.hs 8;" f shatterGunSPic src/Dodge/Item/Draw/SPic.hs 287;" f shatterWall src/Dodge/Item/Weapon/Shatter.hs 26;" f -shellCollisionCheck src/Dodge/Projectile/Update.hs 79;" f +shellCollisionCheck src/Dodge/Projectile/Update.hs 85;" f shellMag src/Dodge/Item/Ammo.hs 61;" f shellModule src/Dodge/Item/Scope.hs 70;" f shellShape src/Dodge/Projectile/Draw.hs 34;" f @@ -6067,8 +6068,8 @@ tryPutFloorItemIDInInv src/Dodge/Inventory/Add.hs 26;" f tryPutItemInInv src/Dodge/Inventory/Add.hs 42;" f tryPutItemInInvAt src/Dodge/Inventory/Add.hs 32;" f trySeedFromClipboard src/Dodge/Menu.hs 88;" f -tryShellBounce src/Dodge/Projectile/Update.hs 99;" f -trySpinByCID src/Dodge/Projectile/Update.hs 165;" f +tryShellBounce src/Dodge/Projectile/Update.hs 105;" f +trySpinByCID src/Dodge/Projectile/Update.hs 176;" f trySynthBullet src/Dodge/Creature/State.hs 201;" f tryUseParent src/Dodge/Creature/State.hs 194;" f turnTo src/Dodge/Movement/Turn.hs 4;" f @@ -6103,7 +6104,7 @@ unusedOffPathAwayFromLink src/Dodge/PlacementSpot.hs 133;" f unusedSpotAwayFromInLink src/Dodge/PlacementSpot.hs 139;" f unusedSpotAwayFromLink src/Dodge/PlacementSpot.hs 122;" f unusedSpotNearInLink src/Dodge/PlacementSpot.hs 191;" f -upProjectile src/Dodge/Projectile/Update.hs 33;" f +upProjectile src/Dodge/Projectile/Update.hs 34;" f updateAllNodes src/TreeHelp.hs 85;" f updateArc src/Dodge/Tesla.hs 91;" f updateArc src/Dodge/Tesla/Arc.hs 100;" f