Cleanup
This commit is contained in:
+25
-24
@@ -32,52 +32,53 @@ updateCamera :: Configuration -> World -> World
|
||||
updateCamera cfig w =
|
||||
w
|
||||
& over (cWorld . camPos) (setViewDistance cfig)
|
||||
& moveZoomCamera cfig
|
||||
& cWorld . camPos %~ moveZoomCamera cfig (w ^. input) (you w)
|
||||
& updateScopeZoom
|
||||
& rotateCamera cfig
|
||||
|
||||
moveZoomCamera :: Configuration -> World -> World
|
||||
moveZoomCamera cfig w =
|
||||
w
|
||||
& cWorld . camPos . camCenter .~ newcen
|
||||
& cWorld . camPos . camViewFrom .~ newvf
|
||||
& cWorld . camPos . camZoom .~ newzoom
|
||||
& cWorld . camPos . camDefaultZoom .~ newDefaultZoom
|
||||
& cWorld . camPos . camItemZoom .~ newItemZoom
|
||||
moveZoomCamera :: Configuration -> Input -> Creature -> CamPos -> CamPos
|
||||
moveZoomCamera cfig theinput cr campos =
|
||||
campos
|
||||
& camCenter .~ newcen
|
||||
& camViewFrom .~ newvf
|
||||
& camZoom .~ newzoom
|
||||
& camDefaultZoom .~ newDefaultZoom
|
||||
& camItemZoom .~ newItemZoom
|
||||
where
|
||||
--cfig = _uvConfig uv
|
||||
--w = _uvWorld uv
|
||||
cpos = _crPos (you w)
|
||||
cpos = _crPos cr
|
||||
mitm = cr ^? crInv . ix (crSel cr)
|
||||
newvf = cpos +.+ fromMaybe (V2 0 0) vfoffset
|
||||
vfoffset = do
|
||||
iscam <- yourItem w ^? _Just . itScope . scopeIsCamera
|
||||
iscam <- mitm ^? _Just . itScope . scopeIsCamera
|
||||
guard iscam
|
||||
guard (SDL.ButtonRight `M.member` _mouseButtons (_input w))
|
||||
yourItem w ^? _Just . itScope . scopePos
|
||||
guard (SDL.ButtonRight `M.member` _mouseButtons theinput)
|
||||
mitm ^? _Just . itScope . scopePos
|
||||
mscopeoffset = do
|
||||
guard (SDL.ButtonRight `M.member` _mouseButtons (_input w))
|
||||
yourItem w ^? _Just . itScope . scopePos
|
||||
guard (SDL.ButtonRight `M.member` _mouseButtons theinput)
|
||||
mitm ^? _Just . itScope . scopePos
|
||||
newcen = cpos +.+ fromMaybe (V2 0 0) mscopeoffset +.+ offset
|
||||
offset = rotateV (w ^. cWorld . camPos . camRot) $ ((newzoom - newDefaultZoom) / (newDefaultZoom * newzoom)) *.* _mousePos (_input w)
|
||||
newzoom = case yourItem w ^? _Just . itScope of
|
||||
offset = rotateV (campos ^. camRot) $ ((newzoom - newDefaultZoom) / (newDefaultZoom * newzoom)) *.* _mousePos theinput
|
||||
newzoom = case mitm ^? _Just . itScope of
|
||||
Just zs@ZoomScope{} -> _scopeZoom zs
|
||||
_ -> newDefaultZoom * newItemZoom
|
||||
idealDefaultZoom = clipZoom wallZoom
|
||||
newDefaultZoom = case yourItem w ^? _Just . itScope of
|
||||
newDefaultZoom = case mitm ^? _Just . itScope of
|
||||
Just zs@ZoomScope{} -> _scopeZoom zs
|
||||
_ -> changeZoom (w ^. cWorld . camPos . camDefaultZoom) idealDefaultZoom
|
||||
_ -> changeZoom (campos ^. camDefaultZoom) idealDefaultZoom
|
||||
idealItemZoom = fromMaybe 1 $ do
|
||||
guard $ crIsAiming (you w)
|
||||
zoomFromItem' <$> (yourItem w ^? _Just . itUse . heldAim . aimZoom)
|
||||
newItemZoom = changeZoom (w ^. cWorld . camPos . camItemZoom) idealItemZoom
|
||||
guard $ crIsAiming cr
|
||||
zoomFromItem' <$> (mitm ^? _Just . itUse . heldAim . aimZoom)
|
||||
newItemZoom = changeZoom (campos ^. camItemZoom) idealItemZoom
|
||||
changeZoom curZoom idealZoom
|
||||
| curZoom > idealZoom + 0.01 = ((zoomOutSpeed -1) * curZoom + idealZoom) / zoomOutSpeed
|
||||
| curZoom < idealZoom - 0.01 = ((zoomInSpeed -1) * curZoom + idealZoom) / zoomInSpeed
|
||||
| otherwise = idealZoom
|
||||
wallZoom = min4 (w ^. cWorld . camPos . camBoundDist)
|
||||
wallZoom = min4 (campos ^. camBoundDist)
|
||||
min4 (a, b, c, d) = minimum [hh / maxd a, hh / maxd (- b), hw / maxd c, hw / maxd (- d)]
|
||||
maxd = max distFromEqmnt
|
||||
distFromEqmnt = foldl' max 1 $ IM.mapMaybe (_eeViewDist . _equipEffect . _itUse) $ getCrEquipment $ you w
|
||||
distFromEqmnt = foldl' max 1 $ IM.mapMaybe (_eeViewDist . _equipEffect . _itUse) $ getCrEquipment $ cr
|
||||
hw = halfWidth cfig
|
||||
hh = halfHeight cfig
|
||||
-- = maybe clipZoom zoomFromItem (yourItem w ^? itZoom) wallZoom
|
||||
|
||||
Reference in New Issue
Block a user