!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ None#A mutable list of mappings from keymousebutton up%down/stilldown events to IO actions.YA 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:;<=>?@ANoneCUsed by . to configure the main loop's timing strategy.F#Change the current timing strategy.Generate a GLUT timer callback.CDEFCEDFCDEFNoneG#invisible colors (in RGB) of bitmapH width, height and data of bitmapIcolor in RGB formatJa bidimensional point in spaceK%position, size and name of the windowGHIJKGHIJKGHIJKNoneL7String to be printed, font, screen position, color RGB.MDisplay these texts on screen.LM 98765432LMLMNoneN0trace an expression using a custom show functionOtrace a showable expressionP4labelled trace - like strace, with a label prependedQFmonadic trace - like strace, but works as a standalone line in a monadaAto be used when no invisibility must be added when loading a filedPreturn the max indexes of a matrix (assumed that its lines have the same length)!NOPQRSTUVWXYZ[\]^_`ab  cde fghijNOPQRSTUVWXYZ[\]^_`abcdefghij!NOPQRSTUVWXYZ[\]^_`ab  cde fghijNonelLoads a bitmap from a file.mLoads n bitmaps from n files. k  lmklm k  lm None nTA game background (flat color, scrollable texture, or tile map), or several of them.!color of the map, size of the mapntexture id, size of texture, present scroll (visible window bottom & left), scroll speed (X,Y),size of the maptexture handles, tiles matrix, size of tile, present scroll (visible window bottom & left), scroll speed (X,Y), size of the map6list of maps, current map | PolygMap [Primitive]creates a PreColorMapcreates a PreTextureMapfcreates a PreTileMap, cheking if the tileMatrix given is valid and automatically defining the map sizecreates a multimapclear the screendraw the background map#nopFindex of picture, possibility to move, cost to move, additional paramsqrstuvwxyz{|}~nopqrstuvwxyz{|}~nopqrstuvwxyz{|}~ NoneI !"#$%&'()*+,-./0123456789:;<=>?@A'1 !"#$%&'() *+,-./0123456789:;<=>?@A None9B5Game flags: mapDrawing, objectsDrawing, objectsMovingdIOGame is the monad in which game actions run. An IOGame action takes a Game (with type parameters t s u vM), 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)hv is the type of the map tile special attribute, in case we use a Tile Map as the background of our gameFor 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 debuggingCa map (background)Dinitial game stateEinitial game flagsFsome object managersG some textsHa quadric thingIa config for the main windowJa game attributeK some picturesL*loads all of the pictures used in the gamedraws the background map?returns a mapTile, given its pixel position (x,y) in the screen8returns a mapTile, given its index (x,y) in the tile map1paint the whole screen with a specified RGB color"set the current map for a MultiMapdraws all visible objectsdraw one object/changes objects position according to its speeddestroys objects from the game destroys an object from the gameBreturns the list of all objects from the group whose name is given,adds an object to a previously created groupadds an object to a new groupDreturns an object manager of the game, given its name (internal use)Hreturns an object of the game, given its name and is object manager namethere 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 status9changes the position of an object, given its new position3changes the speed of an object, given its new speed5changes the current picture of a multitextured object;changes the attribute of an object, given its new attributebreplaces 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 mapTchecks the collision between an object and the top of the map in the next game cicle@checks the collision between an object and the bottom of the mapWchecks the collision between an object and the bottom of the map in the next game cicleDchecks 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 cicleCchecks the collision between an object and the left side of the mapZchecks 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 cicleprints a string in the prompt%prints a string in the current windowinternal use of the engine,shows the frame rate (or frame per seconds) M get the elapsed time of the game>delay for N seconds while continuing essential game functionsjBNOCDEFGHIJKPQRSTUVWXYZ[\LM]^_`K^BN OCDEFGHIJKPQRSTUVWXYZ[\LM]^_` None2A 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.)IInitialise 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!  &%$#"*)'(10/.-,+=>?@ 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.a%Run one update and display an IOGame.aaNone-Configure a FunGEn game and start it running.:Exit the program successfully (from within a game action). main window layoutbackground/map(s) object groupsinitial game stateinitial game attributeinput bindings step actionmain loop timing image filesbbNone!  &%$#"*)'(10/.-,+98765432=>?@CEDFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~KJIHGlmk98765432LMnpor}qsuvtwxyz{|~=>?@*)('!  10/.-,+&%$#"CDEFRSUVWXYZ[\]^`_abcdefghijTNOPQc !"#$%&'()*+,-./012345677839:;<;=;>;?;@;A;8BCBDBEBFBGBHBIBJKLMNOPQRSTUVWXYZ[\]^_`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 n opq#FunGEn-1.0.1-Cf5oRvdJ1izBn0D8L0cDnXGraphics.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.Init%OpenGL-3.0.1.0-7bDOuXroEF24yBlme2qXfy'Graphics.Rendering.OpenGL.GL.CoordTransPosition$GLUT-2.7.0.10-LZaA6b3RrPS7zaQHfNApNo!Graphics.UI.GLUT.Callbacks.Window KeyUnknownKeyAltRKeyAltLKeyCtrlRKeyCtrlL KeyShiftR KeyShiftL KeyDeleteKeyBegin KeyNumLock KeyInsertKeyEndKeyHome KeyPageDown KeyPageUpKeyDownKeyRightKeyUpKeyLeftKeyF12KeyF11KeyF10KeyF9KeyF8KeyF7KeyF6KeyF5KeyF4KeyF3KeyF2KeyF1 SpecialKeyaltctrlshift Modifiers MouseButtonCharKeyGraphics.UI.GLUT.TypesAdditionalButton WheelDownWheelUp RightButton MiddleButton LeftButtonGraphics.UI.GLUT.Raw.Fonts Helvetica18 Helvetica12 Helvetica10 TimesRoman24 TimesRoman10 Fixed9By15 Fixed8By13 BitmapFontStillDownHandler KeyBinder InputHandlerKeyEventPress StillDownRelease glutInitInput $fEqKeyEvent RefreshTypeIdleTimer setRefreshInvList AwbfBitmap ColorList3Point2D WindowConfigText putGameText tracewithstraceltracemtrace texCoord2vertex3 bindTexturetexStufftoRadrandInt randFloat randDouble shiftLeft toDecimalpow2toBinarymake0ord2 dropGLsizeiaddNoInvisibilityracMod matrixToList matrixSize inv2color3pathAndInv2color3Listpoint2DtoVertex3isEmptywhenunlessFilePictureList loadBitmaploadBitmapListGameMap TileMatrixTile getMapSize isTileMapgetTileMapTileMatrixgetTileMapTileSizegetTileMapScrollgetTileMapSizegetTilePictureIndexgetTileBlockedgetTileMoveCostgetTileSpecialAttribute getCurrentMapupdateCurrentMap isMultiMapupdateCurrentIndexcolorMap textureMaptileMapmultiMapclearGameScreen drawGameMapFillModeFilledUnfilled ObjectPictureTexBasic PrimitivePolygCircle 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 makeColorListmakeColorListAuxColorMap TextureMapTileMapMultiMapTileLine newMapListmapListContainsMultiMapmatrixOk matrixOkAuxdrawTextureMap drawTileMapdrawTileMapLineGameObjectPictureTxB GamePrimitivePCOMmngName 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