From 1e7611ab8164e14078a14d95723f31913b55e278 Mon Sep 17 00:00:00 2001 From: justin Date: Tue, 7 Jan 2025 00:39:59 +0000 Subject: [PATCH] Cleanup --- data/charMaps/cMap16x32.Custom.png | Bin 12370 -> 12378 bytes saveSlot/LevelStart0 | 2 +- src/Dodge/Data/Item.hs | 8 +++ src/Dodge/Default/Item.hs | 1 + src/Dodge/Inventory/SelectionList.hs | 10 +++- src/Dodge/Item/Scope.hs | 3 ++ src/Dodge/SoundLogic.hs | 4 +- src/Dodge/TestString.hs | 2 +- src/Dodge/Update.hs | 74 ++++++++++++--------------- src/Dodge/Update/Scroll.hs | 2 + src/Sound.hs | 2 +- src/Sound/Data.hs | 2 +- tags | 26 +++++----- 13 files changed, 76 insertions(+), 60 deletions(-) diff --git a/data/charMaps/cMap16x32.Custom.png b/data/charMaps/cMap16x32.Custom.png index 84de7b3f95d37340f017b8aed40d61e0204c76c0..0378151aae1b4717fee3ce00ec09a683ab7e8501 100644 GIT binary patch delta 6799 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 delta 6791 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 anyequippos) + anyextra = maybeToList (anyhotkey <> anyequippos <> anyscroll) anyhotkey = fmap hotkeyToString (w ^? cWorld . lWorld . imHotkeys . unNIntMap . ix itid) anyequippos = fmap (rightPad 8 ' ' . (' ' :) . eqPosText) (ci ^? _1 . itLocation . ilEquipSite . _Just) + anyscroll = fmap absurround $ itemScrollDisplay =<< (ci ^? _1 . itScroll) + absurround str = '<' : str ++ ">" + +itemScrollDisplay :: ItemScroll -> Maybe String +itemScrollDisplay = \case + NoItemScroll -> Nothing + ItemScrollInt i -> Just $ show i + ItemScrollIntRange _ i -> Just $ show i itemDisplayPad :: [Char] -> String -> [Char] itemDisplayPad ls rs diff --git a/src/Dodge/Item/Scope.hs b/src/Dodge/Item/Scope.hs index af8409c00..67c50ace5 100644 --- a/src/Dodge/Item/Scope.hs +++ b/src/Dodge/Item/Scope.hs @@ -89,18 +89,21 @@ copier x = defaultHeldItem & itType .~ COPIER x & itUse .~ UseInt 0 + & itScroll .~ ItemScrollInt 0 bgate :: Item bgate = defaultHeldItem & itType .~ BGATE & itUse .~ UseInt 0 + & itScroll .~ ItemScrollIntRange 15 0 ugate :: Item ugate = defaultHeldItem & itType .~ UGATE & itUse .~ UseInt 0 + & itScroll .~ ItemScrollIntRange 3 0 bulletModule :: BulletMod -> Item bulletModule bm = diff --git a/src/Dodge/SoundLogic.hs b/src/Dodge/SoundLogic.hs index f1d626aa0..7610fb25e 100644 --- a/src/Dodge/SoundLogic.hs +++ b/src/Dodge/SoundLogic.hs @@ -84,7 +84,7 @@ aSound vol status fpos sType mtime w = , _soundStatus = SoundStatus { _playStatus = status - , _isLooping = isJust mtime + , _soundIsLooping = isJust mtime } , _soundChannel = Nothing , _soundAngDist = Just (a, floor (225 * (1 - vol))) @@ -192,7 +192,7 @@ soundMultiFrom (so : sos) pos sType mtime w , _soundStatus = SoundStatus { _playStatus = ToStart - , _isLooping = isJust mtime + , _soundIsLooping = isJust mtime } , _soundChannel = Nothing , _soundAngDist = Just (a, 0) diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index 30cb3cb74..3e82f9103 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 u = [show $ u ^? uvWorld . hud . hudElement . diSelection . _Just] +testStringInit u = prettyShort $ M.elems $ u ^. uvWorld . input . pressedKeys --testStringInit u = foldMap prettyShort $ u ^. uvWorld . cWorld . lWorld . projectiles -- (map (show . _ebPos) $ u ^. uvWorld . cWorld . lWorld . energyBalls) -- <> diff --git a/src/Dodge/Update.hs b/src/Dodge/Update.hs index 52937ed38..916ce208c 100644 --- a/src/Dodge/Update.hs +++ b/src/Dodge/Update.hs @@ -1,4 +1,5 @@ --{-# LANGUAGE BangPatterns #-} +{-# LANGUAGE LambdaCase #-} {- | Module : Dodge.Update @@ -25,7 +26,6 @@ import Dodge.DrWdWd import Dodge.EnergyBall import Dodge.Flame import Dodge.Inventory ---import Dodge.Item.Location import Dodge.Laser.Update import Dodge.LinearShockwave.Update import Dodge.ListDisplayParams @@ -83,7 +83,8 @@ updateUniverseFirst :: Universe -> Universe updateUniverseFirst u = u & uvWorld . input . clickWorldPos %~ M.union (setClickWorldPos u) - & uvWorld . input . smoothScrollAmount %~ calcSmoothScroll (u ^. uvWorld . input . scrollAmount) + & uvWorld . input . smoothScrollAmount + %~ calcSmoothScroll (u ^. uvWorld . input . scrollAmount) & over (uvWorld . input) updateScrollTestValue & updateDebugMessageOffset & over (uvWorld . cWorld . cClock) (+ 1) @@ -119,21 +120,21 @@ updateWorldEventFlag wef = case wef of -- for now update inventory positioning every tick CombineInventoryChange -> updateCombinePositioning -maybeOpenTerminal :: Universe -> Universe -maybeOpenTerminal u = case u ^. uvWorld . input . pressedKeys . at ScancodeSemicolon of - Just InitialPress -> gotoTerminal u +maybeOpenConsole :: Universe -> Universe +maybeOpenConsole u = case u ^. uvWorld . input . pressedKeys . at ScancodeSemicolon of + Just InitialPress -> u & uvScreenLayers %~ openConsole _ -> u -gotoTerminal :: Universe -> Universe -gotoTerminal w = case _uvScreenLayers w of - (InputScreen{} : _) -> w - _ -> w & uvScreenLayers .:~ InputScreen mempty "Enter command" +openConsole :: [ScreenLayer] -> [ScreenLayer] +openConsole = \case + xs@(InputScreen{} : _) -> xs + xs -> InputScreen mempty "Enter command" : xs updateUniverseLast :: Universe -> Universe updateUniverseLast u = u & over (uvWorld . input . textInput) (const mempty) - & maybeOpenTerminal + & maybeOpenConsole & advanceScrollAmount & updateWorldEventFlags & uvWorld . input . pressedKeys . each %~ f @@ -154,17 +155,7 @@ updateUniverseLast u = updateUniverseMid :: Universe -> Universe updateUniverseMid u = case _uvScreenLayers u of (OptionScreen{_scOptionFlag = LoadingScreen} : _) -> u - (sl@OptionScreen{_scOptionFlag = GameOverOptions} : _) -> - u & updateUseInputOnScreen sl - & uvWorld - %~ ( - --updateParticles - (cWorld . lWorld . radarBlips .~ []) - -- . updateIMl _props _pjUpdate --- might want to clear temp light sources here? - . (cWorld . lWorld . lights .~ []) - . updateClouds - ) +-- (sl@OptionScreen{_scOptionFlag = GameOverOptions} : _) -> u & updateUseInputOnScreen sl (sl : _) -> u & updateUseInputOnScreen sl [] -> timeFlowUpdate . updateUseInputInGame $ @@ -189,11 +180,12 @@ timeFlowUpdate u = case u ^. uvWorld . timeFlow of pauseTime :: NewInt ItmInt -> World -> World --pauseTime itmloc w pauseTime _ w --- | justPressedButtonLeft || outofcharge = w & timeFlow .~ NormalTimeFlow + -- | justPressedButtonLeft || outofcharge = w & timeFlow .~ NormalTimeFlow | justPressedButtonLeft = w & timeFlow .~ NormalTimeFlow | otherwise = w -- & pointerToItemLocation (w ^?! cWorld . lWorld . itemLocations . ix (_unNInt itmloc)) . itUse . leftConsumption . wpCharge -~ 1 where justPressedButtonLeft = w ^? input . mouseButtons . ix ButtonLeft == Just 0 + -- outofcharge = maybe True (== 0) charge -- charge = w ^? pointerToItemLocation (w ^?! cWorld . lWorld . itemLocations . ix (_unNInt itmloc)) . itUse . leftConsumption . wpCharge @@ -229,8 +221,9 @@ scrollTimeBack w = case w ^? pastWorlds . _head of mupdateitem _ = fromMaybe id $ do --i <- w ^? timeFlow . scrollItemID . unNInt _ <- w ^? timeFlow . scrollItemID . unNInt --- let pointituse = pointerToItemLocation (w ^?! cWorld . lWorld . itemLocations . ix i) . itUse + -- let pointituse = pointerToItemLocation (w ^?! cWorld . lWorld . itemLocations . ix i) . itUse return id + -- (pointituse . leftConsumption . wpCharge .~ (x -1)) -- . (pointituse . leftHammer .~ HammerDown) @@ -250,7 +243,6 @@ scrollTimeForward w = case w ^? timeFlow . futureWorlds . _head of _ <- w ^? timeFlow . scrollItemID . unNInt return id -- pointerToItemLocation (w ^?! cWorld . lWorld . itemLocations . ix i) . itUse . leftConsumption . wpCharge .~ ramount - -- | The update step. functionalUpdate :: Universe -> Universe functionalUpdate u = @@ -265,7 +257,8 @@ functionalUpdate u = . over uvWorld (updateIMl (_doors . _lWorld . _cWorld) (doDrWdWd . _drMech)) . over uvWorld doWorldEvents . over uvWorld updateDelayedEvents - . over uvWorld (updateIMl (_modifications . _lWorld . _cWorld) (doModificationEffect . _mdUpdate)) + . over uvWorld (updateIMl (_modifications . _lWorld . _cWorld) + (doModificationEffect . _mdUpdate)) . over uvWorld updateSparks . over uvWorld updateRadarSweeps . over uvWorld updatePosEvents @@ -305,8 +298,9 @@ functionalUpdate u = $ over uvWorld updatePastWorlds u updateMagnets :: LWorld -> LWorld -updateMagnets lw = lw & oldMagnets .~ (lw ^. magnets) - & magnets .~ mempty +updateMagnets lw = + lw & oldMagnets .~ (lw ^. magnets) + & magnets .~ mempty checkTermDist :: World -> World checkTermDist w = fromMaybe w $ do @@ -410,16 +404,13 @@ isOverTerminalScreen cfig tm (V2 x y) = updateWheelEvents :: World -> World updateWheelEvents w - | yi == 0 = w - | otherwise = updateWheelEvent yi w - where - yi = w ^. input . scrollAmount + | 0 <- w ^. input . scrollAmount = w + | yi <- w ^. input . scrollAmount = updateWheelEvent yi w advanceScrollAmount :: Universe -> Universe -advanceScrollAmount u = - u - & uvWorld . input . scrollAmount .~ 0 - & uvWorld . input . smoothScrollAmount %~ advanceSmoothScroll +advanceScrollAmount = + (uvWorld . input . scrollAmount .~ 0) + . (uvWorld . input . smoothScrollAmount %~ advanceSmoothScroll) updatePastWorlds :: World -> World updatePastWorlds w = w & pastWorlds %~ (forceFoldable . take 100 . ((w ^. cWorld . lWorld) :)) @@ -486,7 +477,8 @@ setOldPos cr = -- Nothing' -> w & timeFlow .~ NormalTimeFlow zoneCreatures :: World -> World -zoneCreatures w = w & crZoning +zoneCreatures w = + w & crZoning .~ foldl' zoneCreature mempty (w ^. cWorld . lWorld . creatures) updateCreatureSoundPositions :: World -> World @@ -542,11 +534,13 @@ updateRadarBlips = updateObjMapMaybe radarBlips updateRadarBlip -- if changing, make sure that bullets can still spawn new bullets updateBullets :: World -> World -updateBullets w = w' - & cWorld . lWorld . bullets %~ (++ catMaybes ps) +updateBullets w = + w' + & cWorld . lWorld . bullets %~ (++ catMaybes ps) where - (w', ps) = mapAccumR updateBullet (w & cWorld . lWorld . bullets .~ []) - $ w ^. cWorld . lWorld . bullets + (w', ps) = + mapAccumR updateBullet (w & cWorld . lWorld . bullets .~ []) $ + w ^. cWorld . lWorld . bullets updateTeslaArcs :: World -> World updateTeslaArcs = updateObjCatMaybes teslaArcs updateTeslaArc diff --git a/src/Dodge/Update/Scroll.hs b/src/Dodge/Update/Scroll.hs index 2dc153f93..03175b82c 100644 --- a/src/Dodge/Update/Scroll.hs +++ b/src/Dodge/Update/Scroll.hs @@ -14,6 +14,7 @@ import Geometry import LensHelp import SDL +-- yi should be nonzero updateWheelEvent :: Int -> World -> World updateWheelEvent yi w = case w ^. hud . hudElement . subInventory of NoSubInventory -> updateBaseWheelEvent yi w @@ -22,6 +23,7 @@ updateWheelEvent yi w = case w ^. hud . hudElement . subInventory of CombineInventory{} -> moveCombineSel yi w DisplayTerminal tmid -> terminalWheelEvent yi tmid w +-- yi should be nonzero updateBaseWheelEvent :: Int -> World -> World updateBaseWheelEvent yi w | Just True <- w ^? cWorld . lWorld . creatures . ix 0 . crInvLock = w diff --git a/src/Sound.hs b/src/Sound.hs index 1742f1be8..67ddff9e6 100644 --- a/src/Sound.hs +++ b/src/Sound.hs @@ -90,7 +90,7 @@ tryPlay sd s = do & soundChannel ?~ i & soundStatus . playStatus .~ JustStartedPlaying where - timesToPlay | _isLooping (_soundStatus s) = Mix.Forever + timesToPlay | _soundIsLooping (_soundStatus s) = Mix.Forever | otherwise = Mix.Once tryGetChannel :: Sound -> MaybeT IO Mix.Channel diff --git a/src/Sound/Data.hs b/src/Sound/Data.hs index c65e889e6..348bfd77a 100644 --- a/src/Sound/Data.hs +++ b/src/Sound/Data.hs @@ -16,7 +16,7 @@ import qualified SDL.Mixer as Mix data SoundStatus = SoundStatus { _playStatus :: PlayStatus - , _isLooping :: Bool + , _soundIsLooping :: Bool } deriving (Eq, Ord, Show) diff --git a/tags b/tags index cb5478aeb..adb74fa97 100644 --- a/tags +++ b/tags @@ -2054,7 +2054,7 @@ Update src/Dodge/LightSource/Update.hs 1;" m Update src/Dodge/LinearShockwave/Update.hs 1;" m Update src/Dodge/Machine/Update.hs 1;" m Update src/Dodge/Magnet/Update.hs 1;" m -Update src/Dodge/Projectile/Update.hs 2;" m +Update src/Dodge/Projectile/Update.hs 4;" m Update src/Dodge/Prop/Update.hs 1;" m Update src/Dodge/Shockwave/Update.hs 1;" m Update src/Dodge/TractorBeam/Update.hs 1;" m @@ -3416,7 +3416,7 @@ applyCME src/Dodge/HeldUse.hs 161;" 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 54;" 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 176;" f @@ -3985,7 +3985,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 137;" 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 444;" f @@ -4057,7 +4057,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 595;" f -doGravityPU src/Dodge/Projectile/Update.hs 48;" f +doGravityPU src/Dodge/Projectile/Update.hs 50;" f doHeldUseEffect src/Dodge/HeldUse.hs 126;" f doInPlacements src/Dodge/Layout.hs 92;" f doIndividualPlacements src/Dodge/Layout.hs 117;" f @@ -4099,7 +4099,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 147;" 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 99;" f @@ -4310,7 +4310,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 227;" f +explodeShell src/Dodge/Projectile/Update.hs 238;" 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 @@ -5200,8 +5200,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 207;" f -pjRemoteSetDirection src/Dodge/Projectile/Update.hs 192;" f +pjMovement src/Dodge/Projectile/Update.hs 215;" f +pjRemoteSetDirection src/Dodge/Projectile/Update.hs 200;" 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 @@ -5715,7 +5715,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 294;" f shatterWall src/Dodge/Item/Weapon/Shatter.hs 26;" f -shellCollisionCheck src/Dodge/Projectile/Update.hs 83;" f +shellCollisionCheck src/Dodge/Projectile/Update.hs 85;" f shellMag src/Dodge/Item/Ammo.hs 61;" f shellModule src/Dodge/Item/Scope.hs 111;" f shellShape src/Dodge/Projectile/Draw.hs 34;" f @@ -6113,8 +6113,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 101;" f -trySpinByCID src/Dodge/Projectile/Update.hs 174;" f +tryShellBounce src/Dodge/Projectile/Update.hs 103;" f +trySpinByCID src/Dodge/Projectile/Update.hs 178;" f trySynthBullet src/Dodge/Creature/State.hs 203;" f tryUseParent src/Dodge/Creature/State.hs 196;" f turnTo src/Dodge/Movement/Turn.hs 4;" f @@ -6150,7 +6150,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 35;" f updateAllNodes src/TreeHelp.hs 85;" f updateArc src/Dodge/Tesla.hs 91;" f updateArc src/Dodge/Tesla/Arc.hs 100;" f @@ -6221,7 +6221,7 @@ updatePastWorlds src/Dodge/Update.hs 424;" f updatePosEvent src/Dodge/PosEvent.hs 11;" f updatePosEvents src/Dodge/Update.hs 572;" f updatePreload src/Preload/Update.hs 20;" f -updateProjectile src/Dodge/Projectile/Update.hs 25;" f +updateProjectile src/Dodge/Projectile/Update.hs 27;" f updateProp src/Dodge/Prop/Update.hs 11;" f updatePulse src/Dodge/Creature/Update.hs 22;" f updateRBList src/Dodge/Inventory/RBList.hs 16;" f