This commit is contained in:
2025-08-27 01:06:04 +01:00
parent 7581c86d93
commit 1ef5534bc2
4 changed files with 75 additions and 87 deletions
+15 -20
View File
@@ -68,43 +68,38 @@ toggleEquipmentAt invid cr w = case equipmentDesignation invid w of
DoNotMoveEquipment -> w
PutOnEquipment{_allocNewPos = newp} ->
w
& crpoint . crEquipment . at newp ?~ NInt itid
& toequipment . at newp ?~ NInt itid
& toitems . ix itid . itLocation . ilEquipSite ?~ newp
& onequip itm cr
& effectOnEquip itm cr
MoveEquipment{_allocNewPos = newp, _allocOldPos = oldp} ->
w
& crpoint . crEquipment . at newp ?~ NInt itid
& crpoint . crEquipment . at oldp .~ Nothing
& toequipment . at newp ?~ NInt itid
& toequipment . at oldp .~ Nothing
& toitems . ix itid . itLocation . ilEquipSite ?~ newp
SwapEquipment{_allocNewPos = newp, _allocOldPos = oldp, _allocSwapID = sid} ->
w
& crpoint . crEquipment . at newp ?~ NInt itid
& crpoint . crEquipment . at oldp ?~ sid
& toequipment . at newp ?~ NInt itid
& toequipment . at oldp ?~ sid
& toitems . ix itid . itLocation . ilEquipSite ?~ newp
& toitems . ix (_unNInt sid) . itLocation . ilEquipSite ?~ oldp
ReplaceEquipment{_allocNewPos = newp, _allocRemoveID = rid} ->
w
& crpoint . crEquipment . at newp ?~ NInt itid
& toequipment . at newp ?~ NInt itid
& toitems . ix itid . itLocation . ilEquipSite ?~ newp
& toitems . ix (_unNInt rid) . itLocation . ilEquipSite .~ Nothing
& onremove (itmat' rid) cr
& onequip itm cr
& effectOnRemove (itmat rid) cr
& effectOnEquip itm cr
RemoveEquipment{_allocOldPos = oldp} ->
w
& crpoint . crEquipment . at oldp .~ Nothing
& toequipment . at oldp .~ Nothing
& toitems . ix itid . itLocation . ilEquipSite .~ Nothing
& onremove itm cr
& effectOnRemove itm cr
where
invidtoitid :: NewInt InvInt -> Int
invidtoitid i = cr ^?! crInv . ix i -- _crInv cr IM.! i
toitems = cWorld . lWorld . items
itid = invidtoitid invid
crpoint = cWorld . lWorld . creatures . ix (_crID cr)
itmat i = w ^?! cWorld . lWorld . items . ix (invidtoitid i)
itmat' i = w ^?! cWorld . lWorld . items . ix (_unNInt i)
itm = itmat invid
onequip itm' = effectOnEquip itm'
onremove itm' = effectOnRemove itm'
itid = cr ^?! crInv . ix invid
toequipment = cWorld . lWorld . creatures . ix (_crID cr) . crEquipment
itmat i = w ^?! cWorld . lWorld . items . ix (_unNInt i)
itm = w ^?! cWorld . lWorld . items . ix itid
toggleExamineInv :: World -> World
toggleExamineInv w = case w ^? hud . subInventory of
+6 -12
View File
@@ -1,27 +1,24 @@
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-}
module Dodge.Data.RightButtonOptions where
import Dodge.Data.Item.Location
import NewInt
import Control.Lens
import Data.Aeson
import Data.Aeson.TH
import Dodge.Data.Equipment.Misc
import Dodge.Data.Item.Location
import NewInt
data RightButtonState
= NoRightButtonState
| EquipOptions { _opSel :: Int }
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
| EquipOptions {_opSel :: Int}
data EquipmentAllocation
= DoNotMoveEquipment
| PutOnEquipment
{ _allocNewPos :: EquipSite
}
| PutOnEquipment {_allocNewPos :: EquipSite}
| MoveEquipment
{ _allocNewPos :: EquipSite
, _allocOldPos :: EquipSite
@@ -35,10 +32,7 @@ data EquipmentAllocation
{ _allocNewPos :: EquipSite
, _allocRemoveID :: NewInt ItmInt
}
| RemoveEquipment
{ _allocOldPos :: EquipSite
}
--deriving (Eq, Ord, Show, Read) --Generic, Flat)
| RemoveEquipment {_allocOldPos :: EquipSite}
makeLenses ''RightButtonState
makeLenses ''EquipmentAllocation
+20 -20
View File
@@ -1,21 +1,22 @@
{-# LANGUAGE TupleSections #-}
module Dodge.Inventory.RBList (
updateRBList,
equipmentDesignation,
eqTypeToSites,
) where
import NewInt
--import qualified Data.IntMap.Strict as IM
import Dodge.Data.Equipment.Misc
import Dodge.Data.EquipType
--import Control.Applicative
import Control.Lens
import Data.List (elemIndex, findIndex)
import qualified Data.Map.Strict as M
import Data.Maybe
import Dodge.Base.You
import Dodge.Data.EquipType
import Dodge.Data.World
import NewInt
import qualified SDL
updateRBList :: World -> World
@@ -27,8 +28,9 @@ updateRBList w = case w ^. rbState of
itid <- cr ^? crInv . ix i
itm <- w ^? cWorld . lWorld . items . ix itid
etype <- equipType itm
return $ w & rbState
.~ EquipOptions (chooseEquipPosition itm cr (eqTypeToSites etype))
return $
w & rbState
.~ EquipOptions (chooseEquipPosition itm cr (eqTypeToSites etype))
where
--norightclick = not $ SDL.ButtonRight `M.member` (w ^. input . mouseButtons)
norightclick = null $ w ^. input . mouseButtons . at SDL.ButtonRight
@@ -40,6 +42,7 @@ chooseEquipPosition :: Item -> Creature -> [EquipSite] -> Int
chooseEquipPosition itm cr eps = fromMaybe (chooseFreeSite cr eps) $ do
ep <- itm ^? itLocation . ilEquipSite . _Just
elemIndex ep eps
-- (elemIndex <$> (itm ^? itLocation . ilEquipSite . _Just)) ?? eps
chooseFreeSite :: Creature -> [EquipSite] -> Int
chooseFreeSite cr = fromMaybe 0 . findIndex hasnoequipment
@@ -52,27 +55,24 @@ equipmentDesignation invid w = fromMaybe DoNotMoveEquipment $ do
etype <- w ^? cWorld . lWorld . items . ix itid >>= equipType
let mesite = w ^? cWorld . lWorld . items . ix itid . itLocation . ilEquipSite . _Just
i <- w ^? rbState . opSel
es <- eqTypeToSites etype ^? ix i
new <- eqTypeToSites etype ^? ix i
return $ case mesite of
Just epos | es == epos -> RemoveEquipment{_allocOldPos = epos}
Just epos | isJust (you w ^? crEquipment . ix es) ->
Just old | new == old -> RemoveEquipment{_allocOldPos = old}
Just old
| isJust (you w ^? crEquipment . ix new) ->
SwapEquipment
{ _allocOldPos = epos
, _allocNewPos = es
, _allocSwapID = _crEquipment (you w) M.! es
{ _allocOldPos = old
, _allocNewPos = new
, _allocSwapID = _crEquipment (you w) M.! new
}
Just epos ->
MoveEquipment
{ _allocOldPos = epos
, _allocNewPos = es
}
Just old -> MoveEquipment{_allocOldPos = old, _allocNewPos = new}
Nothing
| isJust (you w ^? crEquipment . ix es) ->
| isJust (you w ^? crEquipment . ix new) ->
ReplaceEquipment
{ _allocNewPos = es
, _allocRemoveID = _crEquipment (you w) M.! es
{ _allocNewPos = new
, _allocRemoveID = _crEquipment (you w) M.! new
}
Nothing -> PutOnEquipment{_allocNewPos = es}
Nothing -> PutOnEquipment{_allocNewPos = new}
eqTypeToSites :: EquipType -> [EquipSite]
eqTypeToSites es = case es of