Fix bugs in drag pickup when releasing mouse outside of inventory list
This commit is contained in:
@@ -4,15 +4,15 @@ module Dodge.Inventory.Location (
|
||||
setInvPosFromSS,
|
||||
) where
|
||||
|
||||
import Dodge.Data.ComposedItem
|
||||
import Dodge.Data.DoubleTree
|
||||
import Data.Foldable
|
||||
import Control.Applicative
|
||||
import Control.Lens
|
||||
import Data.Foldable
|
||||
--import Data.IntMap.Merge.Strict
|
||||
import qualified Data.IntSet as IS
|
||||
import Data.Maybe
|
||||
import Dodge.Base.You
|
||||
import Dodge.Data.ComposedItem
|
||||
import Dodge.Data.DoubleTree
|
||||
import Dodge.Data.Item.Use.Consumption.LoadAction
|
||||
import Dodge.Data.World
|
||||
import Dodge.Item.Grammar
|
||||
@@ -20,8 +20,10 @@ import qualified IntMapHelp as IM
|
||||
import NewInt
|
||||
|
||||
-- assumes all item locations inside the items are correct
|
||||
tryGetRootAttachedFromInvID :: NewInt InvInt
|
||||
-> NewIntMap InvInt Item -> Maybe (Int, IS.IntSet)
|
||||
tryGetRootAttachedFromInvID ::
|
||||
NewInt InvInt ->
|
||||
NewIntMap InvInt Item ->
|
||||
Maybe (Int, IS.IntSet)
|
||||
tryGetRootAttachedFromInvID (NInt invid) im = do
|
||||
let imroots = invRootMap im
|
||||
theroot = fromMaybe invid $ imroots ^? ix invid . _1 . _Just
|
||||
@@ -59,11 +61,17 @@ crSetRoots cid w = fromMaybe w $ do
|
||||
where
|
||||
g w' i = w' & items . ix i . itLocation . ilIsRoot .~ False
|
||||
f :: LWorld -> DTree OItem -> LWorld
|
||||
f w' x = w'
|
||||
& items . ix (x ^. dtValue . _1 . itID . unNInt) . itLocation . ilIsRoot .~ True
|
||||
f w' x =
|
||||
w'
|
||||
& items . ix (x ^. dtValue . _1 . itID . unNInt) . itLocation . ilIsRoot .~ True
|
||||
|
||||
crUpdateInvidLocations :: ManipulatedObject -> Int -> LWorld -> Int
|
||||
-> Item -> LWorld
|
||||
crUpdateInvidLocations ::
|
||||
ManipulatedObject ->
|
||||
Int ->
|
||||
LWorld ->
|
||||
Int ->
|
||||
Item ->
|
||||
LWorld
|
||||
crUpdateInvidLocations mo crid lw invid itm =
|
||||
lw
|
||||
& creatures . ix crid . crInv . ix (NInt invid) .~ itid -- . itLocation .~ newloc
|
||||
@@ -93,8 +101,12 @@ setInvPosFromSS w = w
|
||||
case i of
|
||||
(-1) -> Just SortInventory
|
||||
0 -> do
|
||||
(rootid, aset) <- tryGetRootAttachedFromInvID (NInt j) (fmap (\k -> w ^?! cWorld . lWorld . items . ix k )
|
||||
$ you w ^. crInv)
|
||||
(rootid, aset) <-
|
||||
tryGetRootAttachedFromInvID
|
||||
(NInt j)
|
||||
( fmap (\k -> w ^?! cWorld . lWorld . items . ix k) $
|
||||
you w ^. crInv
|
||||
)
|
||||
return
|
||||
SelectedItem
|
||||
{ _imSelectedItem = NInt j
|
||||
|
||||
Reference in New Issue
Block a user