Allow for selection of equipment position
This commit is contained in:
@@ -22,8 +22,10 @@ itemEffect :: Creature -> Item -> World -> World
|
|||||||
itemEffect cr it w = case it ^? itUse of
|
itemEffect cr it w = case it ^? itUse of
|
||||||
Just RightUse {_rUse = eff,_useMods = usemods}
|
Just RightUse {_rUse = eff,_useMods = usemods}
|
||||||
-> hammerTest $ foldr ($) eff usemods it cr
|
-> hammerTest $ foldr ($) eff usemods it cr
|
||||||
Just LeftUse {} -> setuhamdown $ lhammer (setEquipLeftItem)
|
Just LeftUse {} -> setuhamdown $ lhammer $ (toggleEquipmentAt (_rbOptions w) (_crInvSel cr)
|
||||||
Just EquipUse{} -> setuhamdown $ lhammer $ toggleEquipmentAt (_crInvSel cr) it
|
. activateEquipmentAt (_rbOptions w))
|
||||||
|
Just EquipUse{} -> setuhamdown $ lhammer $ (toggleEquipmentAt (_rbOptions w) (_crInvSel cr)
|
||||||
|
. activateEquipmentAt (_rbOptions w))
|
||||||
-- ConsumeUse will cause problems if the item is not selected
|
-- ConsumeUse will cause problems if the item is not selected
|
||||||
Just (ConsumeUse eff) -> setuhamdown $ hammerTest $ eff it cr . rmInvItem (_crID cr) (_crInvSel cr)
|
Just (ConsumeUse eff) -> setuhamdown $ hammerTest $ eff it cr . rmInvItem (_crID cr) (_crInvSel cr)
|
||||||
Just NoUse -> setuhamdown w
|
Just NoUse -> setuhamdown w
|
||||||
@@ -35,24 +37,41 @@ itemEffect cr it w = case it ^? itUse of
|
|||||||
lhammer f' = w & case _crHammerPosition cr of
|
lhammer f' = w & case _crHammerPosition cr of
|
||||||
HammerUp -> creatures . ix (_crID cr) %~ f'
|
HammerUp -> creatures . ix (_crID cr) %~ f'
|
||||||
_ -> id
|
_ -> id
|
||||||
setEquipLeftItem cr' = case _crLeftInvSel cr' of
|
|
||||||
Just i | i == _crInvSel cr' -> cr' & crLeftInvSel .~ Nothing
|
|
||||||
& crInvEquipped . at i .~ Nothing
|
|
||||||
-- if the following causes an exception we have reached a state that
|
|
||||||
-- should not be possible
|
|
||||||
& crEquipment . at (_crInvEquipped cr' IM.! i) .~ Nothing
|
|
||||||
-- Just i -> cr' & crLeftInvSel ?~ _crInvSel cr'
|
|
||||||
-- should left use equipment be removed if replaced by left use
|
|
||||||
-- equipment that uses a different site?
|
|
||||||
_ -> cr' & crLeftInvSel ?~ _crInvSel cr'
|
|
||||||
& equipUsingSiteCheck (_crInvSel cr') it
|
|
||||||
setuhamdown = creatures . ix (_crID cr) . crHammerPosition .~ HammerDown
|
setuhamdown = creatures . ix (_crID cr) . crHammerPosition .~ HammerDown
|
||||||
|
|
||||||
toggleEquipmentAt :: Int -> Item -> Creature -> Creature
|
activateEquipmentAt :: RightButtonOptions -> Creature -> Creature
|
||||||
toggleEquipmentAt invid itm cr = case cr ^? crInvEquipped . ix invid of
|
activateEquipmentAt rbo = case (rbo ^? opActivateEquipment . activateEquipment, rbo ^? opActivateEquipment . deactivateEquipment) of
|
||||||
Just epos -> cr & crInvEquipped . at invid .~ Nothing
|
(Just i,_) -> crLeftInvSel ?~ i
|
||||||
& crEquipment . at epos .~ Nothing
|
(_,Just _) -> crLeftInvSel .~ Nothing
|
||||||
Nothing -> equipUsingSite invid itm cr
|
_ -> id
|
||||||
|
|
||||||
|
toggleEquipmentAt :: RightButtonOptions -> Int -> Creature -> Creature
|
||||||
|
toggleEquipmentAt rbops invid cr = case rbops ^? opAllocateEquipment of
|
||||||
|
Just DoNotMoveEquipment -> cr
|
||||||
|
Just PutOnEquipment {_allocNewPos = newp}
|
||||||
|
-> cr & crEquipment . at newp ?~ invid
|
||||||
|
& crInvEquipped . at invid ?~ newp
|
||||||
|
Just MoveEquipment {_allocNewPos=newp,_allocOldPos = oldp }
|
||||||
|
-> cr & crEquipment . at newp ?~ invid
|
||||||
|
& crEquipment . at oldp .~ Nothing
|
||||||
|
& crInvEquipped . at invid ?~ newp
|
||||||
|
Just SwapEquipment {_allocNewPos=newp, _allocOldPos = oldp, _allocSwapID = sid }
|
||||||
|
-> cr & crEquipment . at newp ?~ invid
|
||||||
|
& crEquipment . at oldp ?~ sid
|
||||||
|
& crInvEquipped . at invid ?~ newp
|
||||||
|
& crInvEquipped . at sid ?~ oldp
|
||||||
|
Just ReplaceEquipment {_allocNewPos = newp, _allocRemoveID = rid }
|
||||||
|
-> cr & crEquipment . at newp ?~ invid
|
||||||
|
& crInvEquipped . at invid ?~ newp
|
||||||
|
& crInvEquipped . at rid .~ Nothing
|
||||||
|
Just RemoveEquipment {_allocOldPos = oldp }
|
||||||
|
-> cr & crEquipment . at oldp .~ Nothing
|
||||||
|
& crInvEquipped . at invid .~ Nothing
|
||||||
|
Nothing -> error "tried to toggle equipment whilst not prepared"
|
||||||
|
-- case cr ^? crInvEquipped . ix invid of
|
||||||
|
-- Just epos -> cr & crInvEquipped . at invid .~ Nothing
|
||||||
|
-- & crEquipment . at epos .~ Nothing
|
||||||
|
-- Nothing -> equipUsingSite invid itm cr
|
||||||
|
|
||||||
-- | First check if the item is already equiped, then do nothing
|
-- | First check if the item is already equiped, then do nothing
|
||||||
equipUsingSiteCheck :: Int -> Item -> Creature -> Creature
|
equipUsingSiteCheck :: Int -> Item -> Creature -> Creature
|
||||||
|
|||||||
+43
-1
@@ -121,6 +121,7 @@ data World = World
|
|||||||
, _lightSources :: IM.IntMap LightSource
|
, _lightSources :: IM.IntMap LightSource
|
||||||
, _tempLightSources :: [TempLightSource]
|
, _tempLightSources :: [TempLightSource]
|
||||||
, _closeObjects :: [Either FloorItem Button]
|
, _closeObjects :: [Either FloorItem Button]
|
||||||
|
, _rbOptions :: RightButtonOptions
|
||||||
, _seenLocations :: IM.IntMap (World -> Point2,String)
|
, _seenLocations :: IM.IntMap (World -> Point2,String)
|
||||||
, _selLocation :: Int
|
, _selLocation :: Int
|
||||||
, _sideEffects :: Universe -> IO Universe
|
, _sideEffects :: Universe -> IO Universe
|
||||||
@@ -139,6 +140,44 @@ data HUDElement = DisplayInventory {_subInventory :: SubInventory}
|
|||||||
| DisplayCarte
|
| DisplayCarte
|
||||||
-- deriving (Eq,Ord,Show)
|
-- deriving (Eq,Ord,Show)
|
||||||
|
|
||||||
|
data RightButtonOptions
|
||||||
|
= NoRightButtonOptions
|
||||||
|
| EquipOptions
|
||||||
|
{_opEquip :: [EquipPosition]
|
||||||
|
,_opSel :: Int
|
||||||
|
,_opCurInvPos :: Int
|
||||||
|
,_opAllocateEquipment :: AllocateEquipment
|
||||||
|
,_opActivateEquipment :: ActivateEquipment
|
||||||
|
}
|
||||||
|
|
||||||
|
data ActivateEquipment
|
||||||
|
= ActivateEquipment {_activateEquipment :: Int }
|
||||||
|
| DeactivateEquipment {_deactivateEquipment :: Int}
|
||||||
|
| ActivateDeactivateEquipment {_activateEquipment :: Int ,_deactivateEquipment :: Int}
|
||||||
|
| NoChangeActivateEquipment
|
||||||
|
|
||||||
|
data AllocateEquipment
|
||||||
|
= DoNotMoveEquipment
|
||||||
|
| PutOnEquipment
|
||||||
|
{ _allocNewPos :: EquipPosition
|
||||||
|
}
|
||||||
|
| MoveEquipment
|
||||||
|
{ _allocNewPos :: EquipPosition
|
||||||
|
, _allocOldPos :: EquipPosition
|
||||||
|
}
|
||||||
|
| SwapEquipment
|
||||||
|
{ _allocNewPos :: EquipPosition
|
||||||
|
, _allocOldPos :: EquipPosition
|
||||||
|
, _allocSwapID :: Int
|
||||||
|
}
|
||||||
|
| ReplaceEquipment
|
||||||
|
{ _allocNewPos :: EquipPosition
|
||||||
|
, _allocRemoveID :: Int
|
||||||
|
}
|
||||||
|
| RemoveEquipment
|
||||||
|
{ _allocOldPos :: EquipPosition
|
||||||
|
}
|
||||||
|
|
||||||
data SubInventory
|
data SubInventory
|
||||||
= NoSubInventory
|
= NoSubInventory
|
||||||
| TweakInventory
|
| TweakInventory
|
||||||
@@ -372,6 +411,7 @@ data ItemUse
|
|||||||
, _useMods :: [(Item -> Creature -> World -> World) -> Item -> Creature -> World -> World]
|
, _useMods :: [(Item -> Creature -> World -> World) -> Item -> Creature -> World -> World]
|
||||||
, _useHammer :: HammerType
|
, _useHammer :: HammerType
|
||||||
, _useAim :: AimParams
|
, _useAim :: AimParams
|
||||||
|
, _heldScroll :: Float -> Creature -> Item -> Item
|
||||||
}
|
}
|
||||||
| LeftUse
|
| LeftUse
|
||||||
{ _lUse :: Item -> Creature -> World -> World
|
{ _lUse :: Item -> Creature -> World -> World
|
||||||
@@ -431,7 +471,6 @@ data Item = Item
|
|||||||
, _itConsumption :: ItemConsumption
|
, _itConsumption :: ItemConsumption
|
||||||
, _itUse :: ItemUse
|
, _itUse :: ItemUse
|
||||||
, _itEquipPict :: Creature -> Item -> SPic
|
, _itEquipPict :: Creature -> Item -> SPic
|
||||||
, _itScroll :: Float -> Creature -> Item -> Item
|
|
||||||
, _itType :: CombineType
|
, _itType :: CombineType
|
||||||
, _itAttachment :: ItAttachment
|
, _itAttachment :: ItAttachment
|
||||||
, _itID :: Maybe Int
|
, _itID :: Maybe Int
|
||||||
@@ -1318,3 +1357,6 @@ makeLenses ''BeamType
|
|||||||
makeLenses ''WorldBeams
|
makeLenses ''WorldBeams
|
||||||
makeLenses ''ArcStep
|
makeLenses ''ArcStep
|
||||||
makeLenses ''CreatureStatistics
|
makeLenses ''CreatureStatistics
|
||||||
|
makeLenses ''RightButtonOptions
|
||||||
|
makeLenses ''AllocateEquipment
|
||||||
|
makeLenses ''ActivateEquipment
|
||||||
|
|||||||
@@ -164,7 +164,6 @@ defaultEquipment = Item
|
|||||||
,_eqOnRemove = \_ _ -> id
|
,_eqOnRemove = \_ _ -> id
|
||||||
,_eqSite = GoesOnSpecial
|
,_eqSite = GoesOnSpecial
|
||||||
}
|
}
|
||||||
, _itScroll = \ _ _ -> id
|
|
||||||
, _itAttachment = NoItAttachment
|
, _itAttachment = NoItAttachment
|
||||||
, _itParams = NoParams
|
, _itParams = NoParams
|
||||||
, _itTweaks = NoTweaks
|
, _itTweaks = NoTweaks
|
||||||
@@ -190,7 +189,6 @@ defaultConsumable = Item
|
|||||||
, _itInvColor = blue
|
, _itInvColor = blue
|
||||||
, _itInvDisplay = \it -> [_itName it ++ " x" ++ show (_itAmount $ _itConsumption it)]
|
, _itInvDisplay = \it -> [_itName it ++ " x" ++ show (_itAmount $ _itConsumption it)]
|
||||||
, _itEffect = NoItEffect
|
, _itEffect = NoItEffect
|
||||||
, _itScroll = \_ _ -> id
|
|
||||||
, _itAttachment = NoItAttachment
|
, _itAttachment = NoItAttachment
|
||||||
, _itType = NoCombineType
|
, _itType = NoCombineType
|
||||||
, _itParams = NoParams
|
, _itParams = NoParams
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ ruseRate i f ht usemods = RightUse
|
|||||||
, _useMods = usemods
|
, _useMods = usemods
|
||||||
, _useHammer = ht
|
, _useHammer = ht
|
||||||
, _useAim = defaultAimParams
|
, _useAim = defaultAimParams
|
||||||
|
, _heldScroll = \_ _ -> id
|
||||||
}
|
}
|
||||||
|
|
||||||
ruseInstant
|
ruseInstant
|
||||||
@@ -50,6 +51,7 @@ ruseInstant f ht usemods = RightUse
|
|||||||
, _useMods = usemods
|
, _useMods = usemods
|
||||||
, _useHammer = ht
|
, _useHammer = ht
|
||||||
, _useAim = defaultAimParams
|
, _useAim = defaultAimParams
|
||||||
|
, _heldScroll = \_ _ -> id
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultrUse :: ItemUse
|
defaultrUse :: ItemUse
|
||||||
@@ -59,6 +61,7 @@ defaultrUse = RightUse
|
|||||||
, _useMods = []
|
, _useMods = []
|
||||||
, _useHammer = HasHammer HammerUp
|
, _useHammer = HasHammer HammerUp
|
||||||
, _useAim = defaultAimParams
|
, _useAim = defaultAimParams
|
||||||
|
, _heldScroll = \_ _ -> id
|
||||||
}
|
}
|
||||||
defaultlUse :: ItemUse
|
defaultlUse :: ItemUse
|
||||||
defaultlUse = LeftUse
|
defaultlUse = LeftUse
|
||||||
@@ -94,7 +97,6 @@ defaultGun = Item
|
|||||||
, _itUse = defaultrUse
|
, _itUse = defaultrUse
|
||||||
, _itDimension = defItDimCol white
|
, _itDimension = defItDimCol white
|
||||||
, _itEquipPict = pictureWeaponOnAim
|
, _itEquipPict = pictureWeaponOnAim
|
||||||
, _itScroll = \_ _ -> id
|
|
||||||
, _itAttachment = NoItAttachment
|
, _itAttachment = NoItAttachment
|
||||||
, _itID = Nothing
|
, _itID = Nothing
|
||||||
, _itInvPos = Nothing
|
, _itInvPos = Nothing
|
||||||
@@ -125,7 +127,6 @@ defaultCraftable = Item
|
|||||||
, _itConsumption = NoConsumption
|
, _itConsumption = NoConsumption
|
||||||
, _itUse = NoUse
|
, _itUse = NoUse
|
||||||
, _itEquipPict = pictureWeaponOnAim
|
, _itEquipPict = pictureWeaponOnAim
|
||||||
, _itScroll = \_ _ -> id
|
|
||||||
, _itAttachment = NoItAttachment
|
, _itAttachment = NoItAttachment
|
||||||
, _itID = Nothing
|
, _itID = Nothing
|
||||||
, _itInvPos = Nothing
|
, _itInvPos = Nothing
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ defaultWorld = World
|
|||||||
, _lightSources = IM.empty
|
, _lightSources = IM.empty
|
||||||
, _tempLightSources = [youLight]
|
, _tempLightSources = [youLight]
|
||||||
, _closeObjects = []
|
, _closeObjects = []
|
||||||
|
, _rbOptions = NoRightButtonOptions
|
||||||
, _seenLocations = IM.fromList
|
, _seenLocations = IM.fromList
|
||||||
[(0, (_crPos . you, "CURRENT POSITION"))
|
[(0, (_crPos . you, "CURRENT POSITION"))
|
||||||
,(1, (const (V2 0 0) , "START POSITION"))
|
,(1, (const (V2 0 0) , "START POSITION"))
|
||||||
|
|||||||
+10
-3
@@ -126,9 +126,10 @@ wheelEvent y w = case _hudElement $ _hud w of
|
|||||||
-- functions that modify the inventory should be centralised so that
|
-- functions that modify the inventory should be centralised so that
|
||||||
-- this lock can be sensibly applied, perhaps
|
-- this lock can be sensibly applied, perhaps
|
||||||
| _crInvLock (_creatures w IM.! _yourID w) -> w
|
| _crInvLock (_creatures w IM.! _yourID w) -> w
|
||||||
| rbDown -> case yourItem w ^? _Just . itScroll of
|
| rbDown -> case (yourItem w ^? _Just . itUse . heldScroll,_rbOptions w) of
|
||||||
Nothing -> closeObjScrollDir y w
|
(_,EquipOptions{}) -> scrollRBOption y w
|
||||||
Just f -> w & creatures . ix 0 . crInv . ix (_crInvSel $ you w) %~ f y (you w)
|
(Nothing,_) -> closeObjScrollDir y w
|
||||||
|
(Just f,_) -> w & creatures . ix 0 . crInv . ix (_crInvSel $ you w) %~ f y (you w)
|
||||||
| lbDown -> w & cameraZoom +~ y
|
| lbDown -> w & cameraZoom +~ y
|
||||||
| invKeyDown -> stopSoundFrom (CrReloadSound 0) $ changeSwapInvSel yi w
|
| invKeyDown -> stopSoundFrom (CrReloadSound 0) $ changeSwapInvSel yi w
|
||||||
| otherwise -> stopSoundFrom (CrReloadSound 0) $ changeAugInvSel yi w
|
| otherwise -> stopSoundFrom (CrReloadSound 0) $ changeAugInvSel yi w
|
||||||
@@ -148,6 +149,12 @@ wheelEvent y w = case _hudElement $ _hud w of
|
|||||||
lbDown = ButtonLeft `S.member` _mouseButtons w
|
lbDown = ButtonLeft `S.member` _mouseButtons w
|
||||||
invKeyDown = ScancodeCapsLock `S.member` _keys w
|
invKeyDown = ScancodeCapsLock `S.member` _keys w
|
||||||
|
|
||||||
|
scrollRBOption :: Float -> World -> World
|
||||||
|
scrollRBOption y w
|
||||||
|
| y < 0 = w & rbOptions . opSel %~ (min (length (_opEquip (_rbOptions w))-1) . (+1))
|
||||||
|
| y > 0 = w & rbOptions . opSel %~ (max 0 . (subtract 1))
|
||||||
|
| otherwise = w
|
||||||
|
|
||||||
-- nice idea, but the chain of setters and getters seems prohibitive
|
-- nice idea, but the chain of setters and getters seems prohibitive
|
||||||
--scrollOver :: Foldable t
|
--scrollOver :: Foldable t
|
||||||
-- => ASetter s s Int Int -- index setter
|
-- => ASetter s s Int Int -- index setter
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ module Dodge.Inventory
|
|||||||
, augmentedInvSizes
|
, augmentedInvSizes
|
||||||
, rmInvItem
|
, rmInvItem
|
||||||
, updateCloseObjects
|
, updateCloseObjects
|
||||||
|
, updateRBList
|
||||||
, updateTerminal
|
, updateTerminal
|
||||||
, closeObjScrollDir
|
, closeObjScrollDir
|
||||||
, closeObjectCol
|
, closeObjectCol
|
||||||
@@ -38,7 +39,10 @@ import ListHelp
|
|||||||
import LensHelp
|
import LensHelp
|
||||||
|
|
||||||
--import qualified Data.IntSet as IS
|
--import qualified Data.IntSet as IS
|
||||||
|
import qualified Data.Map.Strict as M
|
||||||
|
import qualified Data.Set as S
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
|
import SDL
|
||||||
--import Data.List
|
--import Data.List
|
||||||
--import System.Random
|
--import System.Random
|
||||||
|
|
||||||
@@ -169,6 +173,81 @@ updateCloseObjects w = w & closeObjects .~ unionBy closeObjEq oldCloseFiltered c
|
|||||||
oldClose = filt $ _closeObjects w
|
oldClose = filt $ _closeObjects w
|
||||||
oldCloseFiltered = intersectBy closeObjEq oldClose currentClose
|
oldCloseFiltered = intersectBy closeObjEq oldClose currentClose
|
||||||
|
|
||||||
|
updateRBList :: World -> World
|
||||||
|
updateRBList w
|
||||||
|
| ButtonRight `S.member` _mouseButtons w && w ^? rbOptions . opCurInvPos == Just curinvid
|
||||||
|
= w & setEquipAllocation & setEquipActivation
|
||||||
|
| ButtonRight `S.member` _mouseButtons w = case cr ^? crInv . ix (_crInvSel cr) . itUse . eqSite of
|
||||||
|
Just esite -> w & rbOptions .~ EquipOptions (equipSiteToPositions esite) 0 curinvid DoNotMoveEquipment NoChangeActivateEquipment
|
||||||
|
& setEquipAllocation & setEquipActivation
|
||||||
|
Nothing -> w & rbOptions .~ NoRightButtonOptions
|
||||||
|
| otherwise = w & rbOptions .~ NoRightButtonOptions
|
||||||
|
where
|
||||||
|
curinvid = _crInvSel cr
|
||||||
|
cr = you w
|
||||||
|
|
||||||
|
setEquipAllocation :: World -> World
|
||||||
|
setEquipAllocation w = case _rbOptions w of
|
||||||
|
EquipOptions {_opEquip = es,_opSel=i} ->
|
||||||
|
case you w ^? crInvEquipped . ix (_crInvSel (you w)) of
|
||||||
|
Just epos | es !! i == epos
|
||||||
|
-> w & rbOptions . opAllocateEquipment .~ RemoveEquipment
|
||||||
|
{_allocOldPos = epos}
|
||||||
|
Just epos | isJust (you w ^? crEquipment . ix (es !! i))
|
||||||
|
-> w & rbOptions . opAllocateEquipment .~ SwapEquipment
|
||||||
|
{_allocOldPos = epos
|
||||||
|
,_allocNewPos = es !! i
|
||||||
|
,_allocSwapID = _crEquipment (you w) M.! (es !! i)
|
||||||
|
}
|
||||||
|
Just epos -> w & rbOptions . opAllocateEquipment .~ MoveEquipment
|
||||||
|
{_allocOldPos = epos
|
||||||
|
,_allocNewPos = es !! i
|
||||||
|
}
|
||||||
|
Nothing | isJust (you w ^? crEquipment . ix (es !! i))
|
||||||
|
-> w & rbOptions . opAllocateEquipment .~ ReplaceEquipment
|
||||||
|
{_allocNewPos = es !! i
|
||||||
|
,_allocRemoveID = _crEquipment (you w) M.! (es !! i)
|
||||||
|
}
|
||||||
|
Nothing -> w & rbOptions . opAllocateEquipment .~ PutOnEquipment
|
||||||
|
{_allocNewPos = es !! i}
|
||||||
|
_ -> w
|
||||||
|
-- where
|
||||||
|
-- curpos = invSelPos w
|
||||||
|
|
||||||
|
setEquipActivation :: World -> World
|
||||||
|
setEquipActivation w = case w ^? rbOptions . opAllocateEquipment of
|
||||||
|
Just DoNotMoveEquipment -> w
|
||||||
|
Just RemoveEquipment { }
|
||||||
|
-> case _crLeftInvSel (you w) of
|
||||||
|
Just i | i == invsel -> w & rbOptions . opActivateEquipment .~ DeactivateEquipment
|
||||||
|
{_deactivateEquipment = i}
|
||||||
|
_ -> w & rbOptions . opActivateEquipment .~ NoChangeActivateEquipment
|
||||||
|
Just rbos
|
||||||
|
-> case _crLeftInvSel (you w) of
|
||||||
|
Just i | i == invsel -> w & rbOptions . opActivateEquipment .~ NoChangeActivateEquipment
|
||||||
|
Just i | invselcanactivate -> w & rbOptions . opActivateEquipment .~ ActivateDeactivateEquipment
|
||||||
|
{_activateEquipment = invsel,_deactivateEquipment = i}
|
||||||
|
Just i | Just i == rbos ^? allocSwapID || Just i == rbos ^? allocRemoveID
|
||||||
|
-> w & rbOptions . opActivateEquipment .~ DeactivateEquipment i
|
||||||
|
Just _ -> w & rbOptions . opActivateEquipment .~ NoChangeActivateEquipment
|
||||||
|
Nothing | invselcanactivate -> w & rbOptions . opActivateEquipment .~ ActivateEquipment
|
||||||
|
{_activateEquipment = invsel}
|
||||||
|
Nothing -> w & rbOptions . opActivateEquipment .~ NoChangeActivateEquipment
|
||||||
|
Nothing -> w & rbOptions . opActivateEquipment .~ NoChangeActivateEquipment
|
||||||
|
where
|
||||||
|
invsel = _crInvSel (you w)
|
||||||
|
invselcanactivate = isJust (you w ^? crInv . ix invsel . itUse . lUse)
|
||||||
|
|
||||||
|
equipSiteToPositions :: EquipSite -> [EquipPosition]
|
||||||
|
equipSiteToPositions es = case es of
|
||||||
|
GoesOnHead -> [OnHead]
|
||||||
|
GoesOnChest -> [OnChest]
|
||||||
|
GoesOnBack -> [OnBack]
|
||||||
|
GoesOnWrist -> [OnLeftWrist,OnRightWrist]
|
||||||
|
GoesOnLegs -> [OnLegs]
|
||||||
|
GoesOnSpecial -> [OnSpecial]
|
||||||
|
|
||||||
|
|
||||||
closeObjScrollDir :: Float -> World -> World
|
closeObjScrollDir :: Float -> World -> World
|
||||||
closeObjScrollDir x
|
closeObjScrollDir x
|
||||||
| x > 0 = over closeObjects rotU
|
| x > 0 = over closeObjects rotU
|
||||||
|
|||||||
@@ -115,6 +115,7 @@ flatShield = defaultEquipment
|
|||||||
, _aimZoom = ItZoom 20 0.2 1
|
, _aimZoom = ItZoom 20 0.2 1
|
||||||
, _aimStance = TwoHandFlat
|
, _aimStance = TwoHandFlat
|
||||||
}
|
}
|
||||||
|
, _heldScroll = \_ _ -> id
|
||||||
}
|
}
|
||||||
, _itInvSize = 3
|
, _itInvSize = 3
|
||||||
, _itInvDisplay = \it -> head (basicItemDisplay it) :
|
, _itInvDisplay = \it -> head (basicItemDisplay it) :
|
||||||
@@ -236,9 +237,8 @@ headLamp = defaultEquipment
|
|||||||
& itUse . eqSite .~ GoesOnHead
|
& itUse . eqSite .~ GoesOnHead
|
||||||
|
|
||||||
createHeadLamp :: Creature -> Int -> World -> World
|
createHeadLamp :: Creature -> Int -> World -> World
|
||||||
createHeadLamp cr _ w = w
|
createHeadLamp cr _ = tempLightSources .:~ tlsTimeRadColPos 1 200 0.7
|
||||||
& tempLightSources .:~ tlsTimeRadColPos 1 200 0.5
|
((_crPos cr `v2z` 0) +.+.+ rotate3 (_crDir cr) (translatePointToHead cr (V3 5 0 3)))
|
||||||
((_crPos cr `v2z` 0) +.+.+ rotate3 (_crDir cr) (translatePointToHead cr (V3 5 0 3)))
|
|
||||||
|
|
||||||
powerLegs :: Item
|
powerLegs :: Item
|
||||||
powerLegs = defaultEquipment
|
powerLegs = defaultEquipment
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ ruseAmmoParamsRate rate ht usemods = RightUse
|
|||||||
, _useMods = usemods
|
, _useMods = usemods
|
||||||
, _useHammer = ht
|
, _useHammer = ht
|
||||||
, _useAim = defaultAimParams
|
, _useAim = defaultAimParams
|
||||||
|
, _heldScroll = \_ _ -> id
|
||||||
}
|
}
|
||||||
defaultAimParams :: AimParams
|
defaultAimParams :: AimParams
|
||||||
defaultAimParams = AimParams
|
defaultAimParams = AimParams
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ sniperRifle = elephantGun
|
|||||||
& itType .~ SNIPERRIFLE
|
& itType .~ SNIPERRIFLE
|
||||||
& itParams . gunBarrels .~ SingleBarrel 0
|
& itParams . gunBarrels .~ SingleBarrel 0
|
||||||
& itUse . useAim . aimZoom .~ defaultItZoom {_itZoomMax = 0.5, _itZoomMin = 0.5}
|
& itUse . useAim . aimZoom .~ defaultItZoom {_itZoomMax = 0.5, _itZoomMin = 0.5}
|
||||||
& itScroll .~ zoomLongGun
|
& itUse . heldScroll .~ zoomLongGun
|
||||||
& itScope .~ ZoomScope (V2 0 0) 0 1 False
|
& itScope .~ ZoomScope (V2 0 0) 0 1 False
|
||||||
& itTargeting .~ targetLaser
|
& itTargeting .~ targetLaser
|
||||||
machineGun :: Item
|
machineGun :: Item
|
||||||
|
|||||||
@@ -80,7 +80,6 @@ autoGun = defaultAutoGun
|
|||||||
-- , _itZoom = defaultItZoom
|
-- , _itZoom = defaultItZoom
|
||||||
, _itEquipPict = pictureWeaponOnAim
|
, _itEquipPict = pictureWeaponOnAim
|
||||||
, _itAttachment = ItCharMode $ Seq.fromList "MS"
|
, _itAttachment = ItCharMode $ Seq.fromList "MS"
|
||||||
, _itScroll = scrollCharMode
|
|
||||||
, _itParams = BulletShooter
|
, _itParams = BulletShooter
|
||||||
{ _muzVel = 1
|
{ _muzVel = 1
|
||||||
, _rifling = 0.9
|
, _rifling = 0.9
|
||||||
@@ -91,6 +90,7 @@ autoGun = defaultAutoGun
|
|||||||
, _randomOffset = 0
|
, _randomOffset = 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
& itUse . heldScroll .~ scrollCharMode
|
||||||
autoGunPic :: Item -> SPic
|
autoGunPic :: Item -> SPic
|
||||||
autoGunPic it = noPic $
|
autoGunPic it = noPic $
|
||||||
colorSH red (prismPoly
|
colorSH red (prismPoly
|
||||||
@@ -295,7 +295,7 @@ longGun = defaultGun
|
|||||||
& useAim . aimRange .~ 1
|
& useAim . aimRange .~ 1
|
||||||
& useAim . aimStance .~ TwoHandTwist
|
& useAim . aimStance .~ TwoHandTwist
|
||||||
& useAim . aimZoom .~ defaultItZoom {_itZoomMax = 0.5, _itZoomMin = 0.5}
|
& useAim . aimZoom .~ defaultItZoom {_itZoomMax = 0.5, _itZoomMin = 0.5}
|
||||||
, _itScroll = zoomLongGun
|
& heldScroll .~ zoomLongGun
|
||||||
, _itAttachment = NoItAttachment
|
, _itAttachment = NoItAttachment
|
||||||
, _itScope = ZoomScope (V2 0 0) 0 1 False
|
, _itScope = ZoomScope (V2 0 0) 0 1 False
|
||||||
-- , _itEffect = itemLaserScopeEffect
|
-- , _itEffect = itemLaserScopeEffect
|
||||||
|
|||||||
+38
-5
@@ -62,8 +62,9 @@ subInventoryDisplay subinv cfig w = case subinv of
|
|||||||
NoSubInventory -> pictures
|
NoSubInventory -> pictures
|
||||||
[ selcursor
|
[ selcursor
|
||||||
, closeobjectcursor
|
, closeobjectcursor
|
||||||
, equipcursor
|
|
||||||
, equipcursors
|
, equipcursors
|
||||||
|
, equipcursor -- the order is important, this should go on top of the other equipcursors
|
||||||
|
, rboptions
|
||||||
]
|
]
|
||||||
TweakInventory -> pictures
|
TweakInventory -> pictures
|
||||||
--[ mCurs it cfig w
|
--[ mCurs it cfig w
|
||||||
@@ -126,11 +127,43 @@ subInventoryDisplay subinv cfig w = case subinv of
|
|||||||
curpos = invSelPos w
|
curpos = invSelPos w
|
||||||
cury = fromMaybe 1 $ augmentedInvSizes w IM.!? _crInvSel (you w)
|
cury = fromMaybe 1 $ augmentedInvSizes w IM.!? _crInvSel (you w)
|
||||||
equipcursor = case _crLeftInvSel cr of
|
equipcursor = case _crLeftInvSel cr of
|
||||||
Nothing -> mempty
|
Just invid | _crInvSel cr /= invid || not (ButtonRight `S.member` _mouseButtons w)
|
||||||
Just invid -> f' cyan invid
|
-> f cyan invid (_crInvEquipped cr IM.! invid)
|
||||||
|
_ -> mempty
|
||||||
equipcursors = IM.foldMapWithKey (f yellow) (_crInvEquipped cr)
|
equipcursors = IM.foldMapWithKey (f yellow) (_crInvEquipped cr)
|
||||||
f' col invid = listTextPictureAt 144 0 cfig (selNumPos invid w) . color col $ text "EQUIPPED"
|
f col invid epos
|
||||||
f col invid epos = listTextPictureAt 144 0 cfig (selNumPos invid w) . color col $ text $ eqPosText epos
|
| _crInvSel cr /= invid || not (ButtonRight `S.member` _mouseButtons w)
|
||||||
|
= listTextPictureAt 144 0 cfig (selNumPos invid w) . color col $ text $ eqPosText epos
|
||||||
|
| otherwise = mempty
|
||||||
|
--rboptions = listTextPicturesAtOffset 200 0 cfig (selNumPos invid w) ["TEST","ME"]
|
||||||
|
rboptions = drawRBOptions cfig w (_rbOptions w)
|
||||||
|
|
||||||
|
drawRBOptions :: Configuration -> World -> RightButtonOptions -> Picture
|
||||||
|
drawRBOptions cfig w EquipOptions{_opEquip = es,_opSel=i, _opAllocateEquipment=ae} =
|
||||||
|
listTextPicturesAtOffset 252 0 cfig (curpos-i) (map (text . eqPosText) es)
|
||||||
|
<> case ae of
|
||||||
|
DoNotMoveEquipment -> mempty
|
||||||
|
PutOnEquipment {}
|
||||||
|
-> putontext
|
||||||
|
MoveEquipment {_allocOldPos = oldp }
|
||||||
|
-> putontext <> extratext ("MOVES FROM "++eqPosText oldp)
|
||||||
|
SwapEquipment { _allocOldPos = oldp, _allocSwapID = sid }
|
||||||
|
-> putontext <> extratext ("SWAPS "++otheritem sid ++ " ONTO " ++eqPosText oldp)
|
||||||
|
ReplaceEquipment { _allocRemoveID = rid }
|
||||||
|
-> putontext <> extratext ("REMOVES " ++ otheritem rid)
|
||||||
|
RemoveEquipment { }
|
||||||
|
-> takeofftext
|
||||||
|
where
|
||||||
|
takeofftext = listTextPictureAt 144 0 cfig curpos (text " TAKE OFF")
|
||||||
|
putontext = listTextPictureAt 144 0 cfig curpos (text " PUT ONTO")
|
||||||
|
extratext str = listTextPictureAt 350 0 cfig curpos (text (str ++ deactivatetext))
|
||||||
|
deactivatetext = case w ^? rbOptions . opActivateEquipment . deactivateEquipment of
|
||||||
|
Just k -> " DEACTIVATES " ++ _itName (_crInv (you w) IM.! k)
|
||||||
|
Nothing -> ""
|
||||||
|
curpos = invSelPos w
|
||||||
|
otheritem j = _itName (_crInv (you w) IM.! j)
|
||||||
|
drawRBOptions _ _ _ = mempty
|
||||||
|
|
||||||
|
|
||||||
eqPosText :: EquipPosition -> String
|
eqPosText :: EquipPosition -> String
|
||||||
eqPosText ep = case ep of
|
eqPosText ep = case ep of
|
||||||
|
|||||||
@@ -80,6 +80,7 @@ functionalUpdate cfig w = checkEndGame
|
|||||||
. updateSeenWalls
|
. updateSeenWalls
|
||||||
-- . (youHammerPosition %~ moveHammerUp)
|
-- . (youHammerPosition %~ moveHammerUp)
|
||||||
. updateTerminal
|
. updateTerminal
|
||||||
|
. updateRBList
|
||||||
$ updateCloseObjects w
|
$ updateCloseObjects w
|
||||||
where
|
where
|
||||||
--updatedLightSources = mapMaybe (\b -> _tlsUpdate b w b) $ _tempLightSources w
|
--updatedLightSources = mapMaybe (\b -> _tlsUpdate b w b) $ _tempLightSources w
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ updatePressedButtons pkeys w
|
|||||||
= useLeftItem (_yourID w) w
|
= useLeftItem (_yourID w) w
|
||||||
| isDown ButtonLeft && (inTopInv || _timeFlow w == RewindingLastFrame)
|
| isDown ButtonLeft && (inTopInv || _timeFlow w == RewindingLastFrame)
|
||||||
= w & doubleMouseHammer .~ HammerDown
|
= w & doubleMouseHammer .~ HammerDown
|
||||||
|
| isDown ButtonRight && inTopInv = w
|
||||||
| isDown ButtonMiddle
|
| isDown ButtonMiddle
|
||||||
= w & cameraRot -~ rotation
|
= w & cameraRot -~ rotation
|
||||||
& clickMousePos .~ _mousePos w
|
& clickMousePos .~ _mousePos w
|
||||||
@@ -36,6 +37,7 @@ updatePressedButtons pkeys w
|
|||||||
isDown but = but `S.member` pkeys
|
isDown but = but `S.member` pkeys
|
||||||
rotation = angleBetween (_mousePos w) (_clickMousePos w)
|
rotation = angleBetween (_mousePos w) (_clickMousePos w)
|
||||||
|
|
||||||
|
|
||||||
updatePressedButtonsCarte :: S.Set MouseButton -> World -> World
|
updatePressedButtonsCarte :: S.Set MouseButton -> World -> World
|
||||||
updatePressedButtonsCarte pkeys w
|
updatePressedButtonsCarte pkeys w
|
||||||
| isDown ButtonRight = w
|
| isDown ButtonRight = w
|
||||||
|
|||||||
Reference in New Issue
Block a user