gltf-loader-0.1.0.0: app/Command/GLTF/Loader/Run.hs
module Command.GLTF.Loader.Run (run) where
import Command.GLTF.Loader.App
import Text.GLTF.Loader
import Lens.Micro
import Linear (V3(..))
import RIO
import RIO.List (nub)
run :: RIO App ()
run = do
file <- asks $ view (optionsL . _optionsFile)
logInfo $ "File: " <> fromString file
result <- liftIO $ fromFile file
either reportError reportGltf result
reportError :: HasLogFunc logger => Errors -> RIO logger ()
reportError err
= logError (display err)
>> exitFailure
reportGltf :: Gltf -> RIO App ()
reportGltf gltf = do
reportAsset $ gltf ^. _asset
logInfo "" -- Blank line
reportNodes gltf
reportAsset :: Asset -> RIO App ()
reportAsset asset = do
logInfo $ "Generator: " <> asset ^. _assetGenerator . to (fromMaybe "Unknown") . to display
logInfo $ "Version: " <> asset ^. _assetVersion . to display
reportNodes :: Gltf -> RIO App ()
reportNodes gltf = do
let nodes = gltf ^. _nodes
logInfo $ "Nodes: " <> display (RIO.length nodes)
forM_ nodes $ \node -> do
logInfo $ " Name: " <> maybe "Unknown node" display (view _nodeName node)
forM_ (node ^. _nodeMeshId) $ \meshId -> do
logInfo " Mesh: "
forM_ (gltf ^. _meshes ^? ix meshId) reportMesh
reportMesh :: Mesh -> RIO App ()
reportMesh mesh = do
logInfo $ " Name: " <> mesh ^. _meshName . to (display . fromMaybe "Unknown")
logInfo " Mesh Primitives:"
forM_ (mesh ^. _meshPrimitives) $ \primitive' -> do
logInfo " Vertex Positions:"
forM_ (nub $ primitive' ^. _meshPrimitivePositions) $ \position -> do
logInfo $ " " <> displayV3 position
displayV3 :: Display a => V3 a -> Utf8Builder
displayV3 (V3 x y z)
= "("
<> display x <> ", "
<> display y <> ", "
<> display z <>
")"