packages feed

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

{-# OPTIONS -Wall #-}

module Main where

import Raylib.Core (beginDrawing, beginMode3D, changeDirectory, clearBackground, closeWindow, disableCursor, endDrawing, endMode3D, getApplicationDirectory, initWindow, setTargetFPS, updateCamera)
import Raylib.Core.Models (drawGrid, drawModel, genMeshCube, loadModel, loadModelFromMesh)
import Raylib.Types (Camera3D (Camera3D), CameraMode (CameraModeFirstPerson), CameraProjection (CameraPerspective), Vector3 (Vector3))
import Raylib.Util (whileWindowOpen_)
import Raylib.Util.Colors (orange, white)

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

  whileWindowOpen_
    ( \c -> do
        beginDrawing

        clearBackground white
        beginMode3D c

        drawGrid 20 2.0
        drawModel cubeModel (Vector3 0 1.5 0) 1 orange
        drawModel customModel (Vector3 (-5) 1 0) 1 white

        endMode3D

        endDrawing

        updateCamera c CameraModeFirstPerson
    )
    camera

  closeWindow