module Raylib.Core.Camera (updateCamera, updateCameraPro) where import Foreign (Storable (peek)) import GHC.IO (unsafePerformIO) import Raylib.ForeignUtil (withFreeable) import Raylib.Native (c'updateCamera, c'updateCameraPro) import Raylib.Types (Camera3D, CameraMode, Vector3) updateCamera :: Camera3D -> CameraMode -> IO Camera3D updateCamera :: Camera3D -> CameraMode -> IO Camera3D updateCamera Camera3D camera CameraMode mode = forall a b. (Freeable a, Storable a) => a -> (Ptr a -> IO b) -> IO b withFreeable Camera3D camera ( \Ptr Camera3D c -> do Ptr Camera3D -> CInt -> IO () c'updateCamera Ptr Camera3D c (forall a b. (Integral a, Num b) => a -> b fromIntegral forall a b. (a -> b) -> a -> b $ forall a. Enum a => a -> Int fromEnum CameraMode mode) forall a. Storable a => Ptr a -> IO a peek Ptr Camera3D c ) updateCameraPro :: Camera3D -> Vector3 -> Vector3 -> Float -> Camera3D updateCameraPro :: Camera3D -> Vector3 -> Vector3 -> Float -> Camera3D updateCameraPro Camera3D camera Vector3 movement Vector3 rotation Float zoom = forall a. IO a -> a unsafePerformIO forall a b. (a -> b) -> a -> b $ forall a b. (Freeable a, Storable a) => a -> (Ptr a -> IO b) -> IO b withFreeable Camera3D camera ( \Ptr Camera3D c -> do forall a b. (Freeable a, Storable a) => a -> (Ptr a -> IO b) -> IO b withFreeable Vector3 movement (\Ptr Vector3 m -> forall a b. (Freeable a, Storable a) => a -> (Ptr a -> IO b) -> IO b withFreeable Vector3 rotation (\Ptr Vector3 r -> Ptr Camera3D -> Ptr Vector3 -> Ptr Vector3 -> CFloat -> IO () c'updateCameraPro Ptr Camera3D c Ptr Vector3 m Ptr Vector3 r (forall a b. (Real a, Fractional b) => a -> b realToFrac Float zoom))) forall a. Storable a => Ptr a -> IO a peek Ptr Camera3D c )