From 9b3518e4eb29013a3c5b3f0c10363bcb1533baf0 Mon Sep 17 00:00:00 2001 From: justin Date: Tue, 5 Nov 2024 18:25:30 +0000 Subject: [PATCH] Correctly update root status of item in _ilIsRoot --- data/charMaps/cMap16x32.Custom.png | Bin 12325 -> 12339 bytes ghcidOutput | 2 +- src/Dodge/Base/You.hs | 2 +- src/Dodge/Creature/Impulse/UseItem.hs | 2 +- src/Dodge/Creature/State.hs | 2 +- src/Dodge/Creature/Statistics.hs | 2 +- src/Dodge/Creature/Test.hs | 6 ++---- src/Dodge/Creature/YourControl.hs | 4 ++-- .../Data/Item/Use/Consumption/LoadAction.hs | 2 +- src/Dodge/HeldUse.hs | 2 +- src/Dodge/Inventory.hs | 11 +++++++++- src/Dodge/Inventory/Location.hs | 19 ++++++++++++++---- src/Dodge/Item/Draw.hs | 1 + src/Dodge/Item/Grammar.hs | 2 +- src/Dodge/Item/Location.hs | 2 +- src/Dodge/TestString.hs | 6 +----- 16 files changed, 40 insertions(+), 25 deletions(-) diff --git a/data/charMaps/cMap16x32.Custom.png b/data/charMaps/cMap16x32.Custom.png index a73e35235d24b38c09d0e6bfbbfbaa5464e2056c..83c3ce8c5820b0e05bc2b27d6daeca3ed0eeaec3 100644 GIT binary patch delta 4659 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 z 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 G@BafzR>K$o diff --git a/ghcidOutput b/ghcidOutput index d6334495d..771e6e29a 100644 --- a/ghcidOutput +++ b/ghcidOutput @@ -1 +1 @@ -All good (594 modules, at 20:36:32) +All good (594 modules, at 18:20:01) diff --git a/src/Dodge/Base/You.hs b/src/Dodge/Base/You.hs index 32c13c92a..dd7eab068 100644 --- a/src/Dodge/Base/You.hs +++ b/src/Dodge/Base/You.hs @@ -25,7 +25,7 @@ yourSelectedItem w = do yourRootItem :: World -> Maybe Item yourRootItem w = do - i <- you w ^? crManipulation . manObject . imRootItem + i <- you w ^? crManipulation . manObject . imRootSelectedItem _crInv (you w) IM.!? i --yourScrollAttachment :: World -> Maybe (Int,ScrollAttachParams) diff --git a/src/Dodge/Creature/Impulse/UseItem.hs b/src/Dodge/Creature/Impulse/UseItem.hs index d7f7cfa90..71d6cfc14 100644 --- a/src/Dodge/Creature/Impulse/UseItem.hs +++ b/src/Dodge/Creature/Impulse/UseItem.hs @@ -25,7 +25,7 @@ import qualified IntMapHelp as IM useRootItem :: Int -> World -> World useRootItem crid w = fromMaybe w $ do cr <- w ^? cWorld . lWorld . creatures . ix crid - itRef <- cr ^? crManipulation . manObject . imRootItem + itRef <- cr ^? crManipulation . manObject . imRootSelectedItem it <- invRootTrees (_crInv cr) ^? ix itRef return $ itemUseEffect' cr it w diff --git a/src/Dodge/Creature/State.hs b/src/Dodge/Creature/State.hs index 6ead16055..5aa6f4a6e 100644 --- a/src/Dodge/Creature/State.hs +++ b/src/Dodge/Creature/State.hs @@ -166,7 +166,7 @@ invSideEff cr = alaf Endo foldMap f (_crInv cr) . updateHeldRootItem cr updateHeldRootItem :: Creature -> World -> World updateHeldRootItem cr = fromMaybe id $ do - invid <- cr ^? crManipulation . manObject . imRootItem + invid <- cr ^? crManipulation . manObject . imRootSelectedItem itmtree <- invRootTrees (_crInv cr) ^? ix invid return $ updateAttachedItems itmtree cr diff --git a/src/Dodge/Creature/Statistics.hs b/src/Dodge/Creature/Statistics.hs index e13532639..270264031 100644 --- a/src/Dodge/Creature/Statistics.hs +++ b/src/Dodge/Creature/Statistics.hs @@ -38,6 +38,6 @@ strFromHeldItem :: Creature -> Int strFromHeldItem cr --x--- | _posture (_crStance cr) == Aiming || crIsReloading cr = negate $ fromMaybe 0 $ do | _posture (_crStance cr) == Aiming = negate $ fromMaybe 0 $ do - i <- cr ^? crManipulation . manObject . imRootItem + i <- cr ^? crManipulation . manObject . imRootSelectedItem cr ^? crInv . ix i . itUse . heldAim . aimWeight | otherwise = 0 diff --git a/src/Dodge/Creature/Test.hs b/src/Dodge/Creature/Test.hs index fce2210c0..c1bca9acc 100644 --- a/src/Dodge/Creature/Test.hs +++ b/src/Dodge/Creature/Test.hs @@ -86,12 +86,10 @@ crAwayFromPost cr = case find sentinelGoal . _apGoal $ _crActionPlan cr of --crCanShoot cr = crIsAiming cr && crWeaponReady cr crInAimStance :: AimStance -> Creature -> Bool -crInAimStance as cr = - crIsAiming cr - && mitstance == Just as +crInAimStance as cr = crIsAiming cr && mitstance == Just as where mitstance = do - i <- cr ^? crManipulation . manObject . imRootItem + i <- cr ^? crManipulation . manObject . imRootSelectedItem cr ^? crInv . ix i . itUse . heldAim . aimStance oneH :: Creature -> Bool diff --git a/src/Dodge/Creature/YourControl.hs b/src/Dodge/Creature/YourControl.hs index 737e2564b..0c9b6bb4f 100644 --- a/src/Dodge/Creature/YourControl.hs +++ b/src/Dodge/Creature/YourControl.hs @@ -114,7 +114,7 @@ wasdAim inp cam cr wasdTwist :: Creature -> Creature wasdTwist cr | _posture (_crStance cr) == Aiming = fromMaybe cr $ do - itRef <- cr ^? crManipulation . manObject . imRootItem + itRef <- cr ^? crManipulation . manObject . imRootSelectedItem astance <- cr ^? crInv . ix itRef . itUse . heldAim . aimStance case (astance, cr ^. crTwist) of (TwoHandUnder, 0) -> @@ -144,7 +144,7 @@ aimTurn :: Float -> Creature -> Creature aimTurn a cr = creatureTurnTowardDir a (x * 0.2) cr where x = fromMaybe 1 $ do - itRef <- cr ^? crManipulation . manObject . imRootItem + itRef <- cr ^? crManipulation . manObject . imRootSelectedItem cr ^? crInv . ix itRef . itUse . heldAim . aimTurnSpeed {- | Set posture according to mouse presses. diff --git a/src/Dodge/Data/Item/Use/Consumption/LoadAction.hs b/src/Dodge/Data/Item/Use/Consumption/LoadAction.hs index ada915d63..b93698696 100644 --- a/src/Dodge/Data/Item/Use/Consumption/LoadAction.hs +++ b/src/Dodge/Data/Item/Use/Consumption/LoadAction.hs @@ -22,7 +22,7 @@ data ManipulatedObject = SortInventory | SelectedItem { _imSelectedItem :: Int - , _imRootItem :: Int + , _imRootSelectedItem :: Int , _imAttachedItems :: IS.IntSet } | SelNothing diff --git a/src/Dodge/HeldUse.hs b/src/Dodge/HeldUse.hs index e22cbdba4..f527e2ff5 100644 --- a/src/Dodge/HeldUse.hs +++ b/src/Dodge/HeldUse.hs @@ -477,7 +477,7 @@ shootTeslaArc itm cr mz w = & cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix itRef . itParams .~ ip where -- use items item location instead - itRef = cr ^?! crManipulation . manObject . imRootItem -- unsafe!! TODO change + itRef = cr ^?! crManipulation . manObject . imRootSelectedItem -- unsafe!! TODO change (w', ip) = makeTeslaArc (_itParams itm) pos dir w pos = _crPos cr + rotateV (_crDir cr) (_mzPos mz + aimingWeaponZeroPos cr itm) dir = _crDir cr + _mzRot mz diff --git a/src/Dodge/Inventory.hs b/src/Dodge/Inventory.hs index 8b7e497e2..6243404c8 100644 --- a/src/Dodge/Inventory.hs +++ b/src/Dodge/Inventory.hs @@ -17,6 +17,7 @@ module Dodge.Inventory ( isFilteringInv, ) where +import Dodge.SoundLogic import Control.Applicative import Data.Maybe import Dodge.Base @@ -188,7 +189,8 @@ swapInvItems f i w = fromMaybe w $ do Just (0, j) | j == i -> hud . hudElement . diSelection . _Just . _2 .~ k _ -> id return $ - w & cWorld . lWorld . creatures . ix 0 %~ updatecreature k + w & checkdisconnect k + & cWorld . lWorld . creatures . ix 0 %~ updatecreature k & updateselection & worldEventFlags . at InventoryChange ?~ () & cWorld . lWorld %~ crUpdateItemLocations 0 @@ -196,6 +198,13 @@ swapInvItems f i w = fromMaybe w $ do & cWorld . lWorld %~ crUpdateItemLocations 0 -- the double application is inefficient, but necessary without further changes -- a rethink is maybe in order where + cpos = fromMaybe 0 $ w ^? cWorld . lWorld . creatures . ix 0 . crPos + checkdisconnect k + | a || b = soundStart InventorySound cpos disconnectItemS Nothing + | otherwise = id + where + a = maybe False not $ w ^? cWorld . lWorld . creatures . ix 0 . crInv . ix i . itLocation . ilIsRoot + b = maybe False not $ w ^? cWorld . lWorld . creatures . ix 0 . crInv . ix k . itLocation . ilIsRoot updatecreature k = (crInv %~ IM.safeSwapKeys i k) . (crManipulation . manObject . imSelectedItem .~ k) diff --git a/src/Dodge/Inventory/Location.hs b/src/Dodge/Inventory/Location.hs index 986ea08c7..14d035bc5 100644 --- a/src/Dodge/Inventory/Location.hs +++ b/src/Dodge/Inventory/Location.hs @@ -13,6 +13,7 @@ import Dodge.Data.Item.Use.Consumption.LoadAction import Dodge.Data.World import Dodge.Item.Grammar import qualified IntMapHelp as IM +import Data.IntMap.Merge.Strict import NewInt -- assumes all item locations inside the items are correct @@ -35,14 +36,24 @@ updateRootItemID :: Creature -> Creature updateRootItemID cr = fromMaybe cr $ do i <- cr ^? crManipulation . manObject . imSelectedItem j <- tryGetRootItemInvID i cr - return $ cr & crManipulation . manObject . imRootItem .~ j + return $ cr & crManipulation . manObject . imRootSelectedItem .~ j -- the following assumes that the crManipulation is correct crUpdateItemLocations :: Int -> LWorld -> LWorld crUpdateItemLocations crid lw = fromMaybe lw $ do mo <- lw ^? creatures . ix crid . crManipulation . manObject crinv <- lw ^? creatures . ix crid . crInv - return $ IM.foldlWithKey' (crUpdateInvidLocations mo crid) lw crinv + return $ crSetRoots crid $ IM.foldlWithKey' (crUpdateInvidLocations mo crid) lw crinv + +crSetRoots :: Int -> LWorld -> LWorld +crSetRoots cid w = fromMaybe w $ do + inv <- w ^? creatures . ix cid . crInv +-- invRootTrees inv + return $ w & creatures . ix cid . crInv %~ merge dropMissing preserveMissing + (zipWithMatched f) + (invRootTrees inv) + where + f _ _ = itLocation . ilIsRoot .~ True crUpdateInvidLocations :: ManipulatedObject -> Int -> LWorld -> Int -> Item -> LWorld crUpdateInvidLocations mo crid lw invid itm = @@ -55,7 +66,7 @@ crUpdateInvidLocations mo crid lw invid itm = InInv { _ilCrID = crid , _ilInvID = invid - , _ilIsRoot = Just invid == mo ^? imRootItem + , _ilIsRoot = Just invid == mo ^? imRootSelectedItem , _ilIsSelected = Just invid == mo ^? imSelectedItem , _ilIsAttached = invid `IS.member` (mo ^. imAttachedItems) } @@ -77,7 +88,7 @@ setInvPosFromSS w = return SelectedItem { _imSelectedItem = j - , _imRootItem = rootid + , _imRootSelectedItem = rootid , _imAttachedItems = aset } 1 -> Just SelNothing diff --git a/src/Dodge/Item/Draw.hs b/src/Dodge/Item/Draw.hs index 00e01f484..52f29e0a0 100644 --- a/src/Dodge/Item/Draw.hs +++ b/src/Dodge/Item/Draw.hs @@ -17,6 +17,7 @@ import ShapePicture itemEquipPict :: Creature -> LabelDoubleTree ItemLink ComposedItem -> SPic itemEquipPict cr itmtree = case itm ^. itUse of UseHeld{} | itm ^? itLocation . ilIsRoot == Just True + && itm ^? itLocation . ilIsSelected == Just True -> overPosSP (heldItemOffset itm cr) (itemTreeSPic itmtree) ituse -> fromMaybe mempty $ do attachpos <- ituse ^? uequipEffect . eeAttachPos diff --git a/src/Dodge/Item/Grammar.hs b/src/Dodge/Item/Grammar.hs index a56cbf55b..bba54569e 100644 --- a/src/Dodge/Item/Grammar.hs +++ b/src/Dodge/Item/Grammar.hs @@ -206,7 +206,7 @@ invTrees' = IM.unions . map (ldtToIM getindex . fmap (^. _1)) . map (fmap (\(x, fromMaybe (error "in invTrees try to get non-inventory item tree") $ i ^? itLocation . ilInvID --- returns an intmap with trees for root items, indexed by inventory position +-- returns an intmap with trees for (only!) root items, indexed by inventory position invRootTrees :: IM.IntMap Item -> IM.IntMap (LabelDoubleTree ItemLink ComposedItem) invRootTrees = IM.fromDistinctAscList . reverse . map (getid . fmap (\(x, y, _) -> CItem x y)) . invLDT where diff --git a/src/Dodge/Item/Location.hs b/src/Dodge/Item/Location.hs index be1684d65..8f66a0509 100644 --- a/src/Dodge/Item/Location.hs +++ b/src/Dodge/Item/Location.hs @@ -41,7 +41,7 @@ pointerYourSelectedItem f w = fromMaybe (pure w) $ do pointerYourRootItem :: Applicative a => (Item -> a Item) -> World -> a World pointerYourRootItem f w = fromMaybe (pure w) $ do - itinvid <- w ^? cWorld . lWorld . creatures . ix 0 . crManipulation . manObject . imRootItem + itinvid <- w ^? cWorld . lWorld . creatures . ix 0 . crManipulation . manObject . imRootSelectedItem Just $ pointerToItemLocation (InInv 0 itinvid True True True) f w pointerToItem :: diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index a4cef103e..32783c137 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -21,12 +21,8 @@ import Dodge.Data.Universe import qualified IntMapHelp as IM testStringInit :: Universe -> [String] -testStringInit u = [show $ u ^? uvWorld . hud . hudElement . diSelection . _Just - , show $ u ^? uvWorld . cWorld . lWorld . creatures . ix 0 . crManipulation . manObject - , show $ u ^? uvWorld . hud . hudElement . diMouseOver . _Just - , show $ fmap fst $ IM.lookupMin =<< (u ^? uvWorld . hud . hudElement . diSections . ix 0 . ssItems) +testStringInit u = fmap show $ u ^.. uvWorld . cWorld . lWorld . creatures . ix 0 . crInv . each . itLocation . ilIsRoot -- , show . fmap (fmap _siPictures) $ u ^? uvWorld . hud . hudElement . diSections . ix (-1) . ssItems - ] -- <> [[toEnum (i+j * 32) | i <- [0..31]] | j <- [0..7]] -- <> map show (IM.elems (L.postscan (L.premap _siHeight L.sum) -- $ fromMaybe mempty $ u ^? uvWorld . hud . hudElement . diSections . sssSections . ix 0 . ssItems)