{-
    Camera Datatype
	HGamer3D Library (A project to enable 3D game development in Haskell)
	Copyright 2011-2015 Peter Althainz
	
	Distributed under the Apache License, Version 2.0
	(See attached file LICENSE or copy at 
	http://www.apache.org/licenses/LICENSE-2.0)
 
	file: HGamer3D/Graphics3D/Camera.hs
-}

-- | Module providing the Camera type
module HGamer3D.Graphics3D.Camera

(
        Camera (..),
        ctCamera,

        Frustum (..),
        ctFrustum
)

where

import Data.MessagePack
import HGamer3D.Data
import Fresco

-- generated

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

-- generated

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