module Dodge.HeldScroll ( doHeldScroll, ) where import Control.Lens hiding ((<|), (|>)) import Data.Sequence import Dodge.Data.Creature import Dodge.Item.Weapon.ZoomScope -- should be able to just import data.item doHeldScroll :: HeldScroll -> Float -> Creature -> Item -> Item doHeldScroll hs = case hs of HeldScrollDoNothing -> const . const id HeldScrollZoom -> zoomLongGun HeldScrollCharMode{} -> \x _ -> itUse . heldScroll . hsCharMode %~ cycleSignum x HeldScrollInt{} -> undefined cycleSignum :: Float -> Seq a -> Seq a cycleSignum x | x > 0 = cycleL | otherwise = cycleR cycleL, cycleR :: Seq a -> Seq a cycleL (x :<| xs) = xs |> x cycleL xs = xs cycleR (xs :|> x) = x <| xs cycleR xs = xs