module Rattletrap.Decode.Frame
( decodeFramesBits
, decodeFrameBits
) where
import Rattletrap.Decode.Common
import Rattletrap.Decode.Float32le
import Rattletrap.Decode.Replication
import Rattletrap.Type.ClassAttributeMap
import Rattletrap.Type.CompressedWord
import Rattletrap.Type.Frame
import Rattletrap.Type.Word32le
import qualified Control.Monad.Trans.Class as Trans
import qualified Control.Monad.Trans.State as State
import qualified Data.Map as Map
decodeFramesBits
:: (Int, Int, Int)
-> Int
-> Word
-> ClassAttributeMap
-> State.StateT
(Map.Map CompressedWord Word32le)
DecodeBits
[Frame]
decodeFramesBits version count limit classes = if count <= 0
then pure []
else
(:)
<$> decodeFrameBits version limit classes
<*> decodeFramesBits version (count 1) limit classes
decodeFrameBits
:: (Int, Int, Int)
-> Word
-> ClassAttributeMap
-> State.StateT (Map.Map CompressedWord Word32le) DecodeBits Frame
decodeFrameBits version limit classes =
Frame
<$> Trans.lift decodeFloat32leBits
<*> Trans.lift decodeFloat32leBits
<*> decodeReplicationsBits version limit classes