packages feed

roguestar-gl-0.6.0.0: src/CreatureData.hs

{-# LANGUAGE Arrows #-}

module CreatureData
    (CreatureAvatarSwitch,
     CreatureAvatar,
     genericCreatureAvatar)
    where

import RSAGL.FRP
import RSAGL.Scene
import VisibleObject
import Data.Maybe
import Control.Arrow

type CreatureAvatarSwitch m = AvatarSwitch () (Maybe CreatureThreadOutput) m
type CreatureAvatar e m = FRP e (AvatarSwitch () (Maybe CreatureThreadOutput) m) () (Maybe CreatureThreadOutput)

genericCreatureAvatar :: (FRPModel m) => FRP e (CreatureAvatarSwitch m) () CreatureThreadOutput -> CreatureAvatar e m
genericCreatureAvatar creatureA = proc () ->
    do visibleObjectHeader -< ()
       m_orientation <- objectIdealOrientation ThisObject -< ()
       switchTerminate -< if isNothing m_orientation then (Just $ genericCreatureAvatar creatureA,Nothing) else (Nothing,Nothing)
       arr Just <<< transformA creatureA -< (fromMaybe (error "genericCreatureAvatar: fromMaybe") m_orientation,())