!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ None#A mutable list of mappings from keymousebutton up'down/stilldown events to IO actions. [A mutable list of keys (or mouse buttons), along with modifier state and mouse position. AInitialise the input system, which keeps a list of input event to action bindings and executes the the proper actions automatically. Returns a function for adding bindings, and another which should be called periodically (eg from refresh) to trigger still-down actions. :;<=>?@A '()*:;<=>?@A *'()=@?>;<:A:;<=@?>ANoneBUsed by / to configure the main loop's timing strategy. E$Change the current timing strategy.  Generate a GLUT timer callback. BCDEBCDEBDCENoneF$invisible colors (in RGB) of bitmap G!width, height and data of bitmap Hcolor in RGB format Ia bidimensional point in space J&position, size and name of the window FGHIJFGHIJFGHIJNoneK8String to be printed, font, screen position, color RGB. LDisplay these texts on screen. KL 23456789KLKLNoneM1trace an expression using a custom show function Ntrace a showable expression O5labelled trace - like strace, with a label prepended PGmonadic trace - like strace, but works as a standalone line in a monad `Bto be used when no invisibility must be added when loading a file cQreturn the max indexes of a matrix (assumed that its lines have the same length) !MNOPQRSTUVWXYZ[\]^_`a bcd efghiMNOPQRSTUVWXYZ[\]^_`abcdefghi!MNOPQRSTUVWXYZ[\]^_`a bcd efghiNonekLoads a bitmap from a file. lLoads n bitmaps from n files. j  kl jkl j  kl  None mUA game background (flat color, scrollable texture, or tile map), or several of them. 8list of maps, current map | PolygMap [Primitive] texture handles, tiles matrix, size of tile, present scroll (visible window bottom & left), scroll speed (X,Y), size of the map otexture id, size of texture, present scroll (visible window bottom & left), scroll speed (X,Y),size of the map "color of the map, size of the map ~creates a PreColorMap creates a PreTextureMap gcreates a PreTileMap, cheking if the tileMatrix given is valid and automatically defining the map size creates a multimap clear the screen draw the background map #mnoGindex of picture, possibility to move, cost to move, additional params pqrstuvwxyz{|}~mnopqrstuvwxyz{|}~mnopqrstuvwxyz{|}~ NoneI !"#$%&'()*+,-./0123456789:;<=>?@'1! "$#%&'( )*+,-./0123456789:;<=>?@ None9A6Game flags: mapDrawing, objectsDrawing, objectsMoving eIOGame is the monad in which game actions run. An IOGame action takes a Game (with type parameters t s u vN), performs some IO, and returns an updated Game along with a result value (a):  Enewtype IOGame t s u v a = IOG (Game t s u v -> IO (Game t s u v,a))The name IOGame was chosen to remind that each action deals with a Game, but an IO operation can also be performed between game actions (such as the reading of a file or printing something in the prompt). A game has the type  Game t s u v , where -t is the type of the game special attributes /s is the type of the object special attributes )u is the type of the game levels (state) iv is the type of the map tile special attribute, in case we use a Tile Map as the background of our game For a mnemonic, uh... t - Top-level game attribute type, s - Sprite object attribute type, u - Updating game state type, v - V#icinity (map tile) attribute type.  Internally, a Game consists of:  @gameMap :: IORef (GameMap v) -- a map (background) @gameState :: IORef u -- initial game state @gameFlags :: IORef GameFlags -- initial game flags BobjManagers :: IORef [(ObjectManager s)] -- some object managers 8textList :: IORef [Text] -- some texts =quadricObj :: QuadricPrimitive -- a quadric thing JwindowConfig :: IORef WindowConfig -- a config for the main window >gameAttribute :: IORef t -- a game attribute ;pictureList :: IORef [TextureObject] -- some pictures @fpsInfo :: IORef (Int,Int,Float) -- only for debuggingBa map (background) Cinitial game state Dinitial game flags Esome object managers F some texts Ga quadric thing Ha config for the main window Ia game attribute Jsome pictures K+loads all of the pictures used in the game draws the background map @returns a mapTile, given its pixel position (x,y) in the screen 9returns a mapTile, given its index (x,y) in the tile map 2paint the whole screen with a specified RGB color #set the current map for a MultiMap draws all visible objects draw one object 0changes objects position according to its speed destroys objects from the game !destroys an object from the game Creturns the list of all objects from the group whose name is given -adds an object to a previously created group adds an object to a new group Ereturns an object manager of the game, given its name (internal use) Ireturns an object of the game, given its name and is object manager name there is no need to search through the managers, because the name of an object is never modified so the result of this function will always be safe. because an object can have its group (manager) name modified, it is necessary to search through the managers to find it, otherwise this functions won't be safe. because an object can have its sleeping status modified, it is necessary to search through the managers to find it, otherwise this functions won't be safe. because an object can have its size modified, it is necessary to search through the managers to find it, otherwise this functions won't be safe. because an object can have its position modified, it is necessary to search through the managers to find it, otherwise this functions won't be safe. because an object can have its speed modified, it is necessary to search through the managers to find it, otherwise this functions won't be safe. because an object can have its attribute modified, it is necessary to search through the managers to find it, otherwise this functions won't be safe. ?changes the sleeping status of an object, given its new status :changes the position of an object, given its new position 4changes the speed of an object, given its new speed 6changes the current picture of a multitextured object <changes the attribute of an object, given its new attribute creplaces an object by a new one, given the old object and the function that must be applied to it. >checks the collision between an object and the top of the map Uchecks the collision between an object and the top of the map in the next game cicle Achecks the collision between an object and the bottom of the map Xchecks the collision between an object and the bottom of the map in the next game cicle Echecks the collision between an object and the right side of the map \checks the collision between an object and the right side of the map in the next game cicle Dchecks the collision between an object and the left side of the map [checks the collision between an object and the left side of the map in the next game cicle )checks the collision between two objects @checks the collision between two objects in the next game cicle prints a string in the prompt &prints a string in the current window internal use of the engine -shows the frame rate (or frame per seconds) L!get the elapsed time of the game ?delay for N seconds while continuing essential game functions jAMNBCDEFGHIJOPQRSTUVWXYZ[KL\]^_K^AM NBCDEFGHIJOPQRSTUVWXYZ[KL\]^_ None3A mapping from an input event to an input handler. A FunGEn input handler is like an IOGame (game action) that takes two extra arguments: the current keyboard modifiers state, and the current mouse position. (For a StillDown event, these will be the original state and position from the Press event.) NInitialise the input system, which keeps a list of input event to action bindings and executes the the proper actions automatically. Returns a function for adding bindings (GLUT's - should return the FunGEn-aware one instead ?), and another which should be called periodically (eg from refresh) to trigger still-down actions. 9  !"#$%&'()*+,-./01=>?@ NoneGiven a fungen Game and IOGame step action, generate a GLUT display callback that steps the game and renders its resulting state.  runs this automatically. `&Run one update and display an IOGame. ``None.Configure a FunGEn game and start it running. ;Exit the program successfully (from within a game action).  main window layout background/map(s) object groups initial game state initial game attribute input bindings  step action main loop timing  image files aaNone  !"#$%&'()*+,-./0123456789=>?@BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~JIHGFklj92345678KLmon~q|prtusvwxyz{}=@?>*'()!  1+,-./0&%$#"BDCEQRTUVWXYZ[\]_^`abcdefghiSMNOPb !"#$%&'()*+,-./012345677839:;<;=;>;?;@;A;9BCBDBEBFBGBHBIBJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} ~                        M        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \  ] ^ _ ` a b c d e f g h i j k l m nop FunGEn-0.4.6Graphics.UI.FungenGraphics.UI.GLUT.InputGraphics.UI.Fungen.TimerfunInitGraphics.UI.Fungen.TypesGraphics.UI.Fungen.TextGraphics.UI.Fungen.UtilGraphics.UI.Fungen.LoaderGraphics.UI.Fungen.MapGraphics.UI.Fungen.ObjectsGraphics.UI.Fungen.GameGraphics.UI.Fungen.InputGraphics.UI.Fungen.DisplayGraphics.UI.Fungen.InitOpenGL-2.9.2.0'Graphics.Rendering.OpenGL.GL.CoordTransPosition GLUT-2.5.1.1!Graphics.UI.GLUT.Callbacks.WindowKeyF1KeyF2KeyF3KeyF4KeyF5KeyF6KeyF7KeyF8KeyF9KeyF10KeyF11KeyF12KeyLeftKeyUpKeyRightKeyDown KeyPageUp KeyPageDownKeyHomeKeyEnd KeyInsert KeyNumLockKeyBegin KeyDelete KeyShiftL KeyShiftRKeyCtrlLKeyCtrlRKeyAltLKeyAltR KeyUnknown SpecialKeyaltctrlshift ModifiersChar MouseButtonKeyGraphics.UI.GLUT.Types LeftButton MiddleButton RightButtonWheelUp WheelDownAdditionalButtonGraphics.UI.GLUT.Raw.Fonts Fixed8By13 Fixed9By15 TimesRoman10 TimesRoman24 Helvetica10 Helvetica12 Helvetica18 BitmapFontStillDownHandler KeyBinder InputHandlerKeyEventRelease StillDownPress glutInitInput RefreshTypeTimerIdle setRefreshInvList AwbfBitmap ColorList3Point2D WindowConfigText putGameText tracewithstraceltracemtrace texCoord2vertex3 bindTexturetexStufftoRadrandInt randFloat randDouble shiftLeft toDecimalpow2toBinarymake0ord2 dropGLsizeiaddNoInvisibilityracMod matrixToList matrixSize inv2color3pathAndInv2color3Listpoint2DtoVertex3isEmptywhenunlessFilePictureList loadBitmaploadBitmapListGameMap TileMatrixTile getMapSize isTileMapgetTileMapTileMatrixgetTileMapTileSizegetTileMapScrollgetTileMapSizegetTilePictureIndexgetTileBlockedgetTileMoveCostgetTileSpecialAttribute getCurrentMapupdateCurrentMap isMultiMapupdateCurrentIndexcolorMap textureMaptileMapmultiMapclearGameScreen drawGameMapFillModeUnfilledFilled ObjectPictureBasicTex PrimitiveCirclePolyg ObjectManager GameObjectgetGameObjectIdgetGameObjectNamegetGameObjectManagerNamegetGameObjectAsleepgetGameObjectSizegetGameObjectPositiongetGameObjectSpeedgetGameObjectAttributeupdateObjectPictureupdateObjectAsleepupdateObjectSizeupdateObjectPositionupdateObjectSpeedupdateObjectAttributegetObjectManagerNamegetObjectManagerCountergetObjectManagerObjectsobject objectGroupaddObjectsToManagerdrawGameObjectsdrawGameObjectfindObjectFromIdsearchObjectManagersearchGameObject updateObjectmoveGameObjectsdestroyGameObjectIOGameGame runIOGame runIOGameMliftIOtoIOGameliftIOtoIOGame' getGameState setGameState getGameFlags setGameFlagsgetObjectManagerssetObjectManagersgetGameAttributesetGameAttribute createGamedrawMapgetTileFromWindowPositiongetTileFromIndex clearScreensetCurrentMapIndexenableGameFlagsdisableGameFlagsenableMapDrawingdisableMapDrawingenableObjectsDrawingdisableObjectsDrawingenableObjectsMovingdisableObjectsMovingdrawAllObjects drawObjectmoveAllObjectsdestroyObjects destroyObjectgetObjectsFromGroupaddObjectsToGroupaddObjectsToNewGroupfindObjectManager findObject getObjectNamegetObjectGroupNamegetObjectAsleep getObjectSizegetObjectPositiongetObjectSpeedgetObjectAttributesetObjectAsleepsetObjectPositionsetObjectSpeedsetObjectCurrentPicturesetObjectAttribute replaceObject reverseXSpeed reverseYSpeedobjectTopMapCollisionobjectTopMapFutureCollisionobjectBottomMapCollisionobjectBottomMapFutureCollisionobjectRightMapCollisionobjectRightMapFutureCollisionobjectLeftMapCollisionobjectLeftMapFutureCollisionobjectsCollisionobjectsFutureCollisionobjectListObjectCollisionobjectListObjectFutureCollisionpointsObjectCollisionpointsObjectListCollision printOnPrompt printOnScreen printText randomInt randomFloat randomDoubleshowFPSwait InputBinding funInitInputdisplayfunExit BindingTableKeyTable newKeyTablegetKeysinsertIntoKeyTabledeleteFromKeyTablenewBindingTablebindKey execAction stillDowntimer toDecimalAux racModPos racModNeg inv2color3AuxBmpListbinAux loadBmListAuxgetWH getBmDataaddInvisiblity makeColorListmakeColorListAuxMultiMapTileMap TextureMapColorMapTileLine newMapListmapListContainsMultiMapmatrixOk matrixOkAuxdrawTextureMap drawTileMapdrawTileMapLineGameObjectPictureBTx GamePrimitiveCPOMmngName mngCounter mngObjectsGOobjIdobjNameobjManagerName objPicture objAsleepobjSize objPositionobjSpeed objAttributegetGameObjectPictureupdateObjectManagerObjects createPicturefindSizeobjectGroupAuxaddObjectsToManagerAuxadjustNewObjectsdrawGameObjectListfindObjectFromIdAux searchFromIdsearchGameObjectAuxupdateObjectAuxmoveSingleObjectdestroyGameObjectAux GameFlagsgameMap gameState gameFlags objManagerstextList quadricObj windowConfig gameAttribute pictureList loadPicturesgetElapsedTimeIOGfpsInfobindSTunitSTgetMap getRealMap setRealMap getTextList setTextList getQuadricgetPictureListgetWindowConfig getFpsInfo setFpsInfowaitAux $fMonadIOGame$fApplicativeIOGame$fFunctorIOGame displayIOGame basicInit