h-raylib-5.1.1.0: src/Raylib/Core/Camera.hs
{-# OPTIONS -Wall #-}
{-# LANGUAGE TemplateHaskell #-}
-- | Bindings to @rcamera@ (raylib.h)
module Raylib.Core.Camera
( -- * High level
updateCamera,
updateCameraPro,
-- * Native
c'updateCamera,
c'updateCameraPro,
)
where
import Foreign (Ptr, Storable (peek))
import Foreign.C (CFloat (..), CInt (..))
import GHC.IO (unsafePerformIO)
import Raylib.Internal.Foreign (withFreeable)
import Raylib.Internal.TH (genNative)
import Raylib.Types (Camera3D, CameraMode, Vector3)
$( genNative
[ ("c'updateCamera", "UpdateCamera_", "rl_bindings.h", [t|Ptr Camera3D -> CInt -> IO ()|], False),
("c'updateCameraPro", "UpdateCameraPro_", "rl_bindings.h", [t|Ptr Camera3D -> Ptr Vector3 -> Ptr Vector3 -> CFloat -> IO ()|], False)
]
)
updateCamera :: Camera3D -> CameraMode -> IO Camera3D
updateCamera camera mode =
withFreeable
camera
( \c -> do
c'updateCamera c (fromIntegral $ fromEnum mode)
peek c
)
updateCameraPro :: Camera3D -> Vector3 -> Vector3 -> Float -> Camera3D
updateCameraPro camera movement rotation zoom =
unsafePerformIO $
withFreeable
camera
( \c -> do
withFreeable movement (\m -> withFreeable rotation (\r -> c'updateCameraPro c m r (realToFrac zoom)))
peek c
)