module Language.Nomyx.Outputs where
import Language.Nomyx.Expression
import Language.Nomyx.Variables
import Data.Typeable
import Control.Monad.State
newOutput :: Nomex String -> (Maybe PlayerNumber) -> Nomex OutputNumber
newOutput ns mpn = ns >>= NewOutput mpn
newOutput_ :: Nomex String -> (Maybe PlayerNumber) -> Nomex ()
newOutput_ ns pn = void $ newOutput ns pn
outputAll :: Nomex String -> Nomex OutputNumber
outputAll ns = newOutput ns Nothing
outputAll_ :: Nomex String -> Nomex ()
outputAll_ ns = newOutput_ ns Nothing
outputAll' :: String -> Nomex ()
outputAll' s = newOutput_ (return s) Nothing
getOutput :: OutputNumber -> Nomex (Maybe String)
getOutput on = GetOutput on
getOutput_ :: OutputNumber -> Nomex String
getOutput_ on = partial "getOutput_ : Output number not existing" $ getOutput on
updateOutput :: OutputNumber -> Nomex String -> Nomex Bool
updateOutput on ns = ns >>= UpdateOutput on
updateOutput_ :: OutputNumber -> Nomex String -> Nomex ()
updateOutput_ on ns = void $ updateOutput on ns
delOutput :: OutputNumber -> Nomex Bool
delOutput = DelOutput
delOutput_ :: OutputNumber -> Nomex ()
delOutput_ on = void $ delOutput on
displayVar :: (Typeable a, Show a, Eq a) => (Maybe PlayerNumber) -> MsgVar a -> (a -> Nomex String) -> Nomex ()
displayVar mpn mv dis = onMsgVarEvent
mv
(\a -> newOutput (dis a) mpn)
(\a n -> updateOutput_ n (dis a))
delOutput_
displaySimpleVar :: (Typeable a, Show a, Eq a) => (Maybe PlayerNumber) -> Nomex String -> MsgVar a -> Nomex ()
displaySimpleVar mpn ntitle mv = do
let title a = do
t <- ntitle
return $ (t ++ ": " ++ (show a) ++ "\n")
displayVar mpn mv title
displayArrayVar :: (Typeable a, Show a, Eq a, Typeable i, Show i, Eq i) => (Maybe PlayerNumber) -> Nomex String -> ArrayVar i a -> Nomex ()
displayArrayVar mpn ntitle mv = displayVar mpn mv (showArrayVar ntitle)
showArrayVar :: (Show a, Show i) => Nomex String -> [(i,a)] -> Nomex String
showArrayVar title l = do
t <- title
return $ t ++ "\n" ++ concatMap (\(i,a) -> (show i) ++ "\t" ++ (show a) ++ "\n") l