Add new files
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
{-# LANGUAGE TemplateHaskell #-}
|
||||
{-# LANGUAGE StrictData #-}
|
||||
module Dodge.Bounds
|
||||
where
|
||||
import Control.Lens
|
||||
|
||||
data Bounds = Bounds
|
||||
{ _bdMinX :: Float
|
||||
, _bdMaxX :: Float
|
||||
, _bdMinY :: Float
|
||||
, _bdMaxY :: Float
|
||||
}
|
||||
defaultBounds :: Bounds
|
||||
defaultBounds = Bounds 0 0 0 0
|
||||
|
||||
makeLenses ''Bounds
|
||||
@@ -0,0 +1,79 @@
|
||||
module Dodge.Picture.SizeInvariant
|
||||
where
|
||||
import Dodge.Data
|
||||
--import Dodge.Base
|
||||
import Dodge.Base.Window
|
||||
import Geometry
|
||||
import Picture
|
||||
|
||||
import Data.Maybe
|
||||
|
||||
fixedSizePicAt
|
||||
:: Picture
|
||||
-> Point2
|
||||
-> World
|
||||
-> Picture
|
||||
fixedSizePicAt pic p w
|
||||
= setLayer 4
|
||||
. setDepth 50
|
||||
. translate x y
|
||||
. scale theScale theScale
|
||||
$ pic
|
||||
where
|
||||
campos = _cameraViewFrom w
|
||||
v = p -.- campos
|
||||
theScale = 1 / _cameraZoom w
|
||||
(V2 x y) = campos +.+ v
|
||||
|
||||
fixedSizePicClamp
|
||||
:: Int -- ^ horizontal border
|
||||
-> Int -- ^ vertical border
|
||||
-> Picture
|
||||
-> Point2
|
||||
-> World
|
||||
-> Picture
|
||||
fixedSizePicClamp xbord ybord pic p w
|
||||
= setLayer 4
|
||||
-- . setDepth 50
|
||||
. translate x y
|
||||
. scale theScale theScale
|
||||
$ pic
|
||||
where
|
||||
r = negate $ _cameraRot w
|
||||
z = _cameraZoom w
|
||||
campos = _cameraViewFrom w
|
||||
v = p -.- campos
|
||||
theScale = 1 / _cameraZoom w
|
||||
(V2 x y) = campos +.+ rotateV (negate r) (V2 xr' yr')
|
||||
(V2 xr yr) = rotateV r v
|
||||
xr' = absClamp ((halfWidth w - fromIntegral xbord) / z) xr
|
||||
yr' = absClamp ((halfHeight w - fromIntegral ybord) / z) yr
|
||||
|
||||
fixedSizePicClampArrow
|
||||
:: Float -- ^ horizontal border
|
||||
-> Float -- ^ vertical border
|
||||
-> Picture
|
||||
-> Point2
|
||||
-> World
|
||||
-> Picture
|
||||
fixedSizePicClampArrow xbord ybord pic p w = pictures
|
||||
[ setLayer 4 . translate x y . scale theScale theScale $ pic
|
||||
, setLayer 4 . color white . setDepth 20 $ arrowPic
|
||||
]
|
||||
where
|
||||
winps = screenPolygon w
|
||||
bords = screenPolygonBord xbord ybord w
|
||||
borderPoint = intersectSegPolyFirst campos p bords
|
||||
windowPoint = intersectSegPolyFirst campos p winps
|
||||
arrowPic = case borderPoint of
|
||||
Nothing -> blank
|
||||
Just bp -> thickLine [bp, fromMaybe p windowPoint] 5
|
||||
(V2 x y) = fromMaybe p borderPoint
|
||||
campos = _cameraCenter w
|
||||
theScale = 1 / _cameraZoom w
|
||||
|
||||
absClamp
|
||||
:: Float -- ^ clamping value, assumed positive
|
||||
-> Float
|
||||
-> Float
|
||||
absClamp maxVal x = max (negate maxVal) $ min maxVal x
|
||||
Reference in New Issue
Block a user