packages feed

YFrob-0.4: afp-demos/Main.hs

module Main where

import System.Environment (getArgs)

import FRP.YFrob.RobotSim
import AFPDemos
import ITest


world :: WorldTemplate
world = [ OTSimbotA {otRId = 1, otPos = Point2 (-3) (-4), otHdng=(pi/2)},
	  OTSimbotB {otRId = 2, otPos = Point2 3 (-4), otHdng=(pi/2)}
	  ]

-- for rcTurn:
tworld :: WorldTemplate
tworld = [ OTSimbotA {otRId = 1, otPos = Point2 (-3) (-4), otHdng=(pi/2)},
	   OTSimbotB {otRId = 2, otPos = Point2 3 (-1), otHdng=(pi/2)}
	  ]

-- for blind and reverse tests:  A world with some obstacles:
world2 :: WorldTemplate
world2 = [ OTSimbotA {otRId = 1, otPos = Point2 (-2) (-2), otHdng=pi/4},
          OTSimbotA {otRId = 2, otPos = Point2 (-2) 0, otHdng=0},
          OTSimbotA {otRId = 3, otPos = Point2 (-2) 2, otHdng=(-pi/4)},
          OTSimbotA {otRId = 4, otPos = Point2 (-3) 1, otHdng=pi/8},
	  OTSimbotB {otRId = 1, otPos = Point2 3 (-4), otHdng=(pi/2)},
	  OTSimbotB {otRId = 2, otPos = Point2 1 1, otHdng=0},
          OTBlock {otPos = Point2 (-4) 2},
          OTNSWall {otPos = Point2 (-4) 4},
          OTEWWall {otPos = Point2 (-2) (-2)},
          OTVWall {otPos = Point2 (-3) 0},
          OTHWall {otPos = Point2 3 2},
	  OTBall {otPos = Point2 3.1 (-2)},
          OTBall {otPos = Point2 2 2}
	  ]

-- for align test:
world3 :: WorldTemplate
world3 = [ OTSimbotA {otRId = 1, otPos = Point2 (-4) (4), otHdng=pi/4},
          OTSimbotA {otRId = 2, otPos = Point2 (-3) 1, otHdng=pi/16},
          OTSimbotA {otRId = 3, otPos = Point2 (-2) (-2), otHdng=0},
          OTSimbotA {otRId = 4, otPos = Point2 0 0, otHdng=(-pi/4)}
          -- OTSimbotA {otRId = 3, otPos = Point2 (-2) 2, otHdng=(-pi/4)},
          -- OTSimbotA {otRId = 4, otPos = Point2 (-3) 1, otHdng=pi/8},
	  -- OTSimbotB {otRId = 3, otPos = Point2 3 (-4), otHdng=(pi/2)},
	  -- OTSimbotB {otRId = 4, otPos = Point2 1 1, otHdng=0}
	  ]

-- for wall following test:
world4 :: WorldTemplate
world4 = [ OTSimbotA {otRId = 1, otPos = Point2 (-4) (-3.3), otHdng=(pi/2)},
	  OTSimbotB {otRId = 2, otPos = Point2 3 (-3.5), otHdng=(pi)}
	  ]

afpDemos = [ {- ("rc",(Just world,rc,rc)), -}
	    ("rcStop",(Just world, rcStop, rcStop)),
	    ("rcBlind1",(Just world2, rcBlind1, rcBlind1)),
	    ("rcBlind2",(Just world2, rcBlind2, rcBlind2)),
	    ("rcTurn",(Just tworld, rcTurn 1, rcTurn 1.5)),
	    ("rcReverse",(Just world2, rcReverse 1, rcReverse 1)),
	    ("rcReverse'",(Just world2, rcReverse' 1, rcReverse' 1)),
	    ("rcHeading",(Just world, rcHeading 1 (pi/4), rcHeading 1 pi)),
	    ("rcHeading'",(Just world, rcHeading' 1 (pi/4), rcHeading' 1 pi)),
	    ("rcMoveTo",
	     (Just world,rcMoveTo 1 (Point2 3 4),rcMoveTo 1 (Point2 (-4) 4))),
	    ("rcGoToBall",(Just world2, rcReverse 1, rcGoToBall2 1)),
	    ("rcFollowLeftWall",
	     (Just world4,rcFollowLeftWall 0.5 0.5,rcFollowLeftWall 0.7 0.5)),
	    ("rcAlign",
	     (Just world3,rcAlign 1,rcAlign 1))
	    ]

ioDemos = map (\ (nm, (w,rc1,rc2)) -> (nm, runSim w rc1 rc2)) afpDemos

main :: IO ()
main =
  do args <- getArgs
     testShell ioDemos "AFP Demos> " args