module HGamer3D.Graphics3D.Camera
(
Camera (..),
ctCamera,
Frustum (..),
ctFrustum
)
where
import Data.MessagePack
import HGamer3D.Data
import Fresco
data Camera = FullViewCamera
| OverlayCamera (Rectangle Int) Float
deriving (Eq, Show)
instance ComponentClass Camera where
toObj (FullViewCamera) = ObjectArray [ObjectInt 0, ObjectArray []]
toObj (OverlayCamera v1 v2) = ObjectArray [ObjectInt 1, ObjectArray [(toObj v1), ObjectFloat v2]]
fromObj (ObjectArray [ObjectInt 0, ObjectArray []]) = FullViewCamera
fromObj (ObjectArray [ObjectInt 1, ObjectArray [v1, ObjectFloat v2]]) = OverlayCamera (fromObj v1) v2
ctCamera :: ComponentType Camera
ctCamera = ComponentType 0xd3b0d455ab1f4716
data Frustum = Frustum {
frNearDistance :: Float,
frFarDistance :: Float,
frFieldOfViewHorizontal :: Angle
} deriving (Eq, Show)
instance ComponentClass Frustum where
toObj (Frustum nd fd fovh) = ObjectArray [ObjectFloat nd, ObjectFloat fd, toObj fovh]
fromObj (ObjectArray [ObjectFloat nd, ObjectFloat fd, fovh_o]) = Frustum nd fd (fromObj fovh_o)
ctFrustum :: ComponentType Frustum
ctFrustum = ComponentType 0xf3ce3235d4f8e73d