h-raylib-4.5.2.0: examples/basic-models/src/Main.hs
{-# OPTIONS -Wall #-}
module Main where
import Control.Monad (unless)
import Raylib.Core (changeDirectory, closeWindow, getApplicationDirectory, initWindow, setTargetFPS, beginDrawing, endDrawing, windowShouldClose, clearBackground, beginMode3D, endMode3D, updateCamera, disableCursor)
import Raylib.Models (genMeshCube, loadModelFromMesh, drawModel, loadModel, drawGrid)
import Raylib.Types (Model, Camera3D (Camera3D), Vector3 (Vector3), CameraProjection (CameraPerspective), Camera, CameraMode (CameraModeFirstPerson))
import Raylib.Colors (white, orange)
modelPath :: String
modelPath = "../../../../../../../../../examples/basic-models/assets/Model.obj"
main :: IO ()
main = do
initWindow 650 400 "raylib [models] example - basic models"
setTargetFPS 60
disableCursor
_ <- getApplicationDirectory >>= changeDirectory
mesh <- genMeshCube 2 3 4
cubeModel <- loadModelFromMesh mesh
customModel <- loadModel modelPath
let camera = Camera3D (Vector3 3 2 3) (Vector3 0 0 0) (Vector3 0 1 0) 70 CameraPerspective
gameLoop cubeModel customModel camera
closeWindow
gameLoop :: Model -> Model -> Camera -> IO ()
gameLoop cubeModel customModel camera = do
beginDrawing
clearBackground white
beginMode3D camera
drawGrid 20 2.0
drawModel cubeModel (Vector3 0 1.5 0) 1 orange
drawModel customModel (Vector3 (-5) 1 0) 1 white
endMode3D
endDrawing
newCamera <- updateCamera camera CameraModeFirstPerson
shouldClose <- windowShouldClose
unless shouldClose $ gameLoop cubeModel customModel newCamera