This commit is contained in:
2024-12-19 23:40:04 +00:00
parent f3cfe8cb5f
commit e1989eaa1e
28 changed files with 285 additions and 300 deletions
+1 -1
View File
@@ -72,7 +72,7 @@ tryPutItemInInv cid flit w = case maybeInvSlot of
, _ilIsRoot = False
, _ilIsSelected = False
, _ilIsAttached = False
, _ilEquipPosition = Nothing
, _ilEquipSite = Nothing
}
---- should select the item on the floor if no inventory space?
+2 -3
View File
@@ -72,9 +72,8 @@ crUpdateInvidLocations mo crid lw invid itm =
, _ilIsRoot = Just invid == mo ^? imRootSelectedItem
, _ilIsSelected = Just invid == mo ^? imSelectedItem
, _ilIsAttached = invid `IS.member` (mo ^. imAttachedItems)
--, _ilEquipPosition = lw ^? creatures . ix crid . crInvEquipped . ix invid
, _ilEquipPosition = lw ^? creatures . ix crid . crInv . ix invid
. itLocation . ilEquipPosition . _Just
, _ilEquipSite = lw ^? creatures . ix crid . crInv . ix invid
. itLocation . ilEquipSite . _Just
}
-- this should be looked at, as it is sometimes used in functions that need not
+25 -27
View File
@@ -1,7 +1,7 @@
module Dodge.Inventory.RBList (
updateRBList,
getEquipmentAllocation,
equipSiteToPositions,
eqSiteToPositions,
) where
import Control.Applicative
@@ -14,32 +14,30 @@ import Dodge.Data.World
import qualified SDL
updateRBList :: World -> World
updateRBList w
| not (SDL.ButtonRight `M.member` (w ^. input . mouseButtons)) =
w & rbOptions .~ NoRightButtonOptions
| otherwise = case w ^. rbOptions of
EquipOptions{} -> w
_ -> fromMaybe (w & rbOptions .~ NoRightButtonOptions) $ do
i <- cr ^? crManipulation . manObject . imSelectedItem
esite <- cr ^? crInv . ix i . itUse . uequipEffect . eeSite
return $
w
& rbOptions
.~ EquipOptions
{ _opSel = chooseEquipmentPosition cr (equipSiteToPositions esite)
}
updateRBList w = case w ^. rbOptions of
_ | norightclick -> w & rbOptions .~ NoRightButtonOptions
EquipOptions{} -> w
_ -> fromMaybe (w & rbOptions .~ NoRightButtonOptions) $ do
i <- cr ^? crManipulation . manObject . imSelectedItem
esite <- cr ^? crInv . ix i . itUse . uequipEffect . eeType
return $
w & rbOptions
.~ EquipOptions
{ _opSel = chooseEquipPosition cr (eqSiteToPositions esite)
}
where
norightclick = not $ SDL.ButtonRight `M.member` (w ^. input . mouseButtons)
cr = you w
-- want to choose the current position if the item is equipped, otherwise try to
-- find a free equipment slot
chooseEquipmentPosition :: Creature -> [EquipPosition] -> Int
chooseEquipmentPosition cr eps = fromMaybe (chooseFreeSite cr eps) $ do
chooseEquipPosition :: Creature -> [EquipSite] -> Int
chooseEquipPosition cr eps = fromMaybe (chooseFreeSite cr eps) $ do
i <- cr ^? crManipulation . manObject . imSelectedItem
ep <- cr ^? crInv . ix i . itLocation . ilEquipPosition . _Just
ep <- cr ^? crInv . ix i . itLocation . ilEquipSite . _Just
elemIndex ep eps
chooseFreeSite :: Creature -> [EquipPosition] -> Int
chooseFreeSite :: Creature -> [EquipSite] -> Int
chooseFreeSite cr = fromMaybe 0 . findIndex hasnoequipment
where
hasnoequipment ep = isNothing $ cr ^? crEquipment . ix ep
@@ -47,11 +45,12 @@ chooseFreeSite cr = fromMaybe 0 . findIndex hasnoequipment
getEquipmentAllocation :: World -> EquipmentAllocation
getEquipmentAllocation w = fromMaybe DoNotMoveEquipment $ do
curpos <- you w ^? crManipulation . manObject . imSelectedItem
esite <- you w ^? crInv . ix curpos . itUse . uequipEffect . eeSite
i <- w ^? rbOptions . opSel
<|> Just (chooseEquipmentPosition (you w) (equipSiteToPositions esite))
es <- equipSiteToPositions esite ^? ix i
return $ case you w ^? crInv . ix curpos . itLocation . ilEquipPosition . _Just of
esite <- you w ^? crInv . ix curpos . itUse . uequipEffect . eeType
i <-
w ^? rbOptions . opSel
<|> Just (chooseEquipPosition (you w) (eqSiteToPositions esite))
es <- eqSiteToPositions esite ^? ix i
return $ case you w ^? crInv . ix curpos . itLocation . ilEquipSite . _Just of
Just epos
| es == epos -> RemoveEquipment{_allocOldPos = epos}
Just epos
@@ -74,11 +73,10 @@ getEquipmentAllocation w = fromMaybe DoNotMoveEquipment $ do
}
Nothing -> PutOnEquipment{_allocNewPos = es}
equipSiteToPositions :: EquipSite -> [EquipPosition]
equipSiteToPositions es = case es of
eqSiteToPositions :: EquipType -> [EquipSite]
eqSiteToPositions es = case es of
GoesOnHead -> [OnHead]
GoesOnChest -> [OnChest]
GoesOnBack -> [OnBack]
GoesOnWrist -> [OnLeftWrist, OnRightWrist]
GoesOnLegs -> [OnLegs]
+1 -1
View File
@@ -34,7 +34,7 @@ invSelectionItem indent lw i ci =
cr = lw ^?! creatures . ix 0
anyhotkey = maybe [] ((' ' :) . hotkeyToString) (lw ^? imHotkeys . ix i)
anyequippos = maybe [] (rightPad 8 ' ' . (' ' :) . eqPosText)
(ci ^? _1 . itLocation . ilEquipPosition . _Just)
(ci ^? _1 . itLocation . ilEquipSite . _Just)
col = itemInvColor ci
pics = itemDisplay cr ci
+1 -1
View File
@@ -65,7 +65,7 @@ swapInvItems f i w = fromMaybe w $ do
. (cWorld . lWorld . imHotkeys %~ IM.safeSwapKeys i k)
cr = you w
--swapSite a b = case cr ^? crInvEquipped . ix a of
swapSite a b = case cr ^? crInv . ix a . itLocation . ilEquipPosition . _Just of
swapSite a b = case cr ^? crInv . ix a . itLocation . ilEquipSite . _Just of
Just epos -> crEquipment . ix epos .~ b
Nothing -> id
--swapSite' a b = case cr ^? crInvHotkeys . ix a of