roguestar-gl-0.4.0.0: src/AnimationBuildings.hs
{-# LANGUAGE Arrows, OverloadedStrings, TypeFamilies, FlexibleContexts #-}
module AnimationBuildings
(buildingAvatar)
where
import RSAGL.FRP
import Animation
import VisibleObject
import Models.LibraryData
import Control.Arrow
import Scene
type BuildingAvatarSwitch m = AvatarSwitch () () m
type BuildingAvatar e m = FRP e (BuildingAvatarSwitch m) () ()
buildingAvatar :: (FRPModel m) => BuildingAvatar e m
buildingAvatar = proc () ->
do objectTypeGuard (== "building") -< ()
m_building_type <- objectDetailsLookup ThisObject "building-type" -< ()
switchContinue -< (fmap switchTo m_building_type,())
returnA -< ()
where switchTo "monolith" = simpleBuildingAvatar Monolith
switchTo "portal" = simpleBuildingAvatar Portal
switchTo _ = questionMarkAvatar >>> arr (const ())
simpleBuildingAvatar :: (FRPModel m, LibraryModelSource lm) =>
lm -> BuildingAvatar e m
simpleBuildingAvatar phase_weapon_model = proc () ->
do visibleObjectHeader -< ()
m_orientation <- objectIdealOrientation ThisObject -< ()
whenJust (transformA libraryA) -< fmap
(\o -> (o,(scene_layer_local,phase_weapon_model))) m_orientation
returnA -< ()