Move held item scrolling into dedicated datatype
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
module Dodge.HeldScroll
|
||||
( doHeldScroll
|
||||
) where
|
||||
import Dodge.Data
|
||||
import Dodge.Item.Weapon.ZoomScope
|
||||
import Control.Lens hiding ((|>),(<|))
|
||||
import Data.Sequence
|
||||
|
||||
doHeldScroll :: HeldScroll -> Float -> Creature -> Item -> Item
|
||||
doHeldScroll hs = case hs of
|
||||
HeldScrollDoNothing -> const . const id
|
||||
HeldScrollZoom -> zoomLongGun
|
||||
HeldScrollCharMode -> scrollCharMode
|
||||
scrollCharMode
|
||||
:: Float -- ^ Amount scrolled
|
||||
-> Creature
|
||||
-> Item
|
||||
-> Item
|
||||
scrollCharMode x _
|
||||
| x > 0 = incCharMode
|
||||
| x < 0 = decCharMode
|
||||
| otherwise = id
|
||||
|
||||
incCharMode
|
||||
:: Item
|
||||
-> Item
|
||||
incCharMode = itAttachment . atCharMode %~ cycleL
|
||||
where
|
||||
cycleL (x :<| xs) = xs |> x
|
||||
cycleL xs = xs
|
||||
decCharMode
|
||||
:: Item
|
||||
-> Item
|
||||
decCharMode = itAttachment . atCharMode %~ cycleR
|
||||
where
|
||||
cycleR (xs :|> x) = x <| xs
|
||||
cycleR xs = xs
|
||||
Reference in New Issue
Block a user