packages feed

h-raylib-5.1.1.0: examples/basic-models/src/Main.hs

{-# OPTIONS -Wall #-}

module Main where

import Control.Monad (unless, void)
import Raylib.Core (changeDirectory, clearBackground, disableCursor, getApplicationDirectory)
import Raylib.Core.Camera (updateCamera)
import Raylib.Core.Models (drawGrid, drawModel, genMeshCube, loadModel, loadModelFromMesh)
import Raylib.Types (Camera3D (Camera3D), CameraMode (CameraModeFirstPerson), CameraProjection (CameraPerspective), Vector3 (Vector3))
import Raylib.Util (drawing, inGHCi, mode3D, whileWindowOpen_, withWindow)
import Raylib.Util.Colors (orange, white)

modelPath :: String
modelPath = (if not inGHCi then "../../../../../../../../../../" else "./") ++ "examples/basic-models/assets/Model.obj"

main :: IO ()
main = do
  withWindow
    650
    400
    "raylib [models] example - basic models"
    60
    ( \window -> do
        disableCursor
        unless inGHCi (void $ changeDirectory =<< getApplicationDirectory)

        mesh <- genMeshCube 2 3 4 window
        cubeModel <- loadModelFromMesh mesh window
        customModel <- loadModel modelPath window

        let camera = Camera3D (Vector3 3 2 3) (Vector3 0 0 0) (Vector3 0 1 0) 70 CameraPerspective

        whileWindowOpen_
          ( \c -> do
              drawing
                ( do
                    clearBackground white
                    mode3D
                      c
                      ( do
                          drawGrid 20 2.0
                          drawModel cubeModel (Vector3 0 1.5 0) 1 orange
                          drawModel customModel (Vector3 (-5) 1 0) 1 white
                      )
                )
              updateCamera c CameraModeFirstPerson
          )
          camera
    )