module Octane.Type.ActorMap (ActorMap(..)) where import qualified Data.IntMap as IntMap import Octane.Core import Octane.Type.Actor import Octane.Type.Primitive.PCString import Octane.Type.Primitive.Int32LE import Octane.Type.Primitive.List newtype ActorMap = NewActorMap { getActorMap :: IntMap.IntMap PCString } deriving (Show) instance Binary ActorMap where get = do (NewList actors) <- get actors & map toTuple & IntMap.fromList & NewActorMap & return put (NewActorMap actors) = do actors & IntMap.assocs & map fromTuple & NewList & put toTuple :: Actor -> (Int, PCString) toTuple actor = ( actor & actorTag & getInt32LE & fromIntegral , actor & actorName ) fromTuple :: (Int, PCString) -> Actor fromTuple (tag, name) = NewActor { actorName = name , actorTag = tag & fromIntegral & NewInt32LE }